Skip to content

Commit 3a9d9ba

Browse files
authored
Merge pull request #612 from com-pas/develop
Release 0.2.69
2 parents b348da5 + b19fc1a commit 3a9d9ba

3 files changed

Lines changed: 54 additions & 4 deletions

File tree

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

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.lfenergy.compas.sct.commons.api.SclEditor;
1414
import org.lfenergy.compas.sct.commons.domain.DaVal;
1515
import org.lfenergy.compas.sct.commons.domain.DataRef;
16+
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa;
1617
import org.lfenergy.compas.sct.commons.dto.*;
1718
import org.lfenergy.compas.sct.commons.exception.ScdException;
1819
import org.lfenergy.compas.sct.commons.scl.ExtRefService;
@@ -47,6 +48,7 @@ public class SclService implements SclEditor {
4748
private static final String DO_GOCBREF = "GoCBRef";
4849
private static final String DO_SVCBREF = "SvCBRef";
4950
private static final String DA_SETSRCREF = "setSrcRef";
51+
private static final String DA_SETSRCCB = "setSrcCB";
5052

5153
private final IedService iedService;
5254
private final LdeviceService ldeviceService;
@@ -248,12 +250,17 @@ private void manageMonitoringLns(List<IedSource> iedSources, SCL scd, TIED tied,
248250
List<TLN> lgosOrLsvsLns = lnService.getFilteredLns(ldsuiedLdevice, tln -> monitoringLnClassEnum.value().equals(tln.getLnClass().getFirst())).toList();
249251
if (lgosOrLsvsLns.isEmpty())
250252
errorHandler.get().add(SclReportItem.warning(tied.getName() + "/" + LDEVICE_LDSUIED + "/" + monitoringLnClassEnum.value(), "There is no LN %s present in LDevice".formatted(monitoringLnClassEnum.value())));
251-
DataRef dataRef = new DataRef(doName, List.of(), DA_SETSRCREF, List.of());
252-
lgosOrLsvsLns.forEach(lgosOrLsvs -> dataTypeTemplateService.findDoLinkedToDa(scd.getDataTypeTemplates(), lgosOrLsvs.getLnType(), dataRef)
253+
DataRef dataRefDaRef = new DataRef(doName, List.of(), DA_SETSRCREF, List.of());
254+
DataRef dataRefDaCb = new DataRef(doName, List.of(), DA_SETSRCCB, List.of());
255+
dataRefSetDaVal(iedSources, scd, tied, ldsuiedLdevice, doName, monitoringLnClassEnum, lgosOrLsvsLns, dataRefDaRef, dataRefDaCb);
256+
}
257+
258+
private void dataRefSetDaVal(List<IedSource> iedSources, SCL scd, TIED tied, TLDevice ldsuiedLdevice, String doName, MonitoringLnClassEnum monitoringLnClassEnum, List<TLN> lgosOrLsvsLns, DataRef dataRefDaRef, DataRef dataRefDaCB) {
259+
lgosOrLsvsLns.forEach(lgosOrLsvs -> dataTypeTemplateService.findDoLinkedToDa(scd.getDataTypeTemplates(), lgosOrLsvs.getLnType(), dataRefDaRef)
253260
.map(doLinkedToDa -> lnService.getDoLinkedToDaCompletedFromDAI(tied, LDEVICE_LDSUIED, lgosOrLsvs, doLinkedToDa))
254261
.filter(doLinkedToDa -> {
255262
if (!doLinkedToDa.isUpdatable())
256-
errorHandler.get().add(SclReportItem.warning(tied.getName() + "/" + LDEVICE_LDSUIED + "/" + monitoringLnClassEnum.value() + "/DOI@name=\"" + doName + "\"/DAI@name=\"setSrcRef\"/Val", "The DAI cannot be updated"));
263+
errorHandler.get().add(SclReportItem.warning(tied.getName() + "/" + LDEVICE_LDSUIED + "/" + monitoringLnClassEnum.value() + "/DOI@name=\"" + doName + "\"/DAI@name=\"" + dataRefDaRef.daName() + "\"/Val", "The DAI cannot be updated"));
257264
return doLinkedToDa.isUpdatable();
258265
})
259266
.ifPresent(doLinkedToDa -> {
@@ -268,13 +275,30 @@ private void manageMonitoringLns(List<IedSource> iedSources, SCL scd, TIED tied,
268275
doLinkedToDa.dataAttribute().getDaiValues().clear();
269276
doLinkedToDa.dataAttribute().getDaiValues().add(newVal);
270277
lnService.updateOrCreateDOAndDAInstances(lnToAdd, doLinkedToDa);
271-
log.info("Processing %d IED Source in LDName=%s - added LN (lnClass=%s, inst=%s, prefix=%s) - update DOI(name=%s)/DAI(name=%s) with value=%s".formatted(iedSources.size(), ldsuiedLdevice.getLdName(), lgosOrLsvs.getLnClass().getFirst(), String.valueOf(i + 1), lgosOrLsvs.getPrefix(), doName, DA_SETSRCREF, newVal.val()));
278+
addValDaCB(scd, tied, doName, monitoringLnClassEnum, dataRefDaCB, lgosOrLsvs, newVal, lnToAdd);
279+
log.info("Processing %d IED Source in LDName=%s - added LN (lnClass=%s, inst=%s, prefix=%s) - update DOI(name=%s)/DAI(name=%s) with value=%s".formatted(iedSources.size(), ldsuiedLdevice.getLdName(), lgosOrLsvs.getLnClass().getFirst(), String.valueOf(i + 1), lgosOrLsvs.getPrefix(), doName, dataRefDaCB.daName(), newVal.val()));
272280
ldsuiedLdevice.getLN().add(lnToAdd);
273281
}
274282
ldsuiedLdevice.getLN().remove(lgosOrLsvs); //We can remove this LGOS or LSVS as we already added new ones
275283
}));
276284
}
277285

286+
private void addValDaCB(SCL scd, TIED tied, String doName, MonitoringLnClassEnum monitoringLnClassEnum, DataRef dataRefDaCB, TLN lgosOrLsvs, DaVal newVal, TLN lnToAdd) {
287+
Optional<DoLinkedToDa> daCB = dataTypeTemplateService.findDoLinkedToDa(scd.getDataTypeTemplates(), lgosOrLsvs.getLnType(), dataRefDaCB);
288+
daCB.ifPresent(doLinkedToDaCB -> {
289+
DoLinkedToDa doLinkedToDaCBCopy = lnService.getDoLinkedToDaCompletedFromDAI(tied, LDEVICE_LDSUIED, lgosOrLsvs, doLinkedToDaCB);
290+
if (doLinkedToDaCBCopy.isUpdatable()) {
291+
doLinkedToDaCBCopy.dataAttribute().getDaiValues().clear();
292+
doLinkedToDaCBCopy.dataAttribute().getDaiValues().add(newVal);
293+
lnService.updateOrCreateDOAndDAInstances(lnToAdd, doLinkedToDaCBCopy);
294+
}
295+
else{
296+
errorHandler.get().add(SclReportItem.warning(
297+
tied.getName() + "/" + LDEVICE_LDSUIED + "/" + monitoringLnClassEnum.value() + "/DOI@name=\"" + doName + "\"/DAI@name=\"" + dataRefDaCB.daName() + "\"/Val", "The DAI cannot be updated"));
298+
}
299+
});
300+
}
301+
278302
record IedSource(String iedName, String srcCBName, String srcLdInst, TServiceType serviceType){}
279303

280304
}

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,27 @@ void manageMonitoringLns_should_update_and_create_lsvs_and_goose() {
382382
.filteredOn(tUnNaming -> tUnNaming.getClass().equals(TDAI.class) && ((TDAI)tUnNaming).getName().equals("setSrcRef"))
383383
.map(tUnNaming -> ((TDAI)tUnNaming).getVal().getFirst().getValue())
384384
.containsExactlyInAnyOrder("IED_NAME2LD_INST21/LLN0.smv2", "IED_NAME2LD_INST22/LLN0.smv2");
385+
386+
// LGOS setSrcCb values
387+
assertThat(tlns)
388+
.filteredOn(tln -> tln.getLnClass().contains("LGOS") && tln.getInst().equals("1")
389+
|| tln.getLnClass().contains("LGOS") && tln.getInst().equals("2"))
390+
.flatExtracting(TAnyLN::getDOI)
391+
.filteredOn(tdoi -> tdoi.getName().equals("GoCBRef"))
392+
.flatExtracting(TDOI::getSDIOrDAI)
393+
.filteredOn(tUnNaming -> tUnNaming.getClass().equals(TDAI.class) && ((TDAI)tUnNaming).getName().equals("setSrcCB"))
394+
.map(tUnNaming -> ((TDAI)tUnNaming).getVal().getFirst().getValue())
395+
.containsExactlyInAnyOrder("IED_NAME2LD_INST21/LLN0.goose1", "IED_NAME2LD_INST22/LLN0.goose1");
396+
// LSVS setSrcCb values
397+
assertThat(tlns)
398+
.filteredOn(tln -> (tln.getLnClass().contains("LSVS") && tln.getInst().equals("1")
399+
|| tln.getLnClass().contains("LSVS") && tln.getInst().equals("2")))
400+
.flatExtracting(TAnyLN::getDOI)
401+
.filteredOn(tdoi -> tdoi.getName().equals("SvCBRef"))
402+
.flatExtracting(TDOI::getSDIOrDAI)
403+
.filteredOn(tUnNaming -> tUnNaming.getClass().equals(TDAI.class) && ((TDAI)tUnNaming).getName().equals("setSrcCB"))
404+
.map(tUnNaming -> ((TDAI)tUnNaming).getVal().getFirst().getValue())
405+
.containsExactlyInAnyOrder("IED_NAME2LD_INST21/LLN0.smv2", "IED_NAME2LD_INST22/LLN0.smv2");
385406
});
386407
}
387408

sct-commons/src/test/resources/monitoring_lns/scd_monitoring_lsvs_lgos.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,16 @@
3636
<DOI name="SvCBRef">
3737
<DAI name="setSrcRef" valKind="RO" valImport="true">
3838
</DAI>
39+
<DAI name="setSrcCB" valKind="RO" valImport="true">
40+
</DAI>
3941
</DOI>
4042
</LN>
4143
<LN lnClass="LGOS" inst="1" lnType="LNLGOS">
4244
<DOI name="GoCBRef">
4345
<DAI name="setSrcRef" valKind="RO" valImport="true">
4446
</DAI>
47+
<DAI name="setSrcCB" valKind="RO" valImport="true">
48+
</DAI>
4549
</DOI>
4650
</LN>
4751
</LDevice>
@@ -121,6 +125,7 @@
121125
</DOType>
122126
<DOType id="DOLN" cdc="ORG">
123127
<DA name="setSrcRef" bType="ObjRef" dchg="true" fc="SP"/>
128+
<DA name="setSrcCB" bType="ObjRef" dchg="true" fc="SP"/>
124129
</DOType>
125130
</DataTypeTemplates>
126131
</SCL>

0 commit comments

Comments
 (0)