Skip to content

Commit 99a9b0a

Browse files
authored
Merge pull request #471 from com-pas/fix/470-completefromdainstance-add-val-instead-of-replacing-it
fix(#470) : completeFromDAInstance should replace dataTypeTemplate Val by DAI Val
2 parents 19c0efb + 2e6b136 commit 99a9b0a

File tree

10 files changed

+184
-79
lines changed

10 files changed

+184
-79
lines changed

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public List<DoLinkedToDa> getAllSDOLinkedToDa(TDataTypeTemplates dtt, TDOType td
3636
List<DoLinkedToDa> result = new ArrayList<>();
3737
// DA -> BDA -> BDA..
3838
sdoOrDAService.getDAs(tdoType).forEach(tda -> {
39-
DoLinkedToDa doLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate);
39+
DoLinkedToDa doLinkedToDa = doLinkedToDaTemplate.deepCopy();
4040
doLinkedToDa.dataAttribute().setDaName(tda.getName());
4141
if (tda.isSetFc()) {
4242
doLinkedToDa.dataAttribute().setFc(tda.getFc());
@@ -57,7 +57,7 @@ public List<DoLinkedToDa> getAllSDOLinkedToDa(TDataTypeTemplates dtt, TDOType td
5757
if (tsdo.isSetType()) {
5858
findDoType(dtt, tdoType1 -> tdoType1.getId().equals(tsdo.getType()))
5959
.ifPresent(nextDoType -> {
60-
DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate);
60+
DoLinkedToDa newDoLinkedToDa = doLinkedToDaTemplate.deepCopy();
6161
newDoLinkedToDa.dataObject().getSdoNames().add(tsdo.getName());
6262
if (nextDoType.isSetCdc()) {
6363
newDoLinkedToDa.dataObject().setCdc(nextDoType.getCdc());
@@ -73,7 +73,7 @@ private Stream<DoLinkedToDa> getDaLinkedToBDA(TDataTypeTemplates dtt, TDAType td
7373
// BDA -> BDA -> BDA..
7474
return bdaService.getBDAs(tdaType1)
7575
.flatMap(tbda -> {
76-
DoLinkedToDa newDoLinkedToDa = DoLinkedToDa.copyFrom(doLinkedToDaTemplate);
76+
DoLinkedToDa newDoLinkedToDa = doLinkedToDaTemplate.deepCopy();
7777
newDoLinkedToDa.dataAttribute().getBdaNames().add(tbda.getName());
7878

7979
// STRUCT type (BType=STRUCT) refer to complex BDA object, otherwise it is kind of DA object

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

+10-7
Original file line numberDiff line numberDiff line change
@@ -146,13 +146,15 @@ public void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedT
146146
});
147147
}
148148

149-
public void completeFromDAInstance(TIED tied, String ldInst, TAnyLN anyLN, DoLinkedToDa doLinkedToDa) {
149+
@Override
150+
public DoLinkedToDa getDoLinkedToDaCompletedFromDAI(TIED tied, String ldInst, TAnyLN anyLN, DoLinkedToDa doLinkedToDa) {
151+
DoLinkedToDa result = doLinkedToDa.deepCopy();
150152
getDOAndDAInstances(anyLN, doLinkedToDa.toFilter())
151153
.ifPresent(tdai -> {
152154
if (tdai.isSetVal()) {
153-
doLinkedToDa.dataAttribute().addDaVal(tdai.getVal());
155+
result.dataAttribute().addDaVal(tdai.getVal());
154156
}
155-
if (doLinkedToDa.dataAttribute().getFc() == TFCEnum.SG || doLinkedToDa.dataAttribute().getFc() == TFCEnum.SE) {
157+
if (result.dataAttribute().getFc() == TFCEnum.SG || result.dataAttribute().getFc() == TFCEnum.SE) {
156158
if (hasSettingGroup(tdai)) {
157159
boolean isIedHasConfSG = tied.isSetAccessPoint() &&
158160
tied.getAccessPoint().stream()
@@ -163,15 +165,16 @@ public void completeFromDAInstance(TIED tied, String ldInst, TAnyLN anyLN, DoLin
163165
&& tAccessPoint.getServices() != null
164166
&& tAccessPoint.getServices().getSettingGroups() != null
165167
&& tAccessPoint.getServices().getSettingGroups().getConfSG() != null);
166-
doLinkedToDa.dataAttribute().setValImport((!tdai.isSetValImport() || tdai.isValImport()) && isIedHasConfSG);
168+
result.dataAttribute().setValImport((!tdai.isSetValImport() || tdai.isValImport()) && isIedHasConfSG);
167169
} else {
168-
log.warn(String.format("Inconsistency in the SCD file - DAI= %s with fc= %s must have a sGroup attribute", tdai.getName(), doLinkedToDa.dataAttribute().getFc()));
169-
doLinkedToDa.dataAttribute().setValImport(false);
170+
log.warn("Inconsistency in the SCD file - DAI= {} with fc= {} must have a sGroup attribute", tdai.getName(), result.dataAttribute().getFc());
171+
result.dataAttribute().setValImport(false);
170172
}
171173
} else if (tdai.isSetValImport()) {
172-
doLinkedToDa.dataAttribute().setValImport(tdai.isValImport());
174+
result.dataAttribute().setValImport(tdai.isValImport());
173175
}
174176
});
177+
return result;
175178
}
176179

177180
public boolean matchesLn(TAnyLN tAnyLN, String lnClass, String lnInst, String lnPrefix) {

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

+2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import org.lfenergy.compas.scl2007b4.model.TAnyLN;
88
import org.lfenergy.compas.scl2007b4.model.TDAI;
9+
import org.lfenergy.compas.scl2007b4.model.TIED;
910
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa;
1011
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDaFilter;
1112
import org.lfenergy.compas.sct.commons.util.ActiveStatus;
@@ -22,4 +23,5 @@ public interface LnEditor {
2223

2324
void updateOrCreateDOAndDAInstances(TAnyLN tAnyLN, DoLinkedToDa doLinkedToDa);
2425

26+
DoLinkedToDa getDoLinkedToDaCompletedFromDAI(TIED tied, String ldInst, TAnyLN anyLN, DoLinkedToDa doLinkedToDa);
2527
}

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

+16-10
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import java.util.ArrayList;
1515
import java.util.List;
16+
import java.util.Objects;
1617

1718
@Getter
1819
@Setter
@@ -26,19 +27,24 @@ public class DataAttribute {
2627
private List<String> bdaNames = new ArrayList<>();
2728
private List<DaVal> daiValues = new ArrayList<>();
2829

29-
public static DataAttribute copyFrom(DataAttribute dataAttribute) {
30-
DataAttribute dataAttribute1 = new DataAttribute();
31-
dataAttribute1.setDaName(dataAttribute.getDaName());
32-
dataAttribute1.setFc(dataAttribute.getFc());
33-
dataAttribute1.setBType(dataAttribute.getBType());
34-
dataAttribute1.setType(dataAttribute.getType());
35-
dataAttribute1.getBdaNames().addAll(dataAttribute.getBdaNames());
36-
dataAttribute1.setValImport(dataAttribute.isValImport());
37-
return dataAttribute1;
30+
public DataAttribute deepCopy() {
31+
DataAttribute dataAttribute = new DataAttribute();
32+
dataAttribute.setDaName(getDaName());
33+
dataAttribute.setType(getType());
34+
dataAttribute.setBType(getBType());
35+
dataAttribute.setFc(getFc());
36+
dataAttribute.setValImport(isValImport());
37+
dataAttribute.getBdaNames().addAll(getBdaNames());
38+
dataAttribute.getDaiValues().addAll(getDaiValues());
39+
return dataAttribute;
3840
}
3941

4042
public void addDaVal(List<TVal> vals) {
41-
vals.forEach(tVal -> daiValues.add(new DaVal(tVal.isSetSGroup() ? tVal.getSGroup() : null, tVal.getValue())));
43+
vals.forEach(tVal -> {
44+
Long settingGroup = tVal.isSetSGroup() ? tVal.getSGroup() : null;
45+
daiValues.removeIf(daVal -> Objects.equals(daVal.settingGroup(), settingGroup));
46+
daiValues.add(new DaVal(settingGroup, tVal.getValue()));
47+
});
4248
}
4349

4450
@Override

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public DataObject(String doName, TPredefinedCDCEnum cdc, List<String> sdoNames)
2828
this.sdoNames.addAll(sdoNames);
2929
}
3030

31-
public static DataObject copyFrom(DataObject dataObject) {
32-
return new DataObject(dataObject.getDoName(), dataObject.getCdc(), dataObject.getSdoNames());
31+
public DataObject deepCopy() {
32+
return new DataObject(getDoName(), getCdc(), getSdoNames());
3333
}
3434

3535
@Override

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111

1212
public record DoLinkedToDa(DataObject dataObject, DataAttribute dataAttribute) {
1313

14-
public static DoLinkedToDa copyFrom(DoLinkedToDa doLinkedToDa) {
14+
public DoLinkedToDa deepCopy() {
1515
return new DoLinkedToDa(
16-
DataObject.copyFrom(doLinkedToDa.dataObject()),
17-
DataAttribute.copyFrom(doLinkedToDa.dataAttribute()));
16+
dataObject().deepCopy(),
17+
dataAttribute().deepCopy());
1818
}
1919

2020
public String getDoRef() {

0 commit comments

Comments
 (0)