Skip to content

Commit 95dc16d

Browse files
author
Flurb
committed
Refactoring
Signed-off-by: Flurb <[email protected]>
1 parent 40468f5 commit 95dc16d

File tree

5 files changed

+120
-4
lines changed

5 files changed

+120
-4
lines changed

validator/src/main/java/org/lfenergy/compas/scl/validator/exception/SclValidatorErrorCode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class SclValidatorErrorCode {
1010

1111
public static final String NO_SCL_ELEMENT_FOUND_ERROR_CODE = "SVS-0001";
1212
public static final String LOADING_SCL_FILE_ERROR_CODE = "SVS-0002";
13-
public static final String LOADING_XSD_FILE_ERROR_CODE = "SVS-2003";
13+
public static final String LOADING_XSD_FILE_ERROR_CODE = "SVS-0003";
1414

1515
public static final String LOADING_OCL_FILES_FAILED = "SVS-1001";
1616
public static final String LOADING_CUSTOM_OCL_FILES_FAILED = "SVS-1002";

validator/src/main/java/org/lfenergy/compas/scl/validator/xsd/SclInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public SclInfo(String sclData) {
3333
processEvent(reader.nextEvent());
3434
}
3535
} catch (IOException | XMLStreamException exp) {
36-
throw new SclValidatorException(LOADING_SCL_FILE_ERROR_CODE, "Error loading SCL File.", exp);
36+
throw new SclValidatorException(LOADING_SCL_FILE_ERROR_CODE, "Error loading SCL File", exp);
3737
}
3838
}
3939

validator/src/main/java/org/lfenergy/compas/scl/validator/xsd/XSDValidator.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import javax.xml.validation.SchemaFactory;
1313
import javax.xml.validation.Validator;
1414

15+
import org.lfenergy.compas.scl.validator.exception.SclValidatorException;
1516
import org.lfenergy.compas.scl.validator.model.ValidationError;
1617
import org.lfenergy.compas.scl.validator.xsd.resourceresolver.ResourceResolver;
1718
import org.slf4j.Logger;
@@ -21,10 +22,13 @@
2122
import org.xml.sax.SAXException;
2223
import org.xml.sax.SAXParseException;
2324

