Skip to content

Commit 2a9ccd1

Browse files
committed
implements TExtRef management (Binding with controlblock)
Signed-off-by: Mohamed Sylla <[email protected]>
1 parent 452ca41 commit 2a9ccd1

File tree

29 files changed

+1582
-166
lines changed

29 files changed

+1582
-166
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,29 @@
2222

2323
import java.util.ArrayList;
2424
import java.util.List;
25+
import java.util.Objects;
2526
import java.util.stream.Collectors;
2627

2728

2829
@Getter
2930
@Setter
3031
@NoArgsConstructor
3132
public abstract class ControlBlock<T extends ControlBlock> {
33+
3234
protected String id; /// appID or smvID
3335
protected String name;
3436
protected String dataSetRef;
3537
protected String desc;
3638
protected long confRev;
3739
protected List<TControlWithIEDName.IEDName> iedNames = new ArrayList<>();
3840
protected TPredefinedTypeOfSecurityEnum securityEnable = TPredefinedTypeOfSecurityEnum.NONE;
41+
// summarized info about the LN holding this CB
42+
protected String iedName;
43+
protected String ldInst;
44+
protected String prefix;
45+
protected String lnClass;
46+
protected String lnInst;
47+
3948

4049
protected abstract Class<T> getClassType();
4150
public abstract TServiceType getServiceType();

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
@Getter
1919
@Setter
2020
public class DataTypeName {
21-
protected String name;
21+
protected String name = "";
2222
protected String validationPattern = "";
2323
private List<String> structNames = new ArrayList<>();
2424

25-
public DataTypeName(@NonNull String dataName){
25+
public DataTypeName(String dataName){
26+
if(dataName == null) return;
27+
2628
String[] tokens = dataName.split("\\.");
2729
name = tokens[0];
2830
if(tokens.length > 1){

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

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import lombok.Setter;
1010
import org.apache.commons.lang3.StringUtils;
1111
import org.lfenergy.compas.scl2007b4.model.TExtRef;
12+
import org.lfenergy.compas.scl2007b4.model.TFCDA;
1213
import org.lfenergy.compas.scl2007b4.model.TLLN0Enum;
1314
import org.lfenergy.compas.scl2007b4.model.TServiceType;
1415

@@ -76,7 +77,7 @@ public int hashCode() {
7677

7778
public boolean isValid() {
7879
final String validationRegex = DaTypeName.VALIDATION_REGEX;
79-
String doRef = doName.toString();
80+
String doRef = doName == null ? "" : doName.toString();
8081

8182
Pattern pattern = Pattern.compile(validationRegex,Pattern.MULTILINE);
8283
Matcher matcher = pattern.matcher(doRef);
@@ -90,4 +91,38 @@ public boolean isValid() {
9091
!StringUtils.isBlank(lnClass) &&
9192
(TLLN0Enum.LLN_0.value().equals(lnClass) || !StringUtils.isBlank(lnInst)) ;
9293
}
94+
95+
public boolean isWrappedIn(TExtRef tExtRef){
96+
return Objects.equals(iedName,tExtRef.getIedName()) &&
97+
Objects.equals(ldInst,tExtRef.getLdInst()) &&
98+
Objects.equals(prefix, tExtRef.getPrefix()) &&
99+
Objects.equals(lnInst, tExtRef.getLnInst()) &&
100+
tExtRef.getLnClass().contains(lnClass) &&
101+
Objects.equals(serviceType, tExtRef.getServiceType());
102+
}
103+
104+
public boolean isNull(){
105+
return iedName == null &&
106+
ldInst == null &&
107+
prefix == null &&
108+
lnInst == null &&
109+
lnClass == null &&
110+
doName == null &&
111+
daName == null &&
112+
serviceType == null;
113+
}
114+
115+
116+
@Override
117+
public String toString() {
118+
return "ExtRefBindingInfo{" +
119+
"iedName='" + iedName + '\'' +
120+
", ldInst='" + ldInst + '\'' +
121+
", prefix='" + prefix + '\'' +
122+
", lnClass='" + lnClass + '\'' +
123+
", lnInst='" + lnInst + '\'' +
124+
", lnType='" + lnType + '\'' +
125+
", serviceType=" + serviceType.value() +
126+
'}';
127+
}
93128
}

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

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,26 @@
77

88
import lombok.Getter;
99
import lombok.NoArgsConstructor;
10+
import lombok.NonNull;
1011
import lombok.Setter;
12+
import org.apache.commons.lang3.StringUtils;
1113
import org.lfenergy.compas.scl2007b4.model.TExtRef;
14+
import org.lfenergy.compas.scl2007b4.model.TFCDA;
15+
import org.lfenergy.compas.scl2007b4.model.TLLN0Enum;
16+
import org.lfenergy.compas.sct.commons.scl.ied.AbstractLNAdapter;
17+
18+
import java.util.Objects;
1219

1320

1421
@Getter
1522
@Setter
1623
@NoArgsConstructor
1724
public class ExtRefInfo {
18-
private String iedName;
19-
private String ldInst;
20-
private String prefix;
21-
private String lnClass;
22-
private String lnInst;
25+
private String holderIedName;
26+
private String holderLdInst;
27+
private String holderPrefix = "";
28+
private String holderLnClass;
29+
private String holderLnInst = "";
2330

2431
private ExtRefSignalInfo signalInfo;
2532
private ExtRefBindingInfo bindingInfo;
@@ -30,4 +37,40 @@ public ExtRefInfo(TExtRef tExtRef) {
3037
sourceInfo = new ExtRefSourceInfo(tExtRef);
3138
signalInfo = new ExtRefSignalInfo(tExtRef);
3239
}
40+
41+
public boolean matchFCDA(@NonNull TFCDA tfcda){
42+
if(AbstractLNAdapter.isNull(tfcda)) {
43+
return false;
44+
}
45+
46+
if(tfcda.getLdInst() != null &&
47+
(bindingInfo == null || !tfcda.getLdInst().equals(bindingInfo.getLdInst()))){
48+
return false;
49+
}
50+
if (!tfcda.getLnClass().isEmpty() &&
51+
( bindingInfo == null || !tfcda.getLnClass().contains(bindingInfo.getLnClass())) ){
52+
return false;
53+
}
54+
55+
boolean isLN0 = tfcda.getLnClass().contains(TLLN0Enum.LLN_0.value());
56+
if (!isLN0 && tfcda.getLnInst() != null &&
57+
(bindingInfo == null || !tfcda.getLnInst().equals(bindingInfo.getLnInst()))) {
58+
return false;
59+
}
60+
if (!isLN0 && !StringUtils.isBlank(tfcda.getPrefix()) &&
61+
(bindingInfo == null || !tfcda.getPrefix().equals(bindingInfo.getPrefix()))) {
62+
return false;
63+
}
64+
65+
if(!StringUtils.isBlank(tfcda.getDoName()) &&
66+
(signalInfo == null || !Objects.equals(signalInfo.getPDO(),tfcda.getDoName())) ){
67+
return false;
68+
}
69+
70+
if(!StringUtils.isBlank(tfcda.getDaName()) &&
71+
(signalInfo == null || !Objects.equals(signalInfo.getPDA(),tfcda.getDaName())) ){
72+
return false;
73+
}
74+
return true;
75+
}
3376
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,16 @@ public boolean isValid() {
9696

9797
return true;
9898
}
99+
100+
@Override
101+
public String toString() {
102+
return "ExtRefSignalInfo{" +
103+
"desc='" + desc + '\'' +
104+
", pLN='" + pLN + '\'' +
105+
", pDO='" + pDO + '\'' +
106+
", pDA='" + pDA + '\'' +
107+
", intAddr='" + intAddr + '\'' +
108+
", pServT=" + pServT.value() +
109+
'}';
110+
}
99111
}

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
@NoArgsConstructor
1818
public class ExtRefSourceInfo {
1919
private String srcLDInst;
20-
private String srcPrefix;
20+
private String srcPrefix = "";
2121
private String srcLNClass;
22-
private String srcLNInst;
22+
private String srcLNInst = "";
2323
private String srcCBName;
2424

2525
public ExtRefSourceInfo(TExtRef tExtRef){
@@ -49,4 +49,17 @@ public boolean equals(Object o) {
4949
public int hashCode() {
5050
return Objects.hash(srcLDInst, srcPrefix, srcLNClass, srcLNInst, srcCBName);
5151
}
52+
53+
public boolean isNull(){
54+
return srcCBName == null &&
55+
srcLDInst == null &&
56+
srcLNClass == null &&
57+
srcLNInst == null &&
58+
srcPrefix == null;
59+
}
60+
61+
public boolean isValid() {
62+
63+
return true;
64+
}
5265
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ public static <T extends TAnyLN> LNodeDTO from(AbstractLNAdapter<T> nodeAdapter,
5757
extRefList.stream()
5858
.map(tExtRef -> {
5959
ExtRefInfo extRefInfo = new ExtRefInfo(tExtRef);
60-
extRefInfo.setLnClass(lNodeDTO.nodeClass);
61-
extRefInfo.setLnInst(lNodeDTO.inst);
62-
extRefInfo.setPrefix(lNodeDTO.prefix);
60+
extRefInfo.setHolderLnClass(lNodeDTO.nodeClass);
61+
extRefInfo.setHolderLnInst(lNodeDTO.inst);
62+
extRefInfo.setHolderPrefix(lNodeDTO.prefix);
6363
LDeviceAdapter lDeviceAdapter = (LDeviceAdapter)nodeAdapter.getParentAdapter();
64-
extRefInfo.setIedName(lDeviceAdapter.getParentAdapter().getName());
65-
extRefInfo.setLdInst(lDeviceAdapter.getInst());
64+
extRefInfo.setHolderIedName(lDeviceAdapter.getParentAdapter().getName());
65+
extRefInfo.setHolderLdInst(lDeviceAdapter.getInst());
6666
return extRefInfo;
6767
})
6868
.collect(Collectors.toList())

0 commit comments

Comments
 (0)