Skip to content

Commit a5c0008

Browse files
authored
Merge pull request #45 from com-pas/extref-list-cb-for-signal
SCL TExtref management (Signal, Binding and ControlBlocks)
2 parents e356c04 + 094f610 commit a5c0008

37 files changed

+1765
-261
lines changed

pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,6 @@
5757
<artifactId>logback-classic</artifactId>
5858
<version>1.2.6</version>
5959
</dependency>
60-
<!--<dependency>
61-
<groupId>org.slf4j</groupId>
62-
<artifactId>slf4j-log4j12</artifactId>
63-
<version>1.7.32</version>
64-
<scope>test</scope>
65-
</dependency>-->
6660
</dependencies>
6761
</dependencyManagement>
6862
<dependencies>

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: 10 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,12 @@ 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+
}
5260
}

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,6 @@ public TFCDA getFCDA(){
5858
}
5959

6060
public boolean isValid() {
61-
return doName != null &&
62-
!StringUtils.isBlank(doName.getName()) &&
63-
!doName.getStructNames().isEmpty();
61+
return doName != null && !StringUtils.isBlank(doName.toString());
6462
}
6563
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
import lombok.Getter;
88
import lombok.NoArgsConstructor;
9-
import lombok.Setter;
10-
import org.lfenergy.compas.scl2007b4.model.TLDevice;
119
import org.lfenergy.compas.sct.commons.scl.ied.IEDAdapter;
1210
import org.lfenergy.compas.sct.commons.scl.ied.LDeviceAdapter;
1311

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

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@
66

77
import lombok.Getter;
88
import lombok.NoArgsConstructor;
9-
import lombok.Setter;
10-
import org.lfenergy.compas.sct.commons.scl.ied.AbstractLNAdapter;
9+
10+
import lombok.extern.slf4j.Slf4j;
11+
import org.lfenergy.compas.sct.commons.Utils;
1112
import org.lfenergy.compas.sct.commons.scl.ied.LDeviceAdapter;
12-
import org.lfenergy.compas.sct.commons.scl.ied.LN0Adapter;
1313
import org.lfenergy.compas.sct.commons.scl.ied.LNAdapter;
1414

15-
import java.util.Collection;
15+
1616
import java.util.HashSet;
1717
import java.util.List;
1818
import java.util.Set;
1919
import java.util.stream.Collectors;
2020

21+
@Slf4j
2122
@Getter
2223
@NoArgsConstructor
2324
public class LDeviceDTO {
@@ -31,15 +32,18 @@ public LDeviceDTO(String inst, String ldName) {
3132
}
3233

3334
public static LDeviceDTO from(LDeviceAdapter lDeviceAdapter, LogicalNodeOptions options) {
35+
log.info(Utils.entering());
3436
LDeviceDTO lDeviceDTO = new LDeviceDTO();
35-
lDeviceDTO.ldInst = lDeviceAdapter.getInst();
36-
lDeviceDTO.ldName = lDeviceAdapter.getLdName();
37-
List<LNAdapter> lnAdapters = lDeviceAdapter.getLNAdapters();
38-
lDeviceDTO.lNodes = lnAdapters.stream()
39-
.map(lnAdapter -> LNodeDTO.from(lnAdapter, options))
40-
.collect(Collectors.toSet());
41-
lDeviceDTO.lNodes.add(LNodeDTO.from(lDeviceAdapter.getLN0Adapter(),options));
42-
37+
if(lDeviceAdapter != null) {
38+
lDeviceDTO.ldInst = lDeviceAdapter.getInst();
39+
lDeviceDTO.ldName = lDeviceAdapter.getLdName();
40+
lDeviceDTO.lNodes.add(LNodeDTO.from(lDeviceAdapter.getLN0Adapter(), options));
41+
List<LNAdapter> lnAdapters = lDeviceAdapter.getLNAdapters();
42+
lDeviceDTO.lNodes = lnAdapters.stream()
43+
.map(lnAdapter -> LNodeDTO.from(lnAdapter, options))
44+
.collect(Collectors.toSet());
45+
}
46+
log.info(Utils.leaving());
4347
return lDeviceDTO;
4448
}
4549

0 commit comments

Comments
 (0)