1 package org.jastacry.layer;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.IOException;
6 import java.io.InputStream;
7 import java.io.OutputStream;
8 import java.nio.channels.FileChannel;
9 import java.util.Objects;
10
11 import org.jastacry.JastacryException;
12
13
14
15
16
17
18
19
20
21 public class FilemergeLayer extends AbstractBasicLayer
22 {
23
24
25
26 public static final String LAYERNAME = "Filemerge Layer";
27
28
29
30
31 private File fileMerge;
32
33
34
35
36 public FilemergeLayer()
37 {
38 super(FilemergeLayer.class, LAYERNAME);
39 }
40
41
42
43
44
45
46 @SuppressWarnings("squid:S4797")
47 @Override
48 public final void init(final String data)
49 {
50 this.fileMerge = new File(data);
51 }
52
53
54
55
56
57
58
59
60 public final void encodeAndDecode(final InputStream inputStream, final OutputStream outputStream) throws JastacryException
61 {
62 int iChar;
63 int iMerge;
64 byte bChar;
65 byte bMerge;
66 FileChannel channel;
67
68 try (FileInputStream fIS = new FileInputStream(fileMerge))
69 {
70 channel = fIS.getChannel();
71
72 while ((iChar = inputStream.read()) != -1)
73 {
74 iMerge = fIS.read();
75
76 if (-1 == iMerge)
77 {
78 logger.debug("EOF reached, reset to start");
79 channel.position(0);
80 iMerge = fIS.read();
81 }
82 bChar = (byte) iChar;
83 bMerge = (byte) iMerge;
84 bChar = (byte) (bChar ^ bMerge);
85 outputStream.write(bChar);
86 }
87 logger.info("close pipe");
88 outputStream.close();
89 }
90 catch (IOException e)
91 {
92 throw (JastacryExceptionl#JastacryException">JastacryException) new JastacryException("encodeAndDecode failed").initCause(e);
93 }
94 }
95
96
97
98
99
100
101 @Override
102 public boolean equals(final Object o)
103 {
104 if (o == this)
105 {
106 return true;
107 }
108 if (!(o instanceof FilemergeLayer))
109 {
110 return false;
111 }
112
113 final FilemergeLayer./org/jastacry/layer/FilemergeLayer.html#FilemergeLayer">FilemergeLayer layer = (FilemergeLayer) o;
114 return layer.fileMerge.equals(this.fileMerge);
115 }
116
117
118
119
120
121 @Override
122 public int hashCode()
123 {
124 return Objects.hash(fileMerge);
125 }
126 }