Skip to content

Commit 8256473

Browse files
massifbenAliouDIAITE
authored andcommitted
feat(77): RSR-369 - update ExtRef iedName part 1/3 (#173)
Signed-off-by: massifben <[email protected]> Signed-off-by: Aliou DIAITE <[email protected]>
1 parent 8e0f8eb commit 8256473

File tree

19 files changed

+633
-124
lines changed

19 files changed

+633
-124
lines changed

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/IedDTO.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@
77
import lombok.Getter;
88
import lombok.NoArgsConstructor;
99
import org.lfenergy.compas.sct.commons.scl.ied.IEDAdapter;
10-
import org.lfenergy.compas.sct.commons.scl.ied.LDeviceAdapter;
1110

1211
import java.util.HashSet;
13-
import java.util.List;
1412
import java.util.Optional;
1513
import java.util.Set;
1614
import java.util.stream.Collectors;
@@ -52,8 +50,7 @@ public IedDTO(String name){
5250
public static IedDTO from(IEDAdapter iedAdapter, LogicalNodeOptions options) {
5351
IedDTO iedDTO = new IedDTO();
5452
iedDTO.name = iedAdapter.getName();
55-
List<LDeviceAdapter> lDeviceAdapters = iedAdapter.getLDeviceAdapters();
56-
iedDTO.lDevices = lDeviceAdapters.stream()
53+
iedDTO.lDevices = iedAdapter.streamLDeviceAdapters()
5754
.map(lDeviceAdapter -> LDeviceDTO.from(lDeviceAdapter,options))
5855
.collect(Collectors.toUnmodifiableSet());
5956

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/SclReport.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,30 @@
1212
import java.util.ArrayList;
1313
import java.util.List;
1414

15+
/**
16+
* Report of services which work on the SCD.
17+
*/
1518
@AllArgsConstructor
1619
@NoArgsConstructor
1720
@Setter
1821
@Getter
1922
@Builder
2023
public class SclReport {
2124

25+
/**
26+
* The SCD on which errors were encountered
27+
*/
2228
private SclRootAdapter sclRootAdapter;
2329

30+
/**
31+
* List of errors
32+
*/
2433
private List<ErrorDescription> errorDescriptionList = new ArrayList<>();
2534

35+
/**
36+
*
37+
* @return true the service succeeded, false otherwise
38+
*/
2639
public boolean isSuccess() {
2740
return errorDescriptionList.isEmpty();
2841
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// SPDX-FileCopyrightText: 2022 RTE FRANCE
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.lfenergy.compas.sct.commons.scl;
6+
7+
import lombok.experimental.UtilityClass;
8+
import org.lfenergy.compas.scl2007b4.model.SCL;
9+
import org.lfenergy.compas.sct.commons.dto.SclReport;
10+
import org.lfenergy.compas.sct.commons.scl.ied.IEDAdapter;
11+
import org.lfenergy.compas.sct.commons.scl.ied.InputsAdapter;
12+
import org.lfenergy.compas.sct.commons.scl.ied.LDeviceAdapter;
13+
import org.lfenergy.compas.sct.commons.scl.ied.LN0Adapter;
14+
15+
import java.util.List;
16+
import java.util.stream.Collectors;
17+
18+
@UtilityClass
19+
public class ExtRefService {
20+
21+
/**
22+
* Updates iedName attribute of all ExtRefs in the Scd.
23+
* @return list of encountered errors
24+
*/
25+
public static SclReport updateAllExtRefIedNames(SCL scd) {
26+
SclRootAdapter sclRootAdapter = new SclRootAdapter(scd);
27+
28+
List<SclReport.ErrorDescription> errorDescriptions = sclRootAdapter.streamIEDAdapters()
29+
.flatMap(IEDAdapter::streamLDeviceAdapters)
30+
.filter(LDeviceAdapter::hasLN0)
31+
.map(LDeviceAdapter::getLN0Adapter)
32+
.filter(LN0Adapter::hasInputs)
33+
.map(LN0Adapter::getInputsAdapter)
34+
.map(InputsAdapter::updateAllExtRefIedNames)
35+
.flatMap(List::stream)
36+
.collect(Collectors.toList());
37+
return SclReport.builder()
38+
.sclRootAdapter(sclRootAdapter)
39+
.errorDescriptionList(errorDescriptions).build();
40+
}
41+
42+
43+
44+
45+
}

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717
import org.lfenergy.compas.sct.commons.scl.ied.IEDAdapter;
1818
import org.lfenergy.compas.sct.commons.scl.sstation.SubstationAdapter;
1919

20-
import java.util.List;
21-
import java.util.Optional;
22-
import java.util.stream.Collectors;
20+
import java.util.stream.Stream;
2321

2422
/**
2523
* A representation of the model object
@@ -33,7 +31,7 @@
3331
* <li>{@link SclRootAdapter#getHeaderAdapter <em>Returns the value of the <b>HeaderAdapter </b> reference object</em>}</li>
3432
* <li>{@link SclRootAdapter#getSubstationAdapter(String) <em>Returns the value of the <b>SubstationAdapter </b> reference object By nme</em>}</li>
3533
* <li>{@link SclRootAdapter#getCommunicationAdapter(boolean) <em>Returns or Adds the value of the <b>CommunicationAdapter </b> reference object</em>}</li>
36-
* <li>{@link SclRootAdapter#getIEDAdapters() <em>Returns the value of the <b>IEDAdapter </b> containment reference list</em>}</li>
34+
* <li>{@link SclRootAdapter#streamIEDAdapters() <em>Returns the value of the <b>IEDAdapter </b> containment reference list</em>}</li>
3735
* <li>{@link SclRootAdapter#getIEDAdapterByName(String) <em>Returns the value of the <b>IEDAdapter </b> reference object By name</em>}</li>
3836
* <li>{@link SclRootAdapter#getDataTypeTemplateAdapter() <em>Returns the value of the <b>DataTypeTemplateAdapter </b> containment reference list</em>}</li>
3937
* </ul>
@@ -265,12 +263,11 @@ public CommunicationAdapter getCommunicationAdapter(boolean createIfNotExists) t
265263

266264
/**
267265
* Gets all IEDs from SCL
268-
* @return list of <em>IEDAdapter</em> object as IEDs of SCL
266+
* @return Stream of <em>IEDAdapter</em> object as IEDs of SCL
269267
*/
270-
public List<IEDAdapter> getIEDAdapters() {
268+
public Stream<IEDAdapter> streamIEDAdapters() {
271269
return currentElem.getIED().stream()
272-
.map(tied -> new IEDAdapter(this,tied))
273-
.collect(Collectors.toList());
270+
.map(tied -> new IEDAdapter(this, tied));
274271
}
275272

276273
/**

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -266,11 +266,10 @@ public static List<ExtRefBindingInfo> getExtRefBinders(SCL scd, String iedName,
266266
abstractLNAdapter.getExtRefsBySignalInfo(signalInfo);
267267

268268
// find potential binders for the signalInfo
269-
List<ExtRefBindingInfo> potentialBinders = new ArrayList<>();
270-
for (IEDAdapter iedA : sclRootAdapter.getIEDAdapters()) {
271-
potentialBinders.addAll(iedA.getExtRefBinders(signalInfo));
272-
}
273-
return potentialBinders;
269+
return sclRootAdapter.streamIEDAdapters()
270+
.map(ied -> ied.getExtRefBinders(signalInfo))
271+
.flatMap(List::stream)
272+
.collect(Collectors.toList());
274273
}
275274

276275
/**
@@ -664,8 +663,8 @@ private static void copyCompasICDHeaderFromLNodePrivateIntoSTDPrivate(TPrivate s
664663
*/
665664
public static void removeAllControlBlocksAndDatasetsAndExtRefSrcBindings(final SCL scl) {
666665
SclRootAdapter sclRootAdapter = new SclRootAdapter(scl);
667-
List<LDeviceAdapter> lDeviceAdapters = sclRootAdapter.getIEDAdapters().stream()
668-
.map(IEDAdapter::getLDeviceAdapters).flatMap(List::stream).collect(Collectors.toList());
666+
List<LDeviceAdapter> lDeviceAdapters = sclRootAdapter.streamIEDAdapters()
667+
.flatMap(IEDAdapter::streamLDeviceAdapters).collect(Collectors.toList());
669668

670669
// LN0
671670
lDeviceAdapters.stream()
@@ -690,9 +689,8 @@ public static SclReport updateLDeviceStatus(SCL scd) {
690689
SclRootAdapter sclRootAdapter = new SclRootAdapter(scd);
691690
SubstationAdapter substationAdapter = sclRootAdapter.getSubstationAdapter();
692691
final List<Pair<String, String>> iedNameLdInstList = substationAdapter.getIedAndLDeviceNamesForLN0FromLNode();
693-
List<SclReport.ErrorDescription> errors = sclRootAdapter.getIEDAdapters().stream()
694-
.map(IEDAdapter::getLDeviceAdapters)
695-
.flatMap(Collection::stream)
692+
List<SclReport.ErrorDescription> errors = sclRootAdapter.streamIEDAdapters()
693+
.flatMap(IEDAdapter::streamLDeviceAdapters)
696694
.map(LDeviceAdapter::getLN0Adapter)
697695
.map(ln0Adapter -> ln0Adapter.checkAndUpdateLDeviceStatus(iedNameLdInstList))
698696
.reduce(new ArrayList<>(),(sclReportErrors, partialSclReportErrors) -> {

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

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ public static LNAdapterBuilder builder(){
9797
* @return Enum value list
9898
*/
9999
public Set<String> getEnumValues(String enumType) {
100-
Optional<EnumTypeAdapter> enumTypeAdapter = parentAdapter
101-
.getParentAdapter().getParentAdapter().getDataTypeTemplateAdapter()
100+
Optional<EnumTypeAdapter> enumTypeAdapter = getDataTypeTemplateAdapter()
102101
.getEnumTypeAdapterById(enumType);
103102

104103
if(enumTypeAdapter.isEmpty()){
@@ -144,7 +143,7 @@ public Optional<TDataSet> findDataSetByRef(String dataSetRef) {
144143
}
145144

146145
public DOIAdapter getDOIAdapterByName(String doiName) throws ScdException {
147-
String iedName = parentAdapter.getParentAdapter().getName();
146+
String iedName = getCurrentIed().getName();
148147
String ldInst = parentAdapter.getInst();
149148
return currentElem.getDOI()
150149
.stream()
@@ -207,8 +206,12 @@ public List<TExtRef> getExtRefs(ExtRefSignalInfo filter) {
207206
.collect(Collectors.toList());
208207
}
209208

209+
/**
210+
* Check whether the LN has an Inputs node
211+
* @return true if the LN has an Inputs node
212+
*/
210213
public boolean hasInputs() {
211-
return currentElem.getInputs() != null;
214+
return currentElem.isSetInputs();
212215
}
213216

214217
/**
@@ -524,11 +527,10 @@ public TExtRef checkExtRefInfoCoherence(@NonNull ExtRefInfo extRefInfo) throws S
524527
String binderLnInst = bindingInfo.getLnInst();
525528
String binderLnPrefix = bindingInfo.getPrefix();
526529
IEDAdapter binderIEDAdapter;
527-
if(!binderIedName.equals( parentAdapter.getParentAdapter().getName())){ // external binding
528-
SclRootAdapter sclRootAdapter = parentAdapter.getParentAdapter().getParentAdapter();
529-
binderIEDAdapter = sclRootAdapter.getIEDAdapterByName(binderIedName);
530+
if(!binderIedName.equals( getCurrentIed().getName())){ // external binding
531+
binderIEDAdapter = getCurrentScd().getIEDAdapterByName(binderIedName);
530532
} else {
531-
binderIEDAdapter = parentAdapter.getParentAdapter();
533+
binderIEDAdapter = getCurrentIed();
532534
}
533535
LDeviceAdapter binderLDAdapter = binderIEDAdapter.getLDeviceAdapterByLdInst(binderLdInst)
534536
.orElseThrow(
@@ -575,8 +577,7 @@ public List<ResumedDataTemplate> getDAI(ResumedDataTemplate rDtt, boolean updata
575577
lnType = rDtt.getLnType();
576578
}
577579
// get resumedDTT from DataTypeTemplate (it might be overridden in the DAI)
578-
SclRootAdapter sclRootAdapter = parentAdapter.getParentAdapter().getParentAdapter();
579-
DataTypeTemplateAdapter dttAdapter = sclRootAdapter.getDataTypeTemplateAdapter();
580+
DataTypeTemplateAdapter dttAdapter = getDataTypeTemplateAdapter();
580581
LNodeTypeAdapter lNodeTypeAdapter = dttAdapter.getLNodeTypeAdapterById(lnType)
581582
.orElseThrow(
582583
() -> new ScdException(
@@ -611,7 +612,7 @@ protected void overrideAttributesFromDAI(final ResumedDataTemplate rDtt) {
611612
} else {
612613
rDtt.setValImport(false);
613614
log.warn("Inconsistency in the SCD file - DAI {} with fc={} must have a sGroup attribute",
614-
rDtt.getObjRef(getCurrentIED().getName(), parentAdapter.getInst()), rDtt.getDaName().getFc());
615+
rDtt.getObjRef(getCurrentIed().getName(), parentAdapter.getInst()), rDtt.getDaName().getFc());
615616
}
616617
} else if (tdai.isSetValImport()) {
617618
rDtt.setValImport(tdai.isValImport());
@@ -624,19 +625,35 @@ protected void overrideAttributesFromDAI(final ResumedDataTemplate rDtt) {
624625
* @return <em>Boolean</em> value of check result
625626
*/
626627
private boolean iedHasConfSG() {
627-
IEDAdapter iedAdapter = getCurrentIED();
628+
IEDAdapter iedAdapter = getCurrentIed();
628629
return iedAdapter.isSettingConfig(this.parentAdapter.getInst());
629630
}
630631

631632
/**
632633
* Gets linked IED as parent
633634
* @return <em>IEDAdapter</em> object
634635
*/
635-
private IEDAdapter getCurrentIED() {
636+
private IEDAdapter getCurrentIed() {
636637
LDeviceAdapter lDeviceAdapter = this.parentAdapter;
637638
return lDeviceAdapter.getParentAdapter();
638639
}
639640

641+
/**
642+
* Gets root Scd
643+
* @return <em>SclRootAdapter</em> object
644+
*/
645+
protected SclRootAdapter getCurrentScd() {
646+
return getCurrentIed().getParentAdapter();
647+
}
648+
649+
/**
650+
* Gets SCL DataTypeTemplate
651+
* @return <em>DataTypeTemplateAdapter</em> object
652+
*/
653+
public DataTypeTemplateAdapter getDataTypeTemplateAdapter() {
654+
return getCurrentScd().getDataTypeTemplateAdapter();
655+
}
656+
640657

641658
/**
642659
* Checks fro DAI if Setting Group value is set correctly
@@ -772,8 +789,7 @@ public String getLNodeName() {
772789
*/
773790
public boolean matches(ObjectReference objRef) {
774791
String dataAttribute = objRef.getDataAttributes();
775-
SclRootAdapter sclRootAdapter = parentAdapter.getParentAdapter().getParentAdapter();
776-
DataTypeTemplateAdapter dttAdapter = sclRootAdapter.getDataTypeTemplateAdapter();
792+
DataTypeTemplateAdapter dttAdapter = getDataTypeTemplateAdapter();
777793
LNodeTypeAdapter lNodeTypeAdapter = dttAdapter.getLNodeTypeAdapterById(getLnType())
778794
.orElseThrow(
779795
() -> new AssertionError(
@@ -827,10 +843,6 @@ public void addDataSet(DataSetInfo dataSetInfo) {
827843

828844
}
829845

830-
public DataTypeTemplateAdapter getDataTypeTemplateAdapter() {
831-
return parentAdapter.getParentAdapter().getParentAdapter().getDataTypeTemplateAdapter();
832-
}
833-
834846
/**
835847
* Gets DAI values for specified DA in summaraized Data Type Template
836848
* @param rDtt summaraized Data Type Template containing DA datas

0 commit comments

Comments
 (0)