Skip to content

Commit 7789eb4

Browse files
committed
implement DAI value management
Signed-off-by: Mohamed Sylla <[email protected]>
1 parent 5de41da commit 7789eb4

File tree

57 files changed

+2703
-407
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+2703
-407
lines changed

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/DaTypeName.java

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@
77
import lombok.Getter;
88
import lombok.Setter;
99
import org.lfenergy.compas.scl2007b4.model.TFCEnum;
10+
import org.lfenergy.compas.scl2007b4.model.TPredefinedBasicTypeEnum;
11+
import org.lfenergy.compas.scl2007b4.model.TVal;
1012

13+
import java.util.HashMap;
14+
import java.util.List;
15+
import java.util.Map;
1116
import java.util.Objects;
17+
import java.util.stream.Collectors;
1218

1319
@Getter
1420
@Setter
@@ -17,18 +23,60 @@ public class DaTypeName extends DataTypeName{
1723
= "[a-zA-Z][a-zA-Z0-9]*(\\([0-9]+\\))?(\\.[a-zA-Z][a-zA-Z0-9]*(\\([0-9]+\\))?)*";
1824
private TFCEnum fc;
1925
private String type;
20-
private String bType;
26+
private TPredefinedBasicTypeEnum bType;
27+
private boolean valImport;
28+
private boolean initValImport; // valImport from DataTypeTemplate
29+
private Map<Long,String> daiValues = new HashMap<>();
2130

22-
public DaTypeName(String dataName) {
23-
super(dataName);
31+
public DaTypeName(String daName) {
32+
super(daName);
2433
validationPattern = VALIDATION_REGEX;
2534
}
2635

36+
public static DaTypeName from(DaTypeName dataName){
37+
DaTypeName daTypeName = new DaTypeName(dataName.toString());
38+
if(dataName.isDefined()) {
39+
daTypeName.setFc(dataName.getFc());
40+
daTypeName.setType(dataName.getType());
41+
daTypeName.setBType(dataName.getBType());
42+
daTypeName.daiValues = dataName.getDaiValues().entrySet().stream()
43+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
44+
daTypeName.valImport = dataName.valImport;
45+
}
46+
return daTypeName;
47+
}
48+
49+
2750
public DaTypeName(String name, String names) {
2851
super(name, names);
2952
validationPattern = VALIDATION_REGEX;
3053
}
3154

55+
public boolean isValImport(){
56+
if(!valImport){
57+
return initValImport;
58+
}
59+
return true;
60+
}
61+
62+
public boolean isUpdatable(){
63+
return isValImport() &&
64+
(fc == TFCEnum.CF ||
65+
fc == TFCEnum.DC ||
66+
fc == TFCEnum.SG ||
67+
fc == TFCEnum.SP ||
68+
fc == TFCEnum.ST ||
69+
fc == TFCEnum.SE
70+
);
71+
}
72+
73+
public void setDaiValues(List<TVal> vals) {
74+
if(vals.size() == 1){
75+
daiValues.put(0L,vals.get(0).getValue());
76+
}
77+
vals.forEach(tVal -> daiValues.put(tVal.getSGroup(),tVal.getValue()));
78+
}
79+
3280
@Override
3381
public boolean equals(Object o) {
3482
if (this == o) return true;
@@ -44,4 +92,13 @@ public boolean equals(Object o) {
4492
public int hashCode() {
4593
return Objects.hash(super.hashCode(), fc, bType, type);
4694
}
95+
96+
public void merge(DaTypeName daName) {
97+
if(!isDefined()) return;
98+
fc = daName.fc;
99+
bType = daName.bType;
100+
type = daName.type;
101+
valImport = daName.valImport;
102+
daiValues.putAll(daiValues);
103+
}
47104
}

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/DataTypeName.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,26 @@
77
import lombok.Getter;
88
import lombok.NonNull;
99
import lombok.Setter;
10+
import lombok.extern.slf4j.Slf4j;
11+
import org.apache.commons.lang3.StringUtils;
1012

1113
import java.util.ArrayList;
1214
import java.util.Arrays;
1315

16+
import java.util.Collections;
1417
import java.util.List;
1518
import java.util.Objects;
19+
import java.util.stream.Collectors;
20+
import java.util.stream.Stream;
1621

1722

1823
@Getter
1924
@Setter
25+
@Slf4j
2026
public class DataTypeName {
21-
protected String name = "";
27+
protected String name = ""; // dataName or DataAttributeName
2228
protected String validationPattern = "";
23-
private List<String> structNames = new ArrayList<>();
29+
private List<String> structNames = new ArrayList<>(); // [.DataName[…]] or [.DAComponentName[ ….]]
2430

2531
public DataTypeName(String dataName){
2632
if(dataName == null) return;
@@ -30,18 +36,22 @@ public DataTypeName(String dataName){
3036
if(tokens.length > 1){
3137
int idx = dataName.indexOf(".");
3238
tokens = dataName.substring(idx + 1).split("\\.");
33-
structNames = Arrays.asList(Arrays.copyOf(tokens,tokens.length));
39+
structNames = Stream.of(tokens).collect(Collectors.toList());
3440
}
3541
}
3642

43+
public static DataTypeName from(DataTypeName dataName){
44+
return new DataTypeName(dataName.toString());
45+
}
46+
47+
public boolean isDefined(){
48+
return !StringUtils.isBlank(name);
49+
}
50+
3751
public DataTypeName(String name, @NonNull String names){
3852
this.name = name;
3953
String[] tokens = names.split("\\.");
40-
structNames = Arrays.asList(Arrays.copyOf(tokens,tokens.length));
41-
}
42-
43-
public void setStructNames(List<String> ss){
44-
structNames = List.copyOf(ss);
54+
structNames = Stream.of(tokens).collect(Collectors.toList());
4555
}
4656

4757
@Override
@@ -69,4 +79,13 @@ public boolean equals(Object o) {
6979
public int hashCode() {
7080
return Objects.hash(name, structNames);
7181
}
82+
83+
public void addStructName(String structName) {
84+
structNames.add(structName);
85+
}
86+
87+
public String getLastName() {
88+
int sz = structNames.size();
89+
return sz == 0 ? name : structNames.get(sz - 1);
90+
}
7291
}

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/DoTypeName.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
import lombok.Setter;
99
import org.lfenergy.compas.scl2007b4.model.TPredefinedCDCEnum;
1010

11+
import java.util.Map;
1112
import java.util.Objects;
13+
import java.util.stream.Collectors;
1214

1315
@Getter
1416
@Setter
@@ -26,6 +28,14 @@ public DoTypeName(String ppDoName, String sdoNames) {
2628
validationPattern = VALIDATION_REGEX;
2729
}
2830

31+
public static DoTypeName from(DoTypeName dataName){
32+
DoTypeName doTypeName = new DoTypeName(dataName.toString());
33+
if(doTypeName.isDefined()) {
34+
doTypeName.setCdc(dataName.getCdc());
35+
}
36+
return doTypeName;
37+
}
38+
2939
@Override
3040
public boolean equals(Object o) {
3141
if (this == o) return true;
@@ -40,4 +50,9 @@ public int hashCode() {
4050
return Objects.hash(super.hashCode(), cdc);
4151
}
4252

53+
public void merge(DoTypeName doName) {
54+
if(!isDefined()) return;
55+
if(cdc == null)
56+
cdc = doName.getCdc();
57+
}
4358
}

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/dto/ResumedDataTemplate.java

Lines changed: 107 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
import lombok.Setter;
1010
import org.lfenergy.compas.scl2007b4.model.TFCEnum;
1111
import org.lfenergy.compas.scl2007b4.model.TLLN0Enum;
12+
import org.lfenergy.compas.scl2007b4.model.TPredefinedBasicTypeEnum;
1213
import org.lfenergy.compas.scl2007b4.model.TPredefinedCDCEnum;
14+
import org.lfenergy.compas.scl2007b4.model.TVal;
1315

1416
import java.util.*;
1517
import java.util.stream.Collectors;
@@ -23,41 +25,23 @@ public class ResumedDataTemplate {
2325
private String lnType;
2426
private String lnClass;
2527
private String lnInst;
26-
private DoTypeName doName;
27-
private DaTypeName daName;
28-
private Map<Long,String> daiValues = new HashMap<>();
29-
private boolean valImport = false;
28+
private DoTypeName doName = new DoTypeName("");
29+
private DaTypeName daName = new DaTypeName("");
3030

3131
public static ResumedDataTemplate copyFrom(ResumedDataTemplate dtt){
3232
ResumedDataTemplate resumedDataTemplate = new ResumedDataTemplate();
3333
resumedDataTemplate.prefix = dtt.prefix;
3434
resumedDataTemplate.lnClass = dtt.lnClass;
3535
resumedDataTemplate.lnInst = dtt.lnInst;
3636
resumedDataTemplate.lnType = dtt.lnType;
37-
resumedDataTemplate.doName = new DoTypeName(dtt.getDoName().toString());
38-
resumedDataTemplate.doName.setCdc(dtt.getDoName().getCdc());
39-
resumedDataTemplate.daName = new DaTypeName(dtt.getDaName().toString());
40-
resumedDataTemplate.daName.setFc(dtt.getDaName().getFc());
41-
resumedDataTemplate.daName.setType(dtt.daName.getType());
42-
resumedDataTemplate.daName.setBType(dtt.daName.getBType());
43-
resumedDataTemplate.daiValues = dtt.getDaiValues().entrySet().stream()
44-
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
45-
resumedDataTemplate.valImport = dtt.valImport;
37+
resumedDataTemplate.doName = DoTypeName.from(dtt.getDoName());
38+
resumedDataTemplate.daName = DaTypeName.from(dtt.getDaName());
4639

4740
return resumedDataTemplate;
4841
}
4942

50-
5143
public boolean isUpdatable(){
52-
TFCEnum fc = daName.getFc();
53-
return valImport &&
54-
(fc == TFCEnum.CF ||
55-
fc == TFCEnum.DC ||
56-
fc == TFCEnum.SG ||
57-
fc == TFCEnum.SP ||
58-
fc == TFCEnum.ST ||
59-
fc == TFCEnum.SE
60-
);
44+
return daName.isDefined() ? daName.isUpdatable() : false;
6145
}
6246

6347
public String getObjRef(String iedName, String ldInst){
@@ -82,33 +66,125 @@ public String getObjRef(String iedName, String ldInst){
8266
}
8367

8468
public String getDoRef(){
85-
return doName.toString();
69+
return isDoNameDefined() ? doName.toString() : "";
8670
}
8771

8872
public String getDaRef(){
89-
return daName.toString();
73+
return isDaNameDefined() ? daName.toString() : "";
9074
}
9175

9276
public List<String> getDaRefList(){
9377
ArrayList<String> daRefList = new ArrayList<>();
94-
daRefList.add(daName.getName());
95-
daRefList.addAll(daName.getStructNames());
78+
if(isDaNameDefined()) {
79+
daRefList.add(daName.getName());
80+
daRefList.addAll(daName.getStructNames());
81+
}
9682
return daRefList;
9783
}
9884

99-
public void setDoName(DoTypeName doName){
100-
this.doName = doName;
85+
public TFCEnum getFc(){
86+
return daName.isDefined() ? daName.getFc() : null;
87+
}
88+
89+
public void setFc(TFCEnum fc){
90+
if(isDaNameDefined()){
91+
daName.setFc(fc);
92+
} else {
93+
throw new IllegalArgumentException("Cannot set functional constrain for undefined DA");
94+
}
95+
}
96+
97+
public TPredefinedCDCEnum getCdc(){
98+
return daName.isDefined() ? doName.getCdc() : null;
99+
}
100+
101+
public void setCdc(TPredefinedCDCEnum cdc){
102+
if(isDoNameDefined()){
103+
doName.setCdc(cdc);
104+
} else {
105+
throw new IllegalArgumentException("Cannot set CDC for undefined DOType");
106+
}
107+
}
108+
109+
public List<String> getSdoNames(){
110+
if(!isDoNameDefined()) return new ArrayList<>();
111+
return List.of(doName.getStructNames().toArray(new String[0]));
112+
}
113+
114+
public List<String> getBdaNames(){
115+
if(!isDaNameDefined()) return new ArrayList<>();
116+
return List.of(daName.getStructNames().toArray(new String[0]));
117+
}
118+
119+
public <T extends DataTypeName> void addStructName(String structName, Class<T> cls){
120+
if(cls.equals(DaTypeName.class) && isDaNameDefined()) {
121+
daName.addStructName(structName);
122+
} else if(cls.equals(DoTypeName.class) && isDoNameDefined()) {
123+
doName.addStructName(structName);
124+
} else {
125+
throw new IllegalArgumentException("Cannot add Struct name for undefined data type");
126+
}
127+
}
128+
129+
public boolean isDoNameDefined() {
130+
return doName != null && doName.isDefined();
131+
}
132+
133+
public boolean isDaNameDefined() {
134+
return daName != null && daName.isDefined();
101135
}
102136

137+
public TPredefinedBasicTypeEnum getBType(){
138+
return daName != null ? daName.getBType() : null;
139+
}
140+
141+
public void setType(String type){
142+
if(isDaNameDefined()){
143+
daName.setType(type);
144+
} else {
145+
throw new IllegalArgumentException("Cannot define type for undefined BDA");
146+
}
147+
}
148+
149+
public String getType(){
150+
return daName != null ? daName.getType() : null;
151+
}
152+
153+
public void setBType(String bType){
154+
if(isDaNameDefined()){
155+
daName.setBType(TPredefinedBasicTypeEnum.fromValue(bType));
156+
} else {
157+
throw new IllegalArgumentException("Cannot define Basic type for undefined DA or BDA");
158+
}
159+
}
160+
161+
public void setDoName(DoTypeName doName){
162+
this.doName = DoTypeName.from(doName);
163+
}
103164
public void setDoName(String doName){
104165
this.doName = new DoTypeName(doName);
105166
}
106167

107168
public void setDaName(DaTypeName daName){
108-
this.daName = daName;
169+
this.daName = DaTypeName.from(daName);
109170
}
110-
111171
public void setDaName(String daName){
112172
this.daName = new DaTypeName(daName);
113173
}
174+
175+
public void setDaiValues(List<TVal> values) {
176+
if(isDaNameDefined()){
177+
daName.setDaiValues(values);
178+
}
179+
}
180+
181+
public void setValImport(boolean valImport) {
182+
if(isDaNameDefined()){
183+
daName.setValImport(valImport);
184+
}
185+
}
186+
187+
public boolean isValImport(){
188+
return daName.isValImport();
189+
}
114190
}

0 commit comments

Comments
 (0)