Skip to content

Commit c131d24

Browse files
committed
fix(78): RSR-437 - add check of source LDevice status
Signed-off-by: massifben <[email protected]>
1 parent 845e7bf commit c131d24

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ied/InputsAdapter.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,16 +152,25 @@ private Optional<SclReportItem> validateExtRefSource(TExtRef extRef, IEDAdapter
152152
return warningReportItem(extRef, String.format("The signal ExtRef ExtRefldinst does not match any " +
153153
"LDevice with same inst attribute in source IED %s", sourceIed.getXPath()));
154154
}
155-
Optional<String> optionalLDeviceStatus = sourceLDevice.getLDeviceStatus();
156-
if (optionalLDeviceStatus.isEmpty()) {
155+
Optional<String> optionalSourceLDeviceStatus = sourceLDevice.getLDeviceStatus();
156+
if (optionalSourceLDeviceStatus.isEmpty()) {
157157
return fatalReportItem(extRef, String.format("The signal ExtRef source LDevice %s status is undefined",
158158
sourceLDevice.getXPath()));
159159

160-
} else if (OFF.equals(optionalLDeviceStatus.get())) {
161-
return warningReportItem(extRef, String.format("The signal ExtRef source LDevice %s status is off",
162-
sourceLDevice.getXPath()));
163160
}
164-
return Optional.empty();
161+
return optionalSourceLDeviceStatus.map(sourceLDeviceStatus -> {
162+
switch (sourceLDeviceStatus) {
163+
case OFF:
164+
return SclReportItem.warning(extRefXPath(extRef.getDesc()), String.format("The signal ExtRef source LDevice %s status is off",
165+
sourceLDevice.getXPath()));
166+
case ON:
167+
return null;
168+
default:
169+
return SclReportItem.fatal(extRefXPath(extRef.getDesc()),
170+
String.format("The signal ExtRef source LDevice %s status is neither \"on\" nor \"off\"",
171+
sourceLDevice.getXPath()));
172+
}
173+
});
165174
}
166175

