Skip to content

Commit 6c0bdd8

Browse files
committed
use DoLinkedToDaFilter for getDOAndDAInstances
Signed-off-by: massifben <[email protected]>
1 parent b7dc91a commit 6c0bdd8

File tree

8 files changed

+105
-67
lines changed

8 files changed

+105
-67
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ public Stream<DoLinkedToDa> getAllDoLinkedToDa(TDataTypeTemplates dtt) {
7575
public Stream<DoLinkedToDa> getFilteredDoLinkedToDa(TDataTypeTemplates dtt, String lNodeTypeId, DoLinkedToDaFilter doLinkedToDaFilter) {
7676
return lnodeTypeService.findLnodeType(dtt, tlNodeType -> tlNodeType.getId().equals(lNodeTypeId))
7777
.stream()
78-
.flatMap(tlNodeType -> doService.getFilteredDos(tlNodeType, tdo -> StringUtils.isBlank(doLinkedToDaFilter.getDoName())
79-
|| (StringUtils.isNotBlank(doLinkedToDaFilter.getDoName()) && doLinkedToDaFilter.getDoName().equals(tdo.getName())))
78+
.flatMap(tlNodeType -> doService.getFilteredDos(tlNodeType, tdo -> StringUtils.isBlank(doLinkedToDaFilter.doName())
79+
|| doLinkedToDaFilter.doName().equals(tdo.getName()))
8080
.flatMap(tdo -> {
8181
DoLinkedToDa doLinkedToDa = new DoLinkedToDa();
8282
DataObject dataObject = new DataObject();
@@ -88,8 +88,9 @@ public Stream<DoLinkedToDa> getFilteredDoLinkedToDa(TDataTypeTemplates dtt, Stri
8888
.flatMap(tdoType -> {
8989
doLinkedToDa.getDataObject().setCdc(tdoType.getCdc());
9090
return doTypeService.getAllSDOLinkedToDa(dtt, tdoType, doLinkedToDa).stream()
91-
.filter(doLinkedToDa1 -> StringUtils.isBlank(doLinkedToDaFilter.getDoName()) || doLinkedToDa1.getDoRef().startsWith(doLinkedToDaFilter.getDoRef())
92-
&& StringUtils.isBlank(doLinkedToDaFilter.getDaName()) || doLinkedToDa1.getDaRef().startsWith(doLinkedToDaFilter.getDaRef()));
91+
.filter(doLinkedToDa1 -> StringUtils.isBlank(doLinkedToDaFilter.doName())
92+
|| (doLinkedToDa1.getDoRef().startsWith(doLinkedToDaFilter.getDoRef()) && StringUtils.isBlank(doLinkedToDaFilter.daName()))
93+
|| doLinkedToDa1.getDaRef().startsWith(doLinkedToDaFilter.getDaRef()));
9394
});
9495
}));
9596
}

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

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@
77
import lombok.extern.slf4j.Slf4j;
88
import org.lfenergy.compas.scl2007b4.model.*;
99
import org.lfenergy.compas.sct.commons.api.LnEditor;
10-
import org.lfenergy.compas.sct.commons.domain.DaVal;
11-
import org.lfenergy.compas.sct.commons.domain.DataAttribute;
12-
import org.lfenergy.compas.sct.commons.domain.DataObject;
13-
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa;
10+
import org.lfenergy.compas.sct.commons.domain.*;
1411
import org.lfenergy.compas.sct.commons.util.ActiveStatus;
1512

1613
import java.util.Collection;
@@ -92,12 +89,12 @@ public Stream<TAnyLN> getActiveLns(TLDevice tlDevice) {
9289
}
9390

9491
@Override
95-
public Optional<TDAI> getDOAndDAInstances(TAnyLN tAnyLN, DataObject dataObject, DataAttribute dataAttribute) {
96-
List<String> structNamesList = new ArrayList<>(dataObject.getSdoNames());
97-
structNamesList.add(dataAttribute.getDaName());
98-
structNamesList.addAll(dataAttribute.getBdaNames());
92+
public Optional<TDAI> getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLinkedToDaFilter) {
93+
List<String> structNamesList = new ArrayList<>(doLinkedToDaFilter.sdoNames());
94+
structNamesList.add(doLinkedToDaFilter.daName());
95+
structNamesList.addAll(doLinkedToDaFilter.bdaNames());
9996

100-
return tAnyLN.getDOI().stream().filter(doi -> doi.getName().equals(dataObject.getDoName()))
97+
return tAnyLN.getDOI().stream().filter(doi -> doi.getName().equals(doLinkedToDaFilter.doName()))
10198
.findFirst()
10299
.flatMap(doi -> {
103100
if(structNamesList.size() > 1) {
@@ -151,7 +148,7 @@ public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedT
151148
}
152149

153150
public void completeFromDAInstance(TIED tied, String ldInst, TAnyLN anyLN, DoLinkedToDa doLinkedToDa) {
154-
getDOAndDAInstances(anyLN, doLinkedToDa.getDataObject(), doLinkedToDa.getDataAttribute())
151+
getDOAndDAInstances(anyLN, doLinkedToDa.toFilter())
155152
.ifPresent(tdai -> {
156153
if(tdai.isSetVal()) {
157154
doLinkedToDa.getDataAttribute().addDaVal(tdai.getVal());

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@
66

77
import org.lfenergy.compas.scl2007b4.model.TAnyLN;
88
import org.lfenergy.compas.scl2007b4.model.TDAI;
9-
import org.lfenergy.compas.sct.commons.domain.DataAttribute;
10-
import org.lfenergy.compas.sct.commons.domain.DataObject;
119
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa;
10+
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDaFilter;
1211

1312
import java.util.Optional;
1413

1514
public interface LnEditor {
1615

17-
Optional<TDAI> getDOAndDAInstances(TAnyLN tAnyLN, DataObject dataObject, DataAttribute dataAttribute);
16+
Optional<TDAI> getDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDaFilter doLinkedToDaFilter);
1817

1918
void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedToDa);
2019

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDa.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
package org.lfenergy.compas.sct.commons.domain;
66

77

8-
import lombok.*;
8+
import lombok.Getter;
9+
import lombok.Setter;
910

1011
import static org.lfenergy.compas.sct.commons.util.CommonConstants.MOD_DO_NAME;
1112
import static org.lfenergy.compas.sct.commons.util.CommonConstants.STVAL_DA_NAME;
@@ -50,5 +51,8 @@ public boolean isUpdatable() {
5051
private boolean isDOModDAstVal() {
5152
return dataObject.getDoName().equals(MOD_DO_NAME) && dataAttribute.getDaName().equals(STVAL_DA_NAME);
5253
}
53-
}
5454

55+
public DoLinkedToDaFilter toFilter() {
56+
return DoLinkedToDaFilter.from(getDoRef(), getDaRef());
57+
}
58+
}

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/domain/DoLinkedToDaFilter.java

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,46 @@
55
package org.lfenergy.compas.sct.commons.domain;
66

77

8-
import lombok.Getter;
9-
import lombok.Setter;
108
import org.apache.commons.lang3.StringUtils;
119

12-
import java.util.ArrayList;
10+
import java.util.Arrays;
11+
import java.util.Collections;
1312
import java.util.List;
1413

15-
@Getter
16-
@Setter
17-
public class DoLinkedToDaFilter {
14+
public record DoLinkedToDaFilter(String doName, List<String> sdoNames, String daName, List<String> bdaNames) {
1815

19-
private String doName;
20-
private String daName;
21-
private List<String> sdoNames = new ArrayList<>();
22-
private List<String> bdaNames = new ArrayList<>();
23-
24-
public String getDoRef() {
25-
return doName + (getSdoNames().isEmpty() ? StringUtils.EMPTY : "." + String.join(".", getSdoNames()));
16+
public DoLinkedToDaFilter(String doName, List<String> sdoNames, String daName, List<String> bdaNames) {
17+
this.doName = StringUtils.isBlank(doName) ? null : doName;
18+
this.sdoNames = sdoNames == null ? Collections.emptyList() : List.copyOf(sdoNames);
19+
this.daName = StringUtils.isBlank(daName) ? null : daName;
20+
this.bdaNames = bdaNames == null ? Collections.emptyList() : List.copyOf(bdaNames);
21+
}
22+
public DoLinkedToDaFilter(){
23+
this(null,null,null,null);
2624
}
2725

28-
public String getDaRef() {
29-
return daName + (getBdaNames().isEmpty() ? StringUtils.EMPTY : "." + String.join(".", getBdaNames()));
26+
public static DoLinkedToDaFilter from(String doNames, String daNames) {
27+
String doName = null;
28+
List<String> sdoNames = null;
29+
String daName = null;
30+
List<String> bdaNames = null;
31+
if (StringUtils.isNotBlank(doNames)){
32+
doName = doNames.split("\\.")[0];
33+
sdoNames = Arrays.stream(doNames.split("\\.")).skip(1).toList();
34+
}
35+
if (StringUtils.isNotBlank(daNames)){
36+
daName = daNames.split("\\.")[0];
37+
bdaNames = Arrays.stream(daNames.split("\\.")).skip(1).toList();
38+
}
39+
return new DoLinkedToDaFilter(doName, sdoNames, daName, bdaNames);
3040
}
3141

42+
public String getDoRef() {
43+
return doName + (sdoNames().isEmpty() ? StringUtils.EMPTY : "." + String.join(".", sdoNames()));
44+
}
45+
46+
public String getDaRef() {
47+
return daName + (bdaNames().isEmpty() ? StringUtils.EMPTY : "." + String.join(".", bdaNames()));
48+
}
49+
3250
}

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

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,7 @@ void getFilteredDOAndDA_when_given_DoName_should_return_expected_dataReference()
185185
TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_test.xml");
186186
String lNodeTypeId = "LNodeType0";
187187

188-
DoLinkedToDaFilter doLinkedToDaFilter = new DoLinkedToDaFilter();
189-
doLinkedToDaFilter.setDoName("SecondDoName");
188+
DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("SecondDoName", "");
190189

191190
//When
192191
DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService();
@@ -208,9 +207,7 @@ void getFilteredDOAndDA_when_given_DO_with_one_structName_should_return_expected
208207
TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_test.xml");
209208
String lNodeTypeId = "LNodeType0";
210209

211-
DoLinkedToDaFilter doLinkedToDaFilter = new DoLinkedToDaFilter();
212-
doLinkedToDaFilter.setDoName("FirstDoName");
213-
doLinkedToDaFilter.setSdoNames(List.of("sdoName1"));
210+
DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("FirstDoName.sdoName1", "");
214211
//When
215212
DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService();
216213
List<DoLinkedToDa> result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList();
@@ -232,9 +229,7 @@ void getFilteredDOAndDA_when_given_DO_with_many_structName_should_return_expecte
232229
TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_test.xml");
233230
String lNodeTypeId = "LNodeType0";
234231

235-
DoLinkedToDaFilter doLinkedToDaFilter = new DoLinkedToDaFilter();
236-
doLinkedToDaFilter.setDoName("FirstDoName");
237-
doLinkedToDaFilter.setSdoNames(List.of("sdoName1", "sdoName21"));
232+
DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("FirstDoName.sdoName1.sdoName21", "");
238233
//When
239234
DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService();
240235
List<DoLinkedToDa> result = dataTypeTemplatesService.getFilteredDoLinkedToDa(dtt, lNodeTypeId, doLinkedToDaFilter).toList();
@@ -255,11 +250,7 @@ void getFilteredDOAndDA_when_given_DO_and_DA_with_structNames_should_return_expe
255250
TDataTypeTemplates dtt = initDttFromFile("/dtt-test-schema-conf/scd_dtt_do_sdo_da_bda_test.xml");
256251
String lNodeTypeId = "LNodeType0";
257252

258-
DoLinkedToDaFilter doLinkedToDaFilter = new DoLinkedToDaFilter();
259-
doLinkedToDaFilter.setDoName("FirstDoName");
260-
doLinkedToDaFilter.setSdoNames(List.of("sdoName2"));
261-
doLinkedToDaFilter.setDaName("structDaName1");
262-
doLinkedToDaFilter.setBdaNames(List.of("structBdaName1", "enumBdaName22"));
253+
DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("FirstDoName.sdoName2", "structDaName1.structBdaName1.enumBdaName22");
263254

264255
//When
265256
DataTypeTemplatesService dataTypeTemplatesService = new DataTypeTemplatesService();
@@ -538,4 +529,4 @@ void getAllDOAndDA_should_return_all_dataReference() {
538529
);
539530
}
540531

541-
}
532+
}

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

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@
1010
import org.junit.jupiter.params.provider.CsvSource;
1111
import org.junit.jupiter.params.provider.MethodSource;
1212
import org.lfenergy.compas.scl2007b4.model.*;
13-
import org.lfenergy.compas.sct.commons.domain.DaVal;
14-
import org.lfenergy.compas.sct.commons.domain.DataAttribute;
15-
import org.lfenergy.compas.sct.commons.domain.DataObject;
16-
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa;
13+
import org.lfenergy.compas.sct.commons.domain.*;
1714
import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller;
1815
import org.lfenergy.compas.sct.commons.util.ActiveStatus;
1916

@@ -171,15 +168,10 @@ void getDOAndDAInstance_should_return_true_when_DO_and_DA_instances_exists() {
171168
new LinkedList<>(List.of("antRef","bda1", "bda2", "bda3")),
172169
"new value",null
173170
);
174-
DataObject dataObject = new DataObject();
175-
dataObject.setDoName("Do");
176-
dataObject.setSdoNames(List.of("sdo1","d"));
177-
DataAttribute dataAttribute = new DataAttribute();
178-
dataAttribute.setDaName("antRef");
179-
dataAttribute.setBdaNames(List.of("bda1","bda2","bda3"));
171+
DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("Do.sdo1.d", "antRef.bda1.bda2.bda3");
180172
//When
181173
LnService lnService = new LnService();
182-
Optional<TDAI> optionalTDAI = lnService.getDOAndDAInstances(tAnyLN, dataObject, dataAttribute);
174+
Optional<TDAI> optionalTDAI = lnService.getDOAndDAInstances(tAnyLN, doLinkedToDaFilter);
183175
//Then
184176
assertThat(optionalTDAI).isPresent();
185177
assertThat(optionalTDAI.get().getName()).isEqualTo("bda3");
@@ -194,15 +186,10 @@ void getDOAndDAInstance_should_return_false_when_DO_and_DA_instances_not_exists(
194186
new LinkedList<>(List.of("antRef","bda1", "bda2", "bda3")),
195187
"new value",null
196188
);
197-
DataObject dataObject = new DataObject();
198-
dataObject.setDoName("Do");
199-
dataObject.setSdoNames(List.of("sdo1","d"));
200-
DataAttribute dataAttribute = new DataAttribute();
201-
dataAttribute.setDaName("antRef");
202-
dataAttribute.setBdaNames(List.of("unknown","bda2","bda3"));
189+
DoLinkedToDaFilter doLinkedToDaFilter = DoLinkedToDaFilter.from("Do.sdo1.d", "antRef.unknown.bda2.bda3");
203190
//When
204191
LnService lnService = new LnService();
205-
Optional<TDAI> optionalTDAI = lnService.getDOAndDAInstances(tAnyLN, dataObject, dataAttribute);
192+
Optional<TDAI> optionalTDAI = lnService.getDOAndDAInstances(tAnyLN, doLinkedToDaFilter);
206193
//Then
207194
assertThat(optionalTDAI).isEmpty();
208195
}
@@ -594,4 +581,4 @@ private TDAI initDOAndDAInstances(TAnyLN tAnyLN,
594581
}
595582

596583

597-
}
584+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// SPDX-FileCopyrightText: 2024 RTE FRANCE
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.lfenergy.compas.sct.commons.domain;
6+
7+
import org.junit.jupiter.params.ParameterizedTest;
8+
import org.junit.jupiter.params.provider.Arguments;
9+
import org.junit.jupiter.params.provider.MethodSource;
10+
11+
import java.util.List;
12+
import java.util.stream.Stream;
13+
14+
import static org.assertj.core.api.Assertions.assertThat;
15+
16+
class DoLinkedToDaFilterTest {
17+
18+
public static Stream<Arguments> provideDoLinkedToDaFilter() {
19+
return Stream.of(
20+
Arguments.of(null, null, new DoLinkedToDaFilter(null, null, null, null)),
21+
Arguments.of("", "", new DoLinkedToDaFilter(null, null, null, null)),
22+
Arguments.of("Do", "", new DoLinkedToDaFilter("Do", null, null, null)),
23+
Arguments.of("", "da", new DoLinkedToDaFilter(null, null, "da", null)),
24+
Arguments.of("Do", "da", new DoLinkedToDaFilter("Do", null, "da", null)),
25+
Arguments.of("Do.sdo", "da", new DoLinkedToDaFilter("Do", List.of("sdo"), "da", null)),
26+
Arguments.of("Do", "da.bda", new DoLinkedToDaFilter("Do", null, "da", List.of("bda"))),
27+
Arguments.of("Do.sdo", "da.bda", new DoLinkedToDaFilter("Do", List.of("sdo"), "da", List.of("bda"))),
28+
Arguments.of("Do.sdo1.sdo2.sdo3.sdo4", "da.bda1.bda2.bda3.bda4", new DoLinkedToDaFilter("Do", List.of("sdo1", "sdo2", "sdo3", "sdo4"), "da", List.of("bda1", "bda2", "bda3", "bda4")))
29+
);
30+
}
31+
32+
@ParameterizedTest
33+
@MethodSource("provideDoLinkedToDaFilter")
34+
void from_should_parse_DO_and_DA(String doNames, String daNames, DoLinkedToDaFilter expected) {
35+
// Given : parameters
36+
// When
37+
DoLinkedToDaFilter result = DoLinkedToDaFilter.from(doNames, daNames);
38+
// Then
39+
assertThat(result).isEqualTo(expected);
40+
}
41+
}

0 commit comments

Comments
 (0)