Skip to content

Commit 26b3da2

Browse files
committed
Modifications in IOSample and packet classes to do the objects or their
attributes immutables. Signed-off-by: Tatiana Leon <tatiana.leon@digi.com>
1 parent 4b94ac1 commit 26b3da2

28 files changed

+2521
-51
lines changed

library/src/main/java/com/digi/xbee/api/io/IOSample.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ public boolean hasDigitalValue(IOLine ioLine) {
345345
* @see IOValue
346346
*/
347347
public HashMap<IOLine, IOValue> getDigitalValues() {
348-
return digitalValuesMap;
348+
return (HashMap<IOLine, IOValue>) digitalValuesMap.clone();
349349
}
350350

351351
/**
@@ -447,7 +447,7 @@ public boolean hasAnalogValue(IOLine ioLine) {
447447
* @see IOLine
448448
*/
449449
public HashMap<IOLine, Integer> getAnalogValues() {
450-
return analogValuesMap;
450+
return (HashMap<IOLine, Integer>) analogValuesMap.clone();
451451
}
452452

453453
/**

library/src/main/java/com/digi/xbee/api/packet/GenericXBeePacket.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,10 @@ public boolean needsAPIFrameID() {
114114
* @param rfData The new XBee RF Data.
115115
*/
116116
public void setRFData(byte[] rfData) {
117-
this.rfData = rfData;
117+
if (rfData == null)
118+
this.rfData = null;
119+
else
120+
this.rfData = Arrays.copyOf(rfData, rfData.length);
118121
}
119122

120123
/**
@@ -123,7 +126,9 @@ public void setRFData(byte[] rfData) {
123126
* @return The RF Data.
124127
*/
125128
public byte[] getRFData() {
126-
return rfData;
129+
if (rfData == null)
130+
return null;
131+
return Arrays.copyOf(rfData, rfData.length);
127132
}
128133

129134
/*

library/src/main/java/com/digi/xbee/api/packet/UnknownXBeePacket.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,10 @@ public boolean needsAPIFrameID() {
115115
* @param rfData The new XBee RF Data.
116116
*/
117117
public void setRFData(byte[] rfData) {
118-
this.rfData = rfData;
118+
if (rfData == null)
119+
this.rfData = null;
120+
else
121+
this.rfData = Arrays.copyOf(rfData, rfData.length);
119122
}
120123

121124
/**
@@ -124,7 +127,9 @@ public void setRFData(byte[] rfData) {
124127
* @return The RF Data.
125128
*/
126129
public byte[] getRFData() {
127-
return rfData;
130+
if (rfData == null)
131+
return null;
132+
return Arrays.copyOf(rfData, rfData.length);
128133
}
129134

130135
/*

library/src/main/java/com/digi/xbee/api/packet/common/ExplicitAddressingPacket.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,10 @@ public int getTransmitOptions() {
392392
* @param rfData RF Data to send.
393393
*/
394394
public void setRFData(byte[] rfData) {
395-
this.rfData = rfData;
395+
if (rfData == null)
396+
this.rfData = null;
397+
else
398+
this.rfData = Arrays.copyOf(rfData, rfData.length);
396399
}
397400

398401
/**
@@ -401,7 +404,9 @@ public void setRFData(byte[] rfData) {
401404
* @return RF Data to send.
402405
*/
403406
public byte[] getRFData() {
404-
return rfData;
407+
if (rfData == null)
408+
return null;
409+
return Arrays.copyOf(rfData, rfData.length);
405410
}
406411

407412
/*

library/src/main/java/com/digi/xbee/api/packet/common/ExplicitRxIndicatorPacket.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,10 @@ public int getReceiveOptions() {
326326
* @param rfData Received RF data.
327327
*/
328328
public void setRFData(byte[] rfData) {
329-
this.rfData = rfData;
329+
if (rfData == null)
330+
this.rfData = null;
331+
else
332+
this.rfData = Arrays.copyOf(rfData, rfData.length);
330333
}
331334

332335
/**
@@ -335,7 +338,9 @@ public void setRFData(byte[] rfData) {
335338
* @return Received RF data.
336339
*/
337340
public byte[] getRFData() {
338-
return rfData;
341+
if (rfData == null)
342+
return null;
343+
return Arrays.copyOf(rfData, rfData.length);
339344
}
340345

341346
/*

library/src/main/java/com/digi/xbee/api/packet/common/IODataSampleRxIndicatorPacket.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public class IODataSampleRxIndicatorPacket extends XBeeAPIPacket {
5353
private final XBee64BitAddress sourceAddress64;
5454
private final XBee16BitAddress sourceAddress16;
5555

56-
private final IOSample ioSample;
56+
private IOSample ioSample;
5757

5858
private final int receiveOptions;
5959

@@ -238,7 +238,16 @@ public IOSample getIOSample() {
238238
* @param rfData Received RF data.
239239
*/
240240
public void setRFData(byte[] rfData) {
241-
this.rfData = rfData;
241+
if (rfData == null)
242+
this.rfData = null;
243+
else
244+
this.rfData = Arrays.copyOf(rfData, rfData.length);
245+
246+
// Modify the ioSample accordingly.
247+
if (rfData != null && rfData.length >= 5)
248+
ioSample = new IOSample(this.rfData);
249+
else
250+
ioSample = null;
242251
}
243252

244253
/**
@@ -247,7 +256,9 @@ public void setRFData(byte[] rfData) {
247256
* @return Received RF data.
248257
*/
249258
public byte[] getRFData() {
250-
return rfData;
259+
if (rfData == null)
260+
return null;
261+
return Arrays.copyOf(rfData, rfData.length);
251262
}
252263

253264
/*

library/src/main/java/com/digi/xbee/api/packet/common/ReceivePacket.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,10 @@ public int getReceiveOptions() {
219219
* @param rfData Received RF data.
220220
*/
221221
public void setRFData(byte[] rfData) {
222-
this.rfData = rfData;
222+
if (rfData == null)
223+
this.rfData = null;
224+
else
225+
this.rfData = Arrays.copyOf(rfData, rfData.length);
223226
}
224227

225228
/**
@@ -228,7 +231,9 @@ public void setRFData(byte[] rfData) {
228231
* @return Received RF data.
229232
*/
230233
public byte[] getRFData() {
231-
return rfData;
234+
if (rfData == null)
235+
return null;
236+
return Arrays.copyOf(rfData, rfData.length);
232237
}
233238

234239
/*

library/src/main/java/com/digi/xbee/api/packet/common/TransmitPacket.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,10 @@ public int getTransmitOptions() {
283283
* @param rfData RF Data to send.
284284
*/
285285
public void setRFData(byte[] rfData) {
286-
this.rfData = rfData;
286+
if (rfData == null)
287+
this.rfData = null;
288+
else
289+
this.rfData = Arrays.copyOf(rfData, rfData.length);
287290
}
288291

289292
/**
@@ -292,7 +295,9 @@ public void setRFData(byte[] rfData) {
292295
* @return RF Data to send.
293296
*/
294297
public byte[] getRFData() {
295-
return rfData;
298+
if (rfData == null)
299+
return null;
300+
return Arrays.copyOf(rfData, rfData.length);
296301
}
297302

298303
/*

library/src/main/java/com/digi/xbee/api/packet/raw/RX16IOPacket.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class RX16IOPacket extends XBeeAPIPacket {
4343
// Variables.
4444
private final XBee16BitAddress sourceAddress16;
4545

46-
private final IOSample ioSample;
46+
private IOSample ioSample;
4747

4848
private final int rssi;
4949
private final int receiveOptions;
@@ -229,7 +229,16 @@ public IOSample getIOSample() {
229229
* @param rfData Received RF data.
230230
*/
231231
public void setRFData(byte[] rfData) {
232-
this.rfData = rfData;
232+
if (rfData == null)
233+
this.rfData = null;
234+
else
235+
this.rfData = Arrays.copyOf(rfData, rfData.length);
236+
237+
// Modify the ioSample accordingly.
238+
if (rfData != null && rfData.length >= 5)
239+
ioSample = new IOSample(this.rfData);
240+
else
241+
ioSample = null;
233242
}
234243

235244
/**
@@ -238,7 +247,9 @@ public void setRFData(byte[] rfData) {
238247
* @return Received RF data.
239248
*/
240249
public byte[] getRFData() {
241-
return rfData;
250+
if (rfData == null)
251+
return null;
252+
return Arrays.copyOf(rfData, rfData.length);
242253
}
243254

244255
/*

library/src/main/java/com/digi/xbee/api/packet/raw/RX16Packet.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,10 @@ public int getReceiveOptions() {
214214
* @param rfData Received RF data.
215215
*/
216216
public void setRFData(byte[] rfData) {
217-
this.rfData = rfData;
217+
if (rfData == null)
218+
this.rfData = null;
219+
else
220+
this.rfData = Arrays.copyOf(rfData, rfData.length);
218221
}
219222

220223
/**
@@ -223,7 +226,9 @@ public void setRFData(byte[] rfData) {
223226
* @return Received RF data.
224227
*/
225228
public byte[] getRFData() {
226-
return rfData;
229+
if (rfData == null)
230+
return null;
231+
return Arrays.copyOf(rfData, rfData.length);
227232
}
228233

229234
/*

0 commit comments

Comments
 (0)