From eecbfb90baf9395ddee63c7db276344e8baacd1a Mon Sep 17 00:00:00 2001 From: massifben <105049157+massifben@users.noreply.github.com> Date: Tue, 21 Jan 2025 17:55:48 +0100 Subject: [PATCH 1/6] Revert "fix(#449): fix test in LNodeStatusServiceTest" This reverts commit 5e6b65b02a84cf25062661c28434063392168c37. Signed-off-by: massifben <105049157+massifben@users.noreply.github.com> --- .../sct/commons/LNodeStatusServiceTest.java | 22 +++----- .../resources/scl-lnodestatus/lnodestatus.scd | 54 +++---------------- 2 files changed, 15 insertions(+), 61 deletions(-) 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 505431be5..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 @@ -48,20 +48,14 @@ void updateLnStatusBasedOnPrivateLNodeStatus_should_update_Mod_stVal(String ldIn public static Stream provideUpdateModStVal() { return Stream.of( - // Tests on LN - Arguments.of(named("LN 'on;off' to set to 'on'", "LDEVICE_1"), "PDIS", "1", "on"), - Arguments.of(named("LN 'off;on' to set to 'on'", "LDEVICE_1"), "PDIS", "2", "on"), - Arguments.of(named("LN 'on' to set to 'on'", "LDEVICE_1"), "PDIS", "3", "on"), - Arguments.of(named("LN 'on;off' to set to 'off'", "LDEVICE_1"), "PDIS", "4", "off"), - Arguments.of(named("LN 'off;on' to set to 'off'", "LDEVICE_1"), "PDIS", "5", "off"), - Arguments.of(named("LN 'off' to set to 'off'", "LDEVICE_1"), "PDIS", "6", "off"), - // Tests on LN0 - Arguments.of(named("LN0 'on;off' to set to 'on'", "LDEVICE_1"), "LLN0", "", "on"), - Arguments.of(named("LN0 'off;on' to set to 'on'", "LDEVICE_2"), "LLN0", "", "on"), - Arguments.of(named("LN0 'on' to set to 'on'", "LDEVICE_3"), "LLN0", "", "on"), - Arguments.of(named("LN0 'on;off' to set to 'off'", "LDEVICE_4"), "LLN0", "", "off"), - Arguments.of(named("LN0 'off;on' to set to 'off'", "LDEVICE_5"), "LLN0", "", "off"), - Arguments.of(named("LN0 'off' to set to 'off'", "LDEVICE_6"), "LLN0", "", "off") + Arguments.of(named("LN 'on' à mettre à 'on'", "LDEVICE_1"), "PDIS", "1", "on"), + Arguments.of(named("LN 'off;on' à mettre à 'on'", "LDEVICE_1"), "PDIS", "2", "on"), + Arguments.of(named("LN 'off' à mettre à 'off'", "LDEVICE_1"), "PDIS", "3", "off"), + Arguments.of(named("LN 'off;on' à mettre à 'off'", "LDEVICE_1"), "PDIS", "3", "off"), + Arguments.of(named("LN0 'on' à mettre à 'on'", "LDEVICE_1"), "LLN0", "", "on"), + Arguments.of(named("LN0 'off;on' à mettre à 'on'", "LDEVICE_2"), "LLN0", "", "on"), + Arguments.of(named("LN0 'off' à mettre à 'off'", "LDEVICE_3"), "LLN0", "", "off"), + Arguments.of(named("LN0 'off;on' à mettre à 'off'", "LDEVICE_4"), "LLN0", "", "off") ); } diff --git a/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus.scd b/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus.scd index 6ff6a8e6f..120833d95 100644 --- a/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus.scd +++ b/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus.scd @@ -20,15 +20,9 @@ on - on - - off - - off - - + off @@ -40,15 +34,9 @@ on - on - - - off - - off - + off @@ -61,7 +49,7 @@ - on;off + on @@ -73,30 +61,18 @@ - off;on - - - - - on - + on;off - - off;on - - - - - + off @@ -104,14 +80,6 @@ - - off;on - - - - - - on @@ -119,7 +87,7 @@ - + on;off @@ -127,15 +95,7 @@ - - - off;on - - - - - - + off From 894d9b1e9bc5c0d3a9b531d24b6de4fd0967453f Mon Sep 17 00:00:00 2001 From: massifben <105049157+massifben@users.noreply.github.com> Date: Tue, 21 Jan 2025 18:01:22 +0100 Subject: [PATCH 2/6] Revert "feat(#447): RSR-1116 - update LN Mod.stVal based on COMPAS-LNodeStatus" This reverts commit b084840428d778337dd31dc6edac3e75811246cb. Signed-off-by: massifben <105049157+massifben@users.noreply.github.com> --- .../sct/commons/DataTypeTemplatesService.java | 82 ++- .../compas/sct/commons/DoTypeService.java | 53 +- .../sct/commons/ExtRefEditorService.java | 5 +- .../sct/commons/LNodeStatusService.java | 103 ---- .../compas/sct/commons/LdeviceService.java | 2 +- .../compas/sct/commons/LnService.java | 86 ++-- .../commons/api/DataTypeTemplateReader.java | 2 +- .../compas/sct/commons/domain/DataObject.java | 13 +- .../sct/commons/domain/DoLinkedToDa.java | 17 +- .../compas/sct/commons/dto/LNodeDTO.java | 14 +- .../compas/sct/commons/scl/ln/LnId.java | 82 --- .../compas/sct/commons/scl/ln/LnKey.java | 37 ++ .../compas/sct/commons/util/PrivateUtils.java | 10 - .../commons/DataTypeTemplatesServiceTest.java | 121 +++-- .../compas/sct/commons/DoTypeServiceTest.java | 37 +- .../sct/commons/LNodeStatusServiceTest.java | 188 ------- .../compas/sct/commons/LnServiceTest.java | 38 +- .../sct/commons/domain/DoLinkedToDaTest.java | 36 +- .../scl/ln/{LnIdTest.java => LnKeyTest.java} | 22 +- .../sct/commons/testhelpers/SclHelper.java | 473 +++++++++--------- .../sct/commons/util/PrivateUtilsTest.java | 14 - .../ied-test-schema-conf/ied_unit_test.xml | 4 +- .../resources/scl-lnodestatus/lnodestatus.scd | 125 ----- .../lnodestatus_without_mod_stval.scd | 101 ---- 24 files changed, 536 insertions(+), 1129 deletions(-) delete mode 100644 sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LNodeStatusService.java delete mode 100644 sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnId.java create mode 100644 sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnKey.java delete mode 100644 sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LNodeStatusServiceTest.java rename sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/{LnIdTest.java => LnKeyTest.java} (62%) delete mode 100644 sct-commons/src/test/resources/scl-lnodestatus/lnodestatus.scd delete mode 100644 sct-commons/src/test/resources/scl-lnodestatus/lnodestatus_without_mod_stval.scd diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesService.java index 3e6c643ab..b72c0b4b2 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesService.java @@ -12,9 +12,7 @@ import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa; import org.lfenergy.compas.sct.commons.domain.DoLinkedToDaFilter; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.function.Predicate; import java.util.stream.Stream; @@ -32,19 +30,18 @@ public class DataTypeTemplatesService implements DataTypeTemplateReader { /** * verify if DO(name=Mod)/DA(name=stVal) exists in DataTypeTemplate - * - * @param dtt TDataTypeTemplates where Data object and Data attribute exists + * @param dtt TDataTypeTemplates where Data object and Data attribute exists * @param lNodeTypeId LNode Type ID where Data object exists - * DataTypeTemplates model : - * - * - * - * - * ... - * - * - * - * + * DataTypeTemplates model : + * + * + * + * + * ... + * + * + * + * * @return true if the Data Object (Mod) and Data attribute (stVal) present, false otherwise */ public boolean isDoModAndDaStValExist(TDataTypeTemplates dtt, String lNodeTypeId) { @@ -57,14 +54,16 @@ public boolean isDoModAndDaStValExist(TDataTypeTemplates dtt, String lNodeTypeId @Override public Stream getAllDoLinkedToDa(TDataTypeTemplates dtt) { - return lnodeTypeService.getLnodeTypes(dtt) + return lnodeTypeService.getLnodeTypes(dtt) .flatMap(tlNodeType -> { - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(new DataObject(), new DataAttribute()); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(new DataObject()); + doLinkedToDa.setDataAttribute(new DataAttribute()); return tlNodeType.getDO() .stream() .map(tdo -> doTypeService.findDoType(dtt, tdoType -> tdoType.getId().equals(tdo.getType())) .map(doType -> { - doLinkedToDa.dataObject().setDoName(tdo.getName()); + doLinkedToDa.getDataObject().setDoName(tdo.getName()); return doTypeService.getAllSDOLinkedToDa(dtt, doType, doLinkedToDa).stream(); })) .filter(Optional::isPresent) @@ -79,49 +78,41 @@ public Stream getFilteredDoLinkedToDa(TDataTypeTemplates dtt, Stri .flatMap(tlNodeType -> doService.getFilteredDos(tlNodeType, tdo -> StringUtils.isBlank(doLinkedToDaFilter.doName()) || doLinkedToDaFilter.doName().equals(tdo.getName())) .flatMap(tdo -> { + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName(tdo.getName()); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, new DataAttribute()); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(new DataAttribute()); return doTypeService.findDoType(dtt, tdoType -> tdoType.getId().equals(tdo.getType())) .stream() .flatMap(tdoType -> { - doLinkedToDa.dataObject().setCdc(tdoType.getCdc()); + doLinkedToDa.getDataObject().setCdc(tdoType.getCdc()); return doTypeService.getAllSDOLinkedToDa(dtt, tdoType, doLinkedToDa).stream() .filter(doLinkedToDa1 -> StringUtils.isBlank(doLinkedToDaFilter.doName()) || (doLinkedToDa1.getDoRef().startsWith(doLinkedToDaFilter.getDoRef()) && StringUtils.isBlank(doLinkedToDaFilter.daName())) || doLinkedToDa1.getDaRef().startsWith(doLinkedToDaFilter.getDaRef())); }); - })); + })); } @Override - public Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDaFilter doLinkedToDaFilter) { - List dataRefList = new ArrayList<>(doLinkedToDaFilter.sdoNames()); - dataRefList.addAll(doLinkedToDaFilter.bdaNames()); + public Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDa doLinkedToDa) { + List dataRefList = new ArrayList<>(doLinkedToDa.getDataObject().getSdoNames()); + dataRefList.addAll(doLinkedToDa.getDataAttribute().getBdaNames()); return lnodeTypeService.findLnodeType(dtt, lNodeType -> lNodeTypeId.equals(lNodeType.getId())) - .flatMap(lNodeType -> doService.findDo(lNodeType, tdo -> tdo.getName().equals(doLinkedToDaFilter.doName())) + .flatMap(lNodeType -> doService.findDo(lNodeType, tdo -> tdo.getName().equals(doLinkedToDa.getDataObject().getDoName())) // Search DoType for each DO .flatMap(tdo -> doTypeService.findDoType(dtt, doType -> doType.getId().equals(tdo.getType())) .flatMap(tdoType -> { // Search last DoType from DOType (SDO) > DOType (SDO) TDOType lastDoType = findDOTypeBySdoName(dtt, tdoType, dataRefList); - // Prepare DataObject - DataObject dataObject = new DataObject(tdo.getName(), tdoType.getCdc(), doLinkedToDaFilter.sdoNames()); // Search first DA from last DoType - return sdoOrDAService.findDA(lastDoType, tda -> tda.getName().equals(doLinkedToDaFilter.daName())) + return sdoOrDAService.findDA(lastDoType, tda1 -> tda1.getName().equals(doLinkedToDa.getDataAttribute().getDaName())) .flatMap(tda -> { - // Prepare DataAttribute - DataAttribute dataAttribute = new DataAttribute(); - dataAttribute.setDaName(tda.getName()); - dataAttribute.setFc(tda.getFc()); // Check if first DA is STRUCT or not - if (!tda.getBType().equals(TPredefinedBasicTypeEnum.STRUCT)) { - dataAttribute.addDaVal(tda.getVal()); - dataAttribute.setBType(tda.getBType()); - dataAttribute.setType(tda.getType()); - dataAttribute.setValImport(tda.isValImport()); - return Optional.of(new DoLinkedToDa(dataObject, dataAttribute)); + if(!tda.getBType().equals(TPredefinedBasicTypeEnum.STRUCT)) { + return Optional.of(doLinkedToDa); } // Search first DaType from DOType (from last DOType where DA is STRUCT) return getDATypeByDaName(dtt, lastDoType, tda.getName()) @@ -131,18 +122,11 @@ public Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lN && tbda.getBType().equals(TPredefinedBasicTypeEnum.STRUCT), dataRefList); // last DAType should contain BDA not STRUCT - if (dataRefList.size() != 1) return Optional.empty(); + if(dataRefList.size() != 1) return Optional.empty(); String lastBdaName = dataRefList.getFirst(); return bdaService.findBDA(lastDAType, tbda -> tbda.getName().equals(lastBdaName) && !tbda.getBType().equals(TPredefinedBasicTypeEnum.STRUCT)) - .flatMap(tbda -> { - dataAttribute.getBdaNames().addAll(doLinkedToDaFilter.bdaNames()); - dataAttribute.setBType(tbda.getBType()); - dataAttribute.setType(tbda.getType()); - dataAttribute.setValImport(tbda.isValImport()); - dataAttribute.addDaVal(tbda.getVal()); - return Optional.of(new DoLinkedToDa(dataObject, dataAttribute)); - }); + .flatMap(tbda -> Optional.of(doLinkedToDa)); }); }); }) @@ -155,7 +139,7 @@ private Optional getDATypeByDaName(TDataTypeTemplates dtt, TDOType tdoT } private TDOType findDOTypeBySdoName(TDataTypeTemplates dtt, TDOType tdoType, List sdoNames) { - if (sdoNames.isEmpty()) return tdoType; + if(sdoNames.isEmpty()) return tdoType; return sdoOrDAService.findSDO(tdoType, tsdo -> tsdo.getName().equals(sdoNames.getFirst())) .flatMap(tsdo -> doTypeService.findDoType(dtt, tdoType2 -> tdoType2.getId().equals(tsdo.getType()))) .map(tdoType2 -> { @@ -165,7 +149,7 @@ private TDOType findDOTypeBySdoName(TDataTypeTemplates dtt, TDOType tdoType, Lis } private TDAType findDATypeByBdaName(TDataTypeTemplates dtt, TDAType tdaType, Predicate tbdaPredicate, List bdaNames) { - if (bdaNames.isEmpty()) return tdaType; + if(bdaNames.isEmpty()) return tdaType; return bdaService.getFilteredBDAs(tdaType, tbdaPredicate) .findFirst() .flatMap(tbda -> daTypeService.findDaType(dtt, tbda.getType())) diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DoTypeService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DoTypeService.java index 5b53aa546..17cf62278 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DoTypeService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DoTypeService.java @@ -16,9 +16,9 @@ public class DoTypeService { - final DaTypeService daTypeService = new DaTypeService(); - final SDOOrDAService sdoOrDAService = new SDOOrDAService(); - final BDAService bdaService = new BDAService(); + final DaTypeService daTypeService = new DaTypeService(); + final SDOOrDAService sdoOrDAService = new SDOOrDAService(); + final BDAService bdaService = new BDAService(); public Stream getDoTypes(TDataTypeTemplates tDataTypeTemplates) { return tDataTypeTemplates.getDOType().stream(); @@ -37,54 +37,53 @@ public List getAllSDOLinkedToDa(TDataTypeTemplates dtt, TDOType td // DA -> BDA -> BDA.. sdoOrDAService.getDAs(tdoType).forEach(tda -> { DoLinkedToDa doLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate); - doLinkedToDa.dataAttribute().setDaName(tda.getName()); - if (tda.isSetFc()) { - doLinkedToDa.dataAttribute().setFc(tda.getFc()); + doLinkedToDa.getDataAttribute().setDaName(tda.getName()); + if(tda.isSetFc()) { + doLinkedToDa.getDataAttribute().setFc(tda.getFc()); } // STRUCT type (BType=STRUCT) refer to BDA, otherwise it is DA - if (TPredefinedBasicTypeEnum.STRUCT.equals(tda.getBType())) { + if(TPredefinedBasicTypeEnum.STRUCT.equals(tda.getBType())) { daTypeService.findDaType(dtt, tda.getType()) .ifPresent(nextDaType -> result.addAll(getDaLinkedToBDA(dtt, nextDaType, doLinkedToDa).toList())); } else { - DataAttribute dataAttribute = updateDataAttributeFromDaOrBda(tda, doLinkedToDa.dataAttribute()); - result.add(new DoLinkedToDa(doLinkedToDa.dataObject(), dataAttribute)); + doLinkedToDa.setDataAttribute(updateDataAttributeFromDaOrBda(tda, doLinkedToDa.getDataAttribute())); + result.add(doLinkedToDa); } }); // SDO -> SDO -> SDO.. sdoOrDAService.getSDOs(tdoType) .forEach(tsdo -> { - if (tsdo.isSetType()) { - findDoType(dtt, tdoType1 -> tdoType1.getId().equals(tsdo.getType())) - .ifPresent(nextDoType -> { - DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate); - newDoLinkedToDa.dataObject().getSdoNames().add(tsdo.getName()); - if (nextDoType.isSetCdc()) { - newDoLinkedToDa.dataObject().setCdc(nextDoType.getCdc()); - } - result.addAll(getAllSDOLinkedToDa(dtt, nextDoType, newDoLinkedToDa)); - }); + if(tsdo.isSetType()){ + findDoType(dtt, tdoType1 -> tdoType1.getId().equals(tsdo.getType())) + .ifPresent(nextDoType -> { + DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate); + newDoLinkedToDa.getDataObject().getSdoNames().add(tsdo.getName()); + if(nextDoType.isSetCdc()) { + newDoLinkedToDa.getDataObject().setCdc(nextDoType.getCdc()); + } + result.addAll(getAllSDOLinkedToDa(dtt, nextDoType, newDoLinkedToDa)); + }); } }); return result; } - private Stream getDaLinkedToBDA(TDataTypeTemplates dtt, TDAType tdaType1, DoLinkedToDa doLinkedToDaTemplate) { // BDA -> BDA -> BDA.. return bdaService.getBDAs(tdaType1) .flatMap(tbda -> { DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate); - newDoLinkedToDa.dataAttribute().getBdaNames().add(tbda.getName()); + newDoLinkedToDa.getDataAttribute().getBdaNames().add(tbda.getName()); // STRUCT type (BType=STRUCT) refer to complex BDA object, otherwise it is kind of DA object - if (TPredefinedBasicTypeEnum.STRUCT.equals(tbda.getBType())) { - return daTypeService.findDaType(dtt, tbda.getType()) + if(TPredefinedBasicTypeEnum.STRUCT.equals(tbda.getBType())){ + return daTypeService.findDaType(dtt, tbda.getType()) .stream().flatMap(nextDaType -> getDaLinkedToBDA(dtt, nextDaType, newDoLinkedToDa)); } else { - DataAttribute dataAttribute = updateDataAttributeFromDaOrBda(tbda, newDoLinkedToDa.dataAttribute()); - return Stream.of(new DoLinkedToDa(newDoLinkedToDa.dataObject(), dataAttribute)); + newDoLinkedToDa.setDataAttribute(updateDataAttributeFromDaOrBda(tbda, newDoLinkedToDa.getDataAttribute())); + return Stream.of(newDoLinkedToDa); } - }); + }); } private DataAttribute updateDataAttributeFromDaOrBda(TAbstractDataAttribute daOrBda, DataAttribute dataAttribute) { @@ -95,4 +94,4 @@ private DataAttribute updateDataAttributeFromDaOrBda(TAbstractDataAttribute daOr return dataAttribute; } -} +} \ No newline at end of file diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java index e9ddd2e92..221b133f5 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java @@ -307,12 +307,15 @@ public void epfPostProcessing(SCL scd) { && (purPoseDAI.get().getVal().getFirst().getValue().startsWith("DYN_LDEPF_DIGITAL CHANNEL") || purPoseDAI.get().getVal().getFirst().getValue().startsWith("DYN_LDEPF_ANALOG CHANNEL")); if(isSetSrcRefExistAndEmpty && isPurposeExistAndMatchChannel) { + + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName(tdoi.getName()); + doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName(SETSRCREF_DA_NAME); dataAttribute.setDaiValues(List.of(new DaVal(null, tied.getName()+tlDevice.getInst()+"/LPHD0.Proxy"))); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + doLinkedToDa.setDataAttribute(dataAttribute); lnEditor.updateOrCreateDOAndDAInstances(tlDevice.getLN0(), doLinkedToDa); } }))); 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 deleted file mode 100644 index af902ca3a..000000000 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LNodeStatusService.java +++ /dev/null @@ -1,103 +0,0 @@ -// SPDX-FileCopyrightText: 2024 RTE FRANCE -// -// SPDX-License-Identifier: Apache-2.0 - -package org.lfenergy.compas.sct.commons; - -import lombok.RequiredArgsConstructor; -import org.lfenergy.compas.scl2007b4.model.*; -import org.lfenergy.compas.sct.commons.domain.DataAttribute; -import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa; -import org.lfenergy.compas.sct.commons.domain.DoLinkedToDaFilter; -import org.lfenergy.compas.sct.commons.dto.SclReportItem; -import org.lfenergy.compas.sct.commons.util.CommonConstants; -import org.lfenergy.compas.sct.commons.util.PrivateUtils; -import org.lfenergy.compas.sct.commons.util.SclConstructorHelper; - -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Stream; - -@RequiredArgsConstructor -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; - - public List updateLnModStValBasedOnLNodeStatus(SCL scl) { - return scl.getSubstation().stream() - .flatMap(tSubstation -> tSubstation.getVoltageLevel().stream()) - .flatMap(tVoltageLevel -> tVoltageLevel.getBay().stream()) - .flatMap(tBay -> tBay.getFunction().stream()) - .flatMap(tFunction -> tFunction.getLNode().stream()) - .map(tlNode -> updateSingleLnModStValBasedOnLNodeStatus(scl, tlNode)) - .filter(Objects::nonNull) - .toList(); - } - - private SclReportItem updateSingleLnModStValBasedOnLNodeStatus(SCL scl, TLNode tlNode) { - String lNodeLNS = PrivateUtils.extractStringPrivate(tlNode, LNODE_STATUS_PRIVATE_TYPE).orElse(null); - 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); - if (anyLn == null) { - 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 || !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)); - } - TDAI daiModStVal = lnService.getDaiModStVal(anyLn).orElse(null); - if (daiModStVal == null) { - return null; // do nothing if DAI Mod.stVal is missing - } - List modStValEnumValues = getModStValEnumValues(scl.getDataTypeTemplates(), anyLn.getLnType()).toList(); - if (!modStValEnumValues.contains(lNodeLNS)) { - return SclReportItem.error(lnPath(tlNode), "Cannot set DAI Mod.stVal to '%s' because value is not in EnumType %s".formatted(lNodeLNS, modStValEnumValues)); - } - daiModStVal.getVal().clear(); - daiModStVal.getVal().add(SclConstructorHelper.newVal(lNodeLNS)); - return null; // no error - } - - private static String lnPath(TLNode tlNode) { - return "IED(%s)/LD(%s)/LN[%s,%s,%s]".formatted(tlNode.getIedName(), tlNode.getLdInst(), tlNode.getLnClass().getFirst(), tlNode.getLnInst(), tlNode.getPrefix()); - } - - private static String lNodePath(TLNode tlNode) { - return "LNode(iedName=%s, ldInst=%s, lnClass=%s, lnInst=%s, prefix=%s)".formatted(tlNode.getIedName(), tlNode.getLdInst(), tlNode.getLnClass().getFirst(), tlNode.getLnInst(), tlNode.getPrefix()); - } - - private Stream getModStValEnumValues(TDataTypeTemplates dataTypeTemplates, String lnType) { - return dataTypeTemplatesService.findDoLinkedToDa(dataTypeTemplates, lnType, DoLinkedToDaFilter.from(CommonConstants.MOD_DO_NAME, CommonConstants.STVAL_DA_NAME)) - .map(DoLinkedToDa::dataAttribute) - .filter(dataAttribute -> TPredefinedBasicTypeEnum.ENUM.equals(dataAttribute.getBType())) - .map(DataAttribute::getType) - .flatMap(enumId -> - dataTypeTemplates.getEnumType().stream() - .filter(tEnumType -> tEnumType.getId().equals(enumId)) - .findFirst()) - .stream() - .flatMap(tEnumType -> tEnumType.getEnumVal().stream()) - .map(TEnumVal::getValue); - } - - private Optional findLn(SCL scl, String iedName, String ldInst, String lnClass, String lnInst, String prefix) { - return scl.getIED().stream() - .filter(tied -> iedName.equals(tied.getName())) - .findFirst() - .flatMap(tied -> ldeviceService.findLdevice(tied, tlDevice -> ldInst.equals(tlDevice.getInst()))) - .flatMap(tlDevice -> lnService.findAnyLn(tlDevice, tAnyLN -> lnService.matchesLn(tAnyLN, lnClass, lnInst, prefix))); - - } -} diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LdeviceService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LdeviceService.java index f607b0d20..008aad426 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LdeviceService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LdeviceService.java @@ -41,6 +41,6 @@ public Optional findLdevice(TIED tied, Predicate ldevicePred public Optional getLdeviceStatus(TLDevice tlDevice) { LnService lnService = new LnService(); - return lnService.getDaiModStValValue(tlDevice.getLN0()); + return lnService.getDaiModStval(tlDevice.getLN0()); } } 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 50d55c585..2ccad6508 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 @@ -12,6 +12,7 @@ import org.lfenergy.compas.sct.commons.util.ActiveStatus; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.function.Predicate; @@ -59,37 +60,33 @@ public Optional findLn(TLDevice tlDevice, Predicate lnPredicate) { * @return the Lnode Status */ public ActiveStatus getLnStatus(TAnyLN tAnyLN, LN0 ln0) { - Optional ln0Status = getDaiModStValValue(ln0); - return getDaiModStValValue(tAnyLN).filter(ActiveStatus.OFF::equals).orElseGet(() -> ln0Status.orElse(ActiveStatus.OFF)); + Optional ln0Status = getDaiModStval(ln0); + return getDaiModStval(tAnyLN).filter(ActiveStatus.OFF::equals).orElseGet(() -> ln0Status.orElse(ActiveStatus.OFF)); } - public Optional getDaiModStValValue(TAnyLN tAnyLN) { - return getDaiModStVal(tAnyLN) - .stream() - .flatMap(tdai -> tdai.getVal().stream()) - .map(TVal::getValue) - .findFirst() - .map(ActiveStatus::fromValue); - } - - public Optional getDaiModStVal(TAnyLN tAnyLN) { + public Optional getDaiModStval(TAnyLN tAnyLN) { return tAnyLN .getDOI() .stream() .filter(tdoi -> MOD_DO_NAME.equals(tdoi.getName())) - .flatMap(tdoi -> tdoi.getSDIOrDAI().stream()) - .filter(TDAI.class::isInstance) - .map(TDAI.class::cast) - .filter(tdai -> STVAL_DA_NAME.equals(tdai.getName())) - .findFirst(); + .findFirst() + .flatMap(tdoi -> tdoi.getSDIOrDAI() + .stream() + .filter(dai -> dai.getClass().equals(TDAI.class)) + .map(TDAI.class::cast) + .filter(tdai -> STVAL_DA_NAME.equals(tdai.getName())) + .map(TDAI::getVal) + .flatMap(Collection::stream) + .findFirst() + .map(TVal::getValue)) + .map(ActiveStatus::fromValue); } - public Stream getActiveLns(TLDevice tlDevice) { LN0 ln0 = tlDevice.getLN0(); Stream tlnStream = tlDevice.getLN() .stream() .filter(tln -> ActiveStatus.ON.equals(getLnStatus(tln, ln0))); - Stream ln0Stream = Stream.of(ln0).filter(ln02 -> getDaiModStValValue(ln02).map(ActiveStatus.ON::equals).orElse(false)); + Stream ln0Stream = Stream.of(ln0).filter(ln02 -> getDaiModStval(ln02).map(ActiveStatus.ON::equals).orElse(false)); return Stream.concat(ln0Stream, tlnStream); } @@ -102,7 +99,7 @@ public Optional getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLi return tAnyLN.getDOI().stream().filter(doi -> doi.getName().equals(doLinkedToDaFilter.doName())) .findFirst() .flatMap(doi -> { - if (structNamesList.size() > 1) { + if(structNamesList.size() > 1) { String firstSDIName = structNamesList.removeFirst(); return this.getSdiByName(doi, firstSDIName) .map(intermediateSdi -> findSDIByStructName(intermediateSdi, structNamesList)) @@ -119,7 +116,7 @@ public Optional getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLi return Optional.empty(); }) .stream().findFirst(); - } else if (structNamesList.size() == 1) { + } else if(structNamesList.size() == 1){ return doi.getSDIOrDAI().stream() .filter(unNaming -> unNaming.getClass().equals(TDAI.class)) .map(TDAI.class::cast) @@ -132,16 +129,16 @@ public Optional getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLi @Override public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedToDa) { - createDoiSdiDaiChainIfNotExists(tAnyLN, doLinkedToDa.dataObject(), doLinkedToDa.dataAttribute()) + createDoiSdiDaiChainIfNotExists(tAnyLN, doLinkedToDa.getDataObject(), doLinkedToDa.getDataAttribute()) .ifPresent(tdai -> { - List daiVals = doLinkedToDa.dataAttribute().getDaiValues(); - if (!hasSettingGroup(tdai) && daiVals.size() == 1 && daiVals.getFirst().settingGroup() == null) { + List daiVals = doLinkedToDa.getDataAttribute().getDaiValues(); + if(!hasSettingGroup(tdai) && daiVals.size() == 1 && daiVals.getFirst().settingGroup() == null) { String value = daiVals.getFirst().val(); tdai.getVal().stream().findFirst() .ifPresentOrElse(tVal -> tVal.setValue(value), () -> tdai.getVal().add(newVal(value))); } else { - for (DaVal daVal : daiVals) { + for (DaVal daVal: daiVals) { tdai.getVal().stream() .filter(tValElem -> tValElem.isSetSGroup() && tValElem.getSGroup() == daVal.settingGroup()) .findFirst() @@ -155,11 +152,11 @@ public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedT public void completeFromDAInstance(TIED tied, String ldInst, TAnyLN anyLN, DoLinkedToDa doLinkedToDa) { getDOAndDAInstances(anyLN, doLinkedToDa.toFilter()) .ifPresent(tdai -> { - if (tdai.isSetVal()) { - doLinkedToDa.dataAttribute().addDaVal(tdai.getVal()); + if(tdai.isSetVal()) { + doLinkedToDa.getDataAttribute().addDaVal(tdai.getVal()); } - if (doLinkedToDa.dataAttribute().getFc() == TFCEnum.SG || doLinkedToDa.dataAttribute().getFc() == TFCEnum.SE) { - if (hasSettingGroup(tdai)) { + if(doLinkedToDa.getDataAttribute().getFc() == TFCEnum.SG || doLinkedToDa.getDataAttribute().getFc() == TFCEnum.SE) { + if(hasSettingGroup(tdai)) { boolean isIedHasConfSG = tied.isSetAccessPoint() && tied.getAccessPoint().stream() .filter(tAccessPoint -> tAccessPoint.getServer() != null @@ -169,13 +166,13 @@ public void completeFromDAInstance(TIED tied, String ldInst, TAnyLN anyLN, DoLin && tAccessPoint.getServices() != null && tAccessPoint.getServices().getSettingGroups() != null && tAccessPoint.getServices().getSettingGroups().getConfSG() != null); - doLinkedToDa.dataAttribute().setValImport((!tdai.isSetValImport() || tdai.isValImport()) && isIedHasConfSG); + doLinkedToDa.getDataAttribute().setValImport((!tdai.isSetValImport() || tdai.isValImport()) && isIedHasConfSG); } else { - log.warn(String.format("Inconsistency in the SCD file - DAI= %s with fc= %s must have a sGroup attribute", tdai.getName(), doLinkedToDa.dataAttribute().getFc())); - doLinkedToDa.dataAttribute().setValImport(false); - } - } else if (tdai.isSetValImport()) { - doLinkedToDa.dataAttribute().setValImport(tdai.isValImport()); + log.warn(String.format("Inconsistency in the SCD file - DAI= %s with fc= %s must have a sGroup attribute", tdai.getName(), doLinkedToDa.getDataAttribute().getFc())); + doLinkedToDa.getDataAttribute().setValImport(false); + } + } else if(tdai.isSetValImport()) { + doLinkedToDa.getDataAttribute().setValImport(tdai.isValImport()); } }); } @@ -201,22 +198,22 @@ private Optional createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DataObject TDOI doi = tAnyLN.getDOI().stream().filter(doi1 -> doi1.getName().equals(dataObject.getDoName())) .findFirst() - .orElseGet(() -> { + .orElseGet(()-> { TDOI newDOI = new TDOI(); newDOI.setName(dataObject.getDoName()); tAnyLN.getDOI().add(newDOI); return newDOI; }); - if (structInstances.size() > 1) { + if(structInstances.size() > 1){ TSDI firstSDI = findOrCreateSDIFromDOI(doi, structInstances.getFirst()); TSDI lastSDI = findOrCreateSDIByStructName(firstSDI, structInstances); - if (structInstances.size() == 1) { + if(structInstances.size() == 1){ return lastSDI.getSDIOrDAI().stream() .filter(tUnNaming -> tUnNaming.getClass().equals(TDAI.class)) .map(TDAI.class::cast) .filter(tdai -> tdai.getName().equals(structInstances.getFirst())) .map(tdai -> { - if (tdai.isSetValImport()) { + if(tdai.isSetValImport()) { tdai.setValImport(dataAttribute.isValImport()); } return tdai; @@ -229,13 +226,13 @@ private Optional createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DataObject return Optional.of(newDAI); }); } - } else if (structInstances.size() == 1) { + } else if(structInstances.size() == 1){ return doi.getSDIOrDAI().stream() .filter(tUnNaming -> tUnNaming.getClass().equals(TDAI.class)) .map(TDAI.class::cast) .filter(tdai -> tdai.getName().equals(structInstances.getFirst())) .map(tdai -> { - if (tdai.isSetValImport()) tdai.setValImport(dataAttribute.isValImport()); + if(tdai.isSetValImport()) tdai.setValImport(dataAttribute.isValImport()); return tdai; }) .findFirst() @@ -250,7 +247,7 @@ private Optional createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DataObject } private TSDI findSDIByStructName(TSDI tsdi, List sdiNames) { - if (sdiNames.isEmpty()) return tsdi; + if(sdiNames.isEmpty()) return tsdi; return this.getSdiByName(tsdi, sdiNames.getFirst()) .map(sdi1 -> { sdiNames.removeFirst(); @@ -297,13 +294,14 @@ private Optional getSdiByName(TSDI sdi, String sdiName) { } /** - * @param sdi TSDI + * + * @param sdi TSDI * @param structName list start with sdi name * @return already existing TSDI or newly created TSDI from given TSDI */ private TSDI findOrCreateSDIByStructName(TSDI sdi, List structName) { structName.removeFirst(); - if (structName.isEmpty() || structName.size() == 1) return sdi; + if(structName.isEmpty() || structName.size() == 1) return sdi; return findOrCreateSDIByStructName(findOrCreateSDIFromSDI(sdi, structName.getFirst()), structName); } diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/DataTypeTemplateReader.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/DataTypeTemplateReader.java index 572391f71..63640ec7f 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/DataTypeTemplateReader.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/DataTypeTemplateReader.java @@ -19,6 +19,6 @@ public interface DataTypeTemplateReader { Stream getFilteredDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDaFilter doLinkedToDaFilter); - Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDaFilter doLinkedToDaFilter); + Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDa doLinkedToDa); } diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DataObject.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DataObject.java index b18a06820..e8119345b 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DataObject.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DataObject.java @@ -13,21 +13,18 @@ @Getter @Setter -@NoArgsConstructor public class DataObject { private String doName; private TPredefinedCDCEnum cdc; private List sdoNames = new ArrayList<>(); - public DataObject(String doName, TPredefinedCDCEnum cdc, List sdoNames) { - this.doName = doName; - this.cdc = cdc; - this.sdoNames.addAll(sdoNames); - } - public static DataObject copyFrom(DataObject dataObject) { - return new DataObject(dataObject.getDoName(), dataObject.getCdc(), dataObject.getSdoNames()); + DataObject dataObject1 = new DataObject(); + dataObject1.setDoName(dataObject.getDoName()); + dataObject1.setCdc(dataObject.getCdc()); + dataObject1.getSdoNames().addAll(dataObject.getSdoNames()); + return dataObject1; } @Override diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDa.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDa.java index 92e34de9f..7a1d86a48 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDa.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDa.java @@ -5,16 +5,25 @@ package org.lfenergy.compas.sct.commons.domain; +import lombok.Getter; +import lombok.Setter; + import static org.lfenergy.compas.sct.commons.util.CommonConstants.MOD_DO_NAME; import static org.lfenergy.compas.sct.commons.util.CommonConstants.STVAL_DA_NAME; -public record DoLinkedToDa(DataObject dataObject, DataAttribute dataAttribute) { +@Getter +@Setter +public class DoLinkedToDa { + + private DataObject dataObject; + private DataAttribute dataAttribute; public static DoLinkedToDa copyFrom(DoLinkedToDa doLinkedToDa) { - return new DoLinkedToDa( - DataObject.copyFrom(doLinkedToDa.dataObject()), - DataAttribute.copyFrom(doLinkedToDa.dataAttribute())); + DoLinkedToDa newDoLinkedToDa = new DoLinkedToDa(); + newDoLinkedToDa.setDataObject(DataObject.copyFrom(doLinkedToDa.getDataObject())); + newDoLinkedToDa.setDataAttribute(DataAttribute.copyFrom(doLinkedToDa.getDataAttribute())); + return newDoLinkedToDa; } public String getDoRef() { diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/LNodeDTO.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/LNodeDTO.java index 3912eb323..ecc3986cf 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/LNodeDTO.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/LNodeDTO.java @@ -18,7 +18,7 @@ import org.lfenergy.compas.sct.commons.scl.ln.AbstractLNAdapter; import org.lfenergy.compas.sct.commons.scl.ldevice.LDeviceAdapter; import org.lfenergy.compas.sct.commons.scl.ln.LNAdapter; -import org.lfenergy.compas.sct.commons.scl.ln.LnId; +import org.lfenergy.compas.sct.commons.scl.ln.LnKey; import org.lfenergy.compas.sct.commons.util.Utils; import java.util.HashSet; @@ -152,10 +152,14 @@ public static LNodeDTO from(AbstractLNAdapter nodeAdapter, public static LNodeDTO from(TAnyLN tAnyLN, LogicalNodeOptions options, String iedName, String ldInst, SCL scl) { log.info(Utils.entering()); - LnId lnId = LnId.from(tAnyLN); - String inst = lnId.lnInst(); - String lnClass = lnId.lnClass(); - String prefix = lnId.prefix(); + LnKey lnKey = switch (tAnyLN) { + case LN0 ln0 -> new LnKey(ln0); + case TLN tln -> new LnKey(tln); + default -> throw new IllegalStateException("Unexpected value: " + tAnyLN); + }; + String inst = lnKey.getInst(); + String lnClass = lnKey.getLnClass(); + String prefix = lnKey.getPrefix(); String lnType = tAnyLN.getLnType(); LNodeDTO lNodeDTO = new LNodeDTO(inst, lnClass, prefix, lnType); if (options.isWithExtRef()) { diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnId.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnId.java deleted file mode 100644 index af80a0eb3..000000000 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnId.java +++ /dev/null @@ -1,82 +0,0 @@ -// SPDX-FileCopyrightText: 2021 RTE FRANCE -// -// SPDX-License-Identifier: Apache-2.0 -package org.lfenergy.compas.sct.commons.scl.ln; - -import org.apache.commons.lang3.StringUtils; -import org.lfenergy.compas.scl2007b4.model.*; -import org.lfenergy.compas.sct.commons.exception.ScdException; - -import java.util.List; -import java.util.Objects; - -public record LnId(String lnClass, String lnInst, String prefix) { - private static final String LN0_LNCLASS = TLLN0Enum.LLN_0.value(); - - /** - * Id of LN0. All LN0 have the same lnClass, lnInst and prefix in SCD - */ - public static final LnId LN0_ID = new LnId(LN0_LNCLASS, "", ""); - - /** - * Constructor - * - * @param lnClass always required - * @param lnInst optional. It should be empty for LN0, and should be filled for LN. No verification is done because some Lnode GAPC do not have a lninst. - * @param prefix optional. Is set to empty if null because empty is the default value on LN and the majority of the JAXB Element (LN, LNode, FCDA, ClientLN, but not on ExtRef and IEDName unfortunately) - */ - public LnId(String lnClass, String lnInst, String prefix) { - if (StringUtils.isBlank(lnClass)) { - throw new ScdException("lnClass is required"); - } - this.lnClass = lnClass; - this.lnInst = Objects.requireNonNullElse(lnInst, ""); - this.prefix = Objects.requireNonNullElse(prefix, ""); - } - - /** - * Alternative constructor with lnClass as a List instead of a String. - * JAXB classes lnClass attribute are List, even though it can only contain one element. - * This constructor makes it easier to create LnId from JAXB classes - * - * @param lnClass one element list containing the lnClass value of the LN - * @param lnInst LN lnInst - * @param prefix LN prefix - */ - public LnId(List lnClass, String lnInst, String prefix) { - this(lnClass == null || lnClass.isEmpty() ? null : lnClass.getFirst(), lnInst, prefix); - } - - /** - * Extract id from LN element - * - * @param tAnyLN LN element - * @return id - */ - public static LnId from(TAnyLN tAnyLN) { - if (tAnyLN instanceof TLN0) { - return LN0_ID; - } else if (tAnyLN instanceof TLN tln) { - return new LnId(tln.getLnClass(), tln.getInst(), tln.getPrefix()); - } else { - throw new ScdException("Unexpected class : " + (tAnyLN != null ? tAnyLN.getClass() : null)); - } - } - - /** - * Extract id from LNode element - * - * @param tlNode LNode element - * @return id - */ - public static LnId from(TLNode tlNode) { - if (tlNode.getLnClass().contains(LN0_LNCLASS)) { - return LN0_ID; - } else { - return new LnId(tlNode.getLnClass(), tlNode.getLnInst(), tlNode.getPrefix()); - } - } - - - -} diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnKey.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnKey.java new file mode 100644 index 000000000..3f37c514f --- /dev/null +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnKey.java @@ -0,0 +1,37 @@ +// SPDX-FileCopyrightText: 2021 RTE FRANCE +// +// SPDX-License-Identifier: Apache-2.0 +package org.lfenergy.compas.sct.commons.scl.ln; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; +import org.lfenergy.compas.scl2007b4.model.*; + +@Getter +@EqualsAndHashCode +public class LnKey { + + private final String inst; + @EqualsAndHashCode.Exclude + private final String lnType; + private final String lnClass; + /** empty for LN0 */ + private final String prefix; + + public LnKey(LN0 ln0) { + this.inst = ln0.getInst(); + this.lnType = ln0.getLnType(); + this.lnClass = ln0.getLnClass().get(0); + this.prefix = StringUtils.EMPTY; + } + + public LnKey(TLN tln) { + this.inst = tln.getInst(); + this.lnType = tln.getLnType(); + this.lnClass = tln.getLnClass().get(0); + this.prefix = tln.getPrefix(); + } + +} + diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java index 8d9cbfde1..049f1e48a 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java @@ -7,7 +7,6 @@ import jakarta.xml.bind.JAXBElement; import lombok.NonNull; import lombok.experimental.UtilityClass; -import org.apache.commons.lang3.StringUtils; import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.dto.PrivateLinkedToStds; import org.lfenergy.compas.sct.commons.exception.ScdException; @@ -321,13 +320,4 @@ public static void copyCompasICDHeaderFromLNodePrivateIntoSTDPrivate(TPrivate st } - public static Optional extractStringPrivate(TBaseElement tBaseElement, String privateType) { - return tBaseElement.getPrivate().stream() - .filter(tPrivate -> privateType.equals(tPrivate.getType())) - .flatMap(tPrivate -> tPrivate.getContent().stream()) - .filter(String.class::isInstance) - .map(String.class::cast) - .filter(StringUtils::isNotBlank) - .findFirst(); } -} diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesServiceTest.java index 54b837884..f9d5898d1 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesServiceTest.java @@ -17,8 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.tuple; -import static org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateTestUtils.initDttFromFile; -import static org.lfenergy.compas.sct.commons.util.SclConstructorHelper.newVal; +import static org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateTestUtils.*; class DataTypeTemplatesServiceTest { @@ -152,12 +151,12 @@ void getFilteredDoLinkedToDa_should_return_expected_items() { List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then assertThat(result).hasSize(9) - .extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) + .extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) .containsExactlyInAnyOrder( tuple("FirstDoName", List.of(), "sampleDaName1", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), @@ -192,12 +191,12 @@ void getFilteredDOAndDA_when_given_DoName_should_return_expected_dataReference() DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then - assertThat(result).hasSize(1).extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) + assertThat(result).hasSize(1).extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) .containsExactly(tuple("SecondDoName", List.of(), "sampleDaName41", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null)); } @@ -213,12 +212,12 @@ void getFilteredDOAndDA_when_given_DO_with_one_structName_should_return_expected DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then - assertThat(result).hasSize(3).extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) + assertThat(result).hasSize(3).extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) .containsExactlyInAnyOrder(tuple("FirstDoName", List.of("sdoName1"), "sampleDaName21", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), tuple("FirstDoName", List.of("sdoName1", "sdoName21"), "sampleDaName31", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), tuple("FirstDoName", List.of("sdoName1", "sdoName21", "sdoName31"), "sampleDaName41", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null)); @@ -235,12 +234,12 @@ void getFilteredDOAndDA_when_given_DO_with_many_structName_should_return_expecte DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then - assertThat(result).hasSize(2).extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) + assertThat(result).hasSize(2).extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) .containsExactlyInAnyOrder(tuple("FirstDoName", List.of("sdoName1", "sdoName21"), "sampleDaName31", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), tuple("FirstDoName", List.of("sdoName1", "sdoName21", "sdoName31"), "sampleDaName41", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null)); } @@ -257,12 +256,12 @@ void getFilteredDOAndDA_when_given_DO_and_DA_with_structNames_should_return_expe DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then - assertThat(result).hasSize(1).extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) + assertThat(result).hasSize(1).extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) .containsExactlyInAnyOrder(tuple("FirstDoName", List.of("sdoName2"), "structDaName1", List.of("structBdaName1", "enumBdaName22"), TPredefinedBasicTypeEnum.ENUM, "EnumType1")); } @@ -271,66 +270,58 @@ void findDoLinkedToDa_should_find_DO_SDO_DA_and_all_BDA() { // Given SCL scd = SclTestMarshaller.getSCLFromFile("/ied-test-schema-conf/ied_unit_test.xml"); TDataTypeTemplates dtt = scd.getDataTypeTemplates(); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("Do"); dataObject.setSdoNames(List.of("sdo1", "d")); - dataObject.setCdc(TPredefinedCDCEnum.WYE); + doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("antRef"); dataAttribute.setBdaNames(List.of("bda1", "bda2", "bda3")); - dataAttribute.setFc(TFCEnum.ST); - dataAttribute.setBType(TPredefinedBasicTypeEnum.ENUM); - dataAttribute.setType("RecCycModKind"); - dataAttribute.setValImport(true); - dataAttribute.addDaVal(List.of(newVal("myValue"))); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); - DoLinkedToDaFilter doLinkedToDaFilter = new DoLinkedToDaFilter("Do", List.of("sdo1", "d"), "antRef", List.of("bda1", "bda2", "bda3")); + doLinkedToDa.setDataAttribute(dataAttribute); // When DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LNO1", doLinkedToDaFilter); + Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LNO1", doLinkedToDa); // Then - assertThat(result).get().usingRecursiveComparison().isEqualTo(doLinkedToDa); + assertThat(result).contains(doLinkedToDa); } @Test void findDoLinkedToDa_should_find_DO_SDO_DA_and_partial_BDA_list() { // Given TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda.xml"); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("Do1"); - dataObject.setCdc(TPredefinedCDCEnum.WYE); dataObject.setSdoNames(List.of("sdo1", "sdo2")); + doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("da2"); - dataAttribute.setFc(TFCEnum.ST); dataAttribute.setBdaNames(List.of("bda1", "bda2")); - dataAttribute.setBType(TPredefinedBasicTypeEnum.ENUM); - dataAttribute.setType("EnumType1"); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + doLinkedToDa.setDataAttribute(dataAttribute); // When DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LN1", new DoLinkedToDaFilter("Do1", List.of("sdo1", "sdo2"), "da2", List.of("bda1", "bda2"))); + Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LN1", doLinkedToDa); // Then - assertThat(result).get().usingRecursiveComparison().isEqualTo(doLinkedToDa); + assertThat(result).contains(doLinkedToDa); } @Test void findDoLinkedToDa_should_find_DO_DA() { // Given TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda.xml"); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("Do1"); - dataObject.setCdc(TPredefinedCDCEnum.WYE); + doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("da1"); - dataAttribute.setBType(TPredefinedBasicTypeEnum.BOOLEAN); - dataAttribute.setFc(TFCEnum.ST); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + doLinkedToDa.setDataAttribute(dataAttribute); // When DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LN1", new DoLinkedToDaFilter("Do1", List.of(), "da1", List.of())); + Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LN1", doLinkedToDa); // Then - assertThat(result).get().usingRecursiveComparison().isEqualTo(doLinkedToDa); + assertThat(result).contains(doLinkedToDa); } @Test @@ -424,10 +415,10 @@ void getAllDOAndDA_when_1DO_linked_to_1DA_should_return_expectedItems() { //Then assertThat(result).hasSize(1); assertThat(result.getFirst()) - .extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames()) + .extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames()) .containsExactly("doName", List.of(), "daName", List.of()); } @@ -441,12 +432,12 @@ void getAllDOAndDA_should_return_all_dataReference() { List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); // Then assertThat(result).hasSize(34) - .extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) + .extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) .containsExactlyInAnyOrder( // -> Do11 tuple("Do11", List.of(), "sampleDa11", List.of(), TPredefinedBasicTypeEnum.ENUM, "RecCycModKind"), diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DoTypeServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DoTypeServiceTest.java index 0d5511d73..df023a117 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DoTypeServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DoTypeServiceTest.java @@ -11,13 +11,16 @@ import org.lfenergy.compas.sct.commons.domain.DataAttribute; import org.lfenergy.compas.sct.commons.domain.DataObject; import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa; +import org.lfenergy.compas.sct.commons.dto.DaTypeName; +import org.lfenergy.compas.sct.commons.dto.DataAttributeRef; +import org.lfenergy.compas.sct.commons.dto.DoTypeName; import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller; import java.util.List; import static org.assertj.core.api.Assertions.tuple; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; -import static org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateTestUtils.initDttFromFile; +import static org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateTestUtils.*; class DoTypeServiceTest { @@ -82,20 +85,23 @@ void getAllSDOLinkedToDa_should_return_expected_dataReference() { TDOType tdoType = doTypeService.findDoType(dtt, tdoType1 -> tdoType1.getId() .equals("DOType0")).orElseThrow(); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("FirstDoName"); + doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + doLinkedToDa.setDataAttribute(dataAttribute); + //When List result = doTypeService.getAllSDOLinkedToDa(dtt, tdoType, doLinkedToDa); //Then assertThat(result).hasSize(8) - .extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) + .extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) .containsExactlyInAnyOrder( tuple("FirstDoName", List.of(), "sampleDaName1", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), @@ -125,19 +131,22 @@ void getAllSDOLinkedToDa_should_return_all_dai() { DoTypeService doTypeService = new DoTypeService(); TDOType tdoType = doTypeService.findDoType(dtt, tdoType1 -> tdoType1.getId() .equals("DO11")).orElseThrow(); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("firstDONAME"); + doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); // When + doLinkedToDa.setDataAttribute(dataAttribute); + // When List list = doTypeService.getAllSDOLinkedToDa(dtt, tdoType, doLinkedToDa); // Then assertThat(list) .hasSize(811) - .allMatch(dataAttributeRef -> StringUtils.startsWith(dataAttributeRef.dataObject().getDoName(), "firstDONAME")) - .areExactly(1, new Condition<>(dataAttributeRef -> dataAttributeRef.dataAttribute().getDaName().equals("da1"), "Il n'y a que certaines réponses contenant da1")) - .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.dataAttribute().getDaName().equals("da11"), "Il n'y a que certaines réponses contenant da11")) - .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.dataAttribute().getDaName().equals("da22"), "Il n'y a que certaines réponses contenant da22")) - .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.dataAttribute().getDaName().equals("da32"), "Il n'y a que certaines réponses contenant da32")); + .allMatch(dataAttributeRef -> StringUtils.startsWith(dataAttributeRef.getDataObject().getDoName(), "firstDONAME")) + .areExactly(1, new Condition<>(dataAttributeRef -> dataAttributeRef.getDataAttribute().getDaName().equals("da1"), "Il n'y a que certaines réponses contenant da1")) + .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.getDataAttribute().getDaName().equals("da11"), "Il n'y a que certaines réponses contenant da11")) + .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.getDataAttribute().getDaName().equals("da22"), "Il n'y a que certaines réponses contenant da22")) + .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.getDataAttribute().getDaName().equals("da32"), "Il n'y a que certaines réponses contenant da32")); } } 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 deleted file mode 100644 index d988862f1..000000000 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LNodeStatusServiceTest.java +++ /dev/null @@ -1,188 +0,0 @@ -// SPDX-FileCopyrightText: 2024 RTE FRANCE -// -// SPDX-License-Identifier: Apache-2.0 - -package org.lfenergy.compas.sct.commons; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.lfenergy.compas.scl2007b4.model.SCL; -import org.lfenergy.compas.scl2007b4.model.TAnyLN; -import org.lfenergy.compas.scl2007b4.model.TLN; -import org.lfenergy.compas.sct.commons.dto.SclReportItem; -import org.lfenergy.compas.sct.commons.testhelpers.SclHelper; -import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller; - -import java.util.List; -import java.util.stream.Stream; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Named.named; -import static org.lfenergy.compas.sct.commons.testhelpers.SclHelper.*; - -class LNodeStatusServiceTest { - - private LNodeStatusService lNodeStatusService; - - @BeforeEach - void setUp() { - lNodeStatusService = new LNodeStatusService(new LdeviceService(), new LnService(), new DataTypeTemplatesService()); - } - - @ParameterizedTest - @MethodSource("provideUpdateModStVal") - void updateLnStatusBasedOnPrivateLNodeStatus_should_update_Mod_stVal(String ldInst, String lnClass, String lnInst, String expected) { - // Given - SCL scl = SclTestMarshaller.getSCLFromFile("/scl-lnodestatus/lnodestatus.scd"); - // When - List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); - // Then - assertThat(sclReportItems).isEmpty(); - assertThat(findDai(scl, "IED_NAME_1", ldInst, lnClass, lnInst, "", "Mod", "stVal")) - .map(SclHelper::getValue) - .hasValue(expected); - } - - public static Stream provideUpdateModStVal() { - return Stream.of( - Arguments.of(named("LN 'on' à mettre à 'on'", "LDEVICE_1"), "PDIS", "1", "on"), - Arguments.of(named("LN 'off;on' à mettre à 'on'", "LDEVICE_1"), "PDIS", "2", "on"), - Arguments.of(named("LN 'off' à mettre à 'off'", "LDEVICE_1"), "PDIS", "3", "off"), - Arguments.of(named("LN 'off;on' à mettre à 'off'", "LDEVICE_1"), "PDIS", "3", "off"), - Arguments.of(named("LN0 'on' à mettre à 'on'", "LDEVICE_1"), "LLN0", "", "on"), - Arguments.of(named("LN0 'off;on' à mettre à 'on'", "LDEVICE_2"), "LLN0", "", "on"), - Arguments.of(named("LN0 'off' à mettre à 'off'", "LDEVICE_3"), "LLN0", "", "off"), - Arguments.of(named("LN0 'off;on' à mettre à 'off'", "LDEVICE_4"), "LLN0", "", "off") - ); - } - - @Test - void updateLnStatusBasedOnPrivateLNodeStatus_do_nothing_if_DAI_Mod_stVal_is_missing() { - // Given - SCL scl = SclTestMarshaller.getSCLFromFile("/scl-lnodestatus/lnodestatus_without_mod_stval.scd"); - // When - List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); - // Then - assertThat(sclReportItems).isEmpty(); - assertThat(getLDevices(scl.getIED().getFirst()) - .flatMap(tlDevice -> Stream.concat(Stream.of(tlDevice.getLN0()), tlDevice.getLN().stream()))) - .flatMap(TAnyLN::getDOI) - .isEmpty(); - } - - @Test - void updateLnStatusBasedOnPrivateLNodeStatus_when_no_compasLNodeStatus_in_LNode_should_return_error() { - // Given - SCL scl = SclTestMarshaller.getSCLFromFile("/scl-lnodestatus/lnodestatus.scd"); - scl.getSubstation().getFirst().getVoltageLevel().getFirst().getBay().getFirst().getFunction().getFirst().getLNode().getFirst() - .getPrivate().clear(); - // When - List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); - // Then - assertThat(sclReportItems).containsExactly( - SclReportItem.error("LNode(iedName=IED_NAME_1, ldInst=LDEVICE_1, lnClass=PDIS, lnInst=1, prefix=)", - "The private COMPAS-LNodeStatus of the LNode has invalid value. Expecting one of [on, off] but got : null") - ); - } - - @Test - void updateLnStatusBasedOnPrivateLNodeStatus_when_invalid_compasLNodeStatus_value_in_LNode_should_return_error() { - // Given - SCL scl = SclTestMarshaller.getSCLFromFile("/scl-lnodestatus/lnodestatus.scd"); - scl.getSubstation().getFirst().getVoltageLevel().getFirst().getBay().getFirst().getFunction().getFirst().getLNode().getFirst() - .getPrivate().getFirst().getContent().set(0, "helloworld"); - // When - List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); - // Then - assertThat(sclReportItems).containsExactly( - SclReportItem.error("LNode(iedName=IED_NAME_1, ldInst=LDEVICE_1, lnClass=PDIS, lnInst=1, prefix=)", - "The private COMPAS-LNodeStatus of the LNode has invalid value. Expecting one of [on, off] but got : helloworld") - ); - } - - @Test - 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", "")) - .setPrefix("helloworld"); - // When - List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); - // Then - assertThat(sclReportItems).containsExactly( - SclReportItem.error("LNode(iedName=IED_NAME_1, ldInst=LDEVICE_1, lnClass=PDIS, lnInst=1, prefix=)", - "LNode in Substation section does not have a matching LN in IED section") - ); - } - - @Test - void updateLnStatusBasedOnPrivateLNodeStatus_when_no_compasLNodeStatus_in_LN_should_return_error() { - // Given - SCL scl = SclTestMarshaller.getSCLFromFile("/scl-lnodestatus/lnodestatus.scd"); - findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "PDIS", "1", "") - .getPrivate().clear(); - // When - List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); - // Then - assertThat(sclReportItems).containsExactly( - SclReportItem.error("IED(IED_NAME_1)/LD(LDEVICE_1)/LN[PDIS,1,]", - "The private COMPAS-LNodeStatus of the LN has invalid value. Expecting one of [off;on, on;off, on, off] but got : null") - ); - } - - @Test - 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", "", "") - .getPrivate().getFirst().getContent().set(0, "off"); - findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "PDIS", "1", "") - .getPrivate().getFirst().getContent().set(0, "off"); - // When - List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); - // Then - assertThat(sclReportItems).containsExactlyInAnyOrder( - SclReportItem.error("IED(IED_NAME_1)/LD(LDEVICE_1)/LN[LLN0,,]", - "Cannot set DAI Mod.stVal to on, because LN private COMPAS-LNodeStatus is set to off"), - SclReportItem.error("IED(IED_NAME_1)/LD(LDEVICE_1)/LN[PDIS,1,]", - "Cannot set DAI Mod.stVal to on, because LN private COMPAS-LNodeStatus is set to off") - ); - } - - @Test - 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", "", "") - .getPrivate().getFirst().getContent().set(0, "on"); - findAnyLn(scl, "IED_NAME_1", "LDEVICE_1", "PDIS", "4", "") - .getPrivate().getFirst().getContent().set(0, "on"); - // When - List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); - // Then - assertThat(sclReportItems).containsExactlyInAnyOrder( - SclReportItem.error("IED(IED_NAME_1)/LD(LDEVICE_4)/LN[LLN0,,]", - "Cannot set DAI Mod.stVal to off, because LN private COMPAS-LNodeStatus is set to on"), - SclReportItem.error("IED(IED_NAME_1)/LD(LDEVICE_1)/LN[PDIS,4,]", - "Cannot set DAI Mod.stVal to off, because LN private COMPAS-LNodeStatus is set to on") - ); - } - - @Test - void updateLnStatusBasedOnPrivateLNodeStatus_when_Mod_stVal_enumType_does_not_contains_value_should_return_error() { - // Given - SCL scl = SclTestMarshaller.getSCLFromFile("/scl-lnodestatus/lnodestatus.scd"); - scl.getDataTypeTemplates().getEnumType().getFirst().getEnumVal().removeIf(tEnumVal -> tEnumVal.getValue().equals("on")); - // When - List sclReportItems = lNodeStatusService.updateLnModStValBasedOnLNodeStatus(scl); - // Then - assertThat(sclReportItems).contains( - SclReportItem.error("IED(IED_NAME_1)/LD(LDEVICE_1)/LN[PDIS,1,]", - "Cannot set DAI Mod.stVal to 'on' because value is not in EnumType [off, test]") - ); - } - -} 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 38260e960..8daa222d7 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 @@ -121,13 +121,13 @@ void getFilteredAnyLns_should_return_lns() { } @Test - void getDaiModStValValue_should_return_status() { + void getDaiModStval_should_return_status() { //Given SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std"); TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst(); //When - Optional daiModStval = lnService.getDaiModStValValue(tlDevice.getLN0()); + Optional daiModStval = lnService.getDaiModStval(tlDevice.getLN0()); //Then assertThat(daiModStval).contains(ActiveStatus.ON); @@ -212,7 +212,9 @@ void completeFromDataAttributeInstance_should_complete_when_valImport_set_or_not dataObject.setDoName("Do"); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("Da"); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); //When LnService lnService = new LnService(); lnService.completeFromDAInstance(tied, "ldInst", tAnyLN, doLinkedToDa); @@ -270,13 +272,15 @@ void completeFromDataAttributeInstance_should_complete_when_settingGroup_set_or_ dataAttribute.setDaName("Da"); dataAttribute.setFc(givenFc); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); //When LnService lnService = new LnService(); lnService.completeFromDAInstance(tied, "ldInst", tAnyLN, doLinkedToDa); //Then - assertThat(doLinkedToDa.dataAttribute().isValImport()).isEqualTo(expectedValImport); + assertThat(doLinkedToDa.getDataAttribute().isValImport()).isEqualTo(expectedValImport); } @@ -290,12 +294,14 @@ void completeFromDataAttributeInstance__should_not_complete_when_not_found() { DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("Da"); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); //When LnService lnService = new LnService(); lnService.completeFromDAInstance(tied, "ldInst", tAnyLN, doLinkedToDa); //Then - assertThat(doLinkedToDa.dataAttribute().isValImport()).isFalse();//initialValue + assertThat(doLinkedToDa.getDataAttribute().isValImport()).isFalse();//initialValue } @ParameterizedTest @@ -315,13 +321,15 @@ void completeFromDataAttributeInstance_should_complete_when_struct(Boolean input dataAttribute.setDaName("antRef"); dataAttribute.setBdaNames(List.of("bda1","bda2","bda3")); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); //When LnService lnService = new LnService(); lnService.completeFromDAInstance(tied, "ldInst", tAnyLN, doLinkedToDa); //Then - assertThat(doLinkedToDa.dataAttribute().isValImport()).isEqualTo(expected); + assertThat(doLinkedToDa.getDataAttribute().isValImport()).isEqualTo(expected); } @Test @@ -335,7 +343,9 @@ void updateOrCreateDOAndDAInstance_should_create_given_DO_and_DA_instances_when_ dataAttribute.setDaName("stVal"); dataAttribute.getDaiValues().add(new DaVal(1L, "new value")); dataAttribute.getDaiValues().add(new DaVal(2L, "new value 2")); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); //When LnService lnService = new LnService(); lnService.updateOrCreateDOAndDAInstances(tAnyLN, doLinkedToDa); @@ -365,7 +375,9 @@ void updateOrCreateDOAndDAInstance_should_create_given_DO_and_DA_instances_when_ dataAttribute.setDaName("antRef"); dataAttribute.setBdaNames(List.of("bda1")); dataAttribute.getDaiValues().add(new DaVal(null, "new value")); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); //When LnService lnService = new LnService(); @@ -428,7 +440,9 @@ void updateOrCreateDOAndDAInstance_should_complete_DO_and_DA_instances_modificat dataAttribute.setBdaNames(List.of("BdaName1")); dataAttribute.getDaiValues().add(new DaVal(null, "new dai value")); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); //When LnService lnService = new LnService(); diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaTest.java index 2691f0783..a3a6aaaaf 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaTest.java @@ -18,23 +18,25 @@ class DoLinkedToDaTest { @Test void test_copyFrom() { // Given + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("doName"); dataObject.setSdoNames(List.of("sdoName1")); dataObject.setCdc(TPredefinedCDCEnum.CST); + doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("daName"); dataAttribute.setBdaNames(List.of("bdaName1")); dataAttribute.setFc(TFCEnum.BL); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + doLinkedToDa.setDataAttribute(dataAttribute); // When DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDa); // Then assertAll("Copy From", - () -> assertThat(newDoLinkedToDa.dataObject().getCdc()).isEqualTo(doLinkedToDa.dataObject().getCdc()), - () -> assertThat(newDoLinkedToDa.dataAttribute().getBType()).isEqualTo(doLinkedToDa.dataAttribute().getBType()), - () -> assertThat(newDoLinkedToDa.dataAttribute().getType()).isEqualTo(doLinkedToDa.dataAttribute().getType()), - () -> assertThat(newDoLinkedToDa.dataAttribute().getFc()).isEqualTo(doLinkedToDa.dataAttribute().getFc()), + () -> assertThat(newDoLinkedToDa.getDataObject().getCdc()).isEqualTo(doLinkedToDa.getDataObject().getCdc()), + () -> assertThat(newDoLinkedToDa.getDataAttribute().getBType()).isEqualTo(doLinkedToDa.getDataAttribute().getBType()), + () -> assertThat(newDoLinkedToDa.getDataAttribute().getType()).isEqualTo(doLinkedToDa.getDataAttribute().getType()), + () -> assertThat(newDoLinkedToDa.getDataAttribute().getFc()).isEqualTo(doLinkedToDa.getDataAttribute().getFc()), () -> assertThat(newDoLinkedToDa.getDoRef()).isEqualTo(doLinkedToDa.getDoRef()), () -> assertThat(newDoLinkedToDa.getDaRef()).isEqualTo(doLinkedToDa.getDaRef())); } @@ -47,7 +49,8 @@ void test_getDoRef() { dataObject.setSdoNames(List.of("sdoName1")); dataObject.setCdc(TPredefinedCDCEnum.CST); // When Then - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, new DataAttribute()); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); assertThat(doLinkedToDa.getDoRef()).isEqualTo("doName.sdoName1"); } @@ -58,10 +61,9 @@ void test_getDaRef() { dataAttribute.setDaName("daName"); dataAttribute.setBdaNames(List.of("bdaName1")); dataAttribute.setFc(TFCEnum.BL); - // When - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(new DataObject(), dataAttribute); - - // Then + // When Then + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataAttribute(dataAttribute); assertThat(doLinkedToDa.getDaRef()).isEqualTo("daName.bdaName1"); } @@ -73,7 +75,9 @@ void isUpdatable_should_return_true_whenIsDOModDAstVal() { DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("stVal"); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); // When Then assertThat(doLinkedToDa.isUpdatable()).isTrue(); } @@ -90,7 +94,9 @@ void isUpdatable_should_return_true_whenValImportIsTrue() { dataAttribute.setValImport(true); dataAttribute.setFc(TFCEnum.SE); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); // When Then assertThat(doLinkedToDa.isUpdatable()).isTrue(); } @@ -107,9 +113,11 @@ void isUpdatable_should_return_false_whenValImportIsFalse() { dataAttribute.setValImport(false); dataAttribute.setFc(TFCEnum.SE); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); + doLinkedToDa.setDataObject(dataObject); + doLinkedToDa.setDataAttribute(dataAttribute); // When Then assertThat(doLinkedToDa.isUpdatable()).isFalse(); } -} +} \ No newline at end of file diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnIdTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnKeyTest.java similarity index 62% rename from sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnIdTest.java rename to sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnKeyTest.java index bdbff7a3b..4501f79d4 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnIdTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnKeyTest.java @@ -14,7 +14,7 @@ import static org.assertj.core.api.Assertions.assertThat; -class LnIdTest { +class LnKeyTest { @Test void test_LnKey_withLN() { @@ -24,11 +24,12 @@ void test_LnKey_withLN() { ln.setInst("1"); ln.getLnClass().add(TSystemLNGroupEnum.LGOS.value()); // When - LnId lnId = LnId.from(ln); + LnKey lnKey = new LnKey(ln); // Then - assertThat(lnId.lnClass()).isEqualTo("LGOS"); - assertThat(lnId.lnInst()).isEqualTo("1"); - assertThat(lnId.prefix()).isEqualTo(StringUtils.EMPTY); + assertThat(lnKey.getLnType()).isEqualTo("LnTypeAny"); + assertThat(lnKey.getLnClass()).isEqualTo("LGOS"); + assertThat(lnKey.getInst()).isEqualTo("1"); + assertThat(lnKey.getPrefix()).isEqualTo(StringUtils.EMPTY); } @Test @@ -38,11 +39,12 @@ void test_LnKey_withLN0() { ln0.setLnType("LnType0"); ln0.getLnClass().add(TLLN0Enum.LLN_0.value()); // When - LnId lnId = LnId.from(ln0); + LnKey lnKey = new LnKey(ln0); // Then - assertThat(lnId.lnClass()).isEqualTo("LLN0"); - assertThat(lnId.lnInst()).isEqualTo(""); - assertThat(lnId.prefix()).isEqualTo(StringUtils.EMPTY); + assertThat(lnKey.getLnType()).isEqualTo("LnType0"); + assertThat(lnKey.getLnClass()).isEqualTo("LLN0"); + assertThat(lnKey.getInst()).isEqualTo(""); + assertThat(lnKey.getPrefix()).isEqualTo(StringUtils.EMPTY); } -} +} \ No newline at end of file diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/testhelpers/SclHelper.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/testhelpers/SclHelper.java index eb24171e4..0d843c335 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/testhelpers/SclHelper.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/testhelpers/SclHelper.java @@ -21,7 +21,6 @@ import java.util.Optional; import java.util.stream.Stream; -import static org.apache.commons.lang3.StringUtils.trimToEmpty; import static org.assertj.core.api.Assertions.assertThat; import static org.lfenergy.compas.sct.commons.util.SclConstructorHelper.newConnectedAp; import static org.lfenergy.compas.sct.commons.util.Utils.lnClassEquals; @@ -100,279 +99,257 @@ public static LNAdapter findLn(SCL scl, String iedName, String ldInst, String ln ); } - public static TAnyLN findAnyLn(SCL scl, String iedName, String ldInst, String lnClass, String lnInst, String prefix) { - TIED ied = scl.getIED().stream().filter(tied -> tied.getName().equals(iedName)) - .findFirst().orElseThrow(() -> new AssertionFailedError("IED with name=%s not found".formatted(iedName))); - TLDevice tlDevice = getLDevices(ied) - .filter(tlDevice1 -> tlDevice1.getInst().equals(ldInst)) - .findFirst().orElseThrow(() -> new AssertionFailedError("LDevice with inst=%s not found".formatted(ldInst))); - if (lnClass.equals(TLLN0Enum.LLN_0.value()) && tlDevice.isSetLN0()) { - return tlDevice.getLN0(); + public static IDataParentAdapter findDoiOrSdi(AbstractLNAdapter lnAdapter, String dataTypeRef) { + if (dataTypeRef.length() < 1) { + Assertions.fail("dataTypeRef must at least contain a DO, but got: " + dataTypeRef); } - return tlDevice.getLN().stream() - .filter(tln -> Utils.lnClassEquals(tln.getLnClass(), lnClass) && trimToEmpty(tln.getInst()).equals(trimToEmpty(lnInst)) && trimToEmpty(tln.getPrefix()).equals(trimToEmpty(prefix))) - .findFirst() - .orElseThrow(() -> new AssertionFailedError("LN (lnClass=%s, lnInst=%s, lnPrefix=%s) not found".formatted(lnClass, lnInst, prefix))); - } - - public static Stream getLDevices(TIED tied){ - return tied.getAccessPoint().stream() - .filter(TAccessPoint::isSetServer) - .flatMap(tAccessPoint -> tAccessPoint.getServer().getLDevice().stream()); + String[] names = dataTypeRef.split("\\."); + IDataParentAdapter parentAdapter = lnAdapter.getDOIAdapterByName(names[0]); + for (int i = 1; i < names.length; i++) { + parentAdapter = parentAdapter.getStructuredDataAdapterByName(names[i]); + } + return parentAdapter; } -public static IDataParentAdapter findDoiOrSdi(AbstractLNAdapter lnAdapter, String dataTypeRef) { - if (dataTypeRef.length() < 1) { - Assertions.fail("dataTypeRef must at least contain a DO, but got: " + dataTypeRef); + public static Optional findDai(SCL scl, String iedName, String ldInst, String doiName, String daiName) { + return scl.getIED().stream().filter(tied -> tied.getName().equals(iedName)) + .flatMap(tied -> tied.getAccessPoint().stream()) + .flatMap(tAccessPoint -> tAccessPoint.getServer().getLDevice().stream()) + .filter(tlDevice -> tlDevice.getInst().equals(ldInst)) + .flatMap(tlDevice -> tlDevice.getLN0().getDOI().stream()) + .filter(tdoi -> tdoi.getName().equals(doiName)) + .flatMap(tdoi -> tdoi.getSDIOrDAI().stream().map(tUnNaming -> (TDAI)tUnNaming)) + .filter(tdai -> tdai.getName().equals(daiName)) + .findFirst(); } - String[] names = dataTypeRef.split("\\."); - IDataParentAdapter parentAdapter = lnAdapter.getDOIAdapterByName(names[0]); - for (int i = 1; i < names.length; i++) { - parentAdapter = parentAdapter.getStructuredDataAdapterByName(names[i]); - } - return parentAdapter; -} - -public static Optional findDai(SCL scl, String iedName, String ldInst, String doiName, String daiName) { - return findDai( scl, iedName, ldInst, "LLN0", "", "", doiName, daiName); -} -public static Optional findDai(SCL scl, String iedName, String ldInst, String lnClass, String lnInst, String lnPrefix, String doiName, String daiName) { - return findAnyLn(scl, iedName, ldInst, lnClass, lnInst, lnPrefix) - .getDOI().stream() - .filter(tdoi -> tdoi.getName().equals(doiName)) - .flatMap(tdoi -> tdoi.getSDIOrDAI().stream().map(tUnNaming -> (TDAI) tUnNaming)) - .filter(tdai -> tdai.getName().equals(daiName)) - .findFirst(); -} + public static AbstractDAIAdapter findDai(AbstractLNAdapter lnAdapter, String dataTypeRef) { + String[] names = dataTypeRef.split("\\."); + if (names.length < 2) { + Assertions.fail("dataTypeRef must at least contain a DO and a DA name, but got: " + dataTypeRef); + } -public static AbstractDAIAdapter findDai(AbstractLNAdapter lnAdapter, String dataTypeRef) { - String[] names = dataTypeRef.split("\\."); - if (names.length < 2) { - Assertions.fail("dataTypeRef must at least contain a DO and a DA name, but got: " + dataTypeRef); + IDataParentAdapter parentAdapter = findDoiOrSdi(lnAdapter, String.join(".", Arrays.asList(names).subList(0, names.length - 1))); + return parentAdapter.getDataAdapterByName(names[names.length - 1]); } - IDataParentAdapter parentAdapter = findDoiOrSdi(lnAdapter, String.join(".", Arrays.asList(names).subList(0, names.length - 1))); - return parentAdapter.getDataAdapterByName(names[names.length - 1]); -} - -public static String getValue(AbstractDAIAdapter daiAdapter) { - return getValue(daiAdapter.getCurrentElem()); -} - -public static String getValue(TDAI tdai) { - if (!tdai.isSetVal()) { - Assertions.fail("No value found for DAI " + tdai.getName()); - } else if (tdai.getVal().size() > 1) { - Assertions.fail("Expecting a single value for for DAI " + tdai.getName()); + public static String getValue(AbstractDAIAdapter daiAdapter) { + return getValue(daiAdapter.getCurrentElem()); } - return tdai.getVal().get(0).getValue(); -} - -public static LDeviceAdapter findLDeviceByLdName(SCL scl, String ldName) { - return new SclRootAdapter(scl).streamIEDAdapters() - .flatMap(IEDAdapter::streamLDeviceAdapters) - .filter(lDeviceAdapter -> ldName.equals(lDeviceAdapter.getLdName())) - .findFirst() - .orElseThrow(() -> new AssertionFailedError("LDevice with ldName=%s not found in SCD".formatted(ldName))); -} + public static String getValue(TDAI tdai) { + if (!tdai.isSetVal()) { + Assertions.fail("No value found for DAI " + tdai.getName()); + } else if (tdai.getVal().size() > 1) { + Assertions.fail("Expecting a single value for for DAI " + tdai.getName()); + } + return tdai.getVal().get(0).getValue(); + } -public static DataSetAdapter findDataSet(SCL scl, String iedName, String ldInst, String dataSetName) { - LN0Adapter ln0 = findLn0(scl, iedName, ldInst); - return ln0.findDataSetByName(dataSetName) - .orElseThrow(() -> new AssertionFailedError(String.format("DataSet.name=%s not found in IED.name=%s,LDevice.inst=%s,LN0", - dataSetName, iedName, ldInst))); -} -public static T findControlBlock(SCL scl, String iedName, String ldInst, String cbName, Class controlBlockClass) { - LN0Adapter ln0 = findLn0(scl, iedName, ldInst); - return ln0.getTControlsByType(controlBlockClass).stream() - .filter(t -> cbName.equals(t.getName())) - .findFirst() - .orElseThrow(() -> new AssertionFailedError(String.format("%s name=%s not found in IED.name=%s,LDevice.inst=%s,LN0", - controlBlockClass.getSimpleName(), cbName, iedName, ldInst))); -} + public static LDeviceAdapter findLDeviceByLdName(SCL scl, String ldName) { + return new SclRootAdapter(scl).streamIEDAdapters() + .flatMap(IEDAdapter::streamLDeviceAdapters) + .filter(lDeviceAdapter -> ldName.equals(lDeviceAdapter.getLdName())) + .findFirst() + .orElseThrow(() -> new AssertionFailedError("LDevice with ldName=%s not found in SCD".formatted(ldName))); + } -public static void assertControlBlockExists(SCL scd, String iedName, String ldInst, String cbName, - String datSet, String id, ControlBlockEnum controlBlockEnum) { - TControl controlBlock = findControlBlock(scd, iedName, ldInst, cbName, controlBlockEnum.getControlBlockClass()); - assertThat(controlBlock.getDatSet()).isEqualTo(datSet); - assertThat(getControlBlockId(controlBlock)).isEqualTo(id); -} + public static DataSetAdapter findDataSet(SCL scl, String iedName, String ldInst, String dataSetName) { + LN0Adapter ln0 = findLn0(scl, iedName, ldInst); + return ln0.findDataSetByName(dataSetName) + .orElseThrow(() -> new AssertionFailedError(String.format("DataSet.name=%s not found in IED.name=%s,LDevice.inst=%s,LN0", + dataSetName, iedName, ldInst))); + } -private static String getControlBlockId(TControl tControl) { - if (tControl instanceof TGSEControl tgseControl) { - return tgseControl.getAppID(); + public static T findControlBlock(SCL scl, String iedName, String ldInst, String cbName, Class controlBlockClass) { + LN0Adapter ln0 = findLn0(scl, iedName, ldInst); + return ln0.getTControlsByType(controlBlockClass).stream() + .filter(t -> cbName.equals(t.getName())) + .findFirst() + .orElseThrow(() -> new AssertionFailedError(String.format("%s name=%s not found in IED.name=%s,LDevice.inst=%s,LN0", + controlBlockClass.getSimpleName(), cbName, iedName, ldInst))); } - if (tControl instanceof TSampledValueControl tSampledValueControl) { - return tSampledValueControl.getSmvID(); + + public static void assertControlBlockExists(SCL scd, String iedName, String ldInst, String cbName, + String datSet, String id, ControlBlockEnum controlBlockEnum) { + TControl controlBlock = findControlBlock(scd, iedName, ldInst, cbName, controlBlockEnum.getControlBlockClass()); + assertThat(controlBlock.getDatSet()).isEqualTo(datSet); + assertThat(getControlBlockId(controlBlock)).isEqualTo(id); } - if (tControl instanceof TReportControl tReportControl) { - return tReportControl.getRptID(); + + private static String getControlBlockId(TControl tControl) { + if (tControl instanceof TGSEControl tgseControl) { + return tgseControl.getAppID(); + } + if (tControl instanceof TSampledValueControl tSampledValueControl) { + return tSampledValueControl.getSmvID(); + } + if (tControl instanceof TReportControl tReportControl) { + return tReportControl.getRptID(); + } + throw new AssertionFailedError("Cannot get Id for ControlBlock of type " + tControl.getClass().getSimpleName()); } - throw new AssertionFailedError("Cannot get Id for ControlBlock of type " + tControl.getClass().getSimpleName()); -} -public static Stream streamAllDataSets(SCL scl) { - return streamAllLn0Adapters(scl) - .map(ln0Adapter -> ln0Adapter.getCurrentElem().getDataSet()) - .flatMap(List::stream); -} + public static Stream streamAllDataSets(SCL scl) { + return streamAllLn0Adapters(scl) + .map(ln0Adapter -> ln0Adapter.getCurrentElem().getDataSet()) + .flatMap(List::stream); + } -public static Stream streamAllLn0Adapters(SCL scl) { - return new SclRootAdapter(scl) - .streamIEDAdapters() - .flatMap(IEDAdapter::streamLDeviceAdapters) - .filter(LDeviceAdapter::hasLN0) - .map(LDeviceAdapter::getLN0Adapter); -} + public static Stream streamAllLn0Adapters(SCL scl) { + return new SclRootAdapter(scl) + .streamIEDAdapters() + .flatMap(IEDAdapter::streamLDeviceAdapters) + .filter(LDeviceAdapter::hasLN0) + .map(LDeviceAdapter::getLN0Adapter); + } -public static Stream streamAllExtRef(SCL scl) { - return streamAllLn0Adapters(scl) - .filter(AbstractLNAdapter::hasInputs) - .map(LN0Adapter::getInputsAdapter) - .map(InputsAdapter::getCurrentElem) - .map(TInputs::getExtRef) - .flatMap(List::stream); -} + public static Stream streamAllExtRef(SCL scl) { + return streamAllLn0Adapters(scl) + .filter(AbstractLNAdapter::hasInputs) + .map(LN0Adapter::getInputsAdapter) + .map(InputsAdapter::getCurrentElem) + .map(TInputs::getExtRef) + .flatMap(List::stream); + } -public static String getDaiValue(AbstractLNAdapter ln, String doiName, String daiName) { - return ln.getDOIAdapterByName(doiName).getDataAdapterByName(daiName).getCurrentElem().getVal().get(0).getValue(); -} + public static String getDaiValue(AbstractLNAdapter ln, String doiName, String daiName) { + return ln.getDOIAdapterByName(doiName).getDataAdapterByName(daiName).getCurrentElem().getVal().get(0).getValue(); + } -public static Stream streamAllConnectedApGseP(SCL scd, String pType) { - return scd.getCommunication().getSubNetwork().stream() - .map(TSubNetwork::getConnectedAP) - .flatMap(List::stream) - .map(TConnectedAP::getGSE) - .flatMap(List::stream) - .map(TControlBlock::getAddress) - .map(TAddress::getP) - .flatMap(List::stream) - .filter(tp -> pType.equals(tp.getType())) - .map(TP::getValue); -} + public static Stream streamAllConnectedApGseP(SCL scd, String pType) { + return scd.getCommunication().getSubNetwork().stream() + .map(TSubNetwork::getConnectedAP) + .flatMap(List::stream) + .map(TConnectedAP::getGSE) + .flatMap(List::stream) + .map(TControlBlock::getAddress) + .map(TAddress::getP) + .flatMap(List::stream) + .filter(tp -> pType.equals(tp.getType())) + .map(TP::getValue); + } -public static SclRootAdapter createSclRootAdapterWithIed(String iedName) { - SCL scl = new SCL(); - scl.setHeader(new THeader()); - TIED ied = new TIED(); - ied.setName(iedName); - scl.getIED().add(ied); - return new SclRootAdapter(scl); -} + public static SclRootAdapter createSclRootAdapterWithIed(String iedName) { + SCL scl = new SCL(); + scl.setHeader(new THeader()); + TIED ied = new TIED(); + ied.setName(iedName); + scl.getIED().add(ied); + return new SclRootAdapter(scl); + } -public static SclRootAdapter createSclRootWithConnectedAp(String iedName, String apName) { - SclRootAdapter sclRootAdapter = createSclRootAdapterWithIed(iedName); - SCL scl = sclRootAdapter.getCurrentElem(); - scl.setCommunication(new TCommunication()); - TSubNetwork subNetwork = new TSubNetwork(); - scl.getCommunication().getSubNetwork().add(subNetwork); - subNetwork.getConnectedAP().add(newConnectedAp(iedName, apName)); - return sclRootAdapter; -} + public static SclRootAdapter createSclRootWithConnectedAp(String iedName, String apName) { + SclRootAdapter sclRootAdapter = createSclRootAdapterWithIed(iedName); + SCL scl = sclRootAdapter.getCurrentElem(); + scl.setCommunication(new TCommunication()); + TSubNetwork subNetwork = new TSubNetwork(); + scl.getCommunication().getSubNetwork().add(subNetwork); + subNetwork.getConnectedAP().add(newConnectedAp(iedName, apName)); + return sclRootAdapter; + } -public static TExtRef createExtRefExample(String cbName, TServiceType tServiceType) { - TExtRef tExtRef = new TExtRef(); - tExtRef.setIedName("IED_NAME_2"); - tExtRef.setServiceType(tServiceType); - tExtRef.setSrcLDInst("Inst_2"); - tExtRef.setSrcLNInst("LN"); - tExtRef.setSrcPrefix("Prefix"); - tExtRef.setSrcCBName(cbName); - return tExtRef; -} + public static TExtRef createExtRefExample(String cbName, TServiceType tServiceType) { + TExtRef tExtRef = new TExtRef(); + tExtRef.setIedName("IED_NAME_2"); + tExtRef.setServiceType(tServiceType); + tExtRef.setSrcLDInst("Inst_2"); + tExtRef.setSrcLNInst("LN"); + tExtRef.setSrcPrefix("Prefix"); + tExtRef.setSrcCBName(cbName); + return tExtRef; + } -public static SclRootAdapter createIedsInScl(String lnClass, String doName) { - // DataTypeTemplate - TDO tdo = new TDO(); - tdo.setName(doName); - tdo.setType("REF"); - TLNodeType tlNodeType = new TLNodeType(); - tlNodeType.setId("T1"); - tlNodeType.getLnClass().add(lnClass); - tlNodeType.getDO().add(tdo); - - TDA tda = new TDA(); - tda.setName("setSrcRef"); - tda.setValImport(true); - tda.setBType(TPredefinedBasicTypeEnum.OBJ_REF); - tda.setFc(TFCEnum.SP); - - TDOType tdoType = new TDOType(); - tdoType.setId("REF"); - tdoType.getSDOOrDA().add(tda); - - TDataTypeTemplates tDataTypeTemplates = new TDataTypeTemplates(); - tDataTypeTemplates.getLNodeType().add(tlNodeType); - tDataTypeTemplates.getDOType().add(tdoType); - - - //ied Client - TDOI tdoi = new TDOI(); - tdoi.setName(doName); - TLDevice tlDevice = new TLDevice(); - tlDevice.setInst("LD_ADD"); - TInputs tInputs = new TInputs(); - LN0 ln0 = new LN0(); - ln0.setInputs(tInputs); - tlDevice.setLN0(ln0); - - TLDevice tlDevice1 = new TLDevice(); - tlDevice1.setLN0(new LN0()); - tlDevice1.setInst(LD_SUIED); - TLN tln1 = new TLN(); - tln1.getLnClass().add(lnClass); - tln1.setLnType("T1"); - tln1.getDOI().add(tdoi); - tlDevice1.getLN().add(tln1); - TServer tServer1 = new TServer(); - tServer1.getLDevice().add(tlDevice1); - tServer1.getLDevice().add(tlDevice); - TAccessPoint tAccessPoint1 = new TAccessPoint(); - tAccessPoint1.setName("AP_NAME"); - tAccessPoint1.setServer(tServer1); - TIED tied1 = new TIED(); - tied1.setName(IED_NAME_1); - tied1.getAccessPoint().add(tAccessPoint1); - - //ied Source - TLDevice tlDevice2 = new TLDevice(); - tlDevice2.setInst("Inst_2"); - tlDevice2.setLdName("LD_Name"); - tlDevice2.setLN0(new LN0()); - TServer tServer2 = new TServer(); - tServer2.getLDevice().add(tlDevice2); - TAccessPoint tAccessPoint2 = new TAccessPoint(); - tAccessPoint2.setName("AP_NAME"); - tAccessPoint2.setServer(tServer2); - TIED tied2 = new TIED(); - tied2.setName(IED_NAME_2); - tied2.getAccessPoint().add(tAccessPoint2); - //SCL file - SCL scd = new SCL(); - scd.getIED().add(tied1); - scd.getIED().add(tied2); - THeader tHeader = new THeader(); - tHeader.setRevision("1"); - scd.setHeader(tHeader); - scd.setDataTypeTemplates(tDataTypeTemplates); - - return new SclRootAdapter(scd); -} + public static SclRootAdapter createIedsInScl(String lnClass, String doName) { + // DataTypeTemplate + TDO tdo = new TDO(); + tdo.setName(doName); + tdo.setType("REF"); + TLNodeType tlNodeType = new TLNodeType(); + tlNodeType.setId("T1"); + tlNodeType.getLnClass().add(lnClass); + tlNodeType.getDO().add(tdo); + + TDA tda = new TDA(); + tda.setName("setSrcRef"); + tda.setValImport(true); + tda.setBType(TPredefinedBasicTypeEnum.OBJ_REF); + tda.setFc(TFCEnum.SP); + + TDOType tdoType = new TDOType(); + tdoType.setId("REF"); + tdoType.getSDOOrDA().add(tda); + + TDataTypeTemplates tDataTypeTemplates = new TDataTypeTemplates(); + tDataTypeTemplates.getLNodeType().add(tlNodeType); + tDataTypeTemplates.getDOType().add(tdoType); + + + //ied Client + TDOI tdoi = new TDOI(); + tdoi.setName(doName); + TLDevice tlDevice = new TLDevice(); + tlDevice.setInst("LD_ADD"); + TInputs tInputs = new TInputs(); + LN0 ln0 = new LN0(); + ln0.setInputs(tInputs); + tlDevice.setLN0(ln0); + + TLDevice tlDevice1 = new TLDevice(); + tlDevice1.setLN0(new LN0()); + tlDevice1.setInst(LD_SUIED); + TLN tln1 = new TLN(); + tln1.getLnClass().add(lnClass); + tln1.setLnType("T1"); + tln1.getDOI().add(tdoi); + tlDevice1.getLN().add(tln1); + TServer tServer1 = new TServer(); + tServer1.getLDevice().add(tlDevice1); + tServer1.getLDevice().add(tlDevice); + TAccessPoint tAccessPoint1 = new TAccessPoint(); + tAccessPoint1.setName("AP_NAME"); + tAccessPoint1.setServer(tServer1); + TIED tied1 = new TIED(); + tied1.setName(IED_NAME_1); + tied1.getAccessPoint().add(tAccessPoint1); + + //ied Source + TLDevice tlDevice2 = new TLDevice(); + tlDevice2.setInst("Inst_2"); + tlDevice2.setLdName("LD_Name"); + tlDevice2.setLN0(new LN0()); + TServer tServer2 = new TServer(); + tServer2.getLDevice().add(tlDevice2); + TAccessPoint tAccessPoint2 = new TAccessPoint(); + tAccessPoint2.setName("AP_NAME"); + tAccessPoint2.setServer(tServer2); + TIED tied2 = new TIED(); + tied2.setName(IED_NAME_2); + tied2.getAccessPoint().add(tAccessPoint2); + //SCL file + SCL scd = new SCL(); + scd.getIED().add(tied1); + scd.getIED().add(tied2); + THeader tHeader = new THeader(); + tHeader.setRevision("1"); + scd.setHeader(tHeader); + scd.setDataTypeTemplates(tDataTypeTemplates); + + return new SclRootAdapter(scd); + } -public static List getDaiValues(LDeviceAdapter lDeviceAdapter, String lnClass, String doName, String daName) { - return getDAIAdapters(lDeviceAdapter, lnClass, doName, daName) - .map(daiAdapter -> daiAdapter.getCurrentElem().getVal()) - .flatMap(List::stream) - .toList(); -} + public static List getDaiValues(LDeviceAdapter lDeviceAdapter, String lnClass, String doName, String daName) { + return getDAIAdapters(lDeviceAdapter, lnClass, doName, daName) + .map(daiAdapter -> daiAdapter.getCurrentElem().getVal()) + .flatMap(List::stream) + .toList(); + } -public static Stream getDAIAdapters(LDeviceAdapter lDeviceAdapter, String lnClass, String doName, String daName) { - return lDeviceAdapter.getLNAdapters().stream() - .filter(lnAdapter -> lnClassEquals(lnAdapter.getCurrentElem().getLnClass(), lnClass)) - .map(lnAdapter -> lnAdapter.getDOIAdapterByName(doName)) - .map(doiAdapter -> (DOIAdapter.DAIAdapter) doiAdapter.getDataAdapterByName(daName)); -} + public static Stream getDAIAdapters(LDeviceAdapter lDeviceAdapter, String lnClass, String doName, String daName) { + return lDeviceAdapter.getLNAdapters().stream() + .filter(lnAdapter -> lnClassEquals(lnAdapter.getCurrentElem().getLnClass(), lnClass)) + .map(lnAdapter -> lnAdapter.getDOIAdapterByName(doName)) + .map(doiAdapter -> (DOIAdapter.DAIAdapter) doiAdapter.getDataAdapterByName(daName)); + } } diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java index 6b8ab3469..5a9b20954 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java @@ -630,18 +630,4 @@ void createPrivate_compas_Topo_should_succeed(){ .map(JAXBElement::getValue) .containsExactly(tCompasTopo1, tCompasTopo2); } - - @Test - void extractStringPrivate_should_succeed(){ - // Given - TIED tied = new TIED(); - TPrivate tPrivate = new TPrivate(); - tPrivate.setType("MyCustomType"); - tPrivate.getContent().add("hello World"); - tied.getPrivate().add(tPrivate); - // When - Optional result = PrivateUtils.extractStringPrivate(tied, "MyCustomType"); - // Then - assertThat(result).hasValue("hello World"); - } } 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 c15f75606..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 @@ -113,9 +113,7 @@ - - myValue - + diff --git a/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus.scd b/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus.scd deleted file mode 100644 index 120833d95..000000000 --- a/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus.scd +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - SCD - -
- - - 90 - - - - on - - - on - - - off - - - off - - - - - on - - - on - - - off - - - off - - - - - - - - - - - - on - - - - - - on;off - - - - - - on - - - - - - on;off - - - - - - off - - - - - - - - on - - - - - - - - on;off - - - - - - - - off - - - - - - - - - - - - - - - - - - - - on - off - test - - - diff --git a/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus_without_mod_stval.scd b/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus_without_mod_stval.scd deleted file mode 100644 index da7204fdc..000000000 --- a/sct-commons/src/test/resources/scl-lnodestatus/lnodestatus_without_mod_stval.scd +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - SCD - -
- - - 90 - - - - on - - - on - - - off - - - off - - - - - on - - - on - - - off - - - off - - - - - - - - - - - - on - - - on;off - - - on - - - on;off - - - off - - - - - on - - - - - on;off - - - - - off - - - - - - - - - - - - - - - - - on - off - test - - - From 0b0bab27021df7ee7ca0afd035490d212af75161 Mon Sep 17 00:00:00 2001 From: massifben <105049157+massifben@users.noreply.github.com> Date: Tue, 21 Jan 2025 18:30:02 +0100 Subject: [PATCH 3/6] feat(#458): Add PrivateUtils.extractStringPrivate Signed-off-by: massifben <105049157+massifben@users.noreply.github.com> --- .../compas/sct/commons/util/PrivateUtils.java | 12 +++++++++- .../sct/commons/util/PrivateUtilsTest.java | 24 +++++++++++++++---- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java index 049f1e48a..567d73f75 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateUtils.java @@ -7,6 +7,7 @@ import jakarta.xml.bind.JAXBElement; import lombok.NonNull; import lombok.experimental.UtilityClass; +import org.apache.commons.lang3.StringUtils; import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.dto.PrivateLinkedToStds; import org.lfenergy.compas.sct.commons.exception.ScdException; @@ -269,7 +270,7 @@ public static String stdCheckFormatExceptionMessage(TPrivate key) throws ScdExce public static Stream streamIcdHeaders(SCL scd) { return scd .getSubstation() - .get(0) + .getFirst() .getVoltageLevel() .stream() .map(TVoltageLevel::getBay).flatMap(Collection::stream) @@ -320,4 +321,13 @@ public static void copyCompasICDHeaderFromLNodePrivateIntoSTDPrivate(TPrivate st } + public static Optional extractStringPrivate(TBaseElement tBaseElement, String privateType) { + return tBaseElement.getPrivate().stream() + .filter(tPrivate -> privateType.equals(tPrivate.getType())) + .flatMap(tPrivate -> tPrivate.getContent().stream()) + .filter(String.class::isInstance) + .map(String.class::cast) + .filter(StringUtils::isNotBlank) + .findFirst(); } +} diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java index 5a9b20954..a29b84f0e 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/util/PrivateUtilsTest.java @@ -198,7 +198,7 @@ void createPrivate_should_return_private_new_private(Object compasElement) throw assertThat(resultPrivate).isNotNull() .hasFieldOrPropertyWithValue("type", privateEnum.getPrivateType()); assertThat(resultPrivate.getContent()).hasSize(1).first().satisfies(content -> assertThat(content).isInstanceOf(JAXBElement.class)); - JAXBElement content = (JAXBElement) resultPrivate.getContent().get(0); + JAXBElement content = (JAXBElement) resultPrivate.getContent().getFirst(); assertThat(content.isNil()).isFalse(); assertThat(content.getValue()).isNotNull().isInstanceOf(compasElement.getClass()) .isEqualTo(compasElement); @@ -258,10 +258,10 @@ void removePrivates_should_remove_privates_of_given_type() { PrivateUtils.removePrivates(baseElement, PrivateEnum.COMPAS_ICDHEADER); // Then assertThat(baseElement.getPrivate()).hasSize(1); - TPrivate tPrivate = baseElement.getPrivate().get(0); + TPrivate tPrivate = baseElement.getPrivate().getFirst(); assertThat(tPrivate.getType()).isEqualTo(privateSCD.getType()); assertThat(tPrivate.getContent()).hasSize(1).first().isInstanceOf(JAXBElement.class); - JAXBElement jaxbElement = (JAXBElement) tPrivate.getContent().get(0); + JAXBElement jaxbElement = (JAXBElement) tPrivate.getContent().getFirst(); assertThat(jaxbElement.isNil()).isFalse(); assertThat(jaxbElement.getValue()).isEqualTo(TCompasSclFileType.SCD); } @@ -561,7 +561,7 @@ void copyCompasICDHeaderFromLNodePrivateIntoSTDPrivate() { PrivateUtils.copyCompasICDHeaderFromLNodePrivateIntoSTDPrivate(stdTPrivate, lNodeCompasICDHeader); // Then - TCompasICDHeader result = PrivateUtils.extractCompasICDHeader(stdTPrivate).get(); + TCompasICDHeader result = PrivateUtils.extractCompasICDHeader(stdTPrivate).orElseThrow(); assertThat(result).extracting(TCompasICDHeader::getICDSystemVersionUUID, TCompasICDHeader::getIEDName, TCompasICDHeader::getIEDSubstationinstance, TCompasICDHeader::getBayLabel) .containsExactlyInAnyOrder("UUID-2", "IED-1", BigInteger.ONE, "BAY-1"); @@ -613,7 +613,7 @@ void getCompasICDHeaders_should_return_ICDHeaders() { private static TIED createTIED() { SCL sclFromFile = SclTestMarshaller.getSCLFromFile("/scd-ied-dtt-com-import-stds/std.xml"); - return sclFromFile.getIED().get(0); + return sclFromFile.getIED().getFirst(); } @Test @@ -630,4 +630,18 @@ void createPrivate_compas_Topo_should_succeed(){ .map(JAXBElement::getValue) .containsExactly(tCompasTopo1, tCompasTopo2); } + + @Test + void extractStringPrivate_should_succeed() { + // Given + TIED tied = new TIED(); + TPrivate tPrivate = new TPrivate(); + tPrivate.setType("MyCustomType"); + tPrivate.getContent().add("hello World"); + tied.getPrivate().add(tPrivate); + // When + Optional result = PrivateUtils.extractStringPrivate(tied, "MyCustomType"); + // Then + assertThat(result).hasValue("hello World"); + } } From c46a403e922f9a58093550d105ccead51460f3a9 Mon Sep 17 00:00:00 2001 From: massifben <105049157+massifben@users.noreply.github.com> Date: Tue, 21 Jan 2025 18:26:30 +0100 Subject: [PATCH 4/6] feat(#457): Add DataTypeTemplatesService.getEnumValues and enhance findDoLinkedToDa signature Signed-off-by: massifben <105049157+massifben@users.noreply.github.com> --- .../sct/commons/DataTypeTemplatesService.java | 97 ++++++---- .../compas/sct/commons/DoTypeService.java | 53 +++--- .../sct/commons/ExtRefEditorService.java | 12 +- .../compas/sct/commons/LnService.java | 26 +-- .../commons/api/DataTypeTemplateReader.java | 3 +- .../compas/sct/commons/domain/DataObject.java | 17 +- .../sct/commons/domain/DoLinkedToDa.java | 17 +- .../commons/domain/DoLinkedToDaFilter.java | 23 +-- .../commons/DataTypeTemplatesServiceTest.java | 171 +++++++++--------- .../compas/sct/commons/DoTypeServiceTest.java | 36 ++-- .../compas/sct/commons/LnServiceTest.java | 42 ++--- .../sct/commons/domain/DoLinkedToDaTest.java | 38 ++-- .../compas/sct/commons/dto/LNodeDTOTest.java | 99 +++++++--- .../scd_dtt_do_sdo_da_bda_tests.xml | 5 +- .../ied-test-schema-conf/ied_unit_test.xml | 4 +- 15 files changed, 356 insertions(+), 287 deletions(-) diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesService.java index b72c0b4b2..723f16209 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesService.java @@ -12,7 +12,9 @@ import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa; import org.lfenergy.compas.sct.commons.domain.DoLinkedToDaFilter; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Stream; @@ -30,18 +32,19 @@ public class DataTypeTemplatesService implements DataTypeTemplateReader { /** * verify if DO(name=Mod)/DA(name=stVal) exists in DataTypeTemplate - * @param dtt TDataTypeTemplates where Data object and Data attribute exists + * + * @param dtt TDataTypeTemplates where Data object and Data attribute exists * @param lNodeTypeId LNode Type ID where Data object exists - * DataTypeTemplates model : - * - * - * - * - * ... - * - * - * - * + * DataTypeTemplates model : + * + * + * + * + * ... + * + * + * + * * @return true if the Data Object (Mod) and Data attribute (stVal) present, false otherwise */ public boolean isDoModAndDaStValExist(TDataTypeTemplates dtt, String lNodeTypeId) { @@ -54,16 +57,14 @@ public boolean isDoModAndDaStValExist(TDataTypeTemplates dtt, String lNodeTypeId @Override public Stream getAllDoLinkedToDa(TDataTypeTemplates dtt) { - return lnodeTypeService.getLnodeTypes(dtt) + return lnodeTypeService.getLnodeTypes(dtt) .flatMap(tlNodeType -> { - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(new DataObject()); - doLinkedToDa.setDataAttribute(new DataAttribute()); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(new DataObject(), new DataAttribute()); return tlNodeType.getDO() .stream() .map(tdo -> doTypeService.findDoType(dtt, tdoType -> tdoType.getId().equals(tdo.getType())) .map(doType -> { - doLinkedToDa.getDataObject().setDoName(tdo.getName()); + doLinkedToDa.dataObject().setDoName(tdo.getName()); return doTypeService.getAllSDOLinkedToDa(dtt, doType, doLinkedToDa).stream(); })) .filter(Optional::isPresent) @@ -78,41 +79,49 @@ public Stream getFilteredDoLinkedToDa(TDataTypeTemplates dtt, Stri .flatMap(tlNodeType -> doService.getFilteredDos(tlNodeType, tdo -> StringUtils.isBlank(doLinkedToDaFilter.doName()) || doLinkedToDaFilter.doName().equals(tdo.getName())) .flatMap(tdo -> { - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName(tdo.getName()); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(new DataAttribute()); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, new DataAttribute()); return doTypeService.findDoType(dtt, tdoType -> tdoType.getId().equals(tdo.getType())) .stream() .flatMap(tdoType -> { - doLinkedToDa.getDataObject().setCdc(tdoType.getCdc()); + doLinkedToDa.dataObject().setCdc(tdoType.getCdc()); return doTypeService.getAllSDOLinkedToDa(dtt, tdoType, doLinkedToDa).stream() .filter(doLinkedToDa1 -> StringUtils.isBlank(doLinkedToDaFilter.doName()) || (doLinkedToDa1.getDoRef().startsWith(doLinkedToDaFilter.getDoRef()) && StringUtils.isBlank(doLinkedToDaFilter.daName())) || doLinkedToDa1.getDaRef().startsWith(doLinkedToDaFilter.getDaRef())); }); - })); + })); } @Override - public Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDa doLinkedToDa) { - List dataRefList = new ArrayList<>(doLinkedToDa.getDataObject().getSdoNames()); - dataRefList.addAll(doLinkedToDa.getDataAttribute().getBdaNames()); + public Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDaFilter doLinkedToDaFilter) { + List dataRefList = new ArrayList<>(doLinkedToDaFilter.sdoNames()); + dataRefList.addAll(doLinkedToDaFilter.bdaNames()); return lnodeTypeService.findLnodeType(dtt, lNodeType -> lNodeTypeId.equals(lNodeType.getId())) - .flatMap(lNodeType -> doService.findDo(lNodeType, tdo -> tdo.getName().equals(doLinkedToDa.getDataObject().getDoName())) + .flatMap(lNodeType -> doService.findDo(lNodeType, tdo -> tdo.getName().equals(doLinkedToDaFilter.doName())) // Search DoType for each DO .flatMap(tdo -> doTypeService.findDoType(dtt, doType -> doType.getId().equals(tdo.getType())) .flatMap(tdoType -> { // Search last DoType from DOType (SDO) > DOType (SDO) TDOType lastDoType = findDOTypeBySdoName(dtt, tdoType, dataRefList); + // Prepare DataObject + DataObject dataObject = new DataObject(tdo.getName(), tdoType.getCdc(), doLinkedToDaFilter.sdoNames()); // Search first DA from last DoType - return sdoOrDAService.findDA(lastDoType, tda1 -> tda1.getName().equals(doLinkedToDa.getDataAttribute().getDaName())) + return sdoOrDAService.findDA(lastDoType, tda -> tda.getName().equals(doLinkedToDaFilter.daName())) .flatMap(tda -> { + // Prepare DataAttribute + DataAttribute dataAttribute = new DataAttribute(); + dataAttribute.setDaName(tda.getName()); + dataAttribute.setFc(tda.getFc()); // Check if first DA is STRUCT or not - if(!tda.getBType().equals(TPredefinedBasicTypeEnum.STRUCT)) { - return Optional.of(doLinkedToDa); + if (!tda.getBType().equals(TPredefinedBasicTypeEnum.STRUCT)) { + dataAttribute.addDaVal(tda.getVal()); + dataAttribute.setBType(tda.getBType()); + dataAttribute.setType(tda.getType()); + dataAttribute.setValImport(tda.isValImport()); + return Optional.of(new DoLinkedToDa(dataObject, dataAttribute)); } // Search first DaType from DOType (from last DOType where DA is STRUCT) return getDATypeByDaName(dtt, lastDoType, tda.getName()) @@ -122,24 +131,46 @@ public Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lN && tbda.getBType().equals(TPredefinedBasicTypeEnum.STRUCT), dataRefList); // last DAType should contain BDA not STRUCT - if(dataRefList.size() != 1) return Optional.empty(); + if (dataRefList.size() != 1) return Optional.empty(); String lastBdaName = dataRefList.getFirst(); return bdaService.findBDA(lastDAType, tbda -> tbda.getName().equals(lastBdaName) && !tbda.getBType().equals(TPredefinedBasicTypeEnum.STRUCT)) - .flatMap(tbda -> Optional.of(doLinkedToDa)); + .flatMap(tbda -> { + dataAttribute.getBdaNames().addAll(doLinkedToDaFilter.bdaNames()); + dataAttribute.setBType(tbda.getBType()); + dataAttribute.setType(tbda.getType()); + dataAttribute.setValImport(tbda.isValImport()); + dataAttribute.addDaVal(tbda.getVal()); + return Optional.of(new DoLinkedToDa(dataObject, dataAttribute)); + }); }); }); }) )); } + @Override + public Stream getEnumValues(TDataTypeTemplates dataTypeTemplates, String lnType, DoLinkedToDaFilter doLinkedToDaFilter) { + return findDoLinkedToDa(dataTypeTemplates, lnType, doLinkedToDaFilter) + .map(DoLinkedToDa::dataAttribute) + .filter(dataAttribute -> TPredefinedBasicTypeEnum.ENUM.equals(dataAttribute.getBType())) + .map(DataAttribute::getType) + .flatMap(enumId -> + dataTypeTemplates.getEnumType().stream() + .filter(tEnumType -> tEnumType.getId().equals(enumId)) + .findFirst()) + .stream() + .flatMap(tEnumType -> tEnumType.getEnumVal().stream()) + .map(TEnumVal::getValue); + } + private Optional getDATypeByDaName(TDataTypeTemplates dtt, TDOType tdoType, String daName) { return sdoOrDAService.findDA(tdoType, tda -> tda.getName().equals(daName)) .flatMap(tda -> daTypeService.findDaType(dtt, tda.getType())); } private TDOType findDOTypeBySdoName(TDataTypeTemplates dtt, TDOType tdoType, List sdoNames) { - if(sdoNames.isEmpty()) return tdoType; + if (sdoNames.isEmpty()) return tdoType; return sdoOrDAService.findSDO(tdoType, tsdo -> tsdo.getName().equals(sdoNames.getFirst())) .flatMap(tsdo -> doTypeService.findDoType(dtt, tdoType2 -> tdoType2.getId().equals(tsdo.getType()))) .map(tdoType2 -> { @@ -149,7 +180,7 @@ private TDOType findDOTypeBySdoName(TDataTypeTemplates dtt, TDOType tdoType, Lis } private TDAType findDATypeByBdaName(TDataTypeTemplates dtt, TDAType tdaType, Predicate tbdaPredicate, List bdaNames) { - if(bdaNames.isEmpty()) return tdaType; + if (bdaNames.isEmpty()) return tdaType; return bdaService.getFilteredBDAs(tdaType, tbdaPredicate) .findFirst() .flatMap(tbda -> daTypeService.findDaType(dtt, tbda.getType())) diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DoTypeService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DoTypeService.java index 17cf62278..5b53aa546 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DoTypeService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/DoTypeService.java @@ -16,9 +16,9 @@ public class DoTypeService { - final DaTypeService daTypeService = new DaTypeService(); - final SDOOrDAService sdoOrDAService = new SDOOrDAService(); - final BDAService bdaService = new BDAService(); + final DaTypeService daTypeService = new DaTypeService(); + final SDOOrDAService sdoOrDAService = new SDOOrDAService(); + final BDAService bdaService = new BDAService(); public Stream getDoTypes(TDataTypeTemplates tDataTypeTemplates) { return tDataTypeTemplates.getDOType().stream(); @@ -37,53 +37,54 @@ public List getAllSDOLinkedToDa(TDataTypeTemplates dtt, TDOType td // DA -> BDA -> BDA.. sdoOrDAService.getDAs(tdoType).forEach(tda -> { DoLinkedToDa doLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate); - doLinkedToDa.getDataAttribute().setDaName(tda.getName()); - if(tda.isSetFc()) { - doLinkedToDa.getDataAttribute().setFc(tda.getFc()); + doLinkedToDa.dataAttribute().setDaName(tda.getName()); + if (tda.isSetFc()) { + doLinkedToDa.dataAttribute().setFc(tda.getFc()); } // STRUCT type (BType=STRUCT) refer to BDA, otherwise it is DA - if(TPredefinedBasicTypeEnum.STRUCT.equals(tda.getBType())) { + if (TPredefinedBasicTypeEnum.STRUCT.equals(tda.getBType())) { daTypeService.findDaType(dtt, tda.getType()) .ifPresent(nextDaType -> result.addAll(getDaLinkedToBDA(dtt, nextDaType, doLinkedToDa).toList())); } else { - doLinkedToDa.setDataAttribute(updateDataAttributeFromDaOrBda(tda, doLinkedToDa.getDataAttribute())); - result.add(doLinkedToDa); + DataAttribute dataAttribute = updateDataAttributeFromDaOrBda(tda, doLinkedToDa.dataAttribute()); + result.add(new DoLinkedToDa(doLinkedToDa.dataObject(), dataAttribute)); } }); // SDO -> SDO -> SDO.. sdoOrDAService.getSDOs(tdoType) .forEach(tsdo -> { - if(tsdo.isSetType()){ - findDoType(dtt, tdoType1 -> tdoType1.getId().equals(tsdo.getType())) - .ifPresent(nextDoType -> { - DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate); - newDoLinkedToDa.getDataObject().getSdoNames().add(tsdo.getName()); - if(nextDoType.isSetCdc()) { - newDoLinkedToDa.getDataObject().setCdc(nextDoType.getCdc()); - } - result.addAll(getAllSDOLinkedToDa(dtt, nextDoType, newDoLinkedToDa)); - }); + if (tsdo.isSetType()) { + findDoType(dtt, tdoType1 -> tdoType1.getId().equals(tsdo.getType())) + .ifPresent(nextDoType -> { + DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate); + newDoLinkedToDa.dataObject().getSdoNames().add(tsdo.getName()); + if (nextDoType.isSetCdc()) { + newDoLinkedToDa.dataObject().setCdc(nextDoType.getCdc()); + } + result.addAll(getAllSDOLinkedToDa(dtt, nextDoType, newDoLinkedToDa)); + }); } }); return result; } + private Stream getDaLinkedToBDA(TDataTypeTemplates dtt, TDAType tdaType1, DoLinkedToDa doLinkedToDaTemplate) { // BDA -> BDA -> BDA.. return bdaService.getBDAs(tdaType1) .flatMap(tbda -> { DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate); - newDoLinkedToDa.getDataAttribute().getBdaNames().add(tbda.getName()); + newDoLinkedToDa.dataAttribute().getBdaNames().add(tbda.getName()); // STRUCT type (BType=STRUCT) refer to complex BDA object, otherwise it is kind of DA object - if(TPredefinedBasicTypeEnum.STRUCT.equals(tbda.getBType())){ - return daTypeService.findDaType(dtt, tbda.getType()) + if (TPredefinedBasicTypeEnum.STRUCT.equals(tbda.getBType())) { + return daTypeService.findDaType(dtt, tbda.getType()) .stream().flatMap(nextDaType -> getDaLinkedToBDA(dtt, nextDaType, newDoLinkedToDa)); } else { - newDoLinkedToDa.setDataAttribute(updateDataAttributeFromDaOrBda(tbda, newDoLinkedToDa.getDataAttribute())); - return Stream.of(newDoLinkedToDa); + DataAttribute dataAttribute = updateDataAttributeFromDaOrBda(tbda, newDoLinkedToDa.dataAttribute()); + return Stream.of(new DoLinkedToDa(newDoLinkedToDa.dataObject(), dataAttribute)); } - }); + }); } private DataAttribute updateDataAttributeFromDaOrBda(TAbstractDataAttribute daOrBda, DataAttribute dataAttribute) { @@ -94,4 +95,4 @@ private DataAttribute updateDataAttributeFromDaOrBda(TAbstractDataAttribute daOr return dataAttribute; } -} \ No newline at end of file +} diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java index 221b133f5..94593fdd7 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java @@ -23,7 +23,10 @@ import org.lfenergy.compas.sct.commons.util.PrivateUtils; import org.lfenergy.compas.sct.commons.util.Utils; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; import static org.apache.commons.lang3.StringUtils.*; import static org.lfenergy.compas.sct.commons.util.CommonConstants.*; @@ -271,7 +274,7 @@ public List manageBindingForLDEPF(SCL scd, EPF epf) { .findFirst().ifPresent(channel -> { List iedSources = getIedSources(sclRootAdapter, extRefBayRef.compasBay(), channel); if (iedSources.size() == 1) { - updateLDEPFExtRefBinding(extRefBayRef.extRef(), iedSources.get(0), channel); + updateLDEPFExtRefBinding(extRefBayRef.extRef(), iedSources.getFirst(), channel); LDeviceAdapter lDeviceAdapter = new LDeviceAdapter(new IEDAdapter(sclRootAdapter, tied.getName()), tlDevice); sclReportItems.addAll(updateLDEPFDos(lDeviceAdapter, extRefBayRef.extRef(), channel)); } else { @@ -307,15 +310,12 @@ public void epfPostProcessing(SCL scd) { && (purPoseDAI.get().getVal().getFirst().getValue().startsWith("DYN_LDEPF_DIGITAL CHANNEL") || purPoseDAI.get().getVal().getFirst().getValue().startsWith("DYN_LDEPF_ANALOG CHANNEL")); if(isSetSrcRefExistAndEmpty && isPurposeExistAndMatchChannel) { - - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName(tdoi.getName()); - doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName(SETSRCREF_DA_NAME); dataAttribute.setDaiValues(List.of(new DaVal(null, tied.getName()+tlDevice.getInst()+"/LPHD0.Proxy"))); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); lnEditor.updateOrCreateDOAndDAInstances(tlDevice.getLN0(), doLinkedToDa); } }))); 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 2ccad6508..ba06e5f7e 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 @@ -129,10 +129,10 @@ public Optional getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLi @Override public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedToDa) { - createDoiSdiDaiChainIfNotExists(tAnyLN, doLinkedToDa.getDataObject(), doLinkedToDa.getDataAttribute()) + createDoiSdiDaiChainIfNotExists(tAnyLN, doLinkedToDa.dataObject(), doLinkedToDa.dataAttribute()) .ifPresent(tdai -> { - List daiVals = doLinkedToDa.getDataAttribute().getDaiValues(); - if(!hasSettingGroup(tdai) && daiVals.size() == 1 && daiVals.getFirst().settingGroup() == null) { + List daiVals = doLinkedToDa.dataAttribute().getDaiValues(); + if (!hasSettingGroup(tdai) && daiVals.size() == 1 && daiVals.getFirst().settingGroup() == null) { String value = daiVals.getFirst().val(); tdai.getVal().stream().findFirst() .ifPresentOrElse(tVal -> tVal.setValue(value), @@ -152,11 +152,11 @@ public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedT public void completeFromDAInstance(TIED tied, String ldInst, TAnyLN anyLN, DoLinkedToDa doLinkedToDa) { getDOAndDAInstances(anyLN, doLinkedToDa.toFilter()) .ifPresent(tdai -> { - if(tdai.isSetVal()) { - doLinkedToDa.getDataAttribute().addDaVal(tdai.getVal()); + if (tdai.isSetVal()) { + doLinkedToDa.dataAttribute().addDaVal(tdai.getVal()); } - if(doLinkedToDa.getDataAttribute().getFc() == TFCEnum.SG || doLinkedToDa.getDataAttribute().getFc() == TFCEnum.SE) { - if(hasSettingGroup(tdai)) { + if (doLinkedToDa.dataAttribute().getFc() == TFCEnum.SG || doLinkedToDa.dataAttribute().getFc() == TFCEnum.SE) { + if (hasSettingGroup(tdai)) { boolean isIedHasConfSG = tied.isSetAccessPoint() && tied.getAccessPoint().stream() .filter(tAccessPoint -> tAccessPoint.getServer() != null @@ -166,13 +166,13 @@ public void completeFromDAInstance(TIED tied, String ldInst, TAnyLN anyLN, DoLin && tAccessPoint.getServices() != null && tAccessPoint.getServices().getSettingGroups() != null && tAccessPoint.getServices().getSettingGroups().getConfSG() != null); - doLinkedToDa.getDataAttribute().setValImport((!tdai.isSetValImport() || tdai.isValImport()) && isIedHasConfSG); + doLinkedToDa.dataAttribute().setValImport((!tdai.isSetValImport() || tdai.isValImport()) && isIedHasConfSG); } else { - log.warn(String.format("Inconsistency in the SCD file - DAI= %s with fc= %s must have a sGroup attribute", tdai.getName(), doLinkedToDa.getDataAttribute().getFc())); - doLinkedToDa.getDataAttribute().setValImport(false); - } - } else if(tdai.isSetValImport()) { - doLinkedToDa.getDataAttribute().setValImport(tdai.isValImport()); + log.warn(String.format("Inconsistency in the SCD file - DAI= %s with fc= %s must have a sGroup attribute", tdai.getName(), doLinkedToDa.dataAttribute().getFc())); + doLinkedToDa.dataAttribute().setValImport(false); + } + } else if (tdai.isSetValImport()) { + doLinkedToDa.dataAttribute().setValImport(tdai.isValImport()); } }); } diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/DataTypeTemplateReader.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/DataTypeTemplateReader.java index 63640ec7f..c50434f1a 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/DataTypeTemplateReader.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/DataTypeTemplateReader.java @@ -19,6 +19,7 @@ public interface DataTypeTemplateReader { Stream getFilteredDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDaFilter doLinkedToDaFilter); - Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDa doLinkedToDa); + Optional findDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDaFilter doLinkedToDaFilter); + Stream getEnumValues(TDataTypeTemplates dataTypeTemplates, String lnType, DoLinkedToDaFilter doLinkedToDaFilter); } diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DataObject.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DataObject.java index e8119345b..33a5e53e0 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DataObject.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DataObject.java @@ -4,7 +4,9 @@ package org.lfenergy.compas.sct.commons.domain; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import org.apache.commons.lang3.StringUtils; import org.lfenergy.compas.scl2007b4.model.TPredefinedCDCEnum; @@ -13,18 +15,21 @@ @Getter @Setter +@NoArgsConstructor public class DataObject { private String doName; private TPredefinedCDCEnum cdc; private List sdoNames = new ArrayList<>(); + public DataObject(String doName, TPredefinedCDCEnum cdc, List sdoNames) { + this.doName = doName; + this.cdc = cdc; + this.sdoNames.addAll(sdoNames); + } + public static DataObject copyFrom(DataObject dataObject) { - DataObject dataObject1 = new DataObject(); - dataObject1.setDoName(dataObject.getDoName()); - dataObject1.setCdc(dataObject.getCdc()); - dataObject1.getSdoNames().addAll(dataObject.getSdoNames()); - return dataObject1; + return new DataObject(dataObject.getDoName(), dataObject.getCdc(), dataObject.getSdoNames()); } @Override diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDa.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDa.java index 7a1d86a48..92e34de9f 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDa.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDa.java @@ -5,25 +5,16 @@ package org.lfenergy.compas.sct.commons.domain; -import lombok.Getter; -import lombok.Setter; - import static org.lfenergy.compas.sct.commons.util.CommonConstants.MOD_DO_NAME; import static org.lfenergy.compas.sct.commons.util.CommonConstants.STVAL_DA_NAME; -@Getter -@Setter -public class DoLinkedToDa { - - private DataObject dataObject; - private DataAttribute dataAttribute; +public record DoLinkedToDa(DataObject dataObject, DataAttribute dataAttribute) { public static DoLinkedToDa copyFrom(DoLinkedToDa doLinkedToDa) { - DoLinkedToDa newDoLinkedToDa = new DoLinkedToDa(); - newDoLinkedToDa.setDataObject(DataObject.copyFrom(doLinkedToDa.getDataObject())); - newDoLinkedToDa.setDataAttribute(DataAttribute.copyFrom(doLinkedToDa.getDataAttribute())); - return newDoLinkedToDa; + return new DoLinkedToDa( + DataObject.copyFrom(doLinkedToDa.dataObject()), + DataAttribute.copyFrom(doLinkedToDa.dataAttribute())); } public String getDoRef() { diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaFilter.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaFilter.java index dbbe8fc1a..04cdfd247 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaFilter.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaFilter.java @@ -19,32 +19,33 @@ public DoLinkedToDaFilter(String doName, List sdoNames, String daName, L this.daName = StringUtils.isBlank(daName) ? null : daName; this.bdaNames = bdaNames == null ? Collections.emptyList() : List.copyOf(bdaNames); } - public DoLinkedToDaFilter(){ - this(null,null,null,null); - } public static DoLinkedToDaFilter from(String doNames, String daNames) { String doName = null; List sdoNames = null; String daName = null; List bdaNames = null; - if (StringUtils.isNotBlank(doNames)){ + if (StringUtils.isNotBlank(doNames)) { doName = doNames.split("\\.")[0]; sdoNames = Arrays.stream(doNames.split("\\.")).skip(1).toList(); } - if (StringUtils.isNotBlank(daNames)){ + if (StringUtils.isNotBlank(daNames)) { daName = daNames.split("\\.")[0]; bdaNames = Arrays.stream(daNames.split("\\.")).skip(1).toList(); } return new DoLinkedToDaFilter(doName, sdoNames, daName, bdaNames); } -public String getDoRef() { - return doName + (sdoNames().isEmpty() ? StringUtils.EMPTY : "." + String.join(".", sdoNames())); -} + public String getDoRef() { + return doName + (sdoNames().isEmpty() ? StringUtils.EMPTY : "." + String.join(".", sdoNames())); + } -public String getDaRef() { - return daName + (bdaNames().isEmpty() ? StringUtils.EMPTY : "." + String.join(".", bdaNames())); -} + public String getDaRef() { + return daName + (bdaNames().isEmpty() ? StringUtils.EMPTY : "." + String.join(".", bdaNames())); + } + @Override + public String toString() { + return getDoRef() + "." + getDaRef(); + } } diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesServiceTest.java index f9d5898d1..32bb50f2d 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DataTypeTemplatesServiceTest.java @@ -4,6 +4,7 @@ package org.lfenergy.compas.sct.commons; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.domain.DataAttribute; @@ -17,17 +18,24 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.tuple; -import static org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateTestUtils.*; +import static org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateTestUtils.initDttFromFile; +import static org.lfenergy.compas.sct.commons.util.SclConstructorHelper.newVal; class DataTypeTemplatesServiceTest { + private DataTypeTemplatesService dataTypeTemplatesService; + + @BeforeEach + void setUp() { + dataTypeTemplatesService = new DataTypeTemplatesService(); + } + @Test void isDoModAndDaStValExist_when_LNodeType_not_exist_should_return_false() { //Given TDataTypeTemplates dtt = new TDataTypeTemplates(); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); boolean result = dataTypeTemplatesService.isDoModAndDaStValExist(dtt, "lnodeTypeId"); //Then assertThat(result).isFalse(); @@ -42,7 +50,6 @@ void isDoModAndDaStValExist_when_Do_not_exist_should_return_false() { tlNodeType.setId("lnodeTypeId"); dtt.getLNodeType().add(tlNodeType); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); boolean result = dataTypeTemplatesService.isDoModAndDaStValExist(dtt, "lnodeTypeId"); //Then assertThat(result).isFalse(); @@ -60,7 +67,6 @@ void isDoModAndDaStValExist_when_DoType_not_exist_should_return_false() { tlNodeType.getDO().add(tdo); dtt.getLNodeType().add(tlNodeType); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); boolean result = dataTypeTemplatesService.isDoModAndDaStValExist(dtt, "lnodeTypeId"); //Then assertThat(result).isFalse(); @@ -82,7 +88,6 @@ void isDoModAndDaStValExist_when_Da_Mod_not_exist_should_return_false() { tdoType.setId("doTypeId"); dtt.getDOType().add(tdoType); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); boolean result = dataTypeTemplatesService.isDoModAndDaStValExist(dtt, "lnodeTypeId"); //Then assertThat(result).isFalse(); @@ -107,7 +112,6 @@ void isDoModAndDaStValExist_when_Da_stVal_not_found_should_return_false() { tdoType.getSDOOrDA().add(tda); dtt.getDOType().add(tdoType); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); boolean result = dataTypeTemplatesService.isDoModAndDaStValExist(dtt, "lnodeTypeId"); //Then assertThat(result).isFalse(); @@ -132,7 +136,6 @@ void isDoModAndDaStValExist_when_DO_Mod_And_DA_stVal_exist_return_true() { tdoType.getSDOOrDA().add(tda); dtt.getDOType().add(tdoType); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); boolean result = dataTypeTemplatesService.isDoModAndDaStValExist(dtt, "lnodeTypeId"); //Then assertThat(result).isTrue(); @@ -144,19 +147,18 @@ void getFilteredDoLinkedToDa_should_return_expected_items() { TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_test.xml"); String lNodeTypeId = "LNodeType0"; - DoLinkedToDaFilter doLinkedToDaFilter = new DoLinkedToDaFilter(); + DoLinkedToDaFilter doLinkedToDaFilter = new DoLinkedToDaFilter(null, null, null, null); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then assertThat(result).hasSize(9) - .extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) + .extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) .containsExactlyInAnyOrder( tuple("FirstDoName", List.of(), "sampleDaName1", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), @@ -188,15 +190,14 @@ void getFilteredDOAndDA_when_given_DoName_should_return_expected_dataReference() DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("SecondDoName", ""); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then - assertThat(result).hasSize(1).extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) + assertThat(result).hasSize(1).extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) .containsExactly(tuple("SecondDoName", List.of(), "sampleDaName41", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null)); } @@ -209,15 +210,14 @@ void getFilteredDOAndDA_when_given_DO_with_one_structName_should_return_expected DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("FirstDoName.sdoName1", ""); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then - assertThat(result).hasSize(3).extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) + assertThat(result).hasSize(3).extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) .containsExactlyInAnyOrder(tuple("FirstDoName", List.of("sdoName1"), "sampleDaName21", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), tuple("FirstDoName", List.of("sdoName1", "sdoName21"), "sampleDaName31", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), tuple("FirstDoName", List.of("sdoName1", "sdoName21", "sdoName31"), "sampleDaName41", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null)); @@ -231,15 +231,14 @@ void getFilteredDOAndDA_when_given_DO_with_many_structName_should_return_expecte DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("FirstDoName.sdoName1.sdoName21", ""); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then - assertThat(result).hasSize(2).extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) + assertThat(result).hasSize(2).extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) .containsExactlyInAnyOrder(tuple("FirstDoName", List.of("sdoName1", "sdoName21"), "sampleDaName31", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), tuple("FirstDoName", List.of("sdoName1", "sdoName21", "sdoName31"), "sampleDaName41", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null)); } @@ -253,15 +252,14 @@ void getFilteredDOAndDA_when_given_DO_and_DA_with_structNames_should_return_expe DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("FirstDoName.sdoName2", "structDaName1.structBdaName1.enumBdaName22"); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList(); //Then - assertThat(result).hasSize(1).extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) + assertThat(result).hasSize(1).extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) .containsExactlyInAnyOrder(tuple("FirstDoName", List.of("sdoName2"), "structDaName1", List.of("structBdaName1", "enumBdaName22"), TPredefinedBasicTypeEnum.ENUM, "EnumType1")); } @@ -270,58 +268,63 @@ void findDoLinkedToDa_should_find_DO_SDO_DA_and_all_BDA() { // Given SCL scd = SclTestMarshaller.getSCLFromFile("/ied-test-schema-conf/ied_unit_test.xml"); TDataTypeTemplates dtt = scd.getDataTypeTemplates(); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("Do"); dataObject.setSdoNames(List.of("sdo1", "d")); - doLinkedToDa.setDataObject(dataObject); + dataObject.setCdc(TPredefinedCDCEnum.WYE); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("antRef"); dataAttribute.setBdaNames(List.of("bda1", "bda2", "bda3")); - doLinkedToDa.setDataAttribute(dataAttribute); + dataAttribute.setFc(TFCEnum.ST); + dataAttribute.setBType(TPredefinedBasicTypeEnum.ENUM); + dataAttribute.setType("RecCycModKind"); + dataAttribute.setValImport(true); + dataAttribute.addDaVal(List.of(newVal("myValue"))); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); + DoLinkedToDaFilter doLinkedToDaFilter = new DoLinkedToDaFilter("Do", List.of("sdo1", "d"), "antRef", List.of("bda1", "bda2", "bda3")); // When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LNO1", doLinkedToDa); + Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LNO1", doLinkedToDaFilter); // Then - assertThat(result).contains(doLinkedToDa); + assertThat(result).get().usingRecursiveComparison().isEqualTo(doLinkedToDa); } @Test void findDoLinkedToDa_should_find_DO_SDO_DA_and_partial_BDA_list() { // Given TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda.xml"); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("Do1"); + dataObject.setCdc(TPredefinedCDCEnum.WYE); dataObject.setSdoNames(List.of("sdo1", "sdo2")); - doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("da2"); + dataAttribute.setFc(TFCEnum.ST); dataAttribute.setBdaNames(List.of("bda1", "bda2")); - doLinkedToDa.setDataAttribute(dataAttribute); + dataAttribute.setBType(TPredefinedBasicTypeEnum.ENUM); + dataAttribute.setType("EnumType1"); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); // When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LN1", doLinkedToDa); + Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LN1", new DoLinkedToDaFilter("Do1", List.of("sdo1", "sdo2"), "da2", List.of("bda1", "bda2"))); // Then - assertThat(result).contains(doLinkedToDa); + assertThat(result).get().usingRecursiveComparison().isEqualTo(doLinkedToDa); } @Test void findDoLinkedToDa_should_find_DO_DA() { // Given TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda.xml"); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("Do1"); - doLinkedToDa.setDataObject(dataObject); + dataObject.setCdc(TPredefinedCDCEnum.WYE); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("da1"); - doLinkedToDa.setDataAttribute(dataAttribute); + dataAttribute.setBType(TPredefinedBasicTypeEnum.BOOLEAN); + dataAttribute.setFc(TFCEnum.ST); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); // When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LN1", doLinkedToDa); + Optional result = dataTypeTemplatesService.findDoLinkedToDa(dtt, "LN1", new DoLinkedToDaFilter("Do1", List.of(), "da1", List.of())); // Then - assertThat(result).contains(doLinkedToDa); + assertThat(result).get().usingRecursiveComparison().isEqualTo(doLinkedToDa); } @Test @@ -329,7 +332,6 @@ void getAllDOAndDA_when_LNodeType_not_exist_should_return_empty_list() { //Given TDataTypeTemplates dtt = new TDataTypeTemplates(); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); //Then assertThat(result).isEmpty(); @@ -343,8 +345,7 @@ void getAllDOAndDA_when_DO_not_exist_should_return_empty_list() { tlNodeType.setId("lnodeTypeId"); dtt.getLNodeType().add(tlNodeType); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); + List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); //Then assertThat(result).isEmpty(); } @@ -361,8 +362,7 @@ void getAllDOAndDA_when_DoType_not_exist_should_return_empty_list() { tlNodeType.getDO().add(tdo); dtt.getLNodeType().add(tlNodeType); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); + List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); //Then assertThat(result).isEmpty(); } @@ -384,8 +384,7 @@ void getAllDOAndDA_when_DA_not_exist_should_return_empty_list() { dtt.getDOType().add(tdoType); scl.setDataTypeTemplates(dtt); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); + List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); //Then assertThat(result).isEmpty(); } @@ -410,15 +409,14 @@ void getAllDOAndDA_when_1DO_linked_to_1DA_should_return_expectedItems() { dtt.getDOType().add(tdoType); scl.setDataTypeTemplates(dtt); //When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); + List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); //Then assertThat(result).hasSize(1); assertThat(result.getFirst()) - .extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames()) + .extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames()) .containsExactly("doName", List.of(), "daName", List.of()); } @@ -428,16 +426,15 @@ void getAllDOAndDA_should_return_all_dataReference() { // File contain all combinations that can be made TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_tests.xml"); // When - DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService(); - List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); + List result = dataTypeTemplatesService.getAllDoLinkedToDa(dtt).toList(); // Then assertThat(result).hasSize(34) - .extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) + .extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) .containsExactlyInAnyOrder( // -> Do11 tuple("Do11", List.of(), "sampleDa11", List.of(), TPredefinedBasicTypeEnum.ENUM, "RecCycModKind"), @@ -529,4 +526,14 @@ void getAllDOAndDA_should_return_all_dataReference() { ); } + @Test + void getEnumValues_should_succeed() { + // Given + TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_tests.xml"); + // When + List enumValues = dataTypeTemplatesService.getEnumValues(dtt, "LN1", DoLinkedToDaFilter.from("Do11", "sampleDa11")).toList(); + // Then + assertThat(enumValues).containsExactly("REB", "RVB", "RVL", "RVB+L"); + } + } diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DoTypeServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DoTypeServiceTest.java index df023a117..348418743 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DoTypeServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/DoTypeServiceTest.java @@ -11,16 +11,13 @@ import org.lfenergy.compas.sct.commons.domain.DataAttribute; import org.lfenergy.compas.sct.commons.domain.DataObject; import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa; -import org.lfenergy.compas.sct.commons.dto.DaTypeName; -import org.lfenergy.compas.sct.commons.dto.DataAttributeRef; -import org.lfenergy.compas.sct.commons.dto.DoTypeName; import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller; import java.util.List; import static org.assertj.core.api.Assertions.tuple; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; -import static org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateTestUtils.*; +import static org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateTestUtils.initDttFromFile; class DoTypeServiceTest { @@ -85,23 +82,20 @@ void getAllSDOLinkedToDa_should_return_expected_dataReference() { TDOType tdoType = doTypeService.findDoType(dtt, tdoType1 -> tdoType1.getId() .equals("DOType0")).orElseThrow(); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("FirstDoName"); - doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); - doLinkedToDa.setDataAttribute(dataAttribute); - + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); //When List result = doTypeService.getAllSDOLinkedToDa(dtt, tdoType, doLinkedToDa); //Then assertThat(result).hasSize(8) - .extracting(doLinkedToDa1 -> doLinkedToDa1.getDataObject().getDoName(), - doLinkedToDa1 -> doLinkedToDa1.getDataObject().getSdoNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getDaName(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBdaNames(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getBType(), - doLinkedToDa1 -> doLinkedToDa1.getDataAttribute().getType()) + .extracting(doLinkedToDa1 -> doLinkedToDa1.dataObject().getDoName(), + doLinkedToDa1 -> doLinkedToDa1.dataObject().getSdoNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getDaName(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBdaNames(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getBType(), + doLinkedToDa1 -> doLinkedToDa1.dataAttribute().getType()) .containsExactlyInAnyOrder( tuple("FirstDoName", List.of(), "sampleDaName1", List.of(), TPredefinedBasicTypeEnum.BOOLEAN, null), @@ -131,22 +125,20 @@ void getAllSDOLinkedToDa_should_return_all_dai() { DoTypeService doTypeService = new DoTypeService(); TDOType tdoType = doTypeService.findDoType(dtt, tdoType1 -> tdoType1.getId() .equals("DO11")).orElseThrow(); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("firstDONAME"); - doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); // When List list = doTypeService.getAllSDOLinkedToDa(dtt, tdoType, doLinkedToDa); // Then assertThat(list) .hasSize(811) - .allMatch(dataAttributeRef -> StringUtils.startsWith(dataAttributeRef.getDataObject().getDoName(), "firstDONAME")) - .areExactly(1, new Condition<>(dataAttributeRef -> dataAttributeRef.getDataAttribute().getDaName().equals("da1"), "Il n'y a que certaines réponses contenant da1")) - .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.getDataAttribute().getDaName().equals("da11"), "Il n'y a que certaines réponses contenant da11")) - .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.getDataAttribute().getDaName().equals("da22"), "Il n'y a que certaines réponses contenant da22")) - .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.getDataAttribute().getDaName().equals("da32"), "Il n'y a que certaines réponses contenant da32")); + .allMatch(dataAttributeRef -> StringUtils.startsWith(dataAttributeRef.dataObject().getDoName(), "firstDONAME")) + .areExactly(1, new Condition<>(dataAttributeRef -> dataAttributeRef.dataAttribute().getDaName().equals("da1"), "Il n'y a que certaines réponses contenant da1")) + .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.dataAttribute().getDaName().equals("da11"), "Il n'y a que certaines réponses contenant da11")) + .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.dataAttribute().getDaName().equals("da22"), "Il n'y a que certaines réponses contenant da22")) + .areExactly(270, new Condition<>(dataAttributeRef -> dataAttributeRef.dataAttribute().getDaName().equals("da32"), "Il n'y a que certaines réponses contenant da32")); } } 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 8daa222d7..24d3a3ebc 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 @@ -212,9 +212,7 @@ void completeFromDataAttributeInstance_should_complete_when_valImport_set_or_not dataObject.setDoName("Do"); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("Da"); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); //When LnService lnService = new LnService(); lnService.completeFromDAInstance(tied, "ldInst", tAnyLN, doLinkedToDa); @@ -272,15 +270,13 @@ void completeFromDataAttributeInstance_should_complete_when_settingGroup_set_or_ dataAttribute.setDaName("Da"); dataAttribute.setFc(givenFc); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); //When LnService lnService = new LnService(); lnService.completeFromDAInstance(tied, "ldInst", tAnyLN, doLinkedToDa); //Then - assertThat(doLinkedToDa.getDataAttribute().isValImport()).isEqualTo(expectedValImport); + assertThat(doLinkedToDa.dataAttribute().isValImport()).isEqualTo(expectedValImport); } @@ -294,14 +290,12 @@ void completeFromDataAttributeInstance__should_not_complete_when_not_found() { DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("Da"); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); //When LnService lnService = new LnService(); lnService.completeFromDAInstance(tied, "ldInst", tAnyLN, doLinkedToDa); //Then - assertThat(doLinkedToDa.getDataAttribute().isValImport()).isFalse();//initialValue + assertThat(doLinkedToDa.dataAttribute().isValImport()).isFalse();//initialValue } @ParameterizedTest @@ -321,15 +315,13 @@ void completeFromDataAttributeInstance_should_complete_when_struct(Boolean input dataAttribute.setDaName("antRef"); dataAttribute.setBdaNames(List.of("bda1","bda2","bda3")); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); //When LnService lnService = new LnService(); lnService.completeFromDAInstance(tied, "ldInst", tAnyLN, doLinkedToDa); //Then - assertThat(doLinkedToDa.getDataAttribute().isValImport()).isEqualTo(expected); + assertThat(doLinkedToDa.dataAttribute().isValImport()).isEqualTo(expected); } @Test @@ -343,9 +335,7 @@ void updateOrCreateDOAndDAInstance_should_create_given_DO_and_DA_instances_when_ dataAttribute.setDaName("stVal"); dataAttribute.getDaiValues().add(new DaVal(1L, "new value")); dataAttribute.getDaiValues().add(new DaVal(2L, "new value 2")); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); //When LnService lnService = new LnService(); lnService.updateOrCreateDOAndDAInstances(tAnyLN, doLinkedToDa); @@ -375,9 +365,7 @@ void updateOrCreateDOAndDAInstance_should_create_given_DO_and_DA_instances_when_ dataAttribute.setDaName("antRef"); dataAttribute.setBdaNames(List.of("bda1")); dataAttribute.getDaiValues().add(new DaVal(null, "new value")); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); //When LnService lnService = new LnService(); @@ -440,9 +428,7 @@ void updateOrCreateDOAndDAInstance_should_complete_DO_and_DA_instances_modificat dataAttribute.setBdaNames(List.of("BdaName1")); dataAttribute.getDaiValues().add(new DaVal(null, "new dai value")); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); //When LnService lnService = new LnService(); @@ -529,7 +515,7 @@ private TAnyLN initDOAndDAInstances(LinkedList doInstances, TSDI lastSDI = createSDIByStructName(firstSDI, structInstances); if(structInstances.size() == 1){ TDAI dai = new TDAI(); - dai.setName(daInstances.get(daInstances.size() - 1)); + dai.setName(daInstances.getLast()); TVal tVal = new TVal(); tVal.setValue(daiVal); dai.getVal().add(tVal); @@ -539,7 +525,7 @@ private TAnyLN initDOAndDAInstances(LinkedList doInstances, } else if(structInstances.size() == 1){ TDAI dai = new TDAI(); - dai.setName(daInstances.get(daInstances.size() - 1)); + dai.setName(daInstances.getLast()); TVal tVal = new TVal(); tVal.setValue(daiVal); dai.getVal().add(tVal); @@ -566,7 +552,7 @@ private TDAI initDOAndDAInstances(TAnyLN tAnyLN, TSDI firstSDI = createSDIFromDOI(tdoi, structInstances.getFirst()); TSDI lastSDI = createSDIByStructName(firstSDI, structInstances); if(structInstances.size() == 1){ - dai.setName(daInstances.get(daInstances.size() - 1)); + dai.setName(daInstances.getLast()); TVal tVal = new TVal(); dai.getVal().add(tVal); lastSDI.getSDIOrDAI().add(dai); @@ -574,7 +560,7 @@ private TDAI initDOAndDAInstances(TAnyLN tAnyLN, } } else if(structInstances.size() == 1){ - dai.setName(daInstances.get(daInstances.size() - 1)); + dai.setName(daInstances.getLast()); TVal tVal = new TVal(); dai.getVal().add(tVal); tdoi.getSDIOrDAI().add(dai); diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaTest.java index a3a6aaaaf..dc44cbad7 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaTest.java @@ -11,32 +11,30 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertAll; class DoLinkedToDaTest { @Test void test_copyFrom() { // Given - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); DataObject dataObject = new DataObject(); dataObject.setDoName("doName"); dataObject.setSdoNames(List.of("sdoName1")); dataObject.setCdc(TPredefinedCDCEnum.CST); - doLinkedToDa.setDataObject(dataObject); DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("daName"); dataAttribute.setBdaNames(List.of("bdaName1")); dataAttribute.setFc(TFCEnum.BL); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); // When DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDa); // Then assertAll("Copy From", - () -> assertThat(newDoLinkedToDa.getDataObject().getCdc()).isEqualTo(doLinkedToDa.getDataObject().getCdc()), - () -> assertThat(newDoLinkedToDa.getDataAttribute().getBType()).isEqualTo(doLinkedToDa.getDataAttribute().getBType()), - () -> assertThat(newDoLinkedToDa.getDataAttribute().getType()).isEqualTo(doLinkedToDa.getDataAttribute().getType()), - () -> assertThat(newDoLinkedToDa.getDataAttribute().getFc()).isEqualTo(doLinkedToDa.getDataAttribute().getFc()), + () -> assertThat(newDoLinkedToDa.dataObject().getCdc()).isEqualTo(doLinkedToDa.dataObject().getCdc()), + () -> assertThat(newDoLinkedToDa.dataAttribute().getBType()).isEqualTo(doLinkedToDa.dataAttribute().getBType()), + () -> assertThat(newDoLinkedToDa.dataAttribute().getType()).isEqualTo(doLinkedToDa.dataAttribute().getType()), + () -> assertThat(newDoLinkedToDa.dataAttribute().getFc()).isEqualTo(doLinkedToDa.dataAttribute().getFc()), () -> assertThat(newDoLinkedToDa.getDoRef()).isEqualTo(doLinkedToDa.getDoRef()), () -> assertThat(newDoLinkedToDa.getDaRef()).isEqualTo(doLinkedToDa.getDaRef())); } @@ -49,8 +47,7 @@ void test_getDoRef() { dataObject.setSdoNames(List.of("sdoName1")); dataObject.setCdc(TPredefinedCDCEnum.CST); // When Then - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, new DataAttribute()); assertThat(doLinkedToDa.getDoRef()).isEqualTo("doName.sdoName1"); } @@ -61,9 +58,10 @@ void test_getDaRef() { dataAttribute.setDaName("daName"); dataAttribute.setBdaNames(List.of("bdaName1")); dataAttribute.setFc(TFCEnum.BL); - // When Then - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataAttribute(dataAttribute); + // When + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(new DataObject(), dataAttribute); + + // Then assertThat(doLinkedToDa.getDaRef()).isEqualTo("daName.bdaName1"); } @@ -75,9 +73,7 @@ void isUpdatable_should_return_true_whenIsDOModDAstVal() { DataAttribute dataAttribute = new DataAttribute(); dataAttribute.setDaName("stVal"); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); // When Then assertThat(doLinkedToDa.isUpdatable()).isTrue(); } @@ -94,9 +90,7 @@ void isUpdatable_should_return_true_whenValImportIsTrue() { dataAttribute.setValImport(true); dataAttribute.setFc(TFCEnum.SE); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); // When Then assertThat(doLinkedToDa.isUpdatable()).isTrue(); } @@ -113,11 +107,9 @@ void isUpdatable_should_return_false_whenValImportIsFalse() { dataAttribute.setValImport(false); dataAttribute.setFc(TFCEnum.SE); - DoLinkedToDa doLinkedToDa = new DoLinkedToDa(); - doLinkedToDa.setDataObject(dataObject); - doLinkedToDa.setDataAttribute(dataAttribute); + DoLinkedToDa doLinkedToDa = new DoLinkedToDa(dataObject, dataAttribute); // When Then assertThat(doLinkedToDa.isUpdatable()).isFalse(); } -} \ No newline at end of file +} diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/dto/LNodeDTOTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/dto/LNodeDTOTest.java index 72f2c5dbc..be6d40995 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/dto/LNodeDTOTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/dto/LNodeDTOTest.java @@ -6,7 +6,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.lfenergy.compas.scl2007b4.model.TExtRef; +import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateAdapter; import org.lfenergy.compas.sct.commons.scl.dtt.LNodeTypeAdapter; import org.lfenergy.compas.sct.commons.scl.ied.IEDAdapter; @@ -24,7 +24,7 @@ class LNodeDTOTest { @Test @Tag("issue-321") - void testConstructor(){ + void testConstructor() { // When LNodeDTO lNodeDTO = new LNodeDTO(); lNodeDTO.setNodeClass(DTO.HOLDER_LN_CLASS); @@ -33,14 +33,14 @@ void testConstructor(){ lNodeDTO.setNodeType(DTO.LN_TYPE); // Then assertAll("LNODE", - ()-> assertThat(lNodeDTO.getGooseControlBlocks()).isEmpty(), - ()-> assertThat(lNodeDTO.getDataAttributeRefs()).isEmpty(), - ()-> assertThat(lNodeDTO.getDatSets()).isEmpty(), - ()-> assertThat(lNodeDTO.getExtRefs()).isEmpty(), - ()-> assertThat(lNodeDTO.getInst()).isEqualTo(DTO.HOLDER_LN_INST), - ()-> assertThat(lNodeDTO.getNodeClass()).isEqualTo(DTO.HOLDER_LN_CLASS), - ()-> assertThat(lNodeDTO.getNodeType()).isEqualTo(DTO.LN_TYPE), - ()-> assertThat(lNodeDTO.getPrefix()).isEqualTo(DTO.HOLDER_LN_PREFIX) + () -> assertThat(lNodeDTO.getGooseControlBlocks()).isEmpty(), + () -> assertThat(lNodeDTO.getDataAttributeRefs()).isEmpty(), + () -> assertThat(lNodeDTO.getDatSets()).isEmpty(), + () -> assertThat(lNodeDTO.getExtRefs()).isEmpty(), + () -> assertThat(lNodeDTO.getInst()).isEqualTo(DTO.HOLDER_LN_INST), + () -> assertThat(lNodeDTO.getNodeClass()).isEqualTo(DTO.HOLDER_LN_CLASS), + () -> assertThat(lNodeDTO.getNodeType()).isEqualTo(DTO.LN_TYPE), + () -> assertThat(lNodeDTO.getPrefix()).isEqualTo(DTO.HOLDER_LN_PREFIX) ); // When lNodeDTO.addDataAttributeRef(DataAttributeRef.builder().daName(new DaTypeName("da1")).build()); @@ -67,7 +67,7 @@ void testConstructor(){ } @Test - void from_whenCalledWithLNAdapter_shouldFillValues(){ + void from_whenCalledWithLNAdapter_shouldFillValues() { // When IEDAdapter iedAdapter = mock(IEDAdapter.class); LDeviceAdapter lDeviceAdapter = mock(LDeviceAdapter.class); @@ -93,14 +93,14 @@ void from_whenCalledWithLNAdapter_shouldFillValues(){ // When LNodeDTO lNodeDTO = LNodeDTO.from(lnAdapter, - new LogicalNodeOptions(true,true,false,false)); + new LogicalNodeOptions(true, true, false, false)); // Then assertThat(lNodeDTO).isNotNull(); assertAll("LNODE", - ()-> assertThat(lNodeDTO.getInst()).isEqualTo(DTO.HOLDER_LN_INST), - ()-> assertThat(lNodeDTO.getNodeClass()).isEqualTo(DTO.HOLDER_LN_CLASS), - ()-> assertThat(lNodeDTO.getNodeType()).isEqualTo(DTO.LN_TYPE), - ()-> assertThat(lNodeDTO.getPrefix()).isEqualTo(DTO.HOLDER_LN_PREFIX), + () -> assertThat(lNodeDTO.getInst()).isEqualTo(DTO.HOLDER_LN_INST), + () -> assertThat(lNodeDTO.getNodeClass()).isEqualTo(DTO.HOLDER_LN_CLASS), + () -> assertThat(lNodeDTO.getNodeType()).isEqualTo(DTO.LN_TYPE), + () -> assertThat(lNodeDTO.getPrefix()).isEqualTo(DTO.HOLDER_LN_PREFIX), () -> assertThat(lNodeDTO.getExtRefs()).hasSize(1) ); ExtRefInfo extRefInfo = lNodeDTO.getExtRefs().iterator().next(); @@ -112,7 +112,64 @@ void from_whenCalledWithLNAdapter_shouldFillValues(){ } @Test - void extractExtRefInfo_whenCalledWithLNAdapter_shouldFillValues(){ + void from_whenCalledWithTAnyLn_shouldFillValues() { + // When + TExtRef extRef = DTO.createExtRef(); + TLN tAnyLN = new TLN(); + tAnyLN.getLnClass().add(DTO.HOLDER_LN_CLASS); + tAnyLN.setInst(DTO.HOLDER_LN_INST); + tAnyLN.setPrefix(DTO.HOLDER_LN_PREFIX); + tAnyLN.setLnType(DTO.LN_TYPE); + tAnyLN.setInputs(new TInputs()); + tAnyLN.getInputs().getExtRef().add(extRef); + + SCL scl = new SCL(); + scl.setHeader(new THeader()); + TDataTypeTemplates dataTypeTemplates = new TDataTypeTemplates(); + TLNodeType tlNodeType = new TLNodeType(); + tlNodeType.setId(DTO.LN_TYPE); + TDO tdo = new TDO(); + tdo.setName("Do1"); + tdo.setType("DO1"); + tlNodeType.getDO().add(tdo); + TDOType tdoType = new TDOType(); + tdoType.setId("DO1"); + TDA tda = new TDA(); + tda.setName("Da1"); + tda.setBType(TPredefinedBasicTypeEnum.BOOLEAN); + tdoType.getSDOOrDA().add(tda); + dataTypeTemplates.getDOType().add(tdoType); + dataTypeTemplates.getLNodeType().add(tlNodeType); + scl.setDataTypeTemplates(dataTypeTemplates); + + // When + LNodeDTO lNodeDTO = LNodeDTO.from(tAnyLN, new LogicalNodeOptions(true, true, false, true), DTO.HOLDER_IED_NAME, DTO.HOLDER_LD_INST, scl); + // Then + assertThat(lNodeDTO).isNotNull(); + assertAll("LNODE", + () -> assertThat(lNodeDTO.getInst()).isEqualTo(DTO.HOLDER_LN_INST), + () -> assertThat(lNodeDTO.getNodeClass()).isEqualTo(DTO.HOLDER_LN_CLASS), + () -> assertThat(lNodeDTO.getNodeType()).isEqualTo(DTO.LN_TYPE), + () -> assertThat(lNodeDTO.getPrefix()).isEqualTo(DTO.HOLDER_LN_PREFIX), + () -> assertThat(lNodeDTO.getExtRefs()).hasSize(1), + () -> assertThat(lNodeDTO.getDataAttributeRefs()).hasSize(1) + ); + ExtRefInfo extRefInfo = lNodeDTO.getExtRefs().iterator().next(); + assertThat(extRefInfo.getHolderIEDName()).isEqualTo(DTO.HOLDER_IED_NAME); + assertThat(extRefInfo.getHolderLDInst()).isEqualTo(DTO.HOLDER_LD_INST); + assertThat(extRefInfo.getHolderLnClass()).isEqualTo(DTO.HOLDER_LN_CLASS); + assertThat(extRefInfo.getHolderLnInst()).isEqualTo(DTO.HOLDER_LN_INST); + assertThat(extRefInfo.getHolderLnPrefix()).isEqualTo(DTO.HOLDER_LN_PREFIX); + + DaTypeName daTypeName = new DaTypeName("Da1"); + daTypeName.setBType(TPredefinedBasicTypeEnum.BOOLEAN); + DoTypeName doTypeName = new DoTypeName("Do1"); + assertThat(lNodeDTO.getDataAttributeRefs().iterator().next()) + .isEqualTo(DataAttributeRef.builder().lnType(DTO.LN_TYPE).lnClass(DTO.HOLDER_LN_CLASS).lnInst(DTO.HOLDER_LN_INST).prefix(DTO.HOLDER_LN_PREFIX).daName(daTypeName).doName(doTypeName).build()); + } + + @Test + void extractExtRefInfo_whenCalledWithLNAdapter_shouldFillValues() { // Given LNAdapter lnAdapter = mock(LNAdapter.class); when(lnAdapter.getLNClass()).thenReturn(DTO.HOLDER_LN_CLASS); @@ -128,10 +185,10 @@ void extractExtRefInfo_whenCalledWithLNAdapter_shouldFillValues(){ // Then assertThat(lNodeDTO).isNotNull(); assertAll("LNODE", - ()-> assertThat(lNodeDTO.getInst()).isEqualTo(DTO.HOLDER_LN_INST), - ()-> assertThat(lNodeDTO.getNodeClass()).isEqualTo(DTO.HOLDER_LN_CLASS), - ()-> assertThat(lNodeDTO.getNodeType()).isEqualTo(DTO.LN_TYPE), - ()-> assertThat(lNodeDTO.getPrefix()).isEqualTo(DTO.HOLDER_LN_PREFIX), + () -> assertThat(lNodeDTO.getInst()).isEqualTo(DTO.HOLDER_LN_INST), + () -> assertThat(lNodeDTO.getNodeClass()).isEqualTo(DTO.HOLDER_LN_CLASS), + () -> assertThat(lNodeDTO.getNodeType()).isEqualTo(DTO.LN_TYPE), + () -> assertThat(lNodeDTO.getPrefix()).isEqualTo(DTO.HOLDER_LN_PREFIX), () -> assertThat(lNodeDTO.getExtRefs()).hasSize(1) ); } diff --git a/sct-commons/src/test/resources/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_tests.xml b/sct-commons/src/test/resources/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_tests.xml index 7afa8fad6..b99fdb787 100644 --- a/sct-commons/src/test/resources/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_tests.xml +++ b/sct-commons/src/test/resources/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_tests.xml @@ -37,7 +37,10 @@ - Completed-diff + REB + RVB + RVL + RVB+L 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 212d76299..c15f75606 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 @@ -113,7 +113,9 @@ - + + myValue + From d01883574ac7c14e96c67d538aee7d28eeadde35 Mon Sep 17 00:00:00 2001 From: massifben <105049157+massifben@users.noreply.github.com> Date: Tue, 21 Jan 2025 18:41:20 +0100 Subject: [PATCH 5/6] feat(#459): Change LnService.getDaiModStVal Signed-off-by: massifben <105049157+massifben@users.noreply.github.com> --- .../SclAutomationServiceIntegrationTest.java | 2 +- .../sct/commons/ExtRefEditorService.java | 5 +- .../compas/sct/commons/LdeviceService.java | 12 ++- .../compas/sct/commons/LnService.java | 56 ++++++------- .../compas/sct/commons/api/LnEditor.java | 5 ++ .../compas/sct/commons/dto/LNodeDTO.java | 21 +++-- .../compas/sct/commons/scl/ln/LnId.java | 81 +++++++++++++++++++ .../compas/sct/commons/scl/ln/LnKey.java | 37 --------- .../ControlBlockEditorServiceTest.java | 2 +- .../sct/commons/ExtRefEditorServiceTest.java | 2 +- .../sct/commons/LdeviceServiceTest.java | 35 ++++---- .../compas/sct/commons/LnServiceTest.java | 4 +- .../compas/sct/commons/scl/ln/LnIdTest.java | 69 ++++++++++++++++ .../compas/sct/commons/scl/ln/LnKeyTest.java | 50 ------------ .../sct/commons/testhelpers/SclHelper.java | 52 +++++++----- 15 files changed, 254 insertions(+), 179 deletions(-) create mode 100644 sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnId.java delete mode 100644 sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnKey.java create mode 100644 sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnIdTest.java delete mode 100644 sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnKeyTest.java diff --git a/sct-app/src/test/java/org.lfenergy.compas.sct.app/SclAutomationServiceIntegrationTest.java b/sct-app/src/test/java/org.lfenergy.compas.sct.app/SclAutomationServiceIntegrationTest.java index 33ab8ce65..505349145 100644 --- a/sct-app/src/test/java/org.lfenergy.compas.sct.app/SclAutomationServiceIntegrationTest.java +++ b/sct-app/src/test/java/org.lfenergy.compas.sct.app/SclAutomationServiceIntegrationTest.java @@ -32,7 +32,7 @@ class SclAutomationServiceIntegrationTest { private SclAutomationService sclAutomationService ; private static final SclEditor sclEditor = new SclService() ; private static final SubstationEditor substationEditor = new SubstationService(new VoltageLevelService()) ; - private static final ControlBlockEditor controlBlockEditor = new ControlBlockEditorService(new ControlService(), new LdeviceService()) ; + private static final ControlBlockEditor controlBlockEditor = new ControlBlockEditorService(new ControlService(), new LdeviceService(new LnService())); private HeaderDTO headerDTO; diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java index 94593fdd7..d8e914d37 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefEditorService.java @@ -54,7 +54,7 @@ public class ExtRefEditorService implements ExtRefEditor { * @param channel TChannel represent parameters * @return the IED sources matching the LDEPF parameters */ - private static List getIedSources(SclRootAdapter sclRootAdapter, TCompasBay compasBay, TChannel channel) { + private List getIedSources(SclRootAdapter sclRootAdapter, TCompasBay compasBay, TChannel channel) { return sclRootAdapter.streamIEDAdapters() .filter(iedAdapter -> (channel.getBayScope().equals(TCBScopeType.BAY_EXTERNAL) && iedAdapter.getPrivateCompasBay().stream().noneMatch(bay -> bay.getUUID().equals(compasBay.getUUID()))) @@ -143,8 +143,7 @@ private static boolean doesIcdHeaderMatchLDEPFChannel(IEDAdapter iedAdapter, TCh * @param channel TChannel * @return LDeviceAdapter object that matches the EPF channel */ - private static Optional getActiveSourceLDeviceByLDEPFChannel(IEDAdapter iedAdapter, TChannel channel) { - LdeviceService ldeviceService = new LdeviceService(); + private Optional getActiveSourceLDeviceByLDEPFChannel(IEDAdapter iedAdapter, TChannel channel) { return ldeviceService.findLdevice(iedAdapter.getCurrentElem(), tlDevice -> tlDevice.getInst().equals(channel.getLDInst())) .filter(tlDevice -> ldeviceService.getLdeviceStatus(tlDevice).map(ActiveStatus.ON::equals).orElse(false)) .map(tlDevice -> new LDeviceAdapter(iedAdapter, tlDevice)); diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LdeviceService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LdeviceService.java index 008aad426..d2eefaf84 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LdeviceService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/LdeviceService.java @@ -4,7 +4,11 @@ package org.lfenergy.compas.sct.commons; -import org.lfenergy.compas.scl2007b4.model.*; +import lombok.RequiredArgsConstructor; +import org.lfenergy.compas.scl2007b4.model.TAccessPoint; +import org.lfenergy.compas.scl2007b4.model.TIED; +import org.lfenergy.compas.scl2007b4.model.TLDevice; +import org.lfenergy.compas.scl2007b4.model.TServer; import org.lfenergy.compas.sct.commons.util.ActiveStatus; import java.util.Objects; @@ -12,8 +16,11 @@ import java.util.function.Predicate; import java.util.stream.Stream; +@RequiredArgsConstructor public class LdeviceService { + private final LnService lnService; + public Stream getLdevices(TIED tied) { if (!tied.isSetAccessPoint()) { return Stream.empty(); @@ -40,7 +47,6 @@ public Optional findLdevice(TIED tied, Predicate ldevicePred } public Optional getLdeviceStatus(TLDevice tlDevice) { - LnService lnService = new LnService(); - return lnService.getDaiModStval(tlDevice.getLN0()); + return lnService.getDaiModStValValue(tlDevice.getLN0()); } } 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 ba06e5f7e..74aef2e46 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 @@ -12,7 +12,6 @@ import org.lfenergy.compas.sct.commons.util.ActiveStatus; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.function.Predicate; @@ -25,6 +24,8 @@ @Slf4j public class LnService implements LnEditor { + private static final DoLinkedToDaFilter DAI_FILTER_MOD_STVAL = DoLinkedToDaFilter.from(MOD_DO_NAME, STVAL_DA_NAME); + public Stream getAnylns(TLDevice tlDevice) { return Stream.concat(Stream.of(tlDevice.getLN0()), tlDevice.getLN().stream()); } @@ -60,33 +61,29 @@ public Optional findLn(TLDevice tlDevice, Predicate lnPredicate) { * @return the Lnode Status */ public ActiveStatus getLnStatus(TAnyLN tAnyLN, LN0 ln0) { - Optional ln0Status = getDaiModStval(ln0); - return getDaiModStval(tAnyLN).filter(ActiveStatus.OFF::equals).orElseGet(() -> ln0Status.orElse(ActiveStatus.OFF)); + Optional ln0Status = getDaiModStValValue(ln0); + return getDaiModStValValue(tAnyLN).filter(ActiveStatus.OFF::equals).orElseGet(() -> ln0Status.orElse(ActiveStatus.OFF)); } - public Optional getDaiModStval(TAnyLN tAnyLN) { - return tAnyLN - .getDOI() + public Optional getDaiModStValValue(TAnyLN tAnyLN) { + return getDaiModStVal(tAnyLN) .stream() - .filter(tdoi -> MOD_DO_NAME.equals(tdoi.getName())) + .flatMap(tdai -> tdai.getVal().stream()) + .map(TVal::getValue) .findFirst() - .flatMap(tdoi -> tdoi.getSDIOrDAI() - .stream() - .filter(dai -> dai.getClass().equals(TDAI.class)) - .map(TDAI.class::cast) - .filter(tdai -> STVAL_DA_NAME.equals(tdai.getName())) - .map(TDAI::getVal) - .flatMap(Collection::stream) - .findFirst() - .map(TVal::getValue)) .map(ActiveStatus::fromValue); } + + public Optional getDaiModStVal(TAnyLN tAnyLN) { + return getDOAndDAInstances(tAnyLN, DAI_FILTER_MOD_STVAL); + } + public Stream getActiveLns(TLDevice tlDevice) { LN0 ln0 = tlDevice.getLN0(); Stream tlnStream = tlDevice.getLN() .stream() .filter(tln -> ActiveStatus.ON.equals(getLnStatus(tln, ln0))); - Stream ln0Stream = Stream.of(ln0).filter(ln02 -> getDaiModStval(ln02).map(ActiveStatus.ON::equals).orElse(false)); + Stream ln0Stream = Stream.of(ln0).filter(ln02 -> getDaiModStValValue(ln02).map(ActiveStatus.ON::equals).orElse(false)); return Stream.concat(ln0Stream, tlnStream); } @@ -99,7 +96,7 @@ public Optional getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLi return tAnyLN.getDOI().stream().filter(doi -> doi.getName().equals(doLinkedToDaFilter.doName())) .findFirst() .flatMap(doi -> { - if(structNamesList.size() > 1) { + if (structNamesList.size() > 1) { String firstSDIName = structNamesList.removeFirst(); return this.getSdiByName(doi, firstSDIName) .map(intermediateSdi -> findSDIByStructName(intermediateSdi, structNamesList)) @@ -116,7 +113,7 @@ public Optional getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLi return Optional.empty(); }) .stream().findFirst(); - } else if(structNamesList.size() == 1){ + } else if (structNamesList.size() == 1) { return doi.getSDIOrDAI().stream() .filter(unNaming -> unNaming.getClass().equals(TDAI.class)) .map(TDAI.class::cast) @@ -138,7 +135,7 @@ public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedT .ifPresentOrElse(tVal -> tVal.setValue(value), () -> tdai.getVal().add(newVal(value))); } else { - for (DaVal daVal: daiVals) { + for (DaVal daVal : daiVals) { tdai.getVal().stream() .filter(tValElem -> tValElem.isSetSGroup() && tValElem.getSGroup() == daVal.settingGroup()) .findFirst() @@ -198,22 +195,22 @@ private Optional createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DataObject TDOI doi = tAnyLN.getDOI().stream().filter(doi1 -> doi1.getName().equals(dataObject.getDoName())) .findFirst() - .orElseGet(()-> { + .orElseGet(() -> { TDOI newDOI = new TDOI(); newDOI.setName(dataObject.getDoName()); tAnyLN.getDOI().add(newDOI); return newDOI; }); - if(structInstances.size() > 1){ + if (structInstances.size() > 1) { TSDI firstSDI = findOrCreateSDIFromDOI(doi, structInstances.getFirst()); TSDI lastSDI = findOrCreateSDIByStructName(firstSDI, structInstances); - if(structInstances.size() == 1){ + if (structInstances.size() == 1) { return lastSDI.getSDIOrDAI().stream() .filter(tUnNaming -> tUnNaming.getClass().equals(TDAI.class)) .map(TDAI.class::cast) .filter(tdai -> tdai.getName().equals(structInstances.getFirst())) .map(tdai -> { - if(tdai.isSetValImport()) { + if (tdai.isSetValImport()) { tdai.setValImport(dataAttribute.isValImport()); } return tdai; @@ -226,13 +223,13 @@ private Optional createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DataObject return Optional.of(newDAI); }); } - } else if(structInstances.size() == 1){ + } else if (structInstances.size() == 1) { return doi.getSDIOrDAI().stream() .filter(tUnNaming -> tUnNaming.getClass().equals(TDAI.class)) .map(TDAI.class::cast) .filter(tdai -> tdai.getName().equals(structInstances.getFirst())) .map(tdai -> { - if(tdai.isSetValImport()) tdai.setValImport(dataAttribute.isValImport()); + if (tdai.isSetValImport()) tdai.setValImport(dataAttribute.isValImport()); return tdai; }) .findFirst() @@ -247,7 +244,7 @@ private Optional createDoiSdiDaiChainIfNotExists(TAnyLN tAnyLN, DataObject } private TSDI findSDIByStructName(TSDI tsdi, List sdiNames) { - if(sdiNames.isEmpty()) return tsdi; + if (sdiNames.isEmpty()) return tsdi; return this.getSdiByName(tsdi, sdiNames.getFirst()) .map(sdi1 -> { sdiNames.removeFirst(); @@ -294,14 +291,13 @@ private Optional getSdiByName(TSDI sdi, String sdiName) { } /** - * - * @param sdi TSDI + * @param sdi TSDI * @param structName list start with sdi name * @return already existing TSDI or newly created TSDI from given TSDI */ private TSDI findOrCreateSDIByStructName(TSDI sdi, List structName) { structName.removeFirst(); - if(structName.isEmpty() || structName.size() == 1) return sdi; + if (structName.isEmpty() || structName.size() == 1) return sdi; return findOrCreateSDIByStructName(findOrCreateSDIFromSDI(sdi, structName.getFirst()), structName); } diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/LnEditor.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/LnEditor.java index 889433c17..84b9d6881 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/LnEditor.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/LnEditor.java @@ -8,11 +8,16 @@ import org.lfenergy.compas.scl2007b4.model.TDAI; import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa; import org.lfenergy.compas.sct.commons.domain.DoLinkedToDaFilter; +import org.lfenergy.compas.sct.commons.util.ActiveStatus; import java.util.Optional; public interface LnEditor { + Optional getDaiModStValValue(TAnyLN tAnyLN); + + Optional getDaiModStVal(TAnyLN tAnyLN); + Optional getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLinkedToDaFilter); void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedToDa); diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/LNodeDTO.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/LNodeDTO.java index ecc3986cf..6d1823765 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/LNodeDTO.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/LNodeDTO.java @@ -8,17 +8,20 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.lfenergy.compas.scl2007b4.model.*; +import org.lfenergy.compas.scl2007b4.model.SCL; +import org.lfenergy.compas.scl2007b4.model.TAnyLN; +import org.lfenergy.compas.scl2007b4.model.TExtRef; +import org.lfenergy.compas.scl2007b4.model.TLNodeType; import org.lfenergy.compas.sct.commons.DataSetService; import org.lfenergy.compas.sct.commons.ExtRefReaderService; import org.lfenergy.compas.sct.commons.LnodeTypeService; import org.lfenergy.compas.sct.commons.scl.SclRootAdapter; import org.lfenergy.compas.sct.commons.scl.dtt.DataTypeTemplateAdapter; import org.lfenergy.compas.sct.commons.scl.dtt.LNodeTypeAdapter; -import org.lfenergy.compas.sct.commons.scl.ln.AbstractLNAdapter; import org.lfenergy.compas.sct.commons.scl.ldevice.LDeviceAdapter; +import org.lfenergy.compas.sct.commons.scl.ln.AbstractLNAdapter; import org.lfenergy.compas.sct.commons.scl.ln.LNAdapter; -import org.lfenergy.compas.sct.commons.scl.ln.LnKey; +import org.lfenergy.compas.sct.commons.scl.ln.LnId; import org.lfenergy.compas.sct.commons.util.Utils; import java.util.HashSet; @@ -152,14 +155,10 @@ public static LNodeDTO from(AbstractLNAdapter nodeAdapter, public static LNodeDTO from(TAnyLN tAnyLN, LogicalNodeOptions options, String iedName, String ldInst, SCL scl) { log.info(Utils.entering()); - LnKey lnKey = switch (tAnyLN) { - case LN0 ln0 -> new LnKey(ln0); - case TLN tln -> new LnKey(tln); - default -> throw new IllegalStateException("Unexpected value: " + tAnyLN); - }; - String inst = lnKey.getInst(); - String lnClass = lnKey.getLnClass(); - String prefix = lnKey.getPrefix(); + LnId lnId = LnId.from(tAnyLN); + String inst = lnId.lnInst(); + String lnClass = lnId.lnClass(); + String prefix = lnId.prefix(); String lnType = tAnyLN.getLnType(); LNodeDTO lNodeDTO = new LNodeDTO(inst, lnClass, prefix, lnType); if (options.isWithExtRef()) { diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnId.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnId.java new file mode 100644 index 000000000..d8aedebba --- /dev/null +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnId.java @@ -0,0 +1,81 @@ +// SPDX-FileCopyrightText: 2025 RTE FRANCE +// +// SPDX-License-Identifier: Apache-2.0 +package org.lfenergy.compas.sct.commons.scl.ln; + +import org.apache.commons.lang3.StringUtils; +import org.lfenergy.compas.scl2007b4.model.*; +import org.lfenergy.compas.sct.commons.exception.ScdException; + +import java.util.List; +import java.util.Objects; + +public record LnId(String lnClass, String lnInst, String prefix) { + private static final String LN0_LNCLASS = TLLN0Enum.LLN_0.value(); + + /** + * Id of LN0. All LN0 have the same lnClass, lnInst and prefix in SCD + */ + public static final LnId LN0_ID = new LnId(LN0_LNCLASS, "", ""); + + /** + * Constructor + * + * @param lnClass always required + * @param lnInst optional. It should be empty for LN0, and should be filled for LN. No verification is done because some Lnode GAPC do not have a lninst. + * @param prefix optional. Is set to empty if null because empty is the default value on LN and the majority of the JAXB Element (LN, LNode, FCDA, ClientLN, but not on ExtRef and IEDName unfortunately) + */ + public LnId(String lnClass, String lnInst, String prefix) { + if (StringUtils.isBlank(lnClass)) { + throw new ScdException("lnClass is required"); + } + this.lnClass = lnClass; + this.lnInst = Objects.requireNonNullElse(lnInst, ""); + this.prefix = Objects.requireNonNullElse(prefix, ""); + } + + /** + * Alternative constructor with lnClass as a List instead of a String. + * JAXB classes lnClass attribute are List, even though it can only contain one element. + * This constructor makes it easier to create LnId from JAXB classes + * + * @param lnClass one element list containing the lnClass value of the LN + * @param lnInst LN lnInst + * @param prefix LN prefix + */ + public LnId(List lnClass, String lnInst, String prefix) { + this(lnClass == null || lnClass.isEmpty() ? null : lnClass.getFirst(), lnInst, prefix); + } + + /** + * Extract id from LN element + * + * @param tAnyLN LN element + * @return id + */ + public static LnId from(TAnyLN tAnyLN) { + if (tAnyLN instanceof TLN0) { + return LN0_ID; + } else if (tAnyLN instanceof TLN tln) { + return new LnId(tln.getLnClass(), tln.getInst(), tln.getPrefix()); + } else { + throw new ScdException("Unexpected class : " + (tAnyLN != null ? tAnyLN.getClass() : null)); + } + } + + /** + * Extract id from LNode element + * + * @param tlNode LNode element + * @return id + */ + public static LnId from(TLNode tlNode) { + if (tlNode.getLnClass().contains(LN0_LNCLASS)) { + return LN0_ID; + } else { + return new LnId(tlNode.getLnClass(), tlNode.getLnInst(), tlNode.getPrefix()); + } + } + + +} diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnKey.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnKey.java deleted file mode 100644 index 3f37c514f..000000000 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LnKey.java +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-FileCopyrightText: 2021 RTE FRANCE -// -// SPDX-License-Identifier: Apache-2.0 -package org.lfenergy.compas.sct.commons.scl.ln; - -import lombok.EqualsAndHashCode; -import lombok.Getter; -import org.apache.commons.lang3.StringUtils; -import org.lfenergy.compas.scl2007b4.model.*; - -@Getter -@EqualsAndHashCode -public class LnKey { - - private final String inst; - @EqualsAndHashCode.Exclude - private final String lnType; - private final String lnClass; - /** empty for LN0 */ - private final String prefix; - - public LnKey(LN0 ln0) { - this.inst = ln0.getInst(); - this.lnType = ln0.getLnType(); - this.lnClass = ln0.getLnClass().get(0); - this.prefix = StringUtils.EMPTY; - } - - public LnKey(TLN tln) { - this.inst = tln.getInst(); - this.lnType = tln.getLnType(); - this.lnClass = tln.getLnClass().get(0); - this.prefix = tln.getPrefix(); - } - -} - diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ControlBlockEditorServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ControlBlockEditorServiceTest.java index 768c1195e..316e8ed6d 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ControlBlockEditorServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ControlBlockEditorServiceTest.java @@ -50,7 +50,7 @@ class ControlBlockEditorServiceTest { @BeforeEach void init() { - controlBlockEditorService = new ControlBlockEditorService(new ControlService(), new LdeviceService()); + controlBlockEditorService = new ControlBlockEditorService(new ControlService(), new LdeviceService(new LnService())); } @Test diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ExtRefEditorServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ExtRefEditorServiceTest.java index bdb7547cc..96949fe3b 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ExtRefEditorServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ExtRefEditorServiceTest.java @@ -36,7 +36,7 @@ class ExtRefEditorServiceTest { @BeforeEach void init() { - extRefEditorService = new ExtRefEditorService(new IedService(), new LdeviceService(), new LnService(), new DataTypeTemplatesService()); + extRefEditorService = new ExtRefEditorService(new IedService(), new LdeviceService(new LnService()), new LnService(), new DataTypeTemplatesService()); } @Test diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LdeviceServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LdeviceServiceTest.java index 445fcf09b..051f1ce84 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LdeviceServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LdeviceServiceTest.java @@ -5,6 +5,7 @@ package org.lfenergy.compas.sct.commons; import org.assertj.core.groups.Tuple; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.lfenergy.compas.scl2007b4.model.SCL; import org.lfenergy.compas.scl2007b4.model.TIED; @@ -19,16 +20,20 @@ class LdeviceServiceTest { + private LdeviceService ldeviceService; + + @BeforeEach + void setUp() { + ldeviceService = new LdeviceService(new LnService()); + } + @Test void getLdeviceStatus_should_return_status() { //Given SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std"); - TLDevice tlDevice = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0); - LdeviceService ldeviceService = new LdeviceService(); - + TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst(); //When Optional ldeviceStatus = ldeviceService.getLdeviceStatus(tlDevice); - //Then assertThat(ldeviceStatus).contains(ActiveStatus.ON); } @@ -37,12 +42,9 @@ void getLdeviceStatus_should_return_status() { void getLdevices_should_return_ldevices() { //Given SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std"); - TIED tied = std.getIED().get(0); - LdeviceService ldeviceService = new LdeviceService(); - + TIED tied = std.getIED().getFirst(); //When List tlDevices = ldeviceService.getLdevices(tied).toList(); - //Then assertThat(tlDevices) .hasSize(2) @@ -55,12 +57,9 @@ void getLdevices_should_return_ldevices() { void getFilteredLdevices_should_return_ldevices() { //Given SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std"); - TIED tied = std.getIED().get(0); - LdeviceService ldeviceService = new LdeviceService(); - + TIED tied = std.getIED().getFirst(); //When List tlDevices = ldeviceService.getFilteredLdevices(tied, tlDevice -> "LDTM".equals(tlDevice.getInst())).toList(); - //Then assertThat(tlDevices) .hasSize(1) @@ -72,12 +71,9 @@ void getFilteredLdevices_should_return_ldevices() { void findLdevice_should_return_ldevice() { //Given SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std"); - TIED tied = std.getIED().get(0); - LdeviceService ldeviceService = new LdeviceService(); - + TIED tied = std.getIED().getFirst(); //When TLDevice ldevice = ldeviceService.findLdevice(tied, tlDevice -> "LDTM".equals(tlDevice.getInst())).orElseThrow(); - //Then assertThat(ldevice) .extracting(TLDevice::getInst, TLDevice::getLdName) @@ -88,12 +84,9 @@ void findLdevice_should_return_ldevice() { void getActiveLdevices_should_return_ldevices() { //Given SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std"); - TIED tied = std.getIED().get(0); - LdeviceService ldeviceService = new LdeviceService(); - + TIED tied = std.getIED().getFirst(); //When List tlDevices = ldeviceService.getActiveLdevices(tied).toList(); - //Then assertThat(tlDevices) .hasSize(1) @@ -101,4 +94,4 @@ void getActiveLdevices_should_return_ldevices() { .containsExactly(Tuple.tuple("LDSUIED", "VirtualSAMULDSUIED")); } -} \ No newline at end of file +} 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 24d3a3ebc..2c7f4bc28 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 @@ -121,13 +121,13 @@ void getFilteredAnyLns_should_return_lns() { } @Test - void getDaiModStval_should_return_status() { + void getDaiModStValValue_should_return_status() { //Given SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std"); TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst(); //When - Optional daiModStval = lnService.getDaiModStval(tlDevice.getLN0()); + Optional daiModStval = lnService.getDaiModStValValue(tlDevice.getLN0()); //Then assertThat(daiModStval).contains(ActiveStatus.ON); diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnIdTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnIdTest.java new file mode 100644 index 000000000..d8e17e15f --- /dev/null +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnIdTest.java @@ -0,0 +1,69 @@ +// SPDX-FileCopyrightText: 2024 RTE FRANCE +// +// SPDX-License-Identifier: Apache-2.0 + + +package org.lfenergy.compas.sct.commons.scl.ln; + +import org.junit.jupiter.api.Test; +import org.lfenergy.compas.scl2007b4.model.*; + +import static org.assertj.core.api.Assertions.assertThat; + +class LnIdTest { + + @Test + void from_LN_should_succeed() { + //Given + TLN ln = new TLN(); + ln.setInst("1"); + ln.getLnClass().add(TSystemLNGroupEnum.LGOS.value()); + ln.setPrefix("Prefix"); + // When + LnId lnId = LnId.from(ln); + // Then + assertThat(lnId.lnClass()).isEqualTo("LGOS"); + assertThat(lnId.lnInst()).isEqualTo("1"); + assertThat(lnId.prefix()).isEqualTo("Prefix"); + } + + @Test + void from_LN0_should_succeed() { + //Given + LN0 ln0 = new LN0(); + ln0.getLnClass().add(TLLN0Enum.LLN_0.value()); + // When + LnId lnId = LnId.from(ln0); + // Then + assertThat(lnId).isSameAs(LnId.LN0_ID); + } + + @Test + void from_TLNode_should_succeed() { + //Given + TLNode tlNode = new TLNode(); + tlNode.setLnInst("1"); + tlNode.getLnClass().add(TSystemLNGroupEnum.LGOS.value()); + tlNode.setPrefix("Prefix"); + // When + LnId lnId = LnId.from(tlNode); + // Then + assertThat(lnId.lnClass()).isEqualTo("LGOS"); + assertThat(lnId.lnInst()).isEqualTo("1"); + assertThat(lnId.prefix()).isEqualTo("Prefix"); + } + + @Test + void from_TLNode_LN0_should_succeed() { + //Given + TLNode tlNode = new TLNode(); + tlNode.setLnInst(""); + tlNode.getLnClass().add("LLN0"); + tlNode.setPrefix(""); + // When + LnId lnId = LnId.from(tlNode); + // Then + assertThat(lnId).isSameAs(LnId.LN0_ID); + } + +} diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnKeyTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnKeyTest.java deleted file mode 100644 index 4501f79d4..000000000 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ln/LnKeyTest.java +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-FileCopyrightText: 2024 RTE FRANCE -// -// SPDX-License-Identifier: Apache-2.0 - - -package org.lfenergy.compas.sct.commons.scl.ln; - -import org.apache.commons.lang3.StringUtils; -import org.junit.jupiter.api.Test; -import org.lfenergy.compas.scl2007b4.model.LN0; -import org.lfenergy.compas.scl2007b4.model.TLLN0Enum; -import org.lfenergy.compas.scl2007b4.model.TLN; -import org.lfenergy.compas.scl2007b4.model.TSystemLNGroupEnum; - -import static org.assertj.core.api.Assertions.assertThat; - -class LnKeyTest { - - @Test - void test_LnKey_withLN() { - //Given - TLN ln = new TLN(); - ln.setLnType("LnTypeAny"); - ln.setInst("1"); - ln.getLnClass().add(TSystemLNGroupEnum.LGOS.value()); - // When - LnKey lnKey = new LnKey(ln); - // Then - assertThat(lnKey.getLnType()).isEqualTo("LnTypeAny"); - assertThat(lnKey.getLnClass()).isEqualTo("LGOS"); - assertThat(lnKey.getInst()).isEqualTo("1"); - assertThat(lnKey.getPrefix()).isEqualTo(StringUtils.EMPTY); - } - - @Test - void test_LnKey_withLN0() { - //Given - LN0 ln0 = new LN0(); - ln0.setLnType("LnType0"); - ln0.getLnClass().add(TLLN0Enum.LLN_0.value()); - // When - LnKey lnKey = new LnKey(ln0); - // Then - assertThat(lnKey.getLnType()).isEqualTo("LnType0"); - assertThat(lnKey.getLnClass()).isEqualTo("LLN0"); - assertThat(lnKey.getInst()).isEqualTo(""); - assertThat(lnKey.getPrefix()).isEqualTo(StringUtils.EMPTY); - } - -} \ No newline at end of file diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/testhelpers/SclHelper.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/testhelpers/SclHelper.java index 0d843c335..c3232434a 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/testhelpers/SclHelper.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/testhelpers/SclHelper.java @@ -21,6 +21,7 @@ import java.util.Optional; import java.util.stream.Stream; +import static org.apache.commons.lang3.StringUtils.trimToEmpty; import static org.assertj.core.api.Assertions.assertThat; import static org.lfenergy.compas.sct.commons.util.SclConstructorHelper.newConnectedAp; import static org.lfenergy.compas.sct.commons.util.Utils.lnClassEquals; @@ -99,8 +100,29 @@ public static LNAdapter findLn(SCL scl, String iedName, String ldInst, String ln ); } + public static TAnyLN findAnyLn(SCL scl, String iedName, String ldInst, String lnClass, String lnInst, String prefix) { + TIED ied = scl.getIED().stream().filter(tied -> tied.getName().equals(iedName)) + .findFirst().orElseThrow(() -> new AssertionFailedError("IED with name=%s not found".formatted(iedName))); + TLDevice tlDevice = getLDevices(ied) + .filter(tlDevice1 -> tlDevice1.getInst().equals(ldInst)) + .findFirst().orElseThrow(() -> new AssertionFailedError("LDevice with inst=%s not found".formatted(ldInst))); + if (lnClass.equals(TLLN0Enum.LLN_0.value()) && tlDevice.isSetLN0()) { + return tlDevice.getLN0(); + } + return tlDevice.getLN().stream() + .filter(tln -> Utils.lnClassEquals(tln.getLnClass(), lnClass) && trimToEmpty(tln.getInst()).equals(trimToEmpty(lnInst)) && trimToEmpty(tln.getPrefix()).equals(trimToEmpty(prefix))) + .findFirst() + .orElseThrow(() -> new AssertionFailedError("LN (lnClass=%s, lnInst=%s, lnPrefix=%s) not found".formatted(lnClass, lnInst, prefix))); + } + + public static Stream getLDevices(TIED tied) { + return tied.getAccessPoint().stream() + .filter(TAccessPoint::isSetServer) + .flatMap(tAccessPoint -> tAccessPoint.getServer().getLDevice().stream()); + } + public static IDataParentAdapter findDoiOrSdi(AbstractLNAdapter lnAdapter, String dataTypeRef) { - if (dataTypeRef.length() < 1) { + if (dataTypeRef.isEmpty()) { Assertions.fail("dataTypeRef must at least contain a DO, but got: " + dataTypeRef); } String[] names = dataTypeRef.split("\\."); @@ -112,15 +134,16 @@ public static IDataParentAdapter findDoiOrSdi(AbstractLNAdapter lnAdapter, St } public static Optional findDai(SCL scl, String iedName, String ldInst, String doiName, String daiName) { - return scl.getIED().stream().filter(tied -> tied.getName().equals(iedName)) - .flatMap(tied -> tied.getAccessPoint().stream()) - .flatMap(tAccessPoint -> tAccessPoint.getServer().getLDevice().stream()) - .filter(tlDevice -> tlDevice.getInst().equals(ldInst)) - .flatMap(tlDevice -> tlDevice.getLN0().getDOI().stream()) + return findDai(scl, iedName, ldInst, "LLN0", "", "", doiName, daiName); + } + + public static Optional findDai(SCL scl, String iedName, String ldInst, String lnClass, String lnInst, String lnPrefix, String doiName, String daiName) { + return findAnyLn(scl, iedName, ldInst, lnClass, lnInst, lnPrefix) + .getDOI().stream() .filter(tdoi -> tdoi.getName().equals(doiName)) - .flatMap(tdoi -> tdoi.getSDIOrDAI().stream().map(tUnNaming -> (TDAI)tUnNaming)) + .flatMap(tdoi -> tdoi.getSDIOrDAI().stream().map(tUnNaming -> (TDAI) tUnNaming)) .filter(tdai -> tdai.getName().equals(daiName)) - .findFirst(); + .findFirst(); } public static AbstractDAIAdapter findDai(AbstractLNAdapter lnAdapter, String dataTypeRef) { @@ -143,16 +166,7 @@ public static String getValue(TDAI tdai) { } else if (tdai.getVal().size() > 1) { Assertions.fail("Expecting a single value for for DAI " + tdai.getName()); } - return tdai.getVal().get(0).getValue(); - } - - - public static LDeviceAdapter findLDeviceByLdName(SCL scl, String ldName) { - return new SclRootAdapter(scl).streamIEDAdapters() - .flatMap(IEDAdapter::streamLDeviceAdapters) - .filter(lDeviceAdapter -> ldName.equals(lDeviceAdapter.getLdName())) - .findFirst() - .orElseThrow(() -> new AssertionFailedError("LDevice with ldName=%s not found in SCD".formatted(ldName))); + return tdai.getVal().getFirst().getValue(); } public static DataSetAdapter findDataSet(SCL scl, String iedName, String ldInst, String dataSetName) { @@ -215,7 +229,7 @@ public static Stream streamAllExtRef(SCL scl) { } public static String getDaiValue(AbstractLNAdapter ln, String doiName, String daiName) { - return ln.getDOIAdapterByName(doiName).getDataAdapterByName(daiName).getCurrentElem().getVal().get(0).getValue(); + return ln.getDOIAdapterByName(doiName).getDataAdapterByName(daiName).getCurrentElem().getVal().getFirst().getValue(); } public static Stream streamAllConnectedApGseP(SCL scd, String pType) { From abce60a3ae1cbbd74bfd0a5b33a37a20e57160fb Mon Sep 17 00:00:00 2001 From: Samir Romdhani Date: Mon, 27 Jan 2025 17:38:17 +0100 Subject: [PATCH 6/6] feat Remove service that Activate used LDevice and Deactivate unused LDevice, closes #464 Signed-off-by: Samir Romdhani --- .../compas/sct/commons/SclService.java | 15 -- .../compas/sct/commons/api/SclEditor.java | 9 - .../scl/ldevice/LDeviceActivation.java | 122 --------- .../compas/sct/commons/scl/ln/LN0Adapter.java | 60 ----- .../scl/sstation/SubstationAdapter.java | 18 -- .../compas/sct/commons/SclServiceTest.java | 191 -------------- .../scl/ldevice/LDeviceActivationTest.java | 199 -------------- .../scl/sstation/SubstationAdapterTest.java | 19 -- .../issue68_Test1_LD_STATUS_INACTIVE.scd | 247 ------------------ .../issue68_Test2_LD_STATUS_INACTIVE.scd | 240 ----------------- .../issue68_Test_Dai_Not_Updatable.scd | 223 ---------------- .../issue68_Test_KO_MissingBeh.scd | 124 --------- .../issue68_Test_KO_MissingLDevicePrivate.scd | 122 --------- ...Test_KO_MissingLDevicePrivateAttribute.scd | 125 --------- .../issue68_Test_KO_MissingMod.scd | 124 --------- .../issue68_Test_LD_STATUS_ACTIVE.scd | 237 ----------------- .../issue68_Test_LD_STATUS_UNTESTED.scd | 237 ----------------- 17 files changed, 2312 deletions(-) delete mode 100644 sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ldevice/LDeviceActivation.java delete mode 100644 sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ldevice/LDeviceActivationTest.java delete mode 100644 sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test1_LD_STATUS_INACTIVE.scd delete mode 100644 sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test2_LD_STATUS_INACTIVE.scd delete mode 100644 sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_Dai_Not_Updatable.scd delete mode 100644 sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingBeh.scd delete mode 100644 sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivate.scd delete mode 100644 sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivateAttribute.scd delete mode 100644 sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingMod.scd delete mode 100644 sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_LD_STATUS_ACTIVE.scd delete mode 100644 sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_LD_STATUS_UNTESTED.scd diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/SclService.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/SclService.java index 006075c87..a2aec92e2 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/SclService.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/SclService.java @@ -6,7 +6,6 @@ import lombok.NonNull; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.tuple.Pair; import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.api.SclEditor; import org.lfenergy.compas.sct.commons.dto.*; @@ -24,7 +23,6 @@ import org.lfenergy.compas.sct.commons.scl.ldevice.LDeviceAdapter; import org.lfenergy.compas.sct.commons.scl.ln.AbstractLNAdapter; import org.lfenergy.compas.sct.commons.scl.ln.LN0Adapter; -import org.lfenergy.compas.sct.commons.scl.sstation.SubstationAdapter; import org.lfenergy.compas.sct.commons.util.PrivateUtils; import org.lfenergy.compas.sct.commons.util.Utils; @@ -187,19 +185,6 @@ public void importSTDElementsInSCD(SCL scd, List stds) throws ScdException }); } - @Override - public List updateLDeviceStatus(SCL scd) { - SclRootAdapter sclRootAdapter = new SclRootAdapter(scd); - SubstationAdapter substationAdapter = sclRootAdapter.getSubstationAdapter(); - final List> iedNameLdInstList = substationAdapter.getIedAndLDeviceNamesForLN0FromLNode(); - return sclRootAdapter.streamIEDAdapters() - .flatMap(IEDAdapter::streamLDeviceAdapters) - .map(LDeviceAdapter::getLN0Adapter) - .map(ln0Adapter -> ln0Adapter.updateLDeviceStatus(iedNameLdInstList)) - .flatMap(Optional::stream) - .toList(); - } - @Override public List updateDoInRef(SCL scd) { SclRootAdapter sclRootAdapter = new SclRootAdapter(scd); diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/SclEditor.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/SclEditor.java index 1040f0ea0..985b436f2 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/SclEditor.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/SclEditor.java @@ -6,7 +6,6 @@ import lombok.NonNull; import org.lfenergy.compas.scl2007b4.model.SCL; -import org.lfenergy.compas.scl2007b4.model.TLNode; import org.lfenergy.compas.sct.commons.dto.*; import org.lfenergy.compas.sct.commons.exception.ScdException; @@ -137,14 +136,6 @@ public interface SclEditor { */ void importSTDElementsInSCD(SCL scd, List stds) throws ScdException; - /** - * Activate used LDevice and Deactivate unused LDevice in {@link TLNode TLNode } - * - * @param scd SCL file for which LDevice should be activated or deactivated - * @return list of encountered errors - */ - List updateLDeviceStatus(SCL scd); - /** * Update DAIs of DO InRef in all LN0 of the SCD using matching ExtRef information. * diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ldevice/LDeviceActivation.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ldevice/LDeviceActivation.java deleted file mode 100644 index 284c3c863..000000000 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ldevice/LDeviceActivation.java +++ /dev/null @@ -1,122 +0,0 @@ -// SPDX-FileCopyrightText: 2022 RTE FRANCE -// -// SPDX-License-Identifier: Apache-2.0 - -package org.lfenergy.compas.sct.commons.scl.ldevice; - -import lombok.Getter; -import lombok.Setter; -import org.apache.commons.lang3.tuple.Pair; -import org.lfenergy.compas.scl2007b4.model.TCompasLDeviceStatus; -import org.lfenergy.compas.sct.commons.util.ActiveStatus; - -import java.util.List; -import java.util.Set; - -/** - * Common class for all states that define if LDevice should be activated or not - * regardless of the CompasLDeviceStatus Private, Enum Values of DO 'Beh' and if it's referenced in Substation...LNode or not - */ -@Getter -@Setter -public class LDeviceActivation { - - private final List> iedNameLdInstList; - private boolean isUpdatable; - private String newVal; - private String errorMessage; - - public LDeviceActivation(List> iedNameLdInstList) { - this.iedNameLdInstList = iedNameLdInstList; - } - - /** - * checks whether LDevice status is authorized to be activated or Not - * @param iedName Ied name value which LDevice appear - * @param ldInst LDevice inst value - * @param compasLDeviceStatus Private value - * @param enumValues enum values - */ - public void checkLDeviceActivationStatus(String iedName, String ldInst, TCompasLDeviceStatus compasLDeviceStatus, Set enumValues) { - if (!enumValues.contains(ActiveStatus.ON.getValue()) && !enumValues.contains(ActiveStatus.OFF.getValue())) { - errorMessage = "The LDevice cannot be activated or desactivated because its BehaviourKind Enum contains NOT 'on' AND NOT 'off'."; - } - if (!enumValues.contains(ActiveStatus.ON.getValue()) && enumValues.contains(ActiveStatus.OFF.getValue())) { - if (isDeclaredInSubstation(iedName, ldInst)) { - errorMessage = "The LDevice cannot be set to 'on' but has been selected into SSD."; - } else { - isUpdatable = true; - newVal = ActiveStatus.OFF.getValue(); - } - } - if(compasLDeviceStatus.equals(TCompasLDeviceStatus.ACTIVE) || - compasLDeviceStatus.equals(TCompasLDeviceStatus.UNTESTED)){ - checkAuthorisationToActivateLDevice(iedName, ldInst, enumValues); - } - if(compasLDeviceStatus.equals(TCompasLDeviceStatus.INACTIVE)){ - checkAuthorisationToDeactivateLDevice(iedName, ldInst, enumValues); - } - } - - /** - * checks whether LDevice status is authorized to be activated when CompasLDeviceStatus Private is ACTIVE or UNTESTED - * @param iedName Ied name value which contains LDevice - * @param ldInst LDevice inst value - * @param enumValues enum values - */ - private void checkAuthorisationToActivateLDevice(String iedName, String ldInst, Set enumValues) { - if (!enumValues.contains(ActiveStatus.OFF.getValue()) && enumValues.contains(ActiveStatus.ON.getValue())) { - if (isDeclaredInSubstation(iedName, ldInst)) { - isUpdatable = true; - newVal = ActiveStatus.ON.getValue(); - } else { - errorMessage = "The LDevice cannot be set to 'off' but has not been selected into SSD."; - } - } - if (enumValues.contains(ActiveStatus.ON.getValue()) && enumValues.contains(ActiveStatus.OFF.getValue())) { - isUpdatable = true; - if (isDeclaredInSubstation(iedName, ldInst)) { - newVal = ActiveStatus.ON.getValue(); - } else { - newVal = ActiveStatus.OFF.getValue(); - } - } - - } - - /** - * checks whether LDevice Status is authorized to be deactivated when CompasLDeviceStatus Private is INACTIVE - * @param iedName Ied name value which contains LDevice - * @param ldInst LDevice inst value - * @param enumValues enum values - */ - private void checkAuthorisationToDeactivateLDevice(String iedName, String ldInst, Set enumValues) { - if (!enumValues.contains(ActiveStatus.OFF.getValue()) && enumValues.contains(ActiveStatus.ON.getValue())) { - if (isDeclaredInSubstation(iedName, ldInst)) { - errorMessage = "The LDevice is not qualified into STD but has been selected into SSD."; - } else { - errorMessage = "The LDevice cannot be set to 'off' but has not been selected into SSD."; - } - } - if (enumValues.contains(ActiveStatus.ON.getValue()) && enumValues.contains(ActiveStatus.OFF.getValue())) { - if (isDeclaredInSubstation(iedName, ldInst)) { - errorMessage = "The LDevice is not qualified into STD but has been selected into SSD."; - } else { - isUpdatable = true; - newVal = ActiveStatus.OFF.getValue(); - } - } - } - - /** - * checks whether a pair of IED name and LDevice inst are referenced in Substation...LNode list - * @param iedName Ied name value - * @param ldInst LDevice inst value - * @return Returns whether a pair of IED name and LDevice inst are referenced in Substation...LNode list - */ - private boolean isDeclaredInSubstation(String iedName, String ldInst){ - return iedNameLdInstList.contains(Pair.of(iedName, ldInst)); - } - - -} diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LN0Adapter.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LN0Adapter.java index 09836f9cc..705a0fff1 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LN0Adapter.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/ln/LN0Adapter.java @@ -5,18 +5,12 @@ package org.lfenergy.compas.sct.commons.scl.ln; -import org.apache.commons.lang3.tuple.Pair; import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.dto.*; import org.lfenergy.compas.sct.commons.scl.ObjectReference; import org.lfenergy.compas.sct.commons.scl.ied.InputsAdapter; -import org.lfenergy.compas.sct.commons.scl.ldevice.LDeviceActivation; import org.lfenergy.compas.sct.commons.scl.ldevice.LDeviceAdapter; -import org.lfenergy.compas.sct.commons.util.PrivateUtils; - import java.util.List; -import java.util.Optional; -import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -68,8 +62,6 @@ */ public class LN0Adapter extends AbstractLNAdapter { - public static final DoTypeName BEHAVIOUR_DO_TYPE_NAME = new DoTypeName(BEHAVIOUR_DO_NAME); - public static final DaTypeName BEHAVIOUR_DA_TYPE_NAME = getDaTypeNameForBeh(); private static final Pattern LDEFP_DIGITAL_CHANNEL_PATTERN = Pattern.compile("DYN_LDEPF_DIGITAL CHANNEL \\d+_\\d+_BOOLEAN"); /** @@ -169,58 +161,6 @@ public void removeAllControlBlocksAndDatasets() { currentElem.unsetSampledValueControl(); } - /** - * Verify and update LDevice status in parent Node - * - * @param iedNameLDeviceInstList pair of Ied name and LDevice inst attributes - * @return Set of Errors - */ - public Optional updateLDeviceStatus(List> iedNameLDeviceInstList) { - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLDeviceInstList); - final String iedName = getParentAdapter().getParentAdapter().getName(); - final String ldInst = getParentAdapter().getInst(); - DataAttributeRef daiBehFilter = new DataAttributeRef(this, BEHAVIOUR_DO_TYPE_NAME, BEHAVIOUR_DA_TYPE_NAME); - List daiBehList = getDAI(daiBehFilter, false); - if (daiBehList.isEmpty()) { - return Optional.of(buildFatalReportItem("The LDevice doesn't have a DO @name='Beh' OR its associated DA@fc='ST' AND DA@name='stVal'")); - } - Set enumValues = getEnumValues(daiBehList.getFirst().getDaName().getType()); - Optional optionalTCompasLDevice = PrivateUtils.extractCompasPrivate(getParentAdapter().getCurrentElem(), TCompasLDevice.class); - if (optionalTCompasLDevice.isEmpty()) { - return Optional.of(buildFatalReportItem("The LDevice doesn't have a Private compas:LDevice.")); - } - if (!optionalTCompasLDevice.get().isSetLDeviceStatus()) { - return Optional.of(buildFatalReportItem("The Private compas:LDevice doesn't have the attribute 'LDeviceStatus'")); - } - TCompasLDeviceStatus compasLDeviceStatus = optionalTCompasLDevice.get().getLDeviceStatus(); - Optional optionalModStVal = getDaiModStVal(); - if (optionalModStVal.isEmpty()) { - return Optional.of(buildFatalReportItem("The LDevice doesn't have a DO @name='Mod'")); - } - DataAttributeRef newDaModToSetInLN0 = optionalModStVal.get(); - String initialValue = newDaModToSetInLN0.findFirstValue().orElse(""); - lDeviceActivation.checkLDeviceActivationStatus(iedName, ldInst, compasLDeviceStatus, enumValues); - if (lDeviceActivation.isUpdatable()) { - if (!initialValue.equals(lDeviceActivation.getNewVal())) { - newDaModToSetInLN0.setVal(lDeviceActivation.getNewVal()); - updateDAI(newDaModToSetInLN0); - } - } else { - if (lDeviceActivation.getErrorMessage() != null) { - return Optional.of(buildFatalReportItem(lDeviceActivation.getErrorMessage())); - } - } - return Optional.empty(); - } - - private static DaTypeName getDaTypeNameForBeh() { - DaTypeName daTypeNameBeh = new DaTypeName(); - daTypeNameBeh.setName(STVAL_DA_NAME); - daTypeNameBeh.setBType(TPredefinedBasicTypeEnum.ENUM); - daTypeNameBeh.setFc(TFCEnum.ST); - return daTypeNameBeh; - } - /** * Update DAIs of DO InRef in all LN0 of the SCD using matching ExtRef information. * diff --git a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/sstation/SubstationAdapter.java b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/sstation/SubstationAdapter.java index 02d9ce17c..1b68bc99f 100644 --- a/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/sstation/SubstationAdapter.java +++ b/sct-commons/src/main/java/org/lfenergy/compas/sct/commons/scl/sstation/SubstationAdapter.java @@ -4,17 +4,13 @@ package org.lfenergy.compas.sct.commons.scl.sstation; -import org.apache.commons.lang3.tuple.Pair; -import org.lfenergy.compas.scl2007b4.model.TLLN0Enum; import org.lfenergy.compas.scl2007b4.model.TSubstation; import org.lfenergy.compas.sct.commons.exception.ScdException; import org.lfenergy.compas.sct.commons.scl.SclElementAdapter; import org.lfenergy.compas.sct.commons.scl.SclRootAdapter; import org.lfenergy.compas.sct.commons.util.Utils; -import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -119,18 +115,4 @@ public Stream streamVoltageLevelAdapters() { return currentElem.getVoltageLevel().stream().map(tVoltageLevel -> new VoltageLevelAdapter(this, tVoltageLevel)); } - /** - * Gets a pair of IedName and LDevice inst from Substation LNodes for LN0 type object - * @return a pair of Ied name and LDevice inst attributes - */ - public List> getIedAndLDeviceNamesForLN0FromLNode() { - return streamVoltageLevelAdapters() - .flatMap(VoltageLevelAdapter::streamBayAdapters) - .flatMap(BayAdapter::streamFunctionAdapters) - .flatMap(functionAdapter -> functionAdapter.getCurrentElem().getLNode().stream()) - .filter(tlNode -> tlNode.getLnClass().contains(TLLN0Enum.LLN_0.value())) - .map(tlNode -> Pair.of(tlNode.getIedName(), tlNode.getLdInst())) - .collect(Collectors.toList()); - } - } diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/SclServiceTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/SclServiceTest.java index dafaf271a..3f164531c 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/SclServiceTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/SclServiceTest.java @@ -9,9 +9,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.CsvSource; -import org.junit.jupiter.params.provider.MethodSource; import org.lfenergy.compas.scl2007b4.model.*; import org.lfenergy.compas.sct.commons.dto.*; import org.lfenergy.compas.sct.commons.exception.ScdException; @@ -21,7 +19,6 @@ import org.lfenergy.compas.sct.commons.scl.ldevice.LDeviceAdapter; import org.lfenergy.compas.sct.commons.scl.ln.LN0Adapter; import org.lfenergy.compas.sct.commons.scl.ln.LNAdapter; -import org.lfenergy.compas.sct.commons.testhelpers.MarshallerWrapper; import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller; import org.mockito.InjectMocks; import org.mockito.junit.jupiter.MockitoExtension; @@ -29,7 +26,6 @@ import java.util.List; import java.util.Optional; import java.util.UUID; -import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -46,60 +42,6 @@ class SclServiceTest { @InjectMocks SclService sclService; - private static Stream sclProviderMissingRequiredObjects() { - SCL scl1 = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test_KO_MissingBeh.scd"); - SCL scl2 = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivate.scd"); - SCL scl3 = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivateAttribute.scd"); - SCL scl4 = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test_KO_MissingMod.scd"); - Tuple[] scl1Errors = new Tuple[]{Tuple.tuple("The LDevice doesn't have a DO @name='Beh' OR its associated DA@fc='ST' AND DA@name='stVal'", - "/SCL/IED[@name=\"IedName1\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0")}; - Tuple[] scl2Errors = new Tuple[]{Tuple.tuple("The LDevice doesn't have a Private compas:LDevice.", - "/SCL/IED[@name=\"IedName1\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0")}; - Tuple[] scl3Errors = new Tuple[]{Tuple.tuple("The Private compas:LDevice doesn't have the attribute 'LDeviceStatus'", - "/SCL/IED[@name=\"IedName1\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0")}; - Tuple[] scl4Errors = new Tuple[]{Tuple.tuple("The LDevice doesn't have a DO @name='Mod'", - "/SCL/IED[@name=\"IedName1\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0")}; - return Stream.of( - Arguments.of("MissingDOBeh", scl1, scl1Errors), - Arguments.of("MissingLDevicePrivate", scl2, scl2Errors), - Arguments.of("MissingLDevicePrivateAttribute", scl3, scl3Errors), - Arguments.of("MissingDOMod", scl4, scl4Errors) - ); - } - - private static Stream sclProviderBasedLDeviceStatus() { - SCL scl1 = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test_LD_STATUS_ACTIVE.scd"); - SCL scl2 = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test_LD_STATUS_UNTESTED.scd"); - SCL scl3 = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test1_LD_STATUS_INACTIVE.scd"); - Tuple[] scl1Errors = new Tuple[]{Tuple.tuple("The LDevice cannot be set to 'off' but has not been selected into SSD.", - "/SCL/IED[@name=\"IedName1\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0"), - Tuple.tuple("The LDevice cannot be set to 'on' but has been selected into SSD.", - "/SCL/IED[@name=\"IedName2\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0"), - Tuple.tuple("The LDevice cannot be activated or desactivated because its BehaviourKind Enum contains NOT 'on' AND NOT 'off'.", - "/SCL/IED[@name=\"IedName3\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0" - )}; - Tuple[] scl2Errors = new Tuple[]{Tuple.tuple("The LDevice cannot be set to 'off' but has not been selected into SSD.", - "/SCL/IED[@name=\"IedName1\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0"), - Tuple.tuple("The LDevice cannot be set to 'on' but has been selected into SSD.", - "/SCL/IED[@name=\"IedName2\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0"), - Tuple.tuple("The LDevice cannot be activated or desactivated because its BehaviourKind Enum contains NOT 'on' AND NOT 'off'.", - "/SCL/IED[@name=\"IedName3\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0" - )}; - Tuple[] scl3Errors = new Tuple[]{Tuple.tuple("The LDevice is not qualified into STD but has been selected into SSD.", - "/SCL/IED[@name=\"IedName1\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0"), - Tuple.tuple("The LDevice cannot be set to 'on' but has been selected into SSD.", - "/SCL/IED[@name=\"IedName2\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0"), - Tuple.tuple("The LDevice cannot be activated or desactivated because its BehaviourKind Enum contains NOT 'on' AND NOT 'off'.", - "/SCL/IED[@name=\"IedName3\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0" - )}; - return Stream.of( - Arguments.of("ACTIVE", scl1, scl1Errors), - Arguments.of("UNTESTED", scl2, scl2Errors), - Arguments.of("INACTIVE", scl3, scl3Errors) - ); - } - - @Test void addHistoryItem_should_add_history_elements() throws ScdException { //Given @@ -175,7 +117,6 @@ void addSubnetworks_whenNoCommunicationTagInIcd_should_not_add_subnetwork() { @Test void addSubnetworks_shouldNotUpdateScd_when_noCommunicationInSTDExist() { //Givens - SCL initial = SclTestMarshaller.getSCLFromFile("/scl_update_communication/scd_without_communication.xml"); SCL scd = SclTestMarshaller.getSCLFromFile("/scl_update_communication/scd_without_communication.xml"); SCL icd = SclTestMarshaller.getSCLFromFile("/scl_update_communication/std_without_communication.xml"); assertThat(scd.getCommunication()).isNull(); @@ -396,138 +337,6 @@ void importSTDElementsInSCD_whenNoSTDMatch_shouldThrowException() { .hasMessage("There is no STD file found corresponding to headerId = f8dbc8c1-2db7-4652-a9d6-0b414bdeccfa, headerVersion = 01.00.00, headerRevision = 01.00.00 and ICDSystemVersionUUID = IED4d4fe1a8cda64cf88a5ee4176a1a0eef"); } - @ParameterizedTest(name = "{0}") - @MethodSource("sclProviderMissingRequiredObjects") - void updateLDeviceStatus_whenMissingRequiredObject_shouldReturnReportWithError(String testCase, SCL scl, Tuple... errors) { - // Given - assertThat(getLDeviceStatusValue(scl, "IedName1", "LDSUIED")).isPresent(); - assertThat(getLDeviceStatusValue(scl, "IedName1", "LDSUIED").get().getValue()).isEqualTo("off"); - String before = MarshallerWrapper.marshall(scl); - // When - List sclReportItems = sclService.updateLDeviceStatus(scl); - // Then - String after = MarshallerWrapper.marshall(scl); - assertThat(sclReportItems.stream().noneMatch(SclReportItem::isError)).isFalse(); - assertThat(sclReportItems) - .hasSize(1) - .extracting(SclReportItem::message, SclReportItem::xpath) - .containsExactly(errors); - assertThat(getLDeviceStatusValue(scl, "IedName1", "LDSUIED").get().getValue()).isEqualTo("off"); - assertThat(before).isEqualTo(after); - } - - @ParameterizedTest(name = "{0}") - @MethodSource("sclProviderBasedLDeviceStatus") - void updateLDeviceStatus_whenLDeviceStatusActiveOrUntestedOrInactive_shouldReturnReportWithError(String testCase, SCL scl, Tuple... errors) { - // Given - assertThat(getLDeviceStatusValue(scl, "IedName1", "LDSUIED").get().getValue()).isEqualTo("off"); - assertThat(getLDeviceStatusValue(scl, "IedName2", "LDSUIED").get().getValue()).isEqualTo("on"); - assertThat(getLDeviceStatusValue(scl, "IedName3", "LDSUIED")).isEmpty(); - String before = MarshallerWrapper.marshall(scl); - // When - List sclReportItems = sclService.updateLDeviceStatus(scl); - // Then - String after = MarshallerWrapper.marshall(scl); - assertThat(sclReportItems.stream().noneMatch(SclReportItem::isError)).isFalse(); - assertThat(sclReportItems) - .hasSize(3) - .extracting(SclReportItem::message, SclReportItem::xpath) - .containsExactly(errors); - assertThat(getLDeviceStatusValue(scl, "IedName1", "LDSUIED").get().getValue()).isEqualTo("off"); - assertThat(getLDeviceStatusValue(scl, "IedName2", "LDSUIED").get().getValue()).isEqualTo("on"); - assertThat(getLDeviceStatusValue(scl, "IedName3", "LDSUIED")).isEmpty(); - assertThat(before).isEqualTo(after); - } - - @Test - void updateLDeviceStatus_whenAllLDeviceInactive_shouldReturnReportWithError() { - // Given - SCL scl = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test2_LD_STATUS_INACTIVE.scd"); - assertThat(getLDeviceStatusValue(scl, "IedName1", "LDSUIED").get().getValue()).isEqualTo("off"); - assertThat(getLDeviceStatusValue(scl, "IedName2", "LDSUIED").get().getValue()).isEqualTo("on"); - assertThat(getLDeviceStatusValue(scl, "IedName3", "LDSUIED")).isEmpty(); - // When - List sclReportItems = sclService.updateLDeviceStatus(scl); - // Then - assertThat(sclReportItems.stream().noneMatch(SclReportItem::isError)).isFalse(); - assertThat(sclReportItems) - .hasSize(2) - .extracting(SclReportItem::message, SclReportItem::xpath) - .containsExactly(Tuple.tuple("The LDevice cannot be set to 'off' but has not been selected into SSD.", - "/SCL/IED[@name=\"IedName1\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0"), - Tuple.tuple("The LDevice is not qualified into STD but has been selected into SSD.", - "/SCL/IED[@name=\"IedName2\"]/AccessPoint/Server/LDevice[@inst=\"LDSUIED\"]/LN0")); - assertThat(getLDeviceStatusValue(scl, "IedName1", "LDSUIED").get().getValue()).isEqualTo("off"); - assertThat(getLDeviceStatusValue(scl, "IedName2", "LDSUIED").get().getValue()).isEqualTo("on"); - assertThat(getLDeviceStatusValue(scl, "IedName3", "LDSUIED")).isPresent(); - assertThat(getLDeviceStatusValue(scl, "IedName3", "LDSUIED").get().getValue()).isEqualTo("off"); - } - - @Test - void updateLDeviceStatus_shouldReturnUpdatedFile() { - // Given - SCL givenScl = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test_Template.scd"); - assertThat(getLDeviceStatusValue(givenScl, "IedName1", "LDSUIED")).isPresent(); - assertThat(getLDeviceStatusValue(givenScl, "IedName1", "LDSUIED").get().getValue()).isEqualTo("off"); - assertThat(getLDeviceStatusValue(givenScl, "IedName2", "LDSUIED")).isPresent(); - assertThat(getLDeviceStatusValue(givenScl, "IedName2", "LDSUIED").get().getValue()).isEqualTo("on"); - assertThat(getLDeviceStatusValue(givenScl, "IedName3", "LDSUIED")).isEmpty(); - // When - List sclReportItems = sclService.updateLDeviceStatus(givenScl); - // Then - assertThat(sclReportItems.stream().noneMatch(SclReportItem::isError)).isTrue(); - assertThat(getLDeviceStatusValue(givenScl, "IedName1", "LDSUIED")).isPresent(); - assertThat(getLDeviceStatusValue(givenScl, "IedName1", "LDSUIED").get().getValue()).isEqualTo("on"); - assertThat(getLDeviceStatusValue(givenScl, "IedName2", "LDSUIED")).isPresent(); - assertThat(getLDeviceStatusValue(givenScl, "IedName2", "LDSUIED").get().getValue()).isEqualTo("off"); - assertThat(getLDeviceStatusValue(givenScl, "IedName3", "LDSUIED")).isPresent(); - assertThat(getLDeviceStatusValue(givenScl, "IedName3", "LDSUIED").get().getValue()).isEqualTo("off"); - } - - @Test - void updateLDeviceStatus_when_DAI_Mod_DO_stVal_whateverIsUpdatableOrNot_shouldReturnUpdatedFile() { - // Given - SCL givenScl = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue_165_enhance_68_Test_Dai_Updatable.scd"); - assertThat(getLDeviceStatusValue(givenScl, "IedName1", "LDSUIED")) - .map(TVal::getValue) - .hasValue("off"); - assertThat(getLDeviceStatusValue(givenScl, "IedName2", "LDSUIED")) - .map(TVal::getValue) - .hasValue("on"); - assertThat(getLDeviceStatusValue(givenScl, "IedName3", "LDSUIED")) - .map(TVal::getValue) - .isNotPresent(); - assertThat(getLDeviceStatusValue(givenScl, "IedName4", "LDSUIED")) - .map(TVal::getValue) - .hasValue("on"); - assertThat(getLDeviceStatusValue(givenScl, "IedName5", "LDSUIED")) - .map(TVal::getValue) - .hasValue("on"); - // When - List sclReportItems = sclService.updateLDeviceStatus(givenScl); - // Then - assertThat(sclReportItems.stream().noneMatch(SclReportItem::isError)).isTrue(); - assertThat(getLDeviceStatusValue(givenScl, "IedName1", "LDSUIED")) - .map(TVal::getValue) - .hasValue("on"); - assertThat(getLDeviceStatusValue(givenScl, "IedName2", "LDSUIED")) - .map(TVal::getValue) - .hasValue("off"); - assertThat(getLDeviceStatusValue(givenScl, "IedName3", "LDSUIED")) - .map(TVal::getValue) - .hasValue("off"); - assertThat(getLDeviceStatusValue(givenScl, "IedName4", "LDSUIED")) - .map(TVal::getValue) - .hasValue("off"); - assertThat(getLDeviceStatusValue(givenScl, "IedName5", "LDSUIED")) - .map(TVal::getValue) - .hasValue("off"); - } - - private Optional getLDeviceStatusValue(SCL scl, String iedName, String ldInst) { - return getValFromDaiName(scl, iedName, ldInst, "Mod", "stVal"); - } - @ParameterizedTest(name = "{0}") @CsvSource({ "Test update setSrcRef Value,LD_WITH_1_InRef,InRef2,setSrcRef,IED_NAME1LD_WITH_1_InRef/PRANCR1.Do11.sdo11", diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ldevice/LDeviceActivationTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ldevice/LDeviceActivationTest.java deleted file mode 100644 index 8858ed3ac..000000000 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/ldevice/LDeviceActivationTest.java +++ /dev/null @@ -1,199 +0,0 @@ -// SPDX-FileCopyrightText: 2022 RTE FRANCE -// -// SPDX-License-Identifier: Apache-2.0 - -package org.lfenergy.compas.sct.commons.scl.ldevice; - -import org.apache.commons.lang3.tuple.Pair; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; -import org.junit.jupiter.params.provider.ValueSource; -import org.lfenergy.compas.scl2007b4.model.TCompasLDeviceStatus; - -import java.util.List; -import java.util.Set; - -import static org.assertj.core.api.Assertions.assertThat; - -class LDeviceActivationTest { - - @ParameterizedTest - @ValueSource(strings = {"ACTIVE", "UNTESTED"}) - void checkLDeviceActivationStatus_shouldReturnNoError_when_LDeviceStatusACTIVE_Or_UNTESTED_And_Contains_ON_And_LDeviceReferencedINLNode(String lDeviceStatus) { - // Given - List> iedNameLdInstList = List.of(Pair.of("iedName1", "ldInst1")); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("on"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.fromValue(lDeviceStatus), Set.of("on")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isTrue(); - assertThat(lDeviceActivation.getErrorMessage()).isNull(); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("on"); - } - - @ParameterizedTest - @ValueSource(strings = {"ACTIVE", "UNTESTED"}) - void checkLDeviceActivationStatus_shouldReturnError_when_LDeviceStatusACTIVE_Or_UNTESTED_And_Contains_ON_And_NotLDeviceReferencedINLNode(String lDeviceStatus) { - // Given - List> iedNameLdInstList = List.of(); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("on"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst2", TCompasLDeviceStatus.valueOf(lDeviceStatus), Set.of("on")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isFalse(); - assertThat(lDeviceActivation.getErrorMessage()).isEqualTo("The LDevice cannot be set to 'off' but has not been selected into SSD."); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("on"); - } - - @ParameterizedTest - @ValueSource(strings = {"ACTIVE", "UNTESTED"}) - void checkLDeviceActivationStatus_shouldReturnError_when_LDeviceStatusACTIVE_Or_UNTESTED_And_Contains_OFF_And_LDeviceReferencedINLNode(String lDeviceStatus) { - // Given - List> iedNameLdInstList = List.of(Pair.of("iedName1", "ldInst1")); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("off"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.valueOf(lDeviceStatus), Set.of("off")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isFalse(); - assertThat(lDeviceActivation.getErrorMessage()).isEqualTo( - "The LDevice cannot be set to 'on' but has been selected into SSD."); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("off"); - } - - @ParameterizedTest - @ValueSource(strings = {"ACTIVE", "UNTESTED"}) - void checkLDeviceActivationStatus_shouldReturnNoError_when_LDeviceStatusACTIVE_Or_UNTESTED_And_Contains_OFF_And_NotLDeviceReferencedINLNode(String lDeviceStatus) { - // Given - List> iedNameLdInstList = List.of(); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("on"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.valueOf(lDeviceStatus), Set.of("off")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isTrue(); - assertThat(lDeviceActivation.getErrorMessage()).isNull(); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("off"); - } - - @ParameterizedTest - @ValueSource(strings = {"ACTIVE", "UNTESTED"}) - void checkLDeviceActivationStatus_shouldReturnNoError_when_LDeviceStatusACTIVE_Or_UNTESTED_And_Contains_ON_And_OFF_And_LDeviceReferencedINLNode(String lDeviceStatus) { - // Given - List> iedNameLdInstList = List.of(Pair.of("iedName1", "ldInst1")); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("off"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.valueOf(lDeviceStatus), Set.of("on", "off")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isTrue(); - assertThat(lDeviceActivation.getErrorMessage()).isNull(); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("on"); - } - - @ParameterizedTest - @ValueSource(strings = {"ACTIVE", "UNTESTED"}) - void checkLDeviceActivationStatus_shouldReturnNoError_when_LDeviceStatusACTIVE_Or_UNTESTED_And_Contains_ON_And_OFF_And_NotLDeviceReferencedINLNode(String lDeviceStatus) { - // Given - List> iedNameLdInstList = List.of(); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("off"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst2", TCompasLDeviceStatus.valueOf(lDeviceStatus), Set.of("on", "off")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isTrue(); - assertThat(lDeviceActivation.getErrorMessage()).isNull(); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("off"); - } - - @ParameterizedTest - @CsvSource(value = {"ACTIVE; iedName1; ldInst1","INACTIVE; iedName1; ldInst1", "UNTESTED; iedName1; ldInst1", "ACTIVE;;","INACTIVE;;", "UNTESTED;;"}, delimiter = ';') - void checkLDeviceActivationStatus_shouldReturnError_when_Contains_Not_ON_Nor_OFF(String lDeviceStatus, String iedName, String ldInst) { - // Given - List> iedNameLdInstList = List.of(Pair.of(iedName, ldInst)); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("off"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.valueOf(lDeviceStatus), Set.of()); - // Then - assertThat(lDeviceActivation.isUpdatable()).isFalse(); - assertThat(lDeviceActivation.getErrorMessage()).isEqualTo( - "The LDevice cannot be activated or desactivated because its BehaviourKind Enum contains NOT 'on' AND NOT 'off'."); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("off"); - } - - @Test - void checkLDeviceActivationStatus_shouldReturnError_when_LDeviceStatusINACTIVE_And_Contains_ON_And_LDeviceReferencedINLNode() { - // Given - List> iedNameLdInstList = List.of(Pair.of("iedName1", "ldInst1")); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("on"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.INACTIVE, Set.of("on")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isFalse(); - assertThat(lDeviceActivation.getErrorMessage()).isEqualTo("The LDevice is not qualified into STD but has been selected into SSD."); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("on"); - } - - @Test - void checkLDeviceActivationStatus_shouldReturnNoError_when_LDeviceStatusINACTIVE_And_Contains_ON_And_OFF_And_NotLDeviceReferencedINLNode() { - // Given - List> iedNameLdInstList = List.of(); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("on"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.INACTIVE, Set.of("on", "off")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isTrue(); - assertThat(lDeviceActivation.getErrorMessage()).isNull(); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("off"); - } - - @Test - void checkLDeviceActivationStatus_shouldReturnError_when_LDeviceStatusINACTIVE_And_Contains_ON_And_NotLDeviceReferencedINLNode() { - // Given - List> iedNameLdInstList = List.of(); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("on"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.INACTIVE, Set.of("on")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isFalse(); - assertThat(lDeviceActivation.getErrorMessage()).isEqualTo("The LDevice cannot be set to 'off' but has not been selected into SSD."); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("on"); - } - - @Test - void checkLDeviceActivationStatus_shouldReturnNoError_when_LDeviceStatusINACTIVE_And_Contains_OFF_And_NotLDeviceReferencedINLNode() { - // Given - List> iedNameLdInstList = List.of(); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("on"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.INACTIVE, Set.of("off")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isTrue(); - assertThat(lDeviceActivation.getErrorMessage()).isNull(); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("off"); - } - - @Test - void checkLDeviceActivationStatus_shouldReturnError_when_LDeviceStatusINACTIVE_And_Contains_ON_And_OFF_And_LDeviceReferencedINLNode() { - // Given - List> iedNameLdInstList = List.of(Pair.of("iedName1", "ldInst1")); - LDeviceActivation lDeviceActivation = new LDeviceActivation(iedNameLdInstList); - lDeviceActivation.setNewVal("off"); - // When - lDeviceActivation.checkLDeviceActivationStatus("iedName1", "ldInst1", TCompasLDeviceStatus.INACTIVE, Set.of("on", "off")); - // Then - assertThat(lDeviceActivation.isUpdatable()).isFalse(); - assertThat(lDeviceActivation.getErrorMessage()).isEqualTo( - "The LDevice is not qualified into STD but has been selected into SSD."); - assertThat(lDeviceActivation.getNewVal()).isEqualTo("off"); - } - -} \ No newline at end of file diff --git a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/sstation/SubstationAdapterTest.java b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/sstation/SubstationAdapterTest.java index f7d1abdc2..1f7edd2f9 100644 --- a/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/sstation/SubstationAdapterTest.java +++ b/sct-commons/src/test/java/org/lfenergy/compas/sct/commons/scl/sstation/SubstationAdapterTest.java @@ -4,7 +4,6 @@ package org.lfenergy.compas.sct.commons.scl.sstation; -import org.apache.commons.lang3.tuple.Pair; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.lfenergy.compas.scl2007b4.model.SCL; @@ -12,9 +11,6 @@ import org.lfenergy.compas.scl2007b4.model.TSubstation; import org.lfenergy.compas.scl2007b4.model.TVoltageLevel; import org.lfenergy.compas.sct.commons.scl.SclRootAdapter; -import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller; - -import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -93,19 +89,4 @@ void addPrivate_with_type_and_source_should_create_Private() { assertThat(substationAdapter.getCurrentElem().getPrivate()).isNotEmpty(); } - - @Test - void getIedAndLDeviceNamesForLN0FromLNode_whenLNodeContainsLN0_shouldReturnListOf1Pair() { - // Given - SCL scl = SclTestMarshaller.getSCLFromFile("/scd-refresh-lnode/issue68_Test_Template.scd"); - SclRootAdapter sclRootAdapter = new SclRootAdapter(scl); - substationAdapter = sclRootAdapter.getSubstationAdapter(); - // When - List> iedNameLdInstList = substationAdapter.getIedAndLDeviceNamesForLN0FromLNode(); - // Then - assertThat(iedNameLdInstList) - .hasSize(1) - .containsExactly(Pair.of("IedName1", "LDSUIED")); - } - } diff --git a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test1_LD_STATUS_INACTIVE.scd b/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test1_LD_STATUS_INACTIVE.scd deleted file mode 100644 index 33fc9cba8..000000000 --- a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test1_LD_STATUS_INACTIVE.scd +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - SCD - -
- - - -
- - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

00000001

-
-
- -
-

00000001

-
-
-
- - -
-

Adresse IP du serveur Syslog

-
-
- -
-

Adresse IP du serveur Syslog

-
-
-
-
- - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - off - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - on - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - on - blocked - test - test/blocked - - - off - blocked - test - test/blocked - - - blocked - test - test/blocked - - -
diff --git a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test2_LD_STATUS_INACTIVE.scd b/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test2_LD_STATUS_INACTIVE.scd deleted file mode 100644 index 72b928c71..000000000 --- a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test2_LD_STATUS_INACTIVE.scd +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - SCD - -
- - - -
- - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - -
-

00000001

-
-
- -
-

00000001

-
-
-
- - -
-

Adresse IP du serveur Syslog

-
-
- -
-

Adresse IP du serveur Syslog

-
-
-
-
- - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - off - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - on - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - on - blocked - test - test/blocked - - - on - off - blocked - test - test/blocked - - - on - off - blocked - test - test/blocked - - -
diff --git a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_Dai_Not_Updatable.scd b/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_Dai_Not_Updatable.scd deleted file mode 100644 index 730ca6fd7..000000000 --- a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_Dai_Not_Updatable.scd +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - SCD - -
- - - -
- - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - -
-

00000001

-
-
- -
-

00000001

-
-
-
- - -
-

Adresse IP du serveur Syslog

-
-
- -
-

Adresse IP du serveur Syslog

-
-
-
-
- - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - off - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - on - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - on - off - blocked - test - test/blocked - - - on - off - blocked - test - test/blocked - - - on - off - blocked - test - test/blocked - - -
diff --git a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingBeh.scd b/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingBeh.scd deleted file mode 100644 index 9e88bb19e..000000000 --- a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingBeh.scd +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - SCD - -
- - - -
- - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - -
-

00000001

-
-
-
- - -
-

Adresse IP du serveur Syslog

-
-
-
-
- - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - off - - - - - - - - - - - - - - - - - - - - - - - blocked - test - test/blocked - off - on - - - -
diff --git a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivate.scd b/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivate.scd deleted file mode 100644 index 49cb8aac5..000000000 --- a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivate.scd +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - SCD - -
- - - -
- - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - -
-

00000001

-
-
-
- - -
-

Adresse IP du serveur Syslog

-
-
-
-
- - SAMU - SAMU - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - off - - - - - - - - - - - - - - - - - - - - - - - - blocked - test - test/blocked - off - on - - - -
diff --git a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivateAttribute.scd b/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivateAttribute.scd deleted file mode 100644 index b592f569d..000000000 --- a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingLDevicePrivateAttribute.scd +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - SCD - -
- - - -
- - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - -
-

00000001

-
-
-
- - -
-

Adresse IP du serveur Syslog

-
-
-
-
- - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - off - - - - - - - - - - - - - - - - - - - - - - - - blocked - test - test/blocked - off - on - - - -
diff --git a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingMod.scd b/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingMod.scd deleted file mode 100644 index 27b6c193d..000000000 --- a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_KO_MissingMod.scd +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - SCD - -
- - - -
- - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - -
-

00000001

-
-
-
- - -
-

Adresse IP du serveur Syslog

-
-
-
-
- - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - off - - - - - - - - - - - - - - - - - - - - - - - blocked - test - test/blocked - off - on - - - -
diff --git a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_LD_STATUS_ACTIVE.scd b/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_LD_STATUS_ACTIVE.scd deleted file mode 100644 index 87ca28bf1..000000000 --- a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_LD_STATUS_ACTIVE.scd +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - SCD - -
- - - -
- - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - -
-

00000001

-
-
- -
-

00000001

-
-
-
- - -
-

Adresse IP du serveur Syslog

-
-
- -
-

Adresse IP du serveur Syslog

-
-
-
-
- - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - off - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - on - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - on - blocked - test - test/blocked - - - off - blocked - test - test/blocked - - - blocked - test - test/blocked - - -
diff --git a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_LD_STATUS_UNTESTED.scd b/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_LD_STATUS_UNTESTED.scd deleted file mode 100644 index c6f31cdb5..000000000 --- a/sct-commons/src/test/resources/scd-refresh-lnode/issue68_Test_LD_STATUS_UNTESTED.scd +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - SCD - -
- - - -
- - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - -
-

00000001

-
-
- -
-

00000001

-
-
-
- - -
-

Adresse IP du serveur Syslog

-
-
- -
-

Adresse IP du serveur Syslog

-
-
-
-
- - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - off - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - on - - - - - - - - - - - SAMU - SAMU - - - - - - - - - - - - - - - - - 01.00.000 - - - 01.00.000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - on - blocked - test - test/blocked - - - off - blocked - test - test/blocked - - - blocked - test - test/blocked - - -