From 08400a19eacef3f87ebd8d2f53fc93cd6ebb948a Mon Sep 17 00:00:00 2001 From: massifben <105049157+massifben@users.noreply.github.com> Date: Fri, 20 Dec 2024 16:59:18 +0100 Subject: [PATCH] take comments into account --- .../compas/sct/commons/LNodeStatusService.java | 9 ++++++--- .../compas/sct/commons/LNodeStatusServiceTest.java | 12 ++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LNodeStatusService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LNodeStatusService.java index febcf3c33..af902ca3a 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LNodeStatusService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LNodeStatusService.java @@ -23,6 +23,8 @@ public class LNodeStatusService { private static final String LNODE_STATUS_PRIVATE_TYPE = "COMPAS-LNodeStatus"; + private static final List LN_LNS_POSSIBLE_VALUES = List.of("off;on", "on;off", "on", "off"); + private static final List LNODE_LNS_POSSIBLE_VALUES = List.of("on", "off"); private final LdeviceService ldeviceService; private final LnService lnService; private final DataTypeTemplatesService dataTypeTemplatesService; @@ -40,7 +42,7 @@ public List updateLnModStValBasedOnLNodeStatus(SCL scl) { private SclReportItem updateSingleLnModStValBasedOnLNodeStatus(SCL scl, TLNode tlNode) { String lNodeLNS = PrivateUtils.extractStringPrivate(tlNode, LNODE_STATUS_PRIVATE_TYPE).orElse(null); - if (!"on".equals(lNodeLNS) && !"off".equals(lNodeLNS)) { + if (lNodeLNS == null || !LNODE_LNS_POSSIBLE_VALUES.contains(lNodeLNS)) { return SclReportItem.error(lNodePath(tlNode), "The private %s of the LNode has invalid value. Expecting one of [on, off] but got : %s".formatted(LNODE_STATUS_PRIVATE_TYPE, lNodeLNS)); } TAnyLN anyLn = findLn(scl, tlNode.getIedName(), tlNode.getLdInst(), tlNode.getLnClass().getFirst(), tlNode.getLnInst(), tlNode.getPrefix()).orElse(null); @@ -48,8 +50,9 @@ private SclReportItem updateSingleLnModStValBasedOnLNodeStatus(SCL scl, TLNode t return SclReportItem.error(lNodePath(tlNode), "LNode in Substation section does not have a matching LN in IED section"); } String anyLnLNS = PrivateUtils.extractStringPrivate(anyLn, LNODE_STATUS_PRIVATE_TYPE).orElse(null); - if (anyLnLNS == null) { - return SclReportItem.error(lnPath(tlNode), "LN does not have a private %s".formatted(LNODE_STATUS_PRIVATE_TYPE)); + if (anyLnLNS == null || !LN_LNS_POSSIBLE_VALUES.contains(anyLnLNS)) { + return SclReportItem.error(lnPath(tlNode), "The private %s of the LN has invalid value. Expecting one of %s but got : %s".formatted(LNODE_STATUS_PRIVATE_TYPE, LN_LNS_POSSIBLE_VALUES, anyLnLNS)); + } if (!anyLnLNS.contains(lNodeLNS)) { return SclReportItem.error(lnPath(tlNode), "Cannot set DAI Mod.stVal to %s, because LN private %s is set to %s".formatted(lNodeLNS, LNODE_STATUS_PRIVATE_TYPE, anyLnLNS)); diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LNodeStatusServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LNodeStatusServiceTest.java index 65431e392..d988862f1 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LNodeStatusServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LNodeStatusServiceTest.java @@ -107,7 +107,7 @@ void updateLnStatusBasedOnPrivateLNodeStatus_when_invalid_compasLNodeStatus_valu void updateLnStatusBasedOnPrivateLNodeStatus_when_LNode_does_not_match_any_LN_should_return_error() { // Given SCL scl = SclTestMarshaller.getSCLFromFile("/scl-lnodestatus/lnodestatus.scd"); - ((TLN) findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "PDIS", "1", "")) + ((TLN) findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "PDIS", "1", "")) .setPrefix("helloworld"); // When List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); @@ -129,7 +129,7 @@ void updateLnStatusBasedOnPrivateLNodeStatus_when_no_compasLNodeStatus_in_LN_sho // Then assertThat(sclReportItems).containsExactly( SclReportItem.error("IED(IED_NAME_1)/LD(LDEVICE_1)/LN[PDIS,1,]", - "LN does not have a private COMPAS-LNodeStatus") + "The private COMPAS-LNodeStatus of the LN has invalid value. Expecting one of [off;on, on;off, on, off] but got : null") ); } @@ -137,9 +137,9 @@ void updateLnStatusBasedOnPrivateLNodeStatus_when_no_compasLNodeStatus_in_LN_sho void updateLnStatusBasedOnPrivateLNodeStatus_when_compasLNodeStatus_is_on_in_LNode_but_off_in_LN_should_return_error() { // Given SCL scl = SclTestMarshaller.getSCLFromFile("/scl-lnodestatus/lnodestatus.scd"); - findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "LLN0", "", "") + findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "LLN0", "", "") .getPrivate().getFirst().getContent().set(0, "off"); - findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "PDIS", "1", "") + findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "PDIS", "1", "") .getPrivate().getFirst().getContent().set(0, "off"); // When List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); @@ -156,9 +156,9 @@ void updateLnStatusBasedOnPrivateLNodeStatus_when_compasLNodeStatus_is_on_in_LNo void updateLnStatusBasedOnPrivateLNodeStatus_when_compasLNodeStatus_is_off_in_LNode_but_on_in_LN_should_return_error() { // Given SCL scl = SclTestMarshaller.getSCLFromFile("/scl-lnodestatus/lnodestatus.scd"); - findAnyLn(scl, "IED_NAME_1", "LDEVICE_4", "LLN0", "", "") + findAnyLn(scl, "IED_NAME_1", "LDEVICE_4", "LLN0", "", "") .getPrivate().getFirst().getContent().set(0, "on"); - findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "PDIS", "4", "") + findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "PDIS", "4", "") .getPrivate().getFirst().getContent().set(0, "on"); // When List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl);