1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.fosstrak.llrp.commander.editors;
23
24 import java.io.StringReader;
25 import java.util.ArrayList;
26
27 import org.apache.log4j.Logger;
28 import org.jdom.Document;
29 import org.llrp.ltk.generated.LLRPMessageFactory;
30 import org.llrp.ltk.types.LLRPBitList;
31 import org.llrp.ltk.types.LLRPMessage;
32
33
34
35
36
37
38
39
40
41
42 public class BinaryMessageHelper {
43
44
45
46
47 private static Logger log = Logger.getLogger(BinaryMessageHelper.class);
48
49 private LLRPBitList bitList;
50
51
52 public static final int DEFAULT_LINE_LENGTH = 64;
53
54
55 public static final int DEFAULT_CHUNK_LENGTH = 8;
56
57
58 public static final String DEFAULT_CHUNK_DELIMITER = " ";
59
60
61
62
63
64
65
66 public BinaryMessageHelper(String aXMLContent) throws Exception {
67 log.debug("Start tranforming.");
68 Document doc = new org.jdom.input.SAXBuilder()
69 .build(new StringReader(aXMLContent));
70
71
72 LLRPMessage message = LLRPMessageFactory.createLLRPMessage(doc);
73
74 bitList = new LLRPBitList(message.toBinaryString());
75 log.debug("Finish tranforming.");
76 }
77
78
79
80
81
82
83 public String getBinaryString() {
84 return bitList.toString();
85 }
86
87
88
89
90
91
92 public String getReserved() {
93 return bitList.subList(0, 3).toString();
94 }
95
96
97
98
99
100
101 public String getVersion() {
102 return bitList.subList(3, 3).toString();
103 }
104
105
106
107
108
109
110 public String getMessageType() {
111 return bitList.subList(6, 10).toString();
112 }
113
114
115
116
117
118
119 public String getLength() {
120 return bitList.subList(16, 32).toString();
121 }
122
123
124
125
126
127
128 public String getMessageID() {
129 return bitList.subList(48, 32).toString();
130 }
131
132
133
134
135
136
137 public String getParameters() {
138 int length = bitList.length() - 64;
139
140 return (length > 0) ? bitList.subList(64, length).toString() : "";
141 }
142
143
144
145
146
147
148
149
150 public String insert(String orig, String ins, int n) {
151 StringBuffer copy = new StringBuffer();
152
153 final int length = orig.length();
154 for (int i=0; i<length; i+=n) {
155 int up = (i+n<length-1) ? i+n : length-1;
156 copy.append(orig.subSequence(i, up));
157 if (up < length-1) {
158 copy.append(ins);
159 }
160 }
161
162 return copy.toString();
163 }
164
165
166
167
168
169
170
171
172 public String[] getArrParameters(final int lineLength, final int chunkLength, final String delimiter) {
173
174 int length = bitList.length() - 64;
175 if (0 >= length) {
176 return new String[] { "" };
177 }
178
179 ArrayList<String> arr = new ArrayList<String>();
180 int i=0;
181 for (;i<length-lineLength; i+=lineLength) {
182 arr.add(insert(bitList.subList(i+64, lineLength).toString(), delimiter, chunkLength));
183 }
184 if (i<length) {
185 arr.add(insert(bitList.subList(i+64, length-i).toString(), delimiter, chunkLength));
186 }
187 String[] a = new String[arr.size()];
188 arr.toArray(a);
189 return a;
190 }
191 }