Skip to content

Commit 546b8c1

Browse files
Merge pull request #483 from com-pas/feat/refactor_manageMonitoringLns
fix copySclElement - refactor manage monitoring lns (LGOS, LSVS), fixes #487
2 parents c5146cd + eefb4fb commit 546b8c1

File tree

16 files changed

+326
-378
lines changed

16 files changed

+326
-378
lines changed

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.lfenergy.compas.scl2007b4.model.SCL;
1111
import org.lfenergy.compas.sct.commons.*;
1212
import org.lfenergy.compas.sct.commons.api.ControlBlockEditor;
13+
import org.lfenergy.compas.sct.commons.api.DataTypeTemplateReader;
1314
import org.lfenergy.compas.sct.commons.api.SclEditor;
1415
import org.lfenergy.compas.sct.commons.api.SubstationEditor;
1516
import org.lfenergy.compas.sct.commons.dto.HeaderDTO;
@@ -29,9 +30,14 @@
2930

3031
class SclAutomationServiceIntegrationTest {
3132

32-
private SclAutomationService sclAutomationService ;
33-
private static final SclEditor sclEditor = new SclService() ;
34-
private static final SubstationEditor substationEditor = new SubstationService(new VoltageLevelService()) ;
33+
private SclAutomationService sclAutomationService;
34+
private static final IedService iedService = new IedService();
35+
private static final LnService lnService = new LnService();
36+
private static final ExtRefReaderService extRefReaderService = new ExtRefReaderService();
37+
private static final DataTypeTemplateReader dataTypeTemplatesService = new DataTypeTemplatesService() ;
38+
private static final LdeviceService ldeviceService = new LdeviceService(lnService);
39+
private static final SclEditor sclEditor = new SclService(iedService, ldeviceService, lnService, extRefReaderService, dataTypeTemplatesService) ;
40+
private static final SubstationEditor substationEditor = new SubstationService(new VoltageLevelService());
3541
private static final ControlBlockEditor controlBlockEditor = new ControlBlockEditorService(new ControlService(), new LdeviceService(new LnService()), new ConnectedAPService(), new SubNetworkService());
3642

3743
private HeaderDTO headerDTO;

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/ExtRefReaderService.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44

55
package org.lfenergy.compas.sct.commons;
66

7-
import org.lfenergy.compas.scl2007b4.model.LN0;
8-
import org.lfenergy.compas.scl2007b4.model.TAnyLN;
9-
import org.lfenergy.compas.scl2007b4.model.TExtRef;
10-
import org.lfenergy.compas.scl2007b4.model.TLN;
7+
import org.lfenergy.compas.scl2007b4.model.*;
118
import org.lfenergy.compas.sct.commons.api.ExtRefReader;
129

1310
import java.util.stream.Stream;

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

Lines changed: 93 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@
44

55
package org.lfenergy.compas.sct.commons;
66

7+
import jakarta.xml.bind.JAXBContext;
8+
import lombok.Getter;
79
import lombok.NonNull;
10+
import lombok.RequiredArgsConstructor;
811
import lombok.extern.slf4j.Slf4j;
912
import org.lfenergy.compas.scl2007b4.model.*;
13+
import org.lfenergy.compas.sct.commons.api.DataTypeTemplateReader;
1014
import org.lfenergy.compas.sct.commons.api.SclEditor;
15+
import org.lfenergy.compas.sct.commons.domain.DaVal;
16+
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDaFilter;
1117
import org.lfenergy.compas.sct.commons.dto.*;
1218
import org.lfenergy.compas.sct.commons.exception.ScdException;
1319
import org.lfenergy.compas.sct.commons.scl.SclRootAdapter;
@@ -23,17 +29,33 @@
2329
import org.lfenergy.compas.sct.commons.scl.ldevice.LDeviceAdapter;
2430
import org.lfenergy.compas.sct.commons.scl.ln.AbstractLNAdapter;
2531
import org.lfenergy.compas.sct.commons.scl.ln.LN0Adapter;
32+
import org.lfenergy.compas.sct.commons.util.MonitoringLnClassEnum;
2633
import org.lfenergy.compas.sct.commons.util.PrivateUtils;
2734
import org.lfenergy.compas.sct.commons.util.Utils;
2835

2936
import java.util.*;
37+
import java.util.stream.Collectors;
3038

31-
import static org.lfenergy.compas.sct.commons.util.CommonConstants.IED_TEST_NAME;
39+
import static org.lfenergy.compas.sct.commons.util.CommonConstants.*;
3240
import static org.lfenergy.compas.sct.commons.util.PrivateEnum.COMPAS_ICDHEADER;
3341

3442
@Slf4j
43+
@RequiredArgsConstructor
3544
public class SclService implements SclEditor {
3645

46+
private static final String DO_GOCBREF = "GoCBRef";
47+
private static final String DO_SVCBREF = "SvCBRef";
48+
private static final String DA_SETSRCREF = "setSrcRef";
49+
50+
private final IedService iedService;
51+
private final LdeviceService ldeviceService;
52+
private final LnService lnService;
53+
private final ExtRefReaderService extRefReaderService;
54+
private final DataTypeTemplateReader dataTypeTemplateService;
55+
56+
@Getter
57+
private final List<SclReportItem> errorHanlder = new ArrayList<>();
58+
3759
@Override
3860
public SCL initScl(final UUID hId, final String hVersion, final String hRevision) throws ScdException {
3961
SclRootAdapter scdAdapter = new SclRootAdapter(hId.toString(), hVersion, hRevision);
@@ -196,13 +218,77 @@ public List<SclReportItem> updateDoInRef(SCL scd) {
196218
.toList();
197219
}
198220

221+
199222
@Override
200223
public List<SclReportItem> manageMonitoringLns(SCL scd) {
201-
SclRootAdapter sclRootAdapter = new SclRootAdapter(scd);
202-
return sclRootAdapter.streamIEDAdapters()
203-
.filter(iedAdapter -> !iedAdapter.getName().contains(IED_TEST_NAME))
204-
.map(IEDAdapter::manageMonitoringLns)
205-
.flatMap(List::stream)
206-
.toList();
224+
errorHanlder.clear();
225+
iedService.getFilteredIeds(scd, ied -> !ied.getName().contains(IED_TEST_NAME))
226+
.forEach(tied -> {
227+
Map<TServiceType, List<TExtRef>> serviceTypeToExtRefs = ldeviceService.getLdevices(tied)
228+
.flatMap(tlDevice -> extRefReaderService.getExtRefs(tlDevice.getLN0()))
229+
.filter(tExtRef -> tExtRef.isSetServiceType() && tExtRef.isSetSrcCBName() && (tExtRef.getServiceType().equals(TServiceType.GOOSE) || tExtRef.getServiceType().equals(TServiceType.SMV)))
230+
.collect(Collectors.groupingBy(TExtRef::getServiceType));
231+
ldeviceService.findLdevice(tied, LDEVICE_LDSUIED).ifPresent(ldSUIEDLDevice -> {
232+
Optional.ofNullable(serviceTypeToExtRefs.get(TServiceType.GOOSE))
233+
.ifPresent(extRefs -> manageMonitoringLns(extRefs, scd, tied, ldSUIEDLDevice, DO_GOCBREF, MonitoringLnClassEnum.LGOS));
234+
Optional.ofNullable(serviceTypeToExtRefs.get(TServiceType.SMV))
235+
.ifPresent(extRefs -> manageMonitoringLns(extRefs, scd, tied, ldSUIEDLDevice, DO_SVCBREF, MonitoringLnClassEnum.LSVS));
236+
});
237+
});
238+
return errorHanlder;
239+
}
240+
241+
private void manageMonitoringLns(List<TExtRef> tExtRefs, SCL scd, TIED tied, TLDevice ldsuiedLdevice, String doName, MonitoringLnClassEnum monitoringLnClassEnum) {
242+
List<TLN> lgosOrLsvsLns = lnService.getFilteredLns(ldsuiedLdevice, tln -> monitoringLnClassEnum.value().equals(tln.getLnClass().getFirst())).toList();
243+
if (lgosOrLsvsLns.isEmpty())
244+
errorHanlder.add(SclReportItem.warning(tied.getName() + "/" + LDEVICE_LDSUIED + "/" + monitoringLnClassEnum.value(), "There is no LN %s present in LDevice".formatted(monitoringLnClassEnum.value())));
245+
DoLinkedToDaFilter doLinkedToDaFilter = new DoLinkedToDaFilter(doName, List.of(), DA_SETSRCREF, List.of());
246+
lgosOrLsvsLns.forEach(lgosOrLsvs -> dataTypeTemplateService.getFilteredDoLinkedToDa(scd.getDataTypeTemplates(), lgosOrLsvs.getLnType(), doLinkedToDaFilter)
247+
.map(doLinkedToDa -> lnService.getDoLinkedToDaCompletedFromDAI(tied, LDEVICE_LDSUIED, lgosOrLsvs, doLinkedToDa))
248+
.findFirst()
249+
.filter(doLinkedToDa -> {
250+
if (!doLinkedToDa.isUpdatable())
251+
errorHanlder.add(SclReportItem.warning(tied.getName() + "/" + LDEVICE_LDSUIED + "/" + monitoringLnClassEnum.value() + "/DOI@name=\"" + doName + "\"/DAI@name=\"setSrcRef\"/Val", "The DAI cannot be updated"));
252+
return doLinkedToDa.isUpdatable();
253+
})
254+
.ifPresent(doLinkedToDa -> {
255+
log.info("Processing %d ExtRefs in LDName=%s of service type %s for LN (lnClass=%s, inst=%s, prefix=%s)".formatted(tExtRefs.size(), ldsuiedLdevice.getLdName(), monitoringLnClassEnum.value(), lgosOrLsvs.getLnClass().getFirst(), lgosOrLsvs.getInst(), lgosOrLsvs.getPrefix()));
256+
for (int i = 0; i < tExtRefs.size(); i++) {
257+
TLN lnToAdd = copyLn(lgosOrLsvs); //duplicate actual LGOS or LSVS in order to add LDSUIED with extRefs properties
258+
TExtRef tExtRef = tExtRefs.get(i);
259+
TIED sourceIed = iedService.findByName(scd, tExtRef.getIedName()).orElseThrow(() -> new ScdException("IED.name '" + tExtRef.getIedName() + "' not found in SCD"));
260+
String sourceLdName = ldeviceService.findLdevice(sourceIed, tExtRef.getSrcLDInst()).orElseThrow(() -> new ScdException(String.format("LDevice.inst '%s' not found in IED '%s'", tExtRef.getSrcLDInst(), tExtRef.getIedName()))).getLdName();
261+
String lnClass = !tExtRef.isSetSrcLNClass() ? TLLN0Enum.LLN_0.value() : tExtRef.getSrcLNClass().getFirst();
262+
lnToAdd.setInst(String.valueOf(i + 1));
263+
DaVal newVal = new DaVal(null, sourceLdName + "/" + lnClass + "." + tExtRef.getSrcCBName());
264+
doLinkedToDa.dataAttribute().getDaiValues().clear();
265+
doLinkedToDa.dataAttribute().getDaiValues().add(newVal);
266+
lnService.updateOrCreateDOAndDAInstances(lnToAdd, doLinkedToDa);
267+
log.info("Processing %d ExtRefs in LDName=%s - added LN (lnClass=%s, inst=%s, prefix=%s) - update DOI(name=%s)/DAI(name=%s) with value=%s".formatted(tExtRefs.size(), ldsuiedLdevice.getLdName(), lgosOrLsvs.getLnClass().getFirst(), String.valueOf(i + 1), lgosOrLsvs.getPrefix(), doName, DA_SETSRCREF, newVal.val()));
268+
ldsuiedLdevice.getLN().add(lnToAdd);
269+
}
270+
ldsuiedLdevice.getLN().remove(lgosOrLsvs); //We can remove this LGOS or LSVS as we already added new ones
271+
}));
207272
}
273+
274+
private TLN copyLn(TLN tln) {
275+
TLN newLn = new TLN();
276+
newLn.getLnClass().addAll(tln.getLnClass());
277+
newLn.setInst(tln.getInst());
278+
newLn.setLnType(tln.getLnType());
279+
newLn.setPrefix(tln.getPrefix());
280+
newLn.setDesc(tln.getDesc());
281+
newLn.setInputs(tln.getInputs());
282+
newLn.setText(tln.getText());
283+
newLn.getPrivate().addAll(tln.getPrivate());
284+
newLn.getDataSet().addAll(tln.getDataSet());
285+
newLn.getAny().addAll(tln.getAny());
286+
newLn.getDOI().addAll(tln.getDOI());
287+
newLn.getLog().addAll(tln.getLog());
288+
newLn.getLogControl().addAll(tln.getLogControl());
289+
newLn.getOtherAttributes().putAll(tln.getOtherAttributes());
290+
newLn.getReportControl().addAll(tln.getReportControl());
291+
return newLn;
292+
}
293+
208294
}

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/api/SclEditor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
package org.lfenergy.compas.sct.commons.api;
66

7+
import jakarta.xml.bind.JAXBContext;
78
import lombok.NonNull;
89
import org.lfenergy.compas.scl2007b4.model.SCL;
910
import org.lfenergy.compas.sct.commons.dto.*;

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,6 @@ public class DataAttributeRef {
5151
@NonNull
5252
private DaTypeName daName = new DaTypeName("");
5353

54-
/**
55-
* Constructor
56-
*/
57-
5854
public DataAttributeRef(AbstractLNAdapter<?> lnAdapter, DoTypeName doName, DaTypeName daName) {
5955
this.lnClass = lnAdapter.getLNClass();
6056
this.lnInst = lnAdapter.getLNInst();

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

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,9 @@
1313
import org.lfenergy.compas.sct.commons.scl.ObjectReference;
1414
import org.lfenergy.compas.sct.commons.scl.ldevice.LDeviceAdapter;
1515
import org.lfenergy.compas.sct.commons.scl.ln.AbstractLNAdapter;
16-
import org.lfenergy.compas.sct.commons.scl.ln.LN0Adapter;
1716
import org.lfenergy.compas.sct.commons.util.PrivateUtils;
1817
import org.lfenergy.compas.sct.commons.scl.SclElementAdapter;
1918
import org.lfenergy.compas.sct.commons.scl.SclRootAdapter;
20-
import org.lfenergy.compas.sct.commons.util.MonitoringLnClassEnum;
2119
import org.lfenergy.compas.sct.commons.util.ServicesConfigEnum;
2220
import org.lfenergy.compas.sct.commons.util.Utils;
2321

@@ -64,9 +62,6 @@
6462
public class IEDAdapter extends SclElementAdapter<SclRootAdapter, TIED> {
6563

6664
private static final String MESSAGE_LDEVICE_INST_NOT_FOUND = "LDevice.inst '%s' not found in IED '%s'";
67-
private static final String DO_GOCBREF = "GoCBRef";
68-
private static final String DO_SVCBREF = "SvCBRef";
69-
private static final String LDSUIED_LDINST = "LDSUIED";
7065

7166
/**
7267
* Constructor
@@ -390,32 +385,4 @@ public Optional<TCompasSystemVersion> getCompasSystemVersion() {
390385
return PrivateUtils.extractCompasPrivate(currentElem, TCompasSystemVersion.class);
391386
}
392387

393-
/**
394-
* Update and/or create Monitoring LNs (LSVS and LGOS) into LDSUIED for each bound ExtRef of each LDevice
395-
*
396-
* @return a list of SclReport Objects that contains errors
397-
*/
398-
public List<SclReportItem> manageMonitoringLns() {
399-
List<SclReportItem> sclReportItems = new ArrayList<>();
400-
findLDeviceAdapterByLdInst(LDSUIED_LDINST).ifPresent(lDeviceAdapter -> {
401-
lDeviceAdapter.manageMonitoringLns(retrieveAllExtRefForServiceType(TServiceType.GOOSE), DO_GOCBREF, MonitoringLnClassEnum.LGOS)
402-
.ifPresent(sclReportItems::add);
403-
lDeviceAdapter.manageMonitoringLns(retrieveAllExtRefForServiceType(TServiceType.SMV), DO_SVCBREF, MonitoringLnClassEnum.LSVS)
404-
.ifPresent(sclReportItems::add);
405-
});
406-
return sclReportItems;
407-
}
408-
409-
private List<TExtRef> retrieveAllExtRefForServiceType(TServiceType tServiceType) {
410-
return streamLDeviceAdapters()
411-
.map(LDeviceAdapter::getLN0Adapter)
412-
.filter(AbstractLNAdapter::hasInputs)
413-
.map(LN0Adapter::getInputsAdapter)
414-
.map(InputsAdapter::filterDuplicatedExtRefs)
415-
.flatMap(List::stream)
416-
.filter(tExtRef -> tExtRef.isSetServiceType() && tExtRef.isSetSrcCBName() &&
417-
tServiceType.equals(tExtRef.getServiceType()))
418-
.toList();
419-
}
420-
421388
}

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

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,10 @@
1717
import org.lfenergy.compas.sct.commons.scl.ln.LN0Adapter;
1818
import org.lfenergy.compas.sct.commons.scl.ln.LNAdapter;
1919
import org.lfenergy.compas.sct.commons.util.ControlBlockEnum;
20-
import org.lfenergy.compas.sct.commons.util.MonitoringLnClassEnum;
2120
import org.lfenergy.compas.sct.commons.util.Utils;
2221

2322
import java.util.*;
2423

25-
import static org.lfenergy.compas.sct.commons.util.Utils.copySclElement;
26-
2724
/**
2825
* A representation of the model object
2926
* <em><b>{@link org.lfenergy.compas.scl2007b4.model.TLDevice LDevice}</b></em>.
@@ -380,61 +377,4 @@ private boolean hasCBNameConf(TServiceSettings tServiceSettings) {
380377
&& (TServiceSettingsNoDynEnum.CONF.equals(tServiceSettings.getCbName()));
381378
}
382379

383-
/**
384-
* Update and/or create Monitoring LNs (LSVS and LGOS) into LDSUIED from ExtRefs binding
385-
*
386-
* @param tExtRefs ExtRefs for which source Control Blocks (Goose or SMV) should be monitored
387-
* @param monitoringLnClassEnum LNClass value for LN to monitor
388-
* @return a list of SclReport Objects that contains errors
389-
*/
390-
public Optional<SclReportItem> manageMonitoringLns(List<TExtRef> tExtRefs, String doName, MonitoringLnClassEnum monitoringLnClassEnum) {
391-
if (tExtRefs.isEmpty()) {
392-
return Optional.empty();
393-
}
394-
return getLNAdapters().stream().filter(lnAdapter -> monitoringLnClassEnum.value().equals(lnAdapter.getLNClass()))
395-
.map(lnAdapter -> {
396-
Optional<SclReportItem> optionalSclReportItem = Optional.empty();
397-
DataAttributeRef filter = new DataAttributeRef(lnAdapter, new DoTypeName(doName), new DaTypeName(DA_SETSRCREF));
398-
Optional<DataAttributeRef> foundDai = lnAdapter.getDAI(filter, true).stream().findFirst();
399-
if (foundDai.isEmpty()) {
400-
optionalSclReportItem = Optional.of(SclReportItem.warning(lnAdapter.getXPath() + "/DOI@name=\"" + doName + "\"/DAI@name=\"setSrcRef\"/Val",
401-
"The DAI cannot be updated"));
402-
} else {
403-
DataAttributeRef daToUpdateFilter = foundDai.get();
404-
TLN lnToUpdate = lnAdapter.getCurrentElem();
405-
removeLnsByLnClass(monitoringLnClassEnum);
406-
for (int i = 0; i < tExtRefs.size(); i++) {
407-
getCurrentElem().getLN().add(lnToUpdate);
408-
updateNewCreatedLnDaiValue(lnToUpdate, tExtRefs.get(i), String.valueOf(i + 1), daToUpdateFilter);
409-
lnToUpdate = copySclElement(lnAdapter.getCurrentElem(), TLN.class); //value copy
410-
}
411-
}
412-
return optionalSclReportItem;
413-
}).findFirst()
414-
.orElse(Optional.of(SclReportItem.warning(getXPath(), "There is no LN %s present in LDevice".formatted(monitoringLnClassEnum.value()))));
415-
}
416-
417-
private void removeLnsByLnClass(MonitoringLnClassEnum monitoringLnClassEnum) {
418-
List<TLN> lnToKeep = getCurrentElem().getLN().stream()
419-
.filter(tln -> !Utils.lnClassEquals(tln.getLnClass(), monitoringLnClassEnum.value()))
420-
.toList();
421-
getCurrentElem().unsetLN();
422-
getCurrentElem().getLN().addAll(lnToKeep);
423-
}
424-
425-
private void updateNewCreatedLnDaiValue(TLN tln, TExtRef tExtRef, String lnInst, DataAttributeRef daToUpdate) {
426-
LNAdapter lnAdapter = new LNAdapter(this, tln);
427-
String value = createVal(tExtRef);
428-
lnAdapter.getCurrentElem().setInst(lnInst);
429-
daToUpdate.setVal(value);
430-
lnAdapter.updateDAI(daToUpdate);
431-
}
432-
433-
private String createVal(TExtRef tExtRef) {
434-
String sourceLdName = getParentAdapter().getParentAdapter().getIEDAdapterByName(tExtRef.getIedName())
435-
.getLDeviceAdapterByLdInst(tExtRef.getSrcLDInst()).getLdName();
436-
String lnClass = !tExtRef.isSetSrcLNClass() ? TLLN0Enum.LLN_0.value() : tExtRef.getSrcLNClass().getFirst();
437-
return sourceLdName + "/" + lnClass + "." + tExtRef.getSrcCBName();
438-
}
439-
440380
}

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/CommonConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public final class CommonConstants {
2727
public static final String LN_PREFIX_A = "a";
2828
public static final String LN_PREFIX_B = "b";
2929
public static final String LDEVICE_LDEPF = "LDEPF";
30+
public static final String LDEVICE_LDSUIED = "LDSUIED";
3031
public static final String CHNUM1_DO_NAME = "ChNum1";
3132
public static final String LEVMOD_DO_NAME = "LevMod";
3233
public static final String SRCREF_DO_NAME = "SrcRef";

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/Utils.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44

55
package org.lfenergy.compas.sct.commons.util;
66

7-
import jakarta.xml.bind.JAXBContext;
8-
import jakarta.xml.bind.JAXBElement;
9-
import jakarta.xml.bind.JAXBException;
10-
import jakarta.xml.bind.Unmarshaller;
7+
import jakarta.xml.bind.*;
118
import jakarta.xml.bind.util.JAXBSource;
129
import org.apache.commons.lang3.StringUtils;
1310
import org.lfenergy.compas.scl2007b4.model.TP;

sct-commons/src/test/java/org/lfenergy/compas/sct/commons/ExtRefEditorServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ void updateExtRefBinders_should_thowException_when_AbstractLnAdapterUpdateExtRef
476476
SCL scd = createIedsInScl("ANCR", "do1").getCurrentElem();
477477
ExtRefInfo extRefInfo = new ExtRefInfo();
478478
extRefInfo.setHolderIEDName(IED_NAME_1);
479-
extRefInfo.setHolderLDInst(LD_SUIED);
479+
extRefInfo.setHolderLDInst(LD_LDSUIED);
480480
extRefInfo.setHolderLnClass("LLN0");
481481
ExtRefBindingInfo extRefBindingInfo = new ExtRefBindingInfo();
482482
ExtRefSignalInfo extRefSignalInfo = new ExtRefSignalInfo();

0 commit comments

Comments
 (0)