Skip to content

Commit 3c1533e

Browse files
authored
Merge pull request #391 from com-pas/feat/386-add-compas-ied-type-private
feat(#386): Add Compas IED type PrivateEnum
2 parents 76189be + 2a8c6f2 commit 3c1533e

File tree

7 files changed

+304
-9
lines changed

7 files changed

+304
-9
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// SPDX-FileCopyrightText: 2024 RTE FRANCE
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.lfenergy.compas.sct.commons;
6+
7+
import org.lfenergy.compas.scl2007b4.model.*;
8+
9+
import java.util.Optional;
10+
import java.util.function.Predicate;
11+
import java.util.stream.Stream;
12+
13+
public class DaiService {
14+
15+
public Stream<TDAI> getDais(TDOI tdoi) {
16+
return tdoi.getSDIOrDAI()
17+
.stream()
18+
.filter(dai -> dai.getClass().equals(TDAI.class))
19+
.map(TDAI.class::cast);
20+
}
21+
22+
public Stream<TDAI> getFilteredDais(TDOI tdoi, Predicate<TDAI> tdaiPredicate) {
23+
return getDais(tdoi).filter(tdaiPredicate);
24+
}
25+
26+
public Optional<TDAI> findDai(TDOI tdoi, Predicate<TDAI> tdaiPredicate) {
27+
return getFilteredDais(tdoi, tdaiPredicate).findFirst();
28+
}
29+
30+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// SPDX-FileCopyrightText: 2024 RTE FRANCE
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.lfenergy.compas.sct.commons;
6+
7+
import org.lfenergy.compas.scl2007b4.model.TAnyLN;
8+
import org.lfenergy.compas.scl2007b4.model.TDOI;
9+
10+
import java.util.Optional;
11+
import java.util.function.Predicate;
12+
import java.util.stream.Stream;
13+
14+
public class DoiService {
15+
16+
public Stream<TDOI> getDois(TAnyLN tAnyLN) {
17+
return tAnyLN.getDOI().stream();
18+
}
19+
20+
public Stream<TDOI> getFilteredDois(TAnyLN tAnyLN, Predicate<TDOI> tdoiPredicate) {
21+
return getDois(tAnyLN).filter(tdoiPredicate);
22+
}
23+
24+
public Optional<TDOI> findDoi(TAnyLN tAnyLN, Predicate<TDOI> tdoiPredicate) {
25+
return getFilteredDois(tAnyLN, tdoiPredicate).findFirst();
26+
}
27+
28+
}

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
import org.lfenergy.compas.sct.commons.domain.DoLinkedToDa;
1414
import org.lfenergy.compas.sct.commons.util.ActiveStatus;
1515

16+
import java.util.Collection;
17+
import java.util.Optional;
18+
import java.util.function.Predicate;
1619
import java.util.*;
1720
import java.util.stream.Stream;
1821

@@ -27,6 +30,26 @@ public Stream<TAnyLN> getAnylns(TLDevice tlDevice) {
2730
return Stream.concat(Stream.of(tlDevice.getLN0()), tlDevice.getLN().stream());
2831
}
2932

33+
public Stream<TAnyLN> getFilteredAnyLns(TLDevice tlDevice, Predicate<TAnyLN> lnPredicate) {
34+
return getAnylns(tlDevice).filter(lnPredicate);
35+
}
36+
37+
public Optional<TAnyLN> findAnyLn(TLDevice tlDevice, Predicate<TAnyLN> lnPredicate) {
38+
return getFilteredAnyLns(tlDevice, lnPredicate).findFirst();
39+
}
40+
41+
public Stream<TLN> getLns(TLDevice tlDevice) {
42+
return tlDevice.getLN().stream();
43+
}
44+
45+
public Stream<TLN> getFilteredLns(TLDevice tlDevice, Predicate<TLN> lnPredicate) {
46+
return getLns(tlDevice).filter(lnPredicate);
47+
}
48+
49+
public Optional<TLN> findLn(TLDevice tlDevice, Predicate<TLN> lnPredicate) {
50+
return getFilteredLns(tlDevice, lnPredicate).findFirst();
51+
}
52+
3053
/**
3154
* The Lnode status depends on the LN0 status.
3255
* If Ln stVAl = null => we take the LN0 status

sct-commons/src/main/java/org/lfenergy/compas/sct/commons/util/PrivateEnum.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public enum PrivateEnum {
2727
COMPAS_LDEVICE("COMPAS-LDevice", TCompasLDevice.class),
2828
COMPAS_SCL_FILE_TYPE("COMPAS-SclFileType", TCompasSclFileType.class),
2929
COMPAS_SYSTEM_VERSION("COMPAS-SystemVersion", TCompasSystemVersion.class),
30-
COMPAS_TOPO("COMPAS-Topo", TCompasTopo.class);
30+
COMPAS_TOPO("COMPAS-Topo", TCompasTopo.class),
31+
COMPAS_IED_TYPE("COMPAS-IEDType", TCompasIEDType.class);
3132

3233
private static final Map<Class<?>, PrivateEnum> classToEnum = Arrays.stream(PrivateEnum.values()).collect(Collectors.toMap(
3334
compasPrivateEnum -> compasPrivateEnum.compasClass,
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// SPDX-FileCopyrightText: 2024 RTE FRANCE
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.lfenergy.compas.sct.commons;
6+
7+
import org.junit.jupiter.api.Test;
8+
import org.lfenergy.compas.scl2007b4.model.SCL;
9+
import org.lfenergy.compas.scl2007b4.model.TDAI;
10+
import org.lfenergy.compas.scl2007b4.model.TDOI;
11+
import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller;
12+
13+
import java.util.List;
14+
import java.util.Optional;
15+
16+
import static org.assertj.core.api.Assertions.assertThat;
17+
18+
class DaiServiceTest {
19+
20+
private final DaiService daiService = new DaiService();
21+
22+
@Test
23+
void getDais() {
24+
//Given
25+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
26+
TDOI tdoi = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0().getDOI().get(3);
27+
28+
//When
29+
List<TDAI> tdais = daiService.getDais(tdoi).toList();
30+
31+
//Then
32+
assertThat(tdais)
33+
.hasSize(5)
34+
.extracting(TDAI::getName)
35+
.containsExactly("paramRev", "valRev", "d", "configRev", "swRev");
36+
}
37+
38+
@Test
39+
void getFilteredDais() {
40+
//Given
41+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
42+
TDOI tdoi = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0().getDOI().get(3);
43+
44+
//When
45+
List<TDAI> tdais = daiService.getFilteredDais(tdoi, tdai -> tdai.getName().equals("configRev")).toList();
46+
47+
//Then
48+
assertThat(tdais)
49+
.hasSize(1)
50+
.extracting(TDAI::getName)
51+
.containsExactly("configRev");
52+
}
53+
54+
@Test
55+
void findDai() {
56+
//Given
57+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
58+
TDOI tdoi = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0().getDOI().get(3);
59+
60+
//When
61+
Optional<TDAI> dai = daiService.findDai(tdoi, tdai -> tdai.getName().equals("configRev"));
62+
63+
//Then
64+
assertThat(dai.orElseThrow())
65+
.extracting(TDAI::getName, tdai -> tdai.getVal().size())
66+
.containsExactly("configRev", 1);
67+
}
68+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// SPDX-FileCopyrightText: 2024 RTE FRANCE
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package org.lfenergy.compas.sct.commons;
6+
7+
import org.junit.jupiter.api.Test;
8+
import org.lfenergy.compas.scl2007b4.model.LN0;
9+
import org.lfenergy.compas.scl2007b4.model.SCL;
10+
import org.lfenergy.compas.scl2007b4.model.TDOI;
11+
import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller;
12+
13+
import java.util.List;
14+
import java.util.Optional;
15+
16+
import static org.assertj.core.api.Assertions.assertThat;
17+
18+
class DoiServiceTest {
19+
20+
private final DoiService doiService = new DoiService();
21+
22+
@Test
23+
void getDois() {
24+
//Given
25+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
26+
LN0 ln0 = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0();
27+
28+
//When
29+
List<TDOI> tdois = doiService.getDois(ln0).toList();
30+
31+
//Then
32+
assertThat(tdois)
33+
.hasSize(4)
34+
.extracting(TDOI::getName)
35+
.containsExactly("Beh", "Health", "Mod", "NamPlt");
36+
}
37+
38+
@Test
39+
void getFilteredDois() {
40+
//Given
41+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
42+
LN0 ln0 = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0();
43+
44+
//When
45+
List<TDOI> tdois = doiService.getFilteredDois(ln0, tdoi -> tdoi.getName().equals("Beh")).toList();
46+
47+
//Then
48+
assertThat(tdois)
49+
.hasSize(1)
50+
.extracting(TDOI::getName)
51+
.containsExactly("Beh");
52+
}
53+
54+
@Test
55+
void findDoi() {
56+
//Given
57+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
58+
LN0 ln0 = std.getIED().get(0).getAccessPoint().get(0).getServer().getLDevice().get(0).getLN0();
59+
60+
//When
61+
Optional<TDOI> doi = doiService.findDoi(ln0, tdoi -> tdoi.getName().equals("Beh"));
62+
63+
//Then
64+
assertThat(doi.orElseThrow())
65+
.extracting(TDOI::getName, tdoi -> tdoi.getSDIOrDAI().size())
66+
.containsExactly("Beh", 1);
67+
}
68+
}

sct-commons/src/test/java/org/lfenergy/compas/sct/commons/LnServiceTest.java

Lines changed: 85 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,29 +23,108 @@
2323

2424
class LnServiceTest {
2525

26+
private final LnService lnService = new LnService();
27+
2628
@Test
2729
void getAnylns_should_return_lns() {
2830
//Given
2931
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
30-
TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
31-
LnService lnService = new LnService();
32+
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
3233

3334
//When
34-
List<TAnyLN> tAnyLNS = lnService.getAnylns(tlDevice).toList();
35+
List<TAnyLN> tAnyLNS = lnService.getAnylns(ldsuied).toList();
3536

3637
//Then
3738
assertThat(tAnyLNS)
3839
.hasSize(2)
39-
.extracting(TAnyLN::getLnType)
40-
.containsExactly("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0", "RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0");
40+
.extracting(TAnyLN::getLnType, TAnyLN::getClass)
41+
.containsExactly(Tuple.tuple("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0", LN0.class),
42+
Tuple.tuple("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0", TLN.class));
43+
}
44+
45+
@Test
46+
void findAnyLn_should_return_ln() {
47+
//Given
48+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
49+
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
50+
51+
//When
52+
Optional<TAnyLN> anyLn = lnService.findAnyLn(ldsuied, tAnyLN -> tAnyLN.getLnType().equals("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0"));
53+
54+
//Then
55+
assertThat(anyLn.orElseThrow())
56+
.extracting(TAnyLN::getLnType, TAnyLN::getClass)
57+
.containsExactly("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0", LN0.class);
58+
}
59+
60+
@Test
61+
void getLns_should_return_lns() {
62+
//Given
63+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
64+
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
65+
66+
//When
67+
List<TLN> tlns = lnService.getLns(ldsuied).toList();
68+
69+
//Then
70+
assertThat(tlns)
71+
.hasSize(1)
72+
.extracting(TLN::getLnType, TLN::getInst, TLN::getLnClass, TLN::getClass)
73+
.containsExactly(Tuple.tuple("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0", "1", List.of("LPAI"), TLN.class));
74+
}
75+
76+
@Test
77+
void getFilteredLns_should_return_lns() {
78+
//Given
79+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
80+
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
81+
82+
//When
83+
List<TLN> tlns = lnService.getFilteredLns(ldsuied, tln -> tln.getLnType().equals("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0")).toList();
84+
85+
//Then
86+
assertThat(tlns)
87+
.hasSize(1)
88+
.extracting(TLN::getLnType, TLN::getInst, TLN::getLnClass, TLN::getClass)
89+
.containsExactly(Tuple.tuple("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0", "1", List.of("LPAI"), TLN.class));
90+
}
91+
92+
@Test
93+
void findLn_should_return_lns() {
94+
//Given
95+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
96+
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
97+
98+
//When
99+
Optional<TLN> ln = lnService.findLn(ldsuied, tln -> tln.getLnType().equals("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0"));
100+
101+
//Then
102+
assertThat(ln.orElseThrow())
103+
.extracting(TLN::getLnType, TLN::getInst, TLN::getLnClass, TLN::getClass)
104+
.containsExactly("RTE_8884DBCF760D916CCE3EE9D1846CE46F_LPAI_V1.0.0", "1", List.of("LPAI"), TLN.class);
105+
}
106+
107+
@Test
108+
void getFilteredAnyLns_should_return_lns() {
109+
//Given
110+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
111+
TLDevice ldsuied = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
112+
113+
//When
114+
List<TAnyLN> tAnyLNS = lnService.getFilteredAnyLns(ldsuied, tAnyLN -> tAnyLN.getLnType().equals("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0")).toList();
115+
116+
//Then
117+
assertThat(tAnyLNS)
118+
.hasSize(1)
119+
.extracting(TAnyLN::getLnType, TAnyLN::getClass)
120+
.containsExactly(Tuple.tuple("RTE_080BBB4D93E4E704CF69E8616CAF1A74_LLN0_V1.0.0", LN0.class));
41121
}
42122

43123
@Test
44124
void getDaiModStval_should_return_status() {
45125
//Given
46126
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
47127
TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
48-
LnService lnService = new LnService();
49128

50129
//When
51130
Optional<ActiveStatus> daiModStval = lnService.getDaiModStval(tlDevice.getLN0());
@@ -59,7 +138,6 @@ void getLnStatus_should_return_status() {
59138
//Given
60139
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
61140
TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
62-
LnService lnService = new LnService();
63141

64142
//When
65143
ActiveStatus lnStatus = lnService.getLnStatus(tlDevice.getLN().getFirst(), tlDevice.getLN0());
@@ -73,7 +151,6 @@ void getActiveLns_should_return_lns() {
73151
//Given
74152
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
75153
TLDevice tlDevice = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst();
76-
LnService lnService = new LnService();
77154

78155
//When
79156
List<TAnyLN> tAnyLNS = lnService.getActiveLns(tlDevice).toList();

0 commit comments

Comments
 (0)