Skip to content

Commit 2d6132b

Browse files
authored
Merge pull request #403 from com-pas/develop
Release 0.2.25
2 parents 023f7ea + 5e68693 commit 2d6132b

File tree

12 files changed

+272
-68
lines changed

12 files changed

+272
-68
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
<jacoco-maven-plugin.version>0.8.11</jacoco-maven-plugin.version>
3737

3838
<!-- compas -->
39-
<compas-core.version>0.20.0</compas-core.version>
39+
<compas-core.version>0.21.0</compas-core.version>
4040
<compas-scl-xsd.version>0.0.4</compas-scl-xsd.version>
4141

4242
<!-- maven -->

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/DataAttribute.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,19 @@ public String toString(){
4646
return daName + (getBdaNames().isEmpty() ? StringUtils.EMPTY : "." + String.join(".", getBdaNames()));
4747
}
4848

49+
/**
50+
* Check if DA Object is updatable
51+
* @return boolean value of DA state
52+
*/
53+
public boolean isUpdatable(){
54+
return isValImport() &&
55+
(fc == TFCEnum.CF ||
56+
fc == TFCEnum.DC ||
57+
fc == TFCEnum.SG ||
58+
fc == TFCEnum.SP ||
59+
fc == TFCEnum.ST ||
60+
fc == TFCEnum.SE
61+
);
62+
}
4963

5064
}

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

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

77

8-
import lombok.*;
8+
import lombok.Getter;
9+
import lombok.Setter;
10+
11+
import static org.lfenergy.compas.sct.commons.util.CommonConstants.MOD_DO_NAME;
12+
import static org.lfenergy.compas.sct.commons.util.CommonConstants.STVAL_DA_NAME;
913

1014

1115
@Getter
@@ -30,5 +34,29 @@ public String getDaRef() {
3034
return dataAttribute != null ? dataAttribute.toString() : "";
3135
}
3236

33-
}
37+
/**
38+
* Checks if DA/DO is updatable
39+
*
40+
* @return true if updatable, false otherwise
41+
*/
42+
public boolean isUpdatable() {
43+
return isDOModDAstVal() || dataAttribute.isUpdatable();
44+
}
3445

46+
/**
47+
* Checks if DO is Mod and DA is stVal
48+
*
49+
* @return true if DO is "Mod" and DA is "stVal", false otherwise
50+
*/
51+
private boolean isDOModDAstVal() {
52+
return dataObject.getDoName().equals(MOD_DO_NAME) && dataAttribute.getDaName().equals(STVAL_DA_NAME);
53+
}
54+
55+
/**
56+
* Create DoLinkedToDaFilter from this
57+
* @return new DoLinkedToDaFilter instance with same data Object and data Attribute Ref
58+
*/
59+
public DoLinkedToDaFilter toFilter() {
60+
return DoLinkedToDaFilter.from(getDoRef(), getDaRef());
61+
}
62+
}

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: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
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.api.Test;
8+
import org.junit.jupiter.params.ParameterizedTest;
9+
import org.junit.jupiter.params.provider.CsvSource;
10+
import org.lfenergy.compas.scl2007b4.model.TFCEnum;
11+
12+
import java.util.List;
13+
14+
import static org.assertj.core.api.Assertions.assertThat;
15+
16+
class DataAttributeTest {
17+
18+
@Test
19+
void isUpdatable_should_return_true_whenValImportIsTrue() {
20+
// Given
21+
DataAttribute dataAttribute = new DataAttribute();
22+
dataAttribute.setDaName("daName");
23+
dataAttribute.setBdaNames(List.of("bdaName1"));
24+
dataAttribute.setValImport(true);
25+
dataAttribute.setFc(TFCEnum.SE);
26+
// When Then
27+
assertThat(dataAttribute.isUpdatable()).isTrue();
28+
}
29+
30+
@Test
31+
void isUpdatable_should_return_false_whenValImportIsFalse() {
32+
// Given
33+
DataAttribute dataAttribute = new DataAttribute();
34+
dataAttribute.setDaName("daName");
35+
dataAttribute.setBdaNames(List.of("bdaName1"));
36+
dataAttribute.setValImport(false);
37+
dataAttribute.setFc(TFCEnum.SE);
38+
// When Then
39+
assertThat(dataAttribute.isUpdatable()).isFalse();
40+
}
41+
42+
43+
@Test
44+
void isUpdatable_should_return_true_whenFcIsNotAppropriate() {
45+
// Given
46+
DataAttribute dataAttribute = new DataAttribute();
47+
dataAttribute.setDaName("daName");
48+
dataAttribute.setBdaNames(List.of("bdaName1"));
49+
dataAttribute.setValImport(true);
50+
dataAttribute.setFc(TFCEnum.MX);
51+
// When Then
52+
assertThat(dataAttribute.isUpdatable()).isFalse();
53+
}
54+
55+
56+
@ParameterizedTest
57+
@CsvSource(value = {"MX:true:false", "CF:true:true", "CF:false:false",
58+
"DC:false:false", "DC:false:false",
59+
"SG:false:false", "SG:false:false",
60+
"SP:false:false", "SP:false:false",
61+
"ST:false:false", "ST:false:false",
62+
"SE:false:false", "SE:false:false"}, delimiter = ':')
63+
void isUpdatable_should_return_ExpectedValue(String fcVal, boolean valImport, boolean expected) {
64+
// Given
65+
DataAttribute dataAttribute = new DataAttribute();
66+
dataAttribute.setDaName("daName");
67+
dataAttribute.setBdaNames(List.of("bdaName1"));
68+
dataAttribute.setValImport(valImport);
69+
dataAttribute.setFc(TFCEnum.valueOf(fcVal));
70+
// When Then
71+
assertThat(dataAttribute.isUpdatable()).isEqualTo(expected);
72+
73+
}
74+
75+
}

0 commit comments

Comments
 (0)