Skip to content

Commit 73e49c9

Browse files
authored
add condition to operating status extension (#304)
Signed-off-by: Rehili Ghazwa <ghazwarhili@gmail.com>
1 parent b1eab6a commit 73e49c9

28 files changed

Lines changed: 261 additions & 204 deletions

src/main/java/org/gridsuite/network/map/dto/mapper/HvdcInfosMapper.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,19 @@ public static ElementInfos toData(Identifiable<?> identifiable, InfoTypeParamete
4848

4949
private static HvdcMapInfos toMapInfos(Identifiable<?> identifiable) {
5050
HvdcLine hvdcLine = (HvdcLine) identifiable;
51+
Terminal terminal1 = hvdcLine.getConverterStation1().getTerminal();
52+
Terminal terminal2 = hvdcLine.getConverterStation2().getTerminal();
5153
return HvdcMapInfos.builder()
5254
.id(hvdcLine.getId())
5355
.name(hvdcLine.getOptionalName().orElse(null))
54-
.voltageLevelId1(hvdcLine.getConverterStation1().getTerminal().getVoltageLevel().getId())
55-
.voltageLevelId2(hvdcLine.getConverterStation2().getTerminal().getVoltageLevel().getId())
56-
.terminal1Connected(hvdcLine.getConverterStation1().getTerminal().isConnected())
57-
.terminal2Connected(hvdcLine.getConverterStation2().getTerminal().isConnected())
58-
.p1(nullIfNan(hvdcLine.getConverterStation1().getTerminal().getP()))
59-
.p2(nullIfNan(hvdcLine.getConverterStation2().getTerminal().getP()))
56+
.voltageLevelId1(terminal1.getVoltageLevel().getId())
57+
.voltageLevelId2(terminal2.getVoltageLevel().getId())
58+
.terminal1Connected(terminal1.isConnected())
59+
.terminal2Connected(terminal2.isConnected())
60+
.p1(nullIfNan(terminal1.getP()))
61+
.p2(nullIfNan(terminal2.getP()))
6062
.hvdcType(hvdcLine.getConverterStation1().getHvdcType())
61-
.operatingStatus(ExtensionUtils.toOperatingStatus(hvdcLine))
63+
.operatingStatus(ExtensionUtils.toOperatingStatus(hvdcLine, List.of(terminal1.isConnected(), terminal2.isConnected())))
6264
.build();
6365
}
6466

@@ -72,7 +74,7 @@ private static HvdcOperatingStatusInfos toOperatingStatusInfos(Identifiable<?> i
7274
.name(hvdcLine.getOptionalName().orElse(null))
7375
.voltageLevelId1(terminal1.getVoltageLevel().getId())
7476
.voltageLevelId2(terminal2.getVoltageLevel().getId())
75-
.operatingStatus(ExtensionUtils.toOperatingStatus(hvdcLine))
77+
.operatingStatus(ExtensionUtils.toOperatingStatus(hvdcLine, List.of(terminal1.isConnected(), terminal2.isConnected())))
7678
.build();
7779
}
7880

src/main/java/org/gridsuite/network/map/dto/mapper/LineInfosMapper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.gridsuite.network.map.dto.definition.branch.line.LineTabInfos.LineTabInfosBuilder;
1717
import org.gridsuite.network.map.dto.utils.ExtensionUtils;
1818

19+
import java.util.List;
1920
import java.util.Optional;
2021

2122
import static org.gridsuite.network.map.dto.InfoTypeParameters.QUERY_PARAM_DC_POWERFACTOR;
@@ -106,7 +107,7 @@ private static LineOperatingStatusInfos toOperatingStatusInfos(Identifiable<?> i
106107
.voltageLevelName2(terminal2.getVoltageLevel().getOptionalName().orElse(null))
107108
.terminal1Connected(terminal1.isConnected())
108109
.terminal2Connected(terminal2.isConnected())
109-
.operatingStatus(ExtensionUtils.toOperatingStatus(line))
110+
.operatingStatus(ExtensionUtils.toOperatingStatus(line, List.of(terminal1.isConnected(), terminal2.isConnected())))
110111
.build();
111112
}
112113

@@ -128,8 +129,7 @@ private static LineMapInfos toMapInfos(Identifiable<?> identifiable, Double dcPo
128129
.p2(nullIfNan(terminal2.getP()))
129130
.i1(nullIfNan(computeIntensity(terminal1, dcPowerFactor)))
130131
.i2(nullIfNan(computeIntensity(terminal2, dcPowerFactor)))
131-
// TODO - lock and strip are hidden on map temporarly
132-
//.operatingStatus(ExtensionUtils.toOperatingStatus(line))
132+
.operatingStatus(ExtensionUtils.toOperatingStatus(line, List.of(terminal1.isConnected(), terminal2.isConnected())))
133133
.build();
134134
}
135135

src/main/java/org/gridsuite/network/map/dto/mapper/ThreeWindingsTransformerInfosMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ private static ThreeWindingsTransformerOperatingStatusInfos toOperatingStatusInf
5656
.voltageLevelId1(terminal1.getVoltageLevel().getId())
5757
.voltageLevelId2(terminal2.getVoltageLevel().getId())
5858
.voltageLevelId3(terminal3.getVoltageLevel().getId())
59-
.operatingStatus(ExtensionUtils.toOperatingStatus(threeWT))
59+
.operatingStatus(ExtensionUtils.toOperatingStatus(threeWT, List.of(terminal1.isConnected(), terminal2.isConnected(), terminal3.isConnected())))
6060
.build();
6161
}
6262

src/main/java/org/gridsuite/network/map/dto/mapper/TieLineInfosMapper.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import org.gridsuite.network.map.dto.utils.ElementUtils;
1717
import org.gridsuite.network.map.dto.utils.ExtensionUtils;
1818

19+
import java.util.List;
20+
1921
import static org.gridsuite.network.map.dto.InfoTypeParameters.QUERY_PARAM_DC_POWERFACTOR;
2022
import static org.gridsuite.network.map.dto.utils.ElementUtils.*;
2123

@@ -56,7 +58,7 @@ private static TieLineMapInfos toMapInfos(Identifiable<?> identifiable, Double d
5658
.p2(nullIfNan(terminal2.getP()))
5759
.i1(nullIfNan(computeIntensity(terminal1, dcPowerFactor)))
5860
.i2(nullIfNan(computeIntensity(terminal2, dcPowerFactor)))
59-
.operatingStatus(ExtensionUtils.toOperatingStatus(tieLine));
61+
.operatingStatus(ExtensionUtils.toOperatingStatus(tieLine, List.of(terminal1.isConnected(), terminal2.isConnected())));
6062

6163
tieLine.getSelectedOperationalLimitsGroup1().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits1(toMapDataCurrentLimits(limits, limitsGrp.getId()))));
6264
tieLine.getSelectedOperationalLimitsGroup2().ifPresent(limitsGrp -> limitsGrp.getCurrentLimits().ifPresent(limits -> builder.currentLimits2(toMapDataCurrentLimits(limits, limitsGrp.getId()))));

