Skip to content

Commit cbc8f59

Browse files
committed
Convert HeliumUplinkMessage to record.
1 parent 40746fe commit cbc8f59

File tree

2 files changed

+51
-62
lines changed

2 files changed

+51
-62
lines changed
Lines changed: 36 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,48 @@
11
package nl.bertriksikken.helium;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
5-
63
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
74
import com.fasterxml.jackson.annotation.JsonProperty;
85

9-
@JsonIgnoreProperties(ignoreUnknown = true)
10-
public final class HeliumUplinkMessage {
11-
12-
@JsonProperty("app_eui")
13-
String appEui = "";
14-
15-
@JsonProperty("dev_eui")
16-
String devEui = "";
17-
18-
// device address with bytes in reverse order
19-
@JsonProperty("devaddr")
20-
String devAddr = "";
21-
22-
@JsonProperty("fcnt")
23-
int fcnt;
24-
25-
@JsonProperty("port")
26-
int port;
27-
28-
@JsonProperty("name")
29-
String name = "";
30-
31-
@JsonProperty("payload")
32-
byte[] payload = new byte[0];
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.Objects;
339

34-
// milliseconds
35-
@JsonProperty("reported_at")
36-
long reportedAt;
10+
@SuppressWarnings("ArrayRecordComponent")
11+
@JsonIgnoreProperties(ignoreUnknown = true)
12+
public record HeliumUplinkMessage(
13+
@JsonProperty("app_eui") String appEui,
14+
@JsonProperty("dev_eui") String devEui,
15+
@JsonProperty("devaddr") String devAddr, // device address with bytes in reverse order
16+
@JsonProperty("fcnt") int fcnt,
17+
@JsonProperty("port") int port,
18+
@JsonProperty("name") String name,
19+
@JsonProperty("payload") byte[] payload,
20+
@JsonProperty("reported_at") long reportedAt, // milliseconds
21+
@JsonProperty("hotspots") List<HotSpot> hotSpots) {
22+
public HeliumUplinkMessage {
23+
appEui = Objects.requireNonNullElse(appEui, "");
24+
devEui = Objects.requireNonNullElse(devEui, "");
25+
devAddr = Objects.requireNonNullElse(devAddr, "");
26+
name = Objects.requireNonNullElse(name, "");
27+
payload = Objects.requireNonNullElse(payload.clone(), new byte[0]);
28+
hotSpots = Objects.requireNonNullElse(hotSpots, new ArrayList<>());
29+
}
3730

38-
@JsonProperty("hotspots")
39-
List<HotSpot> hotSpots = new ArrayList<>();
31+
@Override
32+
public byte[] payload() {
33+
return payload.clone();
34+
}
4035

4136
@JsonIgnoreProperties(ignoreUnknown = true)
42-
static final class HotSpot {
43-
@JsonProperty("name")
44-
String name = "";
45-
46-
@JsonProperty("lat")
47-
double latitude;
48-
49-
@JsonProperty("long")
50-
double longitude;
51-
52-
@JsonProperty("rssi")
53-
double rssi;
54-
55-
@JsonProperty("snr")
56-
double snr;
37+
record HotSpot(
38+
@JsonProperty("name") String name,
39+
@JsonProperty("lat") double latitude,
40+
@JsonProperty("long") double longitude,
41+
@JsonProperty("rssi") double rssi,
42+
@JsonProperty("snr") double snr) {
43+
HotSpot {
44+
name = Objects.requireNonNullElse(name, "");
45+
}
5746
}
5847

5948
}

sensor-data-bridge/src/test/java/nl/bertriksikken/helium/HeliumUplinkMessageTest.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,21 @@ public void testDecode() throws IOException {
1818
HeliumUplinkMessage uplink = mapper.readValue(is, HeliumUplinkMessage.class);
1919
Assertions.assertNotNull(uplink);
2020

21-
Assertions.assertEquals("6081F9D16837130E", uplink.appEui);
22-
Assertions.assertEquals("5A010048", uplink.devAddr);
23-
Assertions.assertEquals("0004A30B001F21FA", uplink.devEui);
24-
Assertions.assertEquals(0, uplink.fcnt);
25-
Assertions.assertEquals("kissmapper", uplink.name);
26-
Assertions.assertEquals(1, uplink.port);
27-
Assertions.assertEquals(1631457565832L, uplink.reportedAt);
28-
Assertions.assertArrayEquals(new byte[]{3}, uplink.payload);
29-
30-
HotSpot hotSpot = uplink.hotSpots.get(0);
31-
Assertions.assertEquals(52.01745, hotSpot.latitude, 0.00001);
32-
Assertions.assertEquals(4.729876, hotSpot.longitude, 0.00001);
33-
Assertions.assertEquals("melted-quartz-antelope", hotSpot.name);
34-
Assertions.assertEquals(-120, hotSpot.rssi, 0.1);
35-
Assertions.assertEquals(-7.5, hotSpot.snr, 0.1);
21+
Assertions.assertEquals("6081F9D16837130E", uplink.appEui());
22+
Assertions.assertEquals("5A010048", uplink.devAddr());
23+
Assertions.assertEquals("0004A30B001F21FA", uplink.devEui());
24+
Assertions.assertEquals(0, uplink.fcnt());
25+
Assertions.assertEquals("kissmapper", uplink.name());
26+
Assertions.assertEquals(1, uplink.port());
27+
Assertions.assertEquals(1631457565832L, uplink.reportedAt());
28+
Assertions.assertArrayEquals(new byte[]{3}, uplink.payload());
29+
30+
HotSpot hotSpot = uplink.hotSpots().get(0);
31+
Assertions.assertEquals(52.01745, hotSpot.latitude(), 0.00001);
32+
Assertions.assertEquals(4.729876, hotSpot.longitude(), 0.00001);
33+
Assertions.assertEquals("melted-quartz-antelope", hotSpot.name());
34+
Assertions.assertEquals(-120, hotSpot.rssi(), 0.1);
35+
Assertions.assertEquals(-7.5, hotSpot.snr(), 0.1);
3636
}
3737

3838
}

0 commit comments

Comments
 (0)