Skip to content

Commit d58e0cb

Browse files
fix error marshalling SCL after automatic scd creation call (#127)
[#126] fix importSTDElementsInSCD when copying Compas ICDHeader and add assertIsMarshallable to tests Signed-off-by: samirromdhani <[email protected]> Signed-off-by: massifben <[email protected]> Co-authored-by: samirromdhani <[email protected]> Co-authored-by: massifben <[email protected]>
1 parent 19605de commit d58e0cb

File tree

6 files changed

+78
-48
lines changed

6 files changed

+78
-48
lines changed

sct-app/src/test/java/org.lfenergy.compas.sct.app/SclAutomationServiceTest.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.util.Set;
1818

1919
import static org.junit.jupiter.api.Assertions.*;
20+
import static org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller.assertIsMarshallable;
2021

2122
class SclAutomationServiceTest {
2223

@@ -30,20 +31,25 @@ void init(){
3031
}
3132

3233
@Test
33-
void createSCD() throws Exception {
34+
void createSCD_should_return_generatedSCD() throws Exception {
35+
// Given
3436
SCL ssd = SclTestMarshaller.getSCLFromFile("/scd-ied-dtt-com-import-stds/scd.xml");
3537
SCL std = SclTestMarshaller.getSCLFromFile("/scd-ied-dtt-com-import-stds/std.xml");
38+
// When
3639
SclRootAdapter expectedSCD = SclAutomationService.createSCD(ssd, headerDTO, Set.of(std));
40+
// Then
3741
assertNotNull(expectedSCD.getCurrentElem().getHeader().getId());
3842
assertNull(expectedSCD.getCurrentElem().getHeader().getHistory());
3943
assertEquals(1, expectedSCD.getCurrentElem().getSubstation().size());
4044
assertEquals(1, expectedSCD.getCurrentElem().getIED().size());
4145
assertNotNull(expectedSCD.getCurrentElem().getDataTypeTemplates());
4246
assertEquals(2, expectedSCD.getCurrentElem().getCommunication().getSubNetwork().size());
47+
assertIsMarshallable(expectedSCD.getCurrentElem());
4348
}
4449

4550
@Test
4651
void createSCD_With_HItem() throws Exception {
52+
// Given
4753
HeaderDTO.HistoryItem historyItem = new HeaderDTO.HistoryItem();
4854
historyItem.setWhat("what");
4955
historyItem.setWho("me");
@@ -53,14 +59,18 @@ void createSCD_With_HItem() throws Exception {
5359
SCL std1 = SclTestMarshaller.getSCLFromFile("/std_1.xml");
5460
SCL std2 = SclTestMarshaller.getSCLFromFile("/std_2.xml");
5561
SCL std3 = SclTestMarshaller.getSCLFromFile("/std_3.xml");
62+
// When
5663
SclRootAdapter expectedSCD = SclAutomationService.createSCD(ssd, headerDTO, Set.of(std1, std2, std3));
64+
// Then
5765
assertNotNull(expectedSCD.getCurrentElem().getHeader().getId());
5866
assertEquals(1 ,expectedSCD.getCurrentElem().getHeader().getHistory().getHitem().size());
5967
assertEquals(1, expectedSCD.getCurrentElem().getSubstation().size());
68+
assertIsMarshallable(expectedSCD.getCurrentElem());
6069
}
6170

6271
@Test
6372
void createSCD_With_HItems() throws Exception {
73+
// Given
6474
HeaderDTO.HistoryItem historyItem = new HeaderDTO.HistoryItem();
6575
historyItem.setWhat("what");
6676
historyItem.setWho("me");
@@ -74,17 +84,22 @@ void createSCD_With_HItems() throws Exception {
7484
SCL std1 = SclTestMarshaller.getSCLFromFile("/std_1.xml");
7585
SCL std2 = SclTestMarshaller.getSCLFromFile("/std_2.xml");
7686
SCL std3 = SclTestMarshaller.getSCLFromFile("/std_3.xml");
87+
// When
7788
SclRootAdapter expectedSCD = SclAutomationService.createSCD(ssd, headerDTO,Set.of(std1, std2, std3));
89+
// Then
7890
assertNotNull(expectedSCD.getCurrentElem().getHeader().getId());
7991
assertEquals(1, expectedSCD.getCurrentElem().getHeader().getHistory().getHitem().size());
8092
assertEquals("what", expectedSCD.getCurrentElem().getHeader().getHistory().getHitem().get(0).getWhat());
93+
assertIsMarshallable(expectedSCD.getCurrentElem());
8194
}
8295

8396
@Test
8497
void createSCD_SSD_Without_Substation() throws Exception {
98+
// Given
8599
SCL ssd = SclTestMarshaller.getSCLFromFile("/scd-substation-import-ssd/ssd_without_substations.xml");
100+
// When & Then
86101
assertThrows(ScdException.class,
87102
() -> SclAutomationService.createSCD(ssd, headerDTO, new HashSet<>()) );
88103
}
89104

90-
}
105+
}

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

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ public static SclRootAdapter importSTDElementsInSCD(@NonNull SclRootAdapter scdR
412412
for (Map.Entry<String, TPrivate> entry : mapIEDNameAndPrivate.entrySet()) {
413413
String iedName = entry.getKey();
414414
TPrivate tPrivate = entry.getValue();
415-
String icdSysVerUuid = getCompasICDHeader(tPrivate).map(TCompasICDHeader::getICDSystemVersionUUID).orElseThrow(
415+
String icdSysVerUuid = getCompasICDHeaderValue(tPrivate).map(TCompasICDHeader::getICDSystemVersionUUID).orElseThrow(
416416
() -> new ScdException(ICD_SYSTEM_VERSION_UUID + " is not present in COMPAS-ICDHeader in LNode")
417417
);
418418

@@ -446,10 +446,10 @@ private static void checkSTDCorrespondanceWithLNodeCompasICDHeader(Map<String, P
446446
}
447447

448448
private static String stdCheckFormatExceptionMessage(TPrivate key) {
449-
return CommonConstants.HEADER_ID + " = " + getCompasICDHeader(key).map(TCompasICDHeader::getHeaderId).orElse(null) +
450-
CommonConstants.HEADER_VERSION + " = " + getCompasICDHeader(key).map(TCompasICDHeader::getHeaderVersion).orElse(null) +
451-
CommonConstants.HEADER_REVISION + " = " + getCompasICDHeader(key).map(TCompasICDHeader::getHeaderRevision).orElse(null) +
452-
"and " + ICD_SYSTEM_VERSION_UUID + " = " + getCompasICDHeader(key).map(TCompasICDHeader::getICDSystemVersionUUID).orElse(null);
449+
return CommonConstants.HEADER_ID + " = " + getCompasICDHeaderValue(key).map(TCompasICDHeader::getHeaderId).orElse(null) +
450+
CommonConstants.HEADER_VERSION + " = " + getCompasICDHeaderValue(key).map(TCompasICDHeader::getHeaderVersion).orElse(null) +
451+
CommonConstants.HEADER_REVISION + " = " + getCompasICDHeaderValue(key).map(TCompasICDHeader::getHeaderRevision).orElse(null) +
452+
"and " + ICD_SYSTEM_VERSION_UUID + " = " + getCompasICDHeaderValue(key).map(TCompasICDHeader::getICDSystemVersionUUID).orElse(null);
453453
}
454454

455455
private static Map<String, TPrivate> createMapIEDNameAndPrivate(SclRootAdapter scdRootAdapter) {
@@ -460,14 +460,14 @@ private static Map<String, TPrivate> createMapIEDNameAndPrivate(SclRootAdapter s
460460
.map(TLNode::getPrivate).flatMap(Collection::stream)
461461
.filter(tPrivate ->
462462
tPrivate.getType().equals(CommonConstants.COMPAS_ICDHEADER)
463-
&& getCompasICDHeader(tPrivate).isPresent() && getCompasICDHeader(tPrivate).get().getIEDName() != null)
464-
.collect(Collectors.toMap(tPrivate -> getCompasICDHeader(tPrivate).get().getIEDName(), Function.identity()));
463+
&& getCompasICDHeader(tPrivate).isPresent() && getCompasICDHeaderValue(tPrivate).get().getIEDName() != null)
464+
.collect(Collectors.toMap(tPrivate -> getCompasICDHeaderValue(tPrivate).get().getIEDName(), Function.identity()));
465465
}
466466

467467
private static Map<String, Pair<TPrivate, List<SCL>>> createMapICDSystemVersionUuidAndSTDFile(Set<SCL> stds) {
468468
Map<String, Pair<TPrivate, List<SCL>>> stringSCLMap = new HashMap<>();
469469
stds.forEach(std -> std.getIED().forEach(ied -> ied.getPrivate().forEach(tp -> {
470-
getCompasICDHeader(tp).map(TCompasICDHeader::getICDSystemVersionUUID).ifPresent(icdSysVer -> {
470+
getCompasICDHeaderValue(tp).map(TCompasICDHeader::getICDSystemVersionUUID).ifPresent(icdSysVer -> {
471471
Pair<TPrivate, List<SCL>> pair = stringSCLMap.get(icdSysVer);
472472
List<SCL> list = pair != null ? pair.getRight() : new ArrayList<>();
473473
list.add(std);
@@ -478,9 +478,9 @@ private static Map<String, Pair<TPrivate, List<SCL>>> createMapICDSystemVersionU
478478
}
479479

480480
private static boolean comparePrivateCompasICDHeaders(TPrivate iedPrivate, TPrivate scdPrivate) throws ScdException {
481-
TCompasICDHeader iedCompasICDHeader = getCompasICDHeader(iedPrivate).orElseThrow(
481+
TCompasICDHeader iedCompasICDHeader = getCompasICDHeaderValue(iedPrivate).orElseThrow(
482482
() -> new ScdException(CommonConstants.COMPAS_ICDHEADER + "not found in IED Private "));
483-
TCompasICDHeader scdCompasICDHeader = getCompasICDHeader(scdPrivate).orElseThrow(
483+
TCompasICDHeader scdCompasICDHeader = getCompasICDHeaderValue(scdPrivate).orElseThrow(
484484
() -> new ScdException(CommonConstants.COMPAS_ICDHEADER + "not found in LNode Private "));
485485
return iedCompasICDHeader.getIEDType().equals(scdCompasICDHeader.getIEDType())
486486
&& iedCompasICDHeader.getICDSystemVersionUUID().equals(scdCompasICDHeader.getICDSystemVersionUUID())
@@ -495,20 +495,21 @@ private static boolean comparePrivateCompasICDHeaders(TPrivate iedPrivate, TPriv
495495
}
496496

497497
private static void copyCompasICDHeaderFromLNodePrivateIntoSTDPrivate(TPrivate stdPrivate, TPrivate lNodePrivate) throws ScdException {
498-
TCompasICDHeader lNodeCompasICDHeader = getCompasICDHeader(lNodePrivate).orElseThrow(
498+
JAXBElement<TCompasICDHeader> lNodeCompasICDHeader = getCompasICDHeader(lNodePrivate).orElseThrow(
499499
() -> new ScdException(CommonConstants.COMPAS_ICDHEADER + "not found in LNode Private "));
500500
stdPrivate.getContent().clear();
501501
stdPrivate.getContent().add(lNodeCompasICDHeader);
502-
503502
}
504503

505-
private static Optional<TCompasICDHeader> getCompasICDHeader(TPrivate tPrivate) {
506-
Optional<JAXBElement<TCompasICDHeader>> tCompasICDHeader = !tPrivate.getType().equals(CommonConstants.COMPAS_ICDHEADER) ? Optional.empty() :
504+
private static Optional<JAXBElement<TCompasICDHeader>> getCompasICDHeader(TPrivate tPrivate) {
505+
return !tPrivate.getType().equals(CommonConstants.COMPAS_ICDHEADER) ? Optional.empty() :
507506
tPrivate.getContent().stream()
508507
.filter(JAXBElement.class::isInstance)
509508
.map(o -> (JAXBElement<TCompasICDHeader>) o)
510509
.findFirst();
511-
return tCompasICDHeader.map(JAXBElement::getValue);
510+
}
511+
private static Optional<TCompasICDHeader> getCompasICDHeaderValue(TPrivate tPrivate) {
512+
return getCompasICDHeader(tPrivate).map(JAXBElement::getValue);
512513
}
513514

514515
public static void removeAllControlBlocksAndDatasetsAndExtRefSrcBindings(final SCL scl) {

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
import org.lfenergy.compas.scl2007b4.model.SCL;
1010
import org.lfenergy.compas.scl2007b4.model.TPrivate;
1111
import org.lfenergy.compas.sct.commons.exception.ScdException;
12-
import org.lfenergy.compas.sct.commons.testhelpers.MarshallerWrapper;
1312
import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller;
1413

1514
import java.util.concurrent.atomic.AtomicReference;
1615

1716
import static org.junit.jupiter.api.Assertions.*;
17+
import static org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller.assertIsMarshallable;
1818

1919
@Slf4j
2020
class SclRootAdapterTest {
@@ -34,6 +34,7 @@ void testConstruction() {
3434
assertEquals(SclRootAdapter.RELEASE,sclRootAdapter.get().getSclRelease());
3535
assertEquals(SclRootAdapter.VERSION,sclRootAdapter.get().getSclVersion());
3636
assertEquals(SclRootAdapter.REVISION,sclRootAdapter.get().getSclRevision());
37+
assertIsMarshallable(sclRootAdapter.get().getCurrentElem());
3738

3839
assertThrows(IllegalArgumentException.class, () -> new SclRootAdapter(new SCL()));
3940
}
@@ -50,10 +51,7 @@ void addIED() throws Exception {
5051
assertDoesNotThrow(() -> sclRootAdapter.addIED(icd1, "IED_NAME1"));
5152
assertThrows(ScdException.class, () -> sclRootAdapter.addIED(icd1, "IED_NAME1"));
5253
assertDoesNotThrow(() -> sclRootAdapter.addIED(icd2, "IED_NAME2"));
53-
54-
MarshallerWrapper marshallerWrapper = SclTestMarshaller.createWrapper();
55-
System.out.println(marshallerWrapper.marshall(sclRootAdapter.getCurrentElem()));
56-
54+
assertIsMarshallable(scd);
5755
}
5856

5957
@Test
@@ -66,5 +64,6 @@ void addPrivate() throws Exception {
6664
assertTrue(sclRootAdapter.getCurrentElem().getPrivate().isEmpty());
6765
sclRootAdapter.addPrivate(tPrivate);
6866
assertEquals(1, sclRootAdapter.getCurrentElem().getPrivate().size());
67+
assertIsMarshallable(scd);
6968
}
70-
}
69+
}

0 commit comments

Comments
 (0)