|
15 | 15 | import org.lfenergy.compas.sct.commons.model.epf.TCBScopeType;
|
16 | 16 | import org.lfenergy.compas.sct.commons.model.epf.TChannel;
|
17 | 17 | import org.lfenergy.compas.sct.commons.model.epf.TChannelType;
|
| 18 | +import org.lfenergy.compas.sct.commons.model.epf.TChannelLevMod; |
18 | 19 | import org.lfenergy.compas.sct.commons.scl.SclRootAdapter;
|
19 | 20 | import org.lfenergy.compas.sct.commons.scl.ied.IEDAdapter;
|
20 | 21 | import org.lfenergy.compas.sct.commons.scl.ldevice.LDeviceAdapter;
|
|
34 | 35 | @RequiredArgsConstructor
|
35 | 36 | public class ExtRefEditorService implements ExtRefEditor {
|
36 | 37 | private static final String INVALID_OR_MISSING_ATTRIBUTES_IN_EXT_REF_BINDING_INFO = "Invalid or missing attributes in ExtRef binding info";
|
| 38 | + private static final List<DoNameAndDaName> DO_DA_MAPPINGS = List.of( |
| 39 | + new DoNameAndDaName(CHNUM1_DO_NAME, DU_DA_NAME), |
| 40 | + new DoNameAndDaName(LEVMOD_DO_NAME, SETVAL_DA_NAME), |
| 41 | + new DoNameAndDaName(MOD_DO_NAME, STVAL_DA_NAME), |
| 42 | + new DoNameAndDaName(SRCREF_DO_NAME, SETSRCREF_DA_NAME) |
| 43 | + ); |
37 | 44 |
|
38 | 45 | private final IedService iedService;
|
39 | 46 | private final LdeviceService ldeviceService;
|
@@ -114,7 +121,7 @@ private static Boolean doesExtRefMatchLDEPFChannel(TExtRef extRef, TChannel tCha
|
114 | 121 | && extRef.getDesc().startsWith("DYN_LDEPF_ANALOG CHANNEL " + tChannel.getChannelNum() + "_1_AnalogueValue")
|
115 | 122 | && extRef.getDesc().endsWith("_" + tChannel.getDAName() + "_1");
|
116 | 123 | Boolean doesExtRefDescMatchDigitalChannel = tChannel.getChannelType().equals(TChannelType.DIGITAL)
|
117 |
| - && extRef.getDesc().startsWith("DYN_LDEPF_DIGITAL CHANNEL " + tChannel.getChannelNum() + "_1_BOOLEEN") |
| 124 | + && extRef.getDesc().startsWith("DYN_LDEPF_DIGITAL CHANNEL " + tChannel.getChannelNum() + "_1_BOOLEAN") |
118 | 125 | && extRef.getDesc().endsWith("_" + tChannel.getDAName() + "_1");
|
119 | 126 | return extRef.isSetDesc() && (doesExtRefDescMatchAnalogChannel || doesExtRefDescMatchDigitalChannel)
|
120 | 127 | && extRef.isSetPLN() && Utils.lnClassEquals(extRef.getPLN(), tChannel.getLNClass())
|
@@ -334,38 +341,38 @@ private void updateLDEPFExtRefBinding(TExtRef extRef, TIED iedSource, TChannel s
|
334 | 341 |
|
335 | 342 | private List<SclReportItem> updateLDEPFDos(LDeviceAdapter lDeviceAdapter, TExtRef extRef, TChannel setting) {
|
336 | 343 | List<SclReportItem> sclReportItems = new ArrayList<>();
|
337 |
| - List<DoNameAndDaName> doNameAndDaNameList = List.of( |
338 |
| - new DoNameAndDaName(CHNUM1_DO_NAME, DU_DA_NAME), |
339 |
| - new DoNameAndDaName(LEVMOD_DO_NAME, SETVAL_DA_NAME), |
340 |
| - new DoNameAndDaName(MOD_DO_NAME, STVAL_DA_NAME), |
341 |
| - new DoNameAndDaName(SRCREF_DO_NAME, SETSRCREF_DA_NAME) |
342 |
| - ); |
343 | 344 | if (setting.getChannelType().equals(TChannelType.DIGITAL)) {
|
344 | 345 | //digital
|
345 | 346 | lDeviceAdapter.findLnAdapter(LN_RBDR, setting.getChannelNum(), null)
|
346 |
| - .ifPresent(lnAdapter -> doNameAndDaNameList.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName.doName, doNameAndDaName.daName, extRef, setting).ifPresent(sclReportItems::add))); |
| 347 | + .ifPresent(lnAdapter -> DO_DA_MAPPINGS.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName.doName, doNameAndDaName.daName, extRef, setting).ifPresent(sclReportItems::add))); |
347 | 348 | lDeviceAdapter.findLnAdapter(LN_RBDR, setting.getChannelNum(), LN_PREFIX_B)
|
348 |
| - .ifPresent(lnAdapter -> doNameAndDaNameList.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName.doName, doNameAndDaName.daName, extRef, setting).ifPresent(sclReportItems::add))); |
| 349 | + .ifPresent(lnAdapter -> DO_DA_MAPPINGS.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName.doName, doNameAndDaName.daName, extRef, setting).ifPresent(sclReportItems::add))); |
349 | 350 | }
|
350 | 351 | if (setting.getChannelType().equals(TChannelType.ANALOG)) {
|
351 | 352 | //analog
|
352 | 353 | lDeviceAdapter.findLnAdapter(LN_RADR, setting.getChannelNum(), null)
|
353 |
| - .ifPresent(lnAdapter -> doNameAndDaNameList.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName.doName, doNameAndDaName.daName, extRef, setting).ifPresent(sclReportItems::add))); |
| 354 | + .ifPresent(lnAdapter -> DO_DA_MAPPINGS.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName.doName, doNameAndDaName.daName, extRef, setting).ifPresent(sclReportItems::add))); |
354 | 355 | lDeviceAdapter.findLnAdapter(LN_RADR, setting.getChannelNum(), LN_PREFIX_A)
|
355 |
| - .ifPresent(lnAdapter -> doNameAndDaNameList.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName.doName, doNameAndDaName.daName, extRef, setting).ifPresent(sclReportItems::add))); |
| 356 | + .ifPresent(lnAdapter -> DO_DA_MAPPINGS.forEach(doNameAndDaName -> updateVal(lnAdapter, doNameAndDaName.doName, doNameAndDaName.daName, extRef, setting).ifPresent(sclReportItems::add))); |
356 | 357 | }
|
357 | 358 | return sclReportItems;
|
358 | 359 | }
|
359 | 360 |
|
360 | 361 | private Optional<SclReportItem> updateVal(AbstractLNAdapter<?> lnAdapter, String doName, String daName, TExtRef extRef, TChannel setting) {
|
361 | 362 | String value = switch (daName) {
|
362 |
| - case DU_DA_NAME -> setting.getChannelShortLabel(); |
363 |
| - case SETVAL_DA_NAME -> LN_PREFIX_B.equals(lnAdapter.getPrefix()) || LN_PREFIX_A.equals(lnAdapter.getPrefix()) ? setting.getChannelLevModQ().value() : setting.getChannelLevMod().value(); |
| 363 | + case DU_DA_NAME -> setting.isSetChannelShortLabel() ? setting.getChannelShortLabel(): null; |
| 364 | + case SETVAL_DA_NAME -> { |
| 365 | + if(LN_PREFIX_B.equals(lnAdapter.getPrefix()) || LN_PREFIX_A.equals(lnAdapter.getPrefix())){ |
| 366 | + yield setting.isSetChannelLevModQ() && !setting.getChannelLevModQ().equals(TChannelLevMod.NA) ? setting.getChannelLevModQ().value(): null; |
| 367 | + } else { |
| 368 | + yield setting.isSetChannelLevMod() && !setting.getChannelLevMod().equals(TChannelLevMod.NA) ? setting.getChannelLevMod().value(): null; |
| 369 | + } |
| 370 | + } |
364 | 371 | case STVAL_DA_NAME -> ActiveStatus.ON.getValue();
|
365 | 372 | case SETSRCREF_DA_NAME -> computeDaiValue(lnAdapter, extRef, setting.getDAName());
|
366 | 373 | default -> null;
|
367 | 374 | };
|
368 |
| - return lnAdapter.getDOIAdapterByName(doName).updateDAI(daName, value); |
| 375 | + return Optional.ofNullable(value).flatMap(newDaiValue -> lnAdapter.getDOIAdapterByName(doName).updateDAI(daName, newDaiValue)); |
369 | 376 | }
|
370 | 377 |
|
371 | 378 | private String computeDaiValue(AbstractLNAdapter<?> lnAdapter, TExtRef extRef, String daName) {
|
|
0 commit comments