25+
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.LOADING_SCL_FILE_ERROR_CODE;
26+
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.LOADING_XSD_FILE_ERROR_CODE;
27+
2428
public class XSDValidator {
2529
private static final Logger LOGGER = LoggerFactory.getLogger(XSDValidator.class);
2630

27-
private Validator validator;
31+
private final Validator validator;
2832

2933
private final List<ValidationError> errorList;
3034
private final String sclData;
@@ -44,7 +48,7 @@ public XSDValidator(List<ValidationError> errorList, String sclData) {
4448
}
4549
catch(SAXException exception) {
4650
LOGGER.error("[XSD validation] SAXException: {}", exception.getMessage());
47-
return;
51+
throw new SclValidatorException(LOADING_XSD_FILE_ERROR_CODE, exception.getMessage());
4852
}
4953

5054
validator.setErrorHandler(new ErrorHandler() {

validator/src/test/java/org/lfenergy/compas/scl/validator/xsd/XSDValidatorTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
package org.lfenergy.compas.scl.validator.xsd;
55

66
import org.junit.jupiter.api.Test;
7+
import org.lfenergy.compas.scl.validator.exception.SclValidatorException;
78
import org.lfenergy.compas.scl.validator.model.ValidationError;
89

910
import java.io.IOException;
1011
import java.nio.charset.StandardCharsets;
1112
import java.util.ArrayList;
1213

1314
import static org.junit.jupiter.api.Assertions.*;
15+
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.LOADING_XSD_FILE_ERROR_CODE;
1416

1517
class XSDValidatorTest {
1618
@Test
@@ -40,4 +42,16 @@ void validate_WhenCalledWithSclDataWithXsdValidationErrors_ThenErrorsAreRetrieve
4042
"Attribute 'name' must appear on element 'BDA'.",error.getMessage());
4143
}
4244
}
45+
46+
@Test
47+
void validate_WhenCalledWithSclDataContainingInvalidVersion_ThenExceptionIsThrown() throws IOException {
48+
var errorList = new ArrayList<ValidationError>();
49+
try (var inputStream = getClass()
50+
.getResourceAsStream("/scl/validation/example-with-wrong-version.scd")) {
51+
var data = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
52+
53+
var exception = assertThrows(SclValidatorException.class, () -> new XSDValidator(errorList, data));
54+
assertEquals(LOADING_XSD_FILE_ERROR_CODE, exception.getErrorCode());
55+
}
56+
}
4357
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!-- SPDX-FileCopyrightText: 2020 RTE FRANCE -->
3+
<!-- -->
4+
<!-- SPDX-License-Identifier: Apache-2.0 -->
5+
6+
<SCL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.iec.ch/61850/2003/SCL" version="1991" revision="B" release="3">
7+
<Header id="f9283708-bf4f-412c-a1d6-f947b9ac3000" version="1.0.0" revision="Revision" toolID="toolID" nameStructure="IEDName"/>
8+
<IED name="IED_NAME">
9+
<AccessPoint name="AP_NAME">
10+
<Server>
11+
<Authentication/>
12+
<LDevice inst="LDPO">
13+
<LN0 lnType="LN2" lnClass="LLN0" inst="">
14+
<Inputs>
15+
<ExtRef intAddr="INTADDR" pDO="DO1" desc="DESC1"/>
16+
<ExtRef intAddr="INTADDR" pDO="DO2" desc="DESC2"/>
17+
</Inputs>
18+
</LN0>
19+
<LN lnType="LN1" lnClass="PIOC" inst="1">
20+
<Inputs>
21+
<ExtRef intAddr="INTADDR" pDO="DO1" desc="DESC1"/>
22+
<ExtRef intAddr="INTADDR" pDO="DO2" desc="DESC2"/>
23+
</Inputs>
24+
</LN>
25+
<LN lnType="LN1" lnClass="PIOC" inst="2">
26+
<Inputs>
27+
<ExtRef intAddr="INTADDR" pDO="DO1" desc="DESC1"/>
28+
<ExtRef intAddr="INTADDR" pDO="DO2" desc="DESC2"/>
29+
</Inputs>
30+
</LN>
31+
</LDevice>
32+
</Server>
33+
</AccessPoint>
34+
</IED>
35+
<DataTypeTemplates>
36+
<LNodeType lnClass="LLN0" id="LN2">
37+
<DO name="Beh" transient="false"/>
38+
<DO name="FACntRs" type="DO2" transient="true"/>
39+
<DO name="StrVal" type="DO3" transient="false"/>
40+
</LNodeType>
41+
<LNodeType lnClass="PIOC" id="LN1">
42+
<DO name="Beh" type="DO1" transient="false"/>
43+
<DO type="DO2" transient="true"/>
44+
<DO name="StrVal" type="DO3" transient="false"/>
45+
</LNodeType>
46+
<DOType cdc="WYE" id="DO1">
47+
<DA fc="DC" dchg="false" qchg="false" dupd="false" name="dataNs" bType="VisString255">
48+
<Val>IEC 61850-7-3:2007B</Val>
49+
</DA>
50+
<DA fc="CF" dchg="true" qchg="false" dupd="false" name="smpRate" bType="INT32U"/>
51+
</DOType>
52+
<DOType cdc="WYE" id="DO2">
53+
<SDO name="phsBHar" type="DO4"/>
54+
<DA fc="CF" dchg="true" qchg="false" dupd="true" name="angRef" bType="Enum" type="PhaseAngleReferenceKind"/>
55+
</DOType>
56+
<DOType cdc="WYE" id="DO3">
57+
<SDO name="neutHar" type="DO4"/>
58+
<DA fc="CF" dchg="true" qchg="false" dupd="false" name="smpRate" bType="INT32U"/>
59+
<DA fc="ST" dchg="false" qchg="false" dupd="false" name="origin" bType="Struct" type="DA3"/>
60+
</DOType>
61+
<DOType cdc="WYE" id="DO4">
62+
<DA fc="DC" dchg="false" qchg="false" dupd="false" name="configRev" bType="VisString255" valKind="RO" valImport="false"/>
63+
</DOType>
64+
<DAType id="DA1">
65+
<BDA name="operTm" bType="Timestamp"/>
66+
<BDA bType="Struct" type="DA3"/>
67+
<ProtNs type="8-MMS">IEC 61850-8-1:2003</ProtNs>
68+
</DAType>
69+
<DAType id="DA2">
70+
<BDA name="T" bType="Timestamp"/>
71+
<BDA name="ctlVal" bType="Enum" type="RecCycModKind"/>
72+
<ProtNs type="8-MMS">IEC 61850-8-1:2003</ProtNs>
73+
</DAType>
74+
<DAType id="DA3">
75+
<BDA bType="Check"/>
76+
<BDA name="Test" bType="BOOLEAN"/>
77+
<ProtNs type="8-MMS">IEC 61850-8-1:2003</ProtNs>
78+
</DAType>
79+
<EnumType id="RecCycModKind">
80+
<EnumVal ord="1">Completed</EnumVal>
81+
<EnumVal ord="2">Cancelled</EnumVal>
82+
<EnumVal ord="3">New adjustments</EnumVal>
83+
<EnumVal ord="4">AnotherValue</EnumVal>
84+
</EnumType>
85+
<EnumType id="PhaseAngleReferenceKind">
86+
<EnumVal ord="0">Va</EnumVal>
87+
<EnumVal ord="1">Vb</EnumVal>
88+
<EnumVal ord="2">Vc</EnumVal>
89+
<EnumVal ord="3">Aa</EnumVal>
90+
<EnumVal ord="4">Ab</EnumVal>
91+
<EnumVal ord="5">Ac</EnumVal>
92+
<EnumVal ord="6">Vab</EnumVal>
93+
<EnumVal ord="7">Vbc</EnumVal>
94+
<EnumVal ord="8">Vca</EnumVal>
95+
<EnumVal ord="9">AnotherValue</EnumVal>
96+
</EnumType>
97+
</DataTypeTemplates>
98+
</SCL>

0 commit comments

Comments
 (0)