167176
private boolean hasMatchingLN(TExtRef extRef, LDeviceAdapter lDeviceAdapter) {

sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ExtRefServiceTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,13 @@ public static Stream<Arguments> updateAllExtRefIedNamesErrors() throws Exception
108108
SclReportItem.fatal(
109109
"/SCL/IED[@name=\"IED_NAME1\"]/AccessPoint/Server/LDevice[@inst=\"LD_INST11\"]" +
110110
"/LN0/Inputs/ExtRef[@desc=\"Source LDevice is undefined for this ExtRef\"]",
111-
"The signal ExtRef source LDevice /SCL/IED[@name=\"IED_NAME2\"]/AccessPoint/Server/LDevice[@inst=\"LD_INST23\"] status is undefined")
111+
"The signal ExtRef source LDevice /SCL/IED[@name=\"IED_NAME2\"]/AccessPoint/Server/LDevice[@inst=\"LD_INST23\"] status is " +
112+
"undefined"),
113+
SclReportItem.fatal(
114+
"/SCL/IED[@name=\"IED_NAME1\"]/AccessPoint/Server/LDevice[@inst=\"LD_INST11\"]" +
115+
"/LN0/Inputs/ExtRef[@desc=\"Source LDevice is neither on nor off for this ExtRef\"]",
116+
"The signal ExtRef source LDevice /SCL/IED[@name=\"IED_NAME2\"]/AccessPoint/Server/LDevice[@inst=\"LD_INST24\"] " +
117+
"status is neither \"on\" nor \"off\"")
112118
}),
113119
Arguments.of(
114120
"Errors on IEDs",

sct-commons/src/test/resources/scd-extref-iedname/scd_set_extref_iedname_with_extref_errors.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
<compas:Flow FlowID="7" FlowKind="BAY_INTERNAL" ExtRefiedName="System_Version_IED_NAME2" ExtReflnClass="ANCR" ExtRefldinst="LD_INST21" ExtReflnInst="1" ExtRefprefix="" FlowStatus="ACTIVE" dataStreamKey="ExtRef does not match any LN is source LDevice"/>
3232
<compas:Flow FlowID="1" FlowKind="BAY_INTERNAL" ExtRefiedName="System_Version_IED_NAME2" ExtReflnClass="ANCR" ExtRefldinst="LD_INST22" ExtReflnInst="1" ExtRefprefix="" FlowStatus="ACTIVE" dataStreamKey="Source LDevice is off for this ExtRef"/>
3333
<compas:Flow FlowID="1" FlowKind="BAY_INTERNAL" ExtRefiedName="System_Version_IED_NAME2" ExtReflnClass="ANCR" ExtRefldinst="LD_INST23" ExtReflnInst="1" ExtRefprefix="" FlowStatus="ACTIVE" dataStreamKey="Source LDevice is undefined for this ExtRef"/>
34+
<compas:Flow FlowID="1" FlowKind="BAY_INTERNAL" ExtRefiedName="System_Version_IED_NAME2" ExtReflnClass="ANCR" ExtRefldinst="LD_INST24" ExtReflnInst="1" ExtRefprefix="" FlowStatus="ACTIVE" dataStreamKey="Source LDevice is neither on nor off for this ExtRef"/>
3435
</Private>
3536
<!-- nominal case -->
3637
<ExtRef iedName="System_Version_IED_NAME2" ldInst="LD_INST21" lnClass="ANCR" lnInst="1" doName="DoName1" daName="daName1" intAddr="INT_ADDR11" pDO="Do11.sdo11" pDA="da11.bda111.bda112.bda113" desc="STAT_LDSUIED_LPDO 1 Sortie_13_BOOLEAN_18_stVal_1"/>
@@ -50,6 +51,8 @@
5051
<ExtRef iedName="System_Version_IED_NAME2" ldInst="LD_INST22" lnClass="ANCR" lnInst="1" doName="DoName1" daName="daName1" intAddr="INT_ADDR11" pDO="Do11.sdo11" pDA="da11.bda111.bda112.bda113" desc="Source LDevice is off for this ExtRef"/>
5152
<!-- source LDevice status is undefined -->
5253
<ExtRef iedName="System_Version_IED_NAME2" ldInst="LD_INST23" lnClass="ANCR" lnInst="1" doName="DoName1" daName="daName1" intAddr="INT_ADDR11" pDO="Do11.sdo11" pDA="da11.bda111.bda112.bda113" desc="Source LDevice is undefined for this ExtRef"/>
54+
<!-- source LDevice status is neither on nor off -->
55+
<ExtRef iedName="System_Version_IED_NAME2" ldInst="LD_INST24" lnClass="ANCR" lnInst="1" doName="DoName1" daName="daName1" intAddr="INT_ADDR11" pDO="Do11.sdo11" pDA="da11.bda111.bda112.bda113" desc="Source LDevice is neither on nor off for this ExtRef"/>
5356
</Inputs>
5457
</LN0>
5558
</LDevice>
@@ -133,6 +136,17 @@
133136
<LN0 lnClass="LLN0" inst="" lnType="LNEX1"/>
134137
<LN lnClass="ANCR" inst="1" lnType="lnType"/>
135138
</LDevice>
139+
<!-- source LDevice status is neither on nor off -->
140+
<LDevice inst="LD_INST24">
141+
<LN0 lnClass="LLN0" inst="" lnType="LNEX1">
142+
<DOI name="Mod">
143+
<DAI name="stVal">
144+
<Val>test</Val>
145+
</DAI>
146+
</DOI>
147+
</LN0>
148+
<LN lnClass="ANCR" inst="1" lnType="lnType"/>
149+
</LDevice>
136150
</Server>
137151
</AccessPoint>
138152
</IED>

0 commit comments

Comments
 (0)