src/main/java/org/gridsuite/network/map/dto/mapper/TwoWindingsTransformerInfosMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ private static TwoWindingsTransformerOperatingStatusInfos toOperatingStatusInfos
134134
.name(twoWT.getOptionalName().orElse(null))
135135
.voltageLevelId1(terminal1.getVoltageLevel().getId())
136136
.voltageLevelId2(terminal2.getVoltageLevel().getId())
137-
.operatingStatus(ExtensionUtils.toOperatingStatus(twoWT))
137+
.operatingStatus(ExtensionUtils.toOperatingStatus(twoWT, List.of(terminal1.isConnected(), terminal2.isConnected())))
138138
.build();
139139
}
140140

src/main/java/org/gridsuite/network/map/dto/utils/ExtensionUtils.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.springframework.lang.NonNull;
99
import org.springframework.lang.Nullable;
1010

11+
import java.util.Collections;
12+
import java.util.List;
1113
import java.util.Optional;
1214
import java.util.function.Supplier;
1315

@@ -47,17 +49,24 @@ public static Optional<ShortCircuitInfos> toShortCircuit(@NonNull final Supplier
4749
.build());
4850
}
4951

50-
public static String toOperatingStatus(@NonNull final Extendable<?> extendable) {
52+
public static String toOperatingStatus(@NonNull final Extendable<?> extendable, List<Boolean> terminalConnections) {
5153
if (extendable instanceof Branch<?>
5254
|| extendable instanceof ThreeWindingsTransformer
5355
|| extendable instanceof HvdcLine
5456
|| extendable instanceof BusbarSection) {
5557
var operatingStatus = extendable.getExtension(OperatingStatus.class);
56-
return operatingStatus == null ? null : operatingStatus.getStatus().name();
58+
if (operatingStatus == null) {
59+
return null;
60+
}
61+
return terminalConnections.stream().noneMatch(Boolean::booleanValue) ? operatingStatus.getStatus().name() : null;
5762
}
5863
return null;
5964
}
6065

66+
public static String toOperatingStatus(@NonNull final Extendable<?> extendable) {
67+
return toOperatingStatus(extendable, Collections.emptyList());
68+
}
69+
6170
public static Optional<IdentifiableShortCircuitInfos> toIdentifiableShortCircuit(@NonNull final VoltageLevel voltageLevel) {
6271
return Optional.ofNullable((IdentifiableShortCircuit<VoltageLevel>) voltageLevel.getExtension(IdentifiableShortCircuit.class))
6372
.map(identifiableShortCircuit -> IdentifiableShortCircuitInfos.builder()

src/test/java/org/gridsuite/network/map/NetworkMapControllerTest.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ void setUp() {
105105
l1.newOperationalLimitsGroup2("limit set 1");
106106
l1.setSelectedOperationalLimitsGroup1("limit set 1");
107107
l1.setSelectedOperationalLimitsGroup2("limit set 1");
108+
l1.newExtension(OperatingStatusAdder.class).withStatus(OperatingStatus.Status.PLANNED_OUTAGE).add();
108109
l1.newCurrentLimits1().setPermanentLimit(700.4)
109110
.beginTemporaryLimit()
110111
.setName("IT5")
@@ -198,6 +199,7 @@ void setUp() {
198199
.setQ(8.88);
199200
t1.getRatioTapChanger().setTapPosition(2);
200201
t1.newExtension(OperatingStatusAdder.class).withStatus(OperatingStatus.Status.PLANNED_OUTAGE).add();
202+
t1.getTerminal1().disconnect();
201203
t1.newExtension(ConnectablePositionAdder.class)
202204
.newFeeder1()
203205
.withName("feederName1")
@@ -210,6 +212,8 @@ void setUp() {
210212
.add();
211213

212214
TwoWindingsTransformer t2 = network.getTwoWindingsTransformer("NGEN_NHV1");
215+
t2.getTerminal1().disconnect();
216+
t2.getTerminal2().disconnect();
213217
t2.getTerminal1().setP(11.1)
214218
.setQ(12.2);
215219
t2.getTerminal2().setP(13.33)
@@ -304,6 +308,7 @@ void setUp() {
304308
.add();
305309

306310
TwoWindingsTransformer t3 = network.getTwoWindingsTransformer("NGEN_NHV2");
311+
t3.newExtension(OperatingStatusAdder.class).withStatus(OperatingStatus.Status.PLANNED_OUTAGE).add();
307312
t3.newCurrentLimits1().setPermanentLimit(300.4)
308313
.beginTemporaryLimit()
309314
.setName("IT20")
@@ -436,6 +441,13 @@ void setUp() {
436441
make3WindingsTransformer(p1, "TWT", ThreeWindingsTransformer::getLeg1, ThreeWindingsTransformer::getLeg3);
437442
make3WindingsTransformer(p1, "TWT21", ThreeWindingsTransformer::getLeg2, ThreeWindingsTransformer::getLeg1);
438443
make3WindingsTransformer(p1, "TWT32", ThreeWindingsTransformer::getLeg3, ThreeWindingsTransformer::getLeg2);
444+
ThreeWindingsTransformer threeWindingsTransformer = network.getThreeWindingsTransformer("TWT");
445+
threeWindingsTransformer.getLeg1().getTerminal().disconnect();
446+
threeWindingsTransformer.getLeg2().getTerminal().disconnect();
447+
threeWindingsTransformer.getLeg3().getTerminal().disconnect();
448+
ThreeWindingsTransformer threeWindingsTransformer21 = network.getThreeWindingsTransformer("TWT21");
449+
threeWindingsTransformer21.getLeg1().getTerminal().disconnect();
450+
threeWindingsTransformer21.getLeg2().getTerminal().disconnect();
439451

440452
Substation p3 = network.newSubstation()
441453
.setId("P3")
@@ -480,6 +492,8 @@ void setUp() {
480492
.add();
481493
line3.getTerminal1().setP(200.);
482494
line3.getTerminal2().setP(100.);
495+
line3.getTerminal1().disconnect();
496+
line3.getTerminal2().disconnect();
483497
line3.newExtension(MeasurementsAdder.class).add();
484498
Measurements<Line> line3Measurements = line3.getExtension(Measurements.class);
485499
line3Measurements.newMeasurement().setType(Measurement.Type.ACTIVE_POWER).setSide(ThreeSides.ONE).setValid(true).setValue(11).add();
@@ -561,7 +575,8 @@ void setUp() {
561575
.endTemporaryLimit()
562576
.add();
563577
line4.setSelectedOperationalLimitsGroup2("group1");
564-
578+
line4.newExtension(OperatingStatusAdder.class).withStatus(OperatingStatus.Status.PLANNED_OUTAGE).add();
579+
line4.getTerminal1().disconnect();
565580
Battery b1 = vlnew2.newBattery()
566581
.setId("BATTERY1")
567582
.setName("BATTERY1")
@@ -667,7 +682,7 @@ void setUp() {
667682
.withStandardDeviationV(2.93)
668683
.withRedundantV(true)
669684
.add();
670-
685+
dl.newExtension(OperatingStatusAdder.class).withStatus(OperatingStatus.Status.PLANNED_OUTAGE).add();
671686
DanglingLine dl2 = vlgen3.newDanglingLine()
672687
.setId("DL2")
673688
.setName("DL2")
@@ -689,6 +704,8 @@ void setUp() {
689704
.setDanglingLine1("DL1")
690705
.setDanglingLine2("DL2")
691706
.add();
707+
TieLine tieLine = network.getTieLine("TL1");
708+
tieLine.newExtension(OperatingStatusAdder.class).withStatus(OperatingStatus.Status.PLANNED_OUTAGE).add();
692709
VscConverterStation vsc1 = vlnew2.newVscConverterStation()
693710
.setId("VSC1")
694711
.setName("VSC1")
@@ -914,7 +931,7 @@ void setUp() {
914931
.withDroop(180F)
915932
.withEnabled(true)
916933
.add();
917-
934+
hvdcLineWithExtension.newExtension(OperatingStatusAdder.class).withStatus(OperatingStatus.Status.PLANNED_OUTAGE).add();
918935
ShuntCompensator shunt1 = vlnew2.newShuntCompensator()
919936
.setId("SHUNT1")
920937
.setName("SHUNT1")
@@ -1064,12 +1081,11 @@ void setUp() {
10641081
.setLowVoltageLimit(20)
10651082
.setTopologyKind(TopologyKind.NODE_BREAKER)
10661083
.add();
1067-
BusbarSection bbs1 = vlgen5.getNodeBreakerView().newBusbarSection()
1084+
vlgen5.getNodeBreakerView().newBusbarSection()
10681085
.setId("NGEN5")
10691086
.setName("NGEN5")
10701087
.setNode(0)
10711088
.add();
1072-
bbs1.newExtension(OperatingStatusAdder.class).withStatus(OperatingStatus.Status.FORCED_OUTAGE).add();
10731089
vlgen5.newExtension(IdentifiableShortCircuitAdder.class).withIpMin(0.0).withIpMax(100.0).add();
10741090
vlgen5.getNodeBreakerView()
10751091
.getBusbarSection("NGEN5")
@@ -2521,6 +2537,12 @@ void shouldReturnThreeWindingsTransformerOperatingStatusData() throws Exception
25212537
succeedingTestForElementsInfos(NETWORK_UUID, VARIANT_ID, ElementType.THREE_WINDINGS_TRANSFORMER, InfoType.OPERATING_STATUS, null, resourceToString("/3-windings-transformer-operating-status-data.json"));
25222538
}
25232539

2540+
@Test
2541+
void shouldReturnHvdcLinesOperatingStatusData() throws Exception {
2542+
succeedingTestForElementsInfos(NETWORK_UUID, null, ElementType.HVDC_LINE, InfoType.OPERATING_STATUS, null, resourceToString("/hvdc-lines-operating-status-data.json"));
2543+
succeedingTestForElementsInfos(NETWORK_UUID, VARIANT_ID, ElementType.HVDC_LINE, InfoType.OPERATING_STATUS, null, resourceToString("/hvdc-lines-operating-status-data.json"));
2544+
}
2545+
25242546
@Test
25252547
void shouldReturnGeneratorsFormData() throws Exception {
25262548
succeedingTestForElementInfosWithElementId(NETWORK_UUID, null, ElementType.GENERATOR, InfoType.FORM, "GEN", resourceToString("/generator-map-data.json"));

src/test/resources/2-windings-transformer-map-data.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
"voltageLevelId2": "VLHV1",
55
"voltageLevelName1": "VLGEN_Name",
66
"voltageLevelName2": null,
7-
"terminal1Connected": true,
8-
"terminal2Connected": true,
7+
"terminal1Connected": false,
8+
"terminal2Connected": false,
99
"operatingStatus": "PLANNED_OUTAGE",
1010
"p1": 11.1,
1111
"q1": 12.2,

src/test/resources/2-windings-transformer-operating-status-data.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
},
88
{
99
"id": "NHV2_NLOAD",
10-
"operatingStatus": "PLANNED_OUTAGE",
1110
"voltageLevelId1": "VLHV2",
1211
"voltageLevelId2": "VLLOAD"
1312
},

src/test/resources/2-windings-transformers-tab-data-without-optionals.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
"substationId2": "P1",
1212
"country1": "FR",
1313
"country2": "FR",
14-
"terminal1Connected": true,
15-
"terminal2Connected": true,
14+
"terminal1Connected": false,
15+
"terminal2Connected": false,
16+
"operatingStatus": "PLANNED_OUTAGE",
1617
"p1": 11.1,
1718
"q1": 12.2,
1819
"p2": 13.33,
@@ -59,7 +60,6 @@
5960
"substationProperties2": {
6061
"Country": "FR"
6162
},
62-
"operatingStatus": "PLANNED_OUTAGE",
6363
"country": "FR",
6464
"phaseTapChanger": {
6565
"lowTapPosition": 0,
@@ -117,15 +117,15 @@
117117
"nominalVoltage2": 150.0,
118118
"substationId1": "P2",
119119
"substationId2": "P2",
120-
"terminal1Connected": true,
120+
"terminal1Connected": false,
121121
"terminal2Connected": true,
122+
"operatingStatus": "PLANNED_OUTAGE",
122123
"p1": 5.5,
123124
"q1": 6.6,
124125
"p2": 7.77,
125126
"q2": 8.88,
126127
"r": 0.04724999999999999,
127128
"x": 4.049724365620455,
128-
"operatingStatus": "PLANNED_OUTAGE",
129129
"ratioTapChanger": {
130130
"lowTapPosition": 0,
131131
"tapPosition": 2,
@@ -193,6 +193,7 @@
193193
"country2": "FR",
194194
"terminal1Connected": true,
195195
"terminal2Connected": true,
196+
"operatingStatus": "PLANNED_OUTAGE",
196197
"r": 47.0,
197198
"x": 23.0,
198199
"selectedOperationalLimitsGroup1": {

0 commit comments

Comments
 (0)