From e8c397f7d91b33154c05ea6ab1491f478cd12498 Mon Sep 17 00:00:00 2001 From: Samir Romdhani Date: Wed, 28 Feb 2024 18:58:21 +0100 Subject: [PATCH] WIP Signed-off-by: Samir Romdhani --- .../compas/sct/commons/LnService.java | 83 ++++-------- .../compas/sct/commons/LnServiceTest.java | 120 ++++++++++++++++-- .../ied-test-schema-conf/ied_unit_test.xml | 2 +- 3 files changed, 137 insertions(+), 68 deletions(-) diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LnService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LnService.java index c8df7be6b..30b31add3 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LnService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LnService.java @@ -132,7 +132,6 @@ public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DataAttributeRef dataA @Override public List getDOAndDAInstances(TAnyLN tAnyLN, DataAttributeRef dataAttributeRef) { List sclReportItems = new ArrayList<>(); - log.info(":: start ::"); return tAnyLN.getDOI().stream().filter(doi -> dataAttributeRef.getDoName().getName().equals(doi.getName())) .findFirst() .map(doi -> { @@ -157,7 +156,6 @@ public List getDOAndDAInstances(TAnyLN tAnyLN, DataAttributeRef d .filter(dai -> dai.getName().equals(structNamesList.get(0))) .findFirst(); if(tdai.isPresent()){ - log.info(":: DAI FOUND struct case ::"); checkAndCompleteDataAttribute(tdai.get(), dataAttributeRef.getDaName()); return sclReportItems; } @@ -188,7 +186,6 @@ public List getDOAndDAInstances(TAnyLN tAnyLN, DataAttributeRef d .filter(dai -> dai.getName().equals(structNamesList.get(0))) .findFirst(); if(tdai.isPresent()){ - log.info(":: DAI FOUND sample case ::"); checkAndCompleteDataAttribute(tdai.get(), dataAttributeRef.getDaName()); } else { log.warn("Missing DAI.name=({}) not found in DOI.name=({})", structNamesList.get(0), doi.getName()); @@ -214,14 +211,12 @@ private void checkAndCompleteDataAttribute(TDAI tdai, DaTypeName daTypeName) { boolean isGroup = hasSgGroup(tdai); if (isGroup) { daTypeName.setValImport((!tdai.isSetValImport() || tdai.isValImport()) - // && iedHasConfSG() + //TODO && iedHasConfSG() ); } else { daTypeName.setValImport(false); + //TODO log.warn("Inconsistency in the SCD file - DAI ?? with fc=?? must have a sGroup attribute"); -// log.warn("Inconsistency in the SCD file - DAI {} with fc={} must have a sGroup attribute", -// dataAttributeRef.getObjRef(getParentIed().getName(), parentAdapter.getInst()), -// dataAttributeRef.getDaName().getFc()); } } else if (tdai.isSetValImport()) { daTypeName.setValImport(tdai.isValImport()); @@ -265,65 +260,43 @@ private TSDI findSDIByStructName(TSDI tsdi, List structNames) { .orElse(tsdi); } - private TSDI findOrCreateSDIByStructName(TSDI tsdi, List structNames) { - structNames.remove(0); - if(structNames.isEmpty() || structNames.size() == 1) return tsdi; - return findOrCreateSDIByStructName(findOrCreateSDIFromSDI(tsdi, structNames.get(0)), structNames); - } - private Optional createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DoTypeName doTypeName, DaTypeName daTypeName) { - LinkedList structNamesList = new LinkedList<>(); - structNamesList.addLast(doTypeName.getName()); - doTypeName.getStructNames().forEach(structNamesList::addLast); - structNamesList.addLast(daTypeName.getName()); - daTypeName.getStructNames().forEach(structNamesList::addLast); - - String doiName = structNamesList.remove(); - TDOI doi = tAnyLN.getDOI().stream().filter(tdoi -> tdoi.getName().equals(doiName)) + LinkedList structInstances = new LinkedList<>(doTypeName.getStructNames()); + structInstances.addLast(daTypeName.getName()); + daTypeName.getStructNames().forEach(structInstances::addLast); + TDOI doi = tAnyLN.getDOI().stream().filter(doi1 -> doi1.getName().equals(doTypeName.getName())) .findFirst() .orElseGet(() -> { - TDOI tdoi = new TDOI(); - tdoi.setName(doiName); - tAnyLN.getDOI().add(tdoi); - return tdoi; + TDOI newDOI = new TDOI(); + newDOI.setName(doTypeName.getName()); + return newDOI; }); - if(structNamesList.size() > 1) { - TSDI lastDsi = findOrCreateSDIByStructName(findOrCreateSDIFromDOI(doi, structNamesList.get(0)), structNamesList); - if (structNamesList.size() == 1) { - return Optional.of(findOrCreateDAIFromSDI(lastDsi, structNamesList.get(0))); + if(structInstances.size() > 1){ + TSDI firstSDI = findOrCreateSDIFromDOI(doi, structInstances.getFirst()); + TSDI lastSDI = findOrCreateSDIByStructName(firstSDI, structInstances); + if(structInstances.size() == 1){ + TDAI newDAI = new TDAI(); + newDAI.setName(structInstances.getFirst()); + lastSDI.getSDIOrDAI().add(newDAI); + tAnyLN.getDOI().add(doi); + return Optional.of(newDAI); } - } - else if(structNamesList.size() == 1){ - return Optional.of(doi.getSDIOrDAI().stream() - .filter(dai -> dai.getClass().equals(TDAI.class)) - .map(TDAI.class::cast) - .filter(tdai -> tdai.getName().equals(structNamesList.get(0))) - .findFirst() - .orElseGet(() -> { - TDAI tdai = new TDAI(); - tdai.setName(structNamesList.get(0)); - doi.getSDIOrDAI().add(tdai); - return tdai; - })); + } else if(structInstances.size() == 1){ + TDAI newDAI = new TDAI(); + newDAI.setName(structInstances.getFirst()); + doi.getSDIOrDAI().add(newDAI); + tAnyLN.getDOI().add(doi); + return Optional.of(newDAI); } return Optional.empty(); } - private TDAI findOrCreateDAIFromSDI(TSDI sdi, String daiName) { - return sdi.getSDIOrDAI().stream() - .filter(unNaming -> unNaming.getClass().equals(TDAI.class)) - .map(TDAI.class::cast) - .filter(tdai -> tdai.getName().equals(daiName)) - .findFirst() - .orElseGet(() -> { - TDAI tdai = new TDAI(); - tdai.setName(daiName); - sdi.getSDIOrDAI().add(tdai); - return tdai; - }); + private TSDI findOrCreateSDIByStructName(TSDI tsdi, LinkedList structNames) { + structNames.remove(); + if(structNames.isEmpty() || structNames.size() == 1) return tsdi; + return findOrCreateSDIByStructName(findOrCreateSDIFromSDI(tsdi, structNames.getFirst()), structNames); } - private TSDI findOrCreateSDIFromDOI(TDOI doi, String sdiName) { return doi.getSDIOrDAI().stream() .filter(sdi -> sdi.getClass().equals(TSDI.class)) diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LnServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LnServiceTest.java index 0e31507e9..4d430666f 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LnServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LnServiceTest.java @@ -5,6 +5,7 @@ package org.lfenergy.compas.sct.commons; import org.assertj.core.groups.Tuple; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.dto.DaTypeName; @@ -14,11 +15,11 @@ import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller; import org.lfenergy.compas.sct.commons.util.ActiveStatus; +import java.util.LinkedList; import java.util.List; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatCode; import static org.lfenergy.compas.sct.commons.testhelpers.DataTypeUtils.*; class LnServiceTest { @@ -131,17 +132,45 @@ void isDOAndDAInstanceExists_should_return_false_when_DO_and_DA_instances_not_ex assertThat(exist).isFalse(); } + @Test + void getDOAndDAInstances_should_return_when_ADF() { + //Given + TAnyLN tAnyLN = initDOAndDAInstances( + new LinkedList<>(List.of("Do","sdo1", "d")), + new LinkedList<>(List.of("antRef","bda1", "bda2", "bda3")) + ); + DoTypeName doTypeName = new DoTypeName("Do.sdo1.d"); + doTypeName.setCdc(TPredefinedCDCEnum.WYE); + DaTypeName daTypeName = new DaTypeName("antRef.bda1.bda2.bda3"); + daTypeName.setFc(TFCEnum.ST); + daTypeName.setBType(TPredefinedBasicTypeEnum.ENUM); + daTypeName.setValImport(true); - private TAnyLN initDOAndDAInstances(List doInstances, List daInstances){ - TLN0 tln0 = new TLN0(); -// TDOI -// tln0.getDOI().add() -// doInstances.g - return tln0; + DataAttributeRef dataAttributeRef = new DataAttributeRef(); + dataAttributeRef.setDoName(doTypeName); + dataAttributeRef.setDaName(daTypeName); + //When + LnService lnService = new LnService(); + List sclReportItems = lnService.getDOAndDAInstances(tAnyLN, dataAttributeRef); + //Then + assertThat(sclReportItems).isEmpty(); + assertThat(dataAttributeRef.getDoRef()).isEqualTo("Do.sdo1.d"); + assertThat(dataAttributeRef.getDaRef()).isEqualTo("antRef.bda1.bda2.bda3"); + assertThat(dataAttributeRef.getDaName().isValImport()).isEqualTo(false); + assertThat(dataAttributeRef.getDaName().isUpdatable()).isEqualTo(false); + assertThat(dataAttributeRef.getDoName()) + .usingRecursiveComparison() + .isEqualTo(doTypeName); + assertThat(dataAttributeRef.getDaName()) + .usingRecursiveComparison() + .ignoringFields("valImport","daiValues") + .isEqualTo(daTypeName); } + @Test - void getDOAndDAInstances_should_return_when_ADF() { + @Disabled + void getDOAndDAInstances_should_return_when_data_from_xml_file_to_remove() { //Given SCL scd = SclTestMarshaller.getSCLFromFile("/ied-test-schema-conf/ied_unit_test.xml"); TAnyLN tAnyLN = scd.getIED().stream() @@ -168,15 +197,13 @@ void getDOAndDAInstances_should_return_when_ADF() { assertThat(daTypeName.isUpdatable()).isEqualTo(true); //When LnService lnService = new LnService(); -// assertThatCode(() -> lnService.getDOAndDAInstances(tAnyLN, dataAttributeRef)) -// .doesNotThrowAnyException(); List sclReportItems = lnService.getDOAndDAInstances(tAnyLN, dataAttributeRef); //Then assertThat(sclReportItems).isEmpty(); assertThat(dataAttributeRef.getDoRef()).isEqualTo("Do.sdo1.d"); assertThat(dataAttributeRef.getDaRef()).isEqualTo("antRef.bda1.bda2.bda3"); - assertThat(dataAttributeRef.getDaName().isValImport()).isEqualTo(false); - assertThat(dataAttributeRef.getDaName().isUpdatable()).isEqualTo(false); + assertThat(dataAttributeRef.getDaName().isValImport()).isEqualTo(true); + assertThat(dataAttributeRef.getDaName().isUpdatable()).isEqualTo(true); assertThat(dataAttributeRef.getDoName()) .usingRecursiveComparison() .isEqualTo(doTypeName); @@ -251,4 +278,73 @@ void updateOrCreateDoObjectsAndDataAttributesInstances_should_create_given_DO_an } + + + + + + private TSDI createSDIFromDOI(TDOI doi, String sdiName) { + return doi.getSDIOrDAI().stream() + .filter(sdi -> sdi.getClass().equals(TSDI.class)) + .map(TSDI.class::cast) + .filter(tsdi -> tsdi.getName().equals(sdiName)) + .findFirst() + .orElseGet(() -> { + TSDI tsdi = new TSDI(); + tsdi.setName(sdiName); + doi.getSDIOrDAI().add(tsdi); + return tsdi; + }); + } + + private TSDI createSDIFromSDI(TSDI sdi, String sdiName) { + return sdi.getSDIOrDAI().stream() + .filter(unNaming -> unNaming.getClass().equals(TSDI.class)) + .map(TSDI.class::cast) + .filter(tsdi -> tsdi.getName().equals(sdiName)) + .findFirst() + .orElseGet(() -> { + TSDI tsdi = new TSDI(); + tsdi.setName(sdiName); + sdi.getSDIOrDAI().add(tsdi); + return tsdi; + }); + } + + private TSDI createSDIByStructName(TSDI tsdi, LinkedList structNames) { + structNames.remove(); + if(structNames.isEmpty() || structNames.size() == 1) return tsdi; + return createSDIByStructName(createSDIFromSDI(tsdi, structNames.getFirst()), structNames); + } + + private TAnyLN initDOAndDAInstances(LinkedList doInstances, LinkedList daInstances){ + assertThat(doInstances.size()).isGreaterThanOrEqualTo(1); + assertThat(daInstances.size()).isGreaterThanOrEqualTo(1); + LinkedList structInstances = new LinkedList<>(doInstances); + daInstances.forEach(structInstances::addLast); + TLN0 tln0 = new TLN0(); + TDOI tdoi = new TDOI(); + tdoi.setName(doInstances.get(0)); + structInstances.remove(); + if(structInstances.size() > 1){ + TSDI firstSDI = createSDIFromDOI(tdoi, structInstances.get(0)); + TSDI lastSDI = createSDIByStructName(firstSDI, structInstances); + if(structInstances.size() == 1){ + TDAI dai = new TDAI(); + dai.setName(daInstances.get(daInstances.size() - 1)); + dai.setValImport(false); + lastSDI.getSDIOrDAI().add(dai); + } + } else + if(structInstances.size() == 1){ + TDAI dai = new TDAI(); + dai.setName(daInstances.get(daInstances.size() - 1)); + dai.setValImport(false); + tdoi.getSDIOrDAI().add(dai); + } + tln0.getDOI().add(tdoi); + return tln0; + } + + } \ No newline at end of file diff --git a/sct-commons/src/test/resources/ied-test-schema-conf/ied_unit_test.xml b/sct-commons/src/test/resources/ied-test-schema-conf/ied_unit_test.xml index 6e07eb5c8..212d76299 100644 --- a/sct-commons/src/test/resources/ied-test-schema-conf/ied_unit_test.xml +++ b/sct-commons/src/test/resources/ied-test-schema-conf/ied_unit_test.xml @@ -17,7 +17,7 @@ - + Completed-diff