Skip to content

Commit 27346b3

Browse files
author
Andre Bolder
committed
SMHE-1602: improve CombinedDeviceModelCode
Signed-off-by: Andre Bolder <andre.bolder@alliander.com>
1 parent b017a26 commit 27346b3

File tree

2 files changed

+58
-18
lines changed

2 files changed

+58
-18
lines changed

osgp/protocol-adapter-dlms/osgp-protocol-adapter-dlms/src/main/java/org/opensmartgridplatform/adapter/protocol/dlms/domain/valueobjects/CombinedDeviceModelCode.java

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@ public class CombinedDeviceModelCode {
2020

2121
public static final String SEPERATOR = ",";
2222

23+
public static final int SEPERATOR_COUNT_4 = 4;
24+
2325
private final String gatewayDeviceModelCode;
2426
private final Map<Integer, String> channelBasedDeviceModelCodes;
2527

2628
private CombinedDeviceModelCode() {
27-
this.gatewayDeviceModelCode = "";
29+
this.gatewayDeviceModelCode = null;
2830
this.channelBasedDeviceModelCodes = new HashMap<>();
2931
}
3032

@@ -36,28 +38,50 @@ private CombinedDeviceModelCode(
3638
}
3739

3840
public static CombinedDeviceModelCode parse(final String combinedDeviceModelCodes) {
39-
if (hasCombinedDeviceModelCodes(combinedDeviceModelCodes)) {
40-
final String[] codes = combinedDeviceModelCodes.split(SEPERATOR);
41-
42-
final String gatewayDeviceModelCode = codes[0];
43-
44-
final Map<Integer, String> channelBasedDeviceModelCodes = new HashMap<>();
45-
for (int i = 1; i < codes.length; i++) {
46-
channelBasedDeviceModelCodes.put(i, codes[i]);
47-
}
48-
49-
return new CombinedDeviceModelCode(gatewayDeviceModelCode, channelBasedDeviceModelCodes);
50-
} else {
41+
if (!hasCombinedDeviceModelCodes(combinedDeviceModelCodes)) {
5142
log.info(
5243
"Devicemodelcode field on MessageMetaData does not contain expected combined device model codes, got: [{}]",
5344
combinedDeviceModelCodes);
5445
return new CombinedDeviceModelCode();
5546
}
47+
48+
if (!hasContent(combinedDeviceModelCodes)) {
49+
log.info(
50+
"Devicemodelcode field on MessageMetaData does not contain device model codes, got: [{}]",
51+
combinedDeviceModelCodes);
52+
return new CombinedDeviceModelCode();
53+
}
54+
55+
final String[] codes = combinedDeviceModelCodes.split(SEPERATOR);
56+
57+
final String gatewayDeviceModelCode = getGatewayDeciceModelCode(codes);
58+
final Map<Integer, String> channelBasedDeviceModelCodes = getMbusDeviceModelCodes(codes);
59+
60+
return new CombinedDeviceModelCode(gatewayDeviceModelCode, channelBasedDeviceModelCodes);
61+
}
62+
63+
private static Map<Integer, String> getMbusDeviceModelCodes(final String[] codes) {
64+
final Map<Integer, String> channelBasedDeviceModelCodes = new HashMap<>();
65+
for (int i = 1; i < codes.length; i++) {
66+
channelBasedDeviceModelCodes.put(i, codes[i]);
67+
}
68+
return channelBasedDeviceModelCodes;
69+
}
70+
71+
private static String getGatewayDeciceModelCode(final String[] codes) {
72+
return codes.length >= 1 ? codes[0] : null;
5673
}
5774

5875
private static boolean hasCombinedDeviceModelCodes(final String combinedDeviceModelCodes) {
76+
5977
return combinedDeviceModelCodes != null
60-
&& combinedDeviceModelCodes.chars().filter(ch -> ch == SEPERATOR.charAt(0)).count() == 4;
78+
&& combinedDeviceModelCodes.chars().filter(ch -> ch == SEPERATOR.charAt(0)).count()
79+
== SEPERATOR_COUNT_4;
80+
}
81+
82+
private static boolean hasContent(final String combinedDeviceModelCodes) {
83+
84+
return combinedDeviceModelCodes.length() > SEPERATOR_COUNT_4;
6185
}
6286

6387
public String getCodeFromChannel(final int i) {

osgp/protocol-adapter-dlms/osgp-protocol-adapter-dlms/src/test/java/org/opensmartgridplatform/adapter/protocol/dlms/domain/valueobjects/CombinedDeviceModelCodeTest.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@
66

77
import static org.junit.jupiter.api.Assertions.*;
88

9-
import org.junit.jupiter.api.Assertions;
109
import org.junit.jupiter.api.Test;
1110
import org.junit.jupiter.api.extension.ExtendWith;
11+
import org.junit.jupiter.params.ParameterizedTest;
12+
import org.junit.jupiter.params.provider.CsvSource;
1213
import org.mockito.junit.jupiter.MockitoExtension;
1314
import org.opensmartgridplatform.adapter.protocol.dlms.domain.valueobjects.CombinedDeviceModelCode.CombinedDeviceModelCodeBuilder;
1415

@@ -43,11 +44,26 @@ void parseShouldSucceed() {
4344
}
4445

4546
@Test
46-
void parseShouldReturnEmptyCombinedDeviceModelCode() {
47+
void parseShouldGetEmptyResponse() {
48+
49+
final CombinedDeviceModelCode combinedDeviceModelCode = CombinedDeviceModelCode.parse(",,,,");
50+
51+
assertNull(combinedDeviceModelCode.getGatewayDeviceModelCode());
52+
assertNull(combinedDeviceModelCode.getCodeFromChannel(1));
53+
assertNull(combinedDeviceModelCode.getCodeFromChannel(2));
54+
assertNull(combinedDeviceModelCode.getCodeFromChannel(3));
55+
assertNull(combinedDeviceModelCode.getCodeFromChannel(4));
56+
}
57+
58+
@ParameterizedTest
59+
@CsvSource(
60+
value = {"invalid", ",", ",,", ",,,", ",,,,", ",,,,,"},
61+
delimiterString = ";")
62+
void parseShouldReturnEmptyCombinedDeviceModelCode(final String noCombinedDeviceModelCode) {
4763
final CombinedDeviceModelCode combinedDeviceModelCode =
48-
CombinedDeviceModelCode.parse("invalid");
64+
CombinedDeviceModelCode.parse(noCombinedDeviceModelCode);
4965

50-
Assertions.assertEquals("", combinedDeviceModelCode.getGatewayDeviceModelCode());
66+
assertNull(combinedDeviceModelCode.getGatewayDeviceModelCode());
5167
assertNull(combinedDeviceModelCode.getCodeFromChannel(1));
5268
assertNull(combinedDeviceModelCode.getCodeFromChannel(2));
5369
assertNull(combinedDeviceModelCode.getCodeFromChannel(3));

0 commit comments

Comments
 (0)