Skip to content

Commit e924055

Browse files
committed
feat(#528): Add SDIService
Signed-off-by: gleizesDor <[email protected]>
1 parent bd5eeee commit e924055

File tree

4 files changed

+226
-3
lines changed

4 files changed

+226
-3
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,27 @@ public Stream<TDAI> getDais(TDOI tdoi) {
1818
.filter(dai -> dai.getClass().equals(TDAI.class))
1919
.map(TDAI.class::cast);
2020
}
21+
public Stream<TDAI> getDais(TSDI tsdi) {
22+
return tsdi.getSDIOrDAI()
23+
.stream()
24+
.filter(dai -> dai.getClass().equals(TDAI.class))
25+
.map(TDAI.class::cast);
26+
}
2127

2228
public Stream<TDAI> getFilteredDais(TDOI tdoi, Predicate<TDAI> tdaiPredicate) {
2329
return getDais(tdoi).filter(tdaiPredicate);
2430
}
2531

32+
public Stream<TDAI> getFilteredDais(TSDI tsdi, Predicate<TDAI> tdaiPredicate) {
33+
return getDais(tsdi).filter(tdaiPredicate);
34+
}
35+
2636
public Optional<TDAI> findDai(TDOI tdoi, Predicate<TDAI> tdaiPredicate) {
2737
return getFilteredDais(tdoi, tdaiPredicate).findFirst();
2838
}
2939

40+
public Optional<TDAI> findDai(TSDI tsdi, Predicate<TDAI> tdaiPredicate) {
41+
return getFilteredDais(tsdi, tdaiPredicate).findFirst();
42+
}
43+
3044
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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.TDOI;
8+
import org.lfenergy.compas.scl2007b4.model.TSDI;
9+
10+
import java.util.Optional;
11+
import java.util.function.Predicate;
12+
import java.util.stream.Stream;
13+
14+
public class SdiService {
15+
16+
public Stream<TSDI> getSdis(TDOI tdoi) {
17+
return tdoi.getSDIOrDAI()
18+
.stream()
19+
.filter(TSDI.class::isInstance)
20+
.map(TSDI.class::cast);
21+
}
22+
23+
public Stream<TSDI> getFilteredSdis(TDOI tdoi, Predicate<TSDI> tsdiPredicate) {
24+
return getSdis(tdoi).filter(tsdiPredicate);
25+
}
26+
27+
public Optional<TSDI> findSdi(TDOI tdoi, Predicate<TSDI> tsdiPredicate) {
28+
return getFilteredSdis(tdoi, tsdiPredicate).findFirst();
29+
}
30+
31+
public Stream<TSDI> getSdis(TSDI tsdi) {
32+
return tsdi.getSDIOrDAI()
33+
.stream()
34+
.filter(TSDI.class::isInstance)
35+
.map(TSDI.class::cast);
36+
}
37+
38+
public Stream<TSDI> getFilteredSdis(TSDI tsdi, Predicate<TSDI> tsdiPredicate) {
39+
return getSdis(tsdi).filter(tsdiPredicate);
40+
}
41+
42+
public Optional<TSDI> findSdi(TSDI tsdi, Predicate<TSDI> tsdiPredicate) {
43+
return getFilteredSdis(tsdi, tsdiPredicate).findFirst();
44+
}
45+
46+
}

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

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.lfenergy.compas.scl2007b4.model.SCL;
99
import org.lfenergy.compas.scl2007b4.model.TDAI;
1010
import org.lfenergy.compas.scl2007b4.model.TDOI;
11+
import org.lfenergy.compas.scl2007b4.model.TSDI;
1112
import org.lfenergy.compas.sct.commons.testhelpers.SclTestMarshaller;
1213

1314
import java.util.List;
@@ -23,7 +24,7 @@ class DaiServiceTest {
2324
void getDais() {
2425
//Given
2526
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+
TDOI tdoi = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN0().getDOI().get(3);
2728

2829
//When
2930
List<TDAI> tdais = daiService.getDais(tdoi).toList();
@@ -35,11 +36,27 @@ void getDais() {
3536
.containsExactly("paramRev", "valRev", "d", "configRev", "swRev");
3637
}
3738

39+
@Test
40+
void getDais_in_sdi() {
41+
//Given
42+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
43+
TSDI tsdi = (TSDI) std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN().getFirst().getDOI().getFirst().getSDIOrDAI().getFirst();
44+
45+
//When
46+
List<TDAI> tdais = daiService.getDais(tsdi).toList();
47+
48+
//Then
49+
assertThat(tdais)
50+
.hasSize(2)
51+
.extracting(TDAI::getName)
52+
.containsExactly("multiplier", "SIUnit");
53+
}
54+
3855
@Test
3956
void getFilteredDais() {
4057
//Given
4158
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);
59+
TDOI tdoi = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN0().getDOI().get(3);
4360

4461
//When
4562
List<TDAI> tdais = daiService.getFilteredDais(tdoi, tdai -> tdai.getName().equals("configRev")).toList();
@@ -51,11 +68,27 @@ void getFilteredDais() {
5168
.containsExactly("configRev");
5269
}
5370

71+
@Test
72+
void getFilteredDais_in_sdi() {
73+
//Given
74+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
75+
TSDI tsdi = (TSDI) std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN().getFirst().getDOI().getFirst().getSDIOrDAI().getFirst();
76+
77+
//When
78+
List<TDAI> tdais = daiService.getFilteredDais(tsdi, tdai -> tdai.getName().equals("multiplier")).toList();
79+
80+
//Then
81+
assertThat(tdais)
82+
.hasSize(1)
83+
.extracting(TDAI::getName)
84+
.containsExactly("multiplier");
85+
}
86+
5487
@Test
5588
void findDai() {
5689
//Given
5790
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);
91+
TDOI tdoi = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN0().getDOI().get(3);
5992

6093
//When
6194
Optional<TDAI> dai = daiService.findDai(tdoi, tdai -> tdai.getName().equals("configRev"));
@@ -65,4 +98,19 @@ void findDai() {
6598
.extracting(TDAI::getName, tdai -> tdai.getVal().size())
6699
.containsExactly("configRev", 1);
67100
}
101+
102+
@Test
103+
void findDai_in_sdi() {
104+
//Given
105+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
106+
TSDI tsdi = (TSDI) std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN().getFirst().getDOI().getFirst().getSDIOrDAI().getFirst();
107+
108+
//When
109+
Optional<TDAI> dai = daiService.findDai(tsdi, tdai -> tdai.getName().equals("multiplier"));
110+
111+
//Then
112+
assertThat(dai.orElseThrow())
113+
.extracting(TDAI::getName, tdai -> tdai.getVal().size())
114+
.containsExactly("multiplier", 1);
115+
}
68116
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// SPDX-FileCopyrightText: 2021 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.TDOI;
10+
import org.lfenergy.compas.scl2007b4.model.TSDI;
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 SdiServiceTest {
19+
20+
private final SdiService sdiService = new SdiService();
21+
22+
@Test
23+
void getSdis() {
24+
//Given
25+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
26+
TDOI tdoi = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN().getFirst().getDOI().getFirst();
27+
28+
//When
29+
List<TSDI> tsdis = sdiService.getSdis(tdoi).toList();
30+
31+
//Then
32+
assertThat(tsdis)
33+
.hasSize(5)
34+
.extracting(TSDI::getName)
35+
.containsExactly("units", "minVal", "maxVal", "setMag", "stepSize");
36+
}
37+
38+
@Test
39+
void getFilteredSdis() {
40+
//Given
41+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
42+
TDOI tdoi = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN().getFirst().getDOI().getFirst();
43+
44+
//When
45+
List<TSDI> tsdis = sdiService.getFilteredSdis(tdoi, tsdi -> tsdi.getName().equals("units")).toList();
46+
47+
//Then
48+
assertThat(tsdis)
49+
.hasSize(1)
50+
.extracting(TSDI::getName)
51+
.containsExactly("units");
52+
}
53+
54+
@Test
55+
void findSdi() {
56+
//Given
57+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
58+
TDOI tdoi = std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN().getFirst().getDOI().getFirst();
59+
60+
//When
61+
Optional<TSDI> sdi = sdiService.findSdi(tdoi, tdai -> tdai.getName().equals("units"));
62+
63+
//Then
64+
assertThat(sdi.orElseThrow())
65+
.extracting(TSDI::getName, tsdi -> tsdi.getSDIOrDAI().size())
66+
.containsExactly("units", 2);
67+
}
68+
69+
@Test
70+
void getSdis_in_sdi() {
71+
//Given
72+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
73+
TSDI tsdi = (TSDI) std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN().getFirst().getDOI().get(2).getSDIOrDAI().getFirst();
74+
75+
//When
76+
List<TSDI> tsdis = sdiService.getSdis(tsdi).toList();
77+
78+
//Then
79+
assertThat(tsdis)
80+
.hasSize(6)
81+
.extracting(org.lfenergy.compas.scl2007b4.model.TSDI::getName)
82+
.containsExactly("llLim", "hLim", "min", "lLim", "max", "hhLim");
83+
}
84+
85+
@Test
86+
void getFilteredSdis_in_sdi() {
87+
//Given
88+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
89+
TSDI sdi = (TSDI) std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN().getFirst().getDOI().get(2).getSDIOrDAI().getFirst();
90+
91+
//When
92+
List<TSDI> tsdis = sdiService.getFilteredSdis(sdi, tsdi -> tsdi.getName().equals("llLim")).toList();
93+
94+
//Then
95+
assertThat(tsdis)
96+
.hasSize(1)
97+
.extracting(TSDI::getName)
98+
.containsExactly("llLim");
99+
}
100+
101+
@Test
102+
void findSdi_in_sdi() {
103+
//Given
104+
SCL std = SclTestMarshaller.getSCLFromFile("/std/std_sample.std");
105+
TSDI sdi = (TSDI) std.getIED().getFirst().getAccessPoint().getFirst().getServer().getLDevice().getFirst().getLN().getFirst().getDOI().get(2).getSDIOrDAI().getFirst();
106+
107+
//When
108+
Optional<TSDI> optionalTSDI = sdiService.findSdi(sdi, tsdi -> tsdi.getName().equals("llLim"));
109+
110+
//Then
111+
assertThat(optionalTSDI.orElseThrow())
112+
.extracting(TSDI::getName, tsdi -> tsdi.getSDIOrDAI().size())
113+
.containsExactly("llLim", 1);
114+
}
115+
}

0 commit comments

Comments
 (0)