Skip to content

Commit 07df82e

Browse files
unsettable fields in modifications by filters (#92)
Signed-off-by: Mathieu DEHARBE <[email protected]>
1 parent d5cef4a commit 07df82e

File tree

8 files changed

+126
-88
lines changed

8 files changed

+126
-88
lines changed

src/main/java/org/gridsuite/modification/dto/byfilter/equipmentfield/GeneratorField.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010
import com.powsybl.iidm.network.Generator;
1111
import com.powsybl.iidm.network.extensions.*;
1212
import com.powsybl.network.store.iidm.impl.extensions.CoordinatedReactiveControlAdderImpl;
13-
import jakarta.validation.constraints.NotNull;
1413
import org.gridsuite.modification.dto.AttributeModification;
1514
import org.gridsuite.modification.dto.OperationType;
1615
import org.gridsuite.modification.utils.ModificationUtils;
1716

1817
import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_GENERATOR_ERROR;
1918
import static org.gridsuite.modification.modifications.GeneratorModification.*;
2019
import static org.gridsuite.modification.utils.ModificationUtils.checkIsNotNegativeValue;
20+
import static org.gridsuite.modification.utils.ModificationUtils.parseDoubleOrNaNIfNull;
2121

2222
/**
2323
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
@@ -64,7 +64,7 @@ public static String getReferenceValue(Generator generator, String generatorFiel
6464
};
6565
}
6666

67-
public static void setNewValue(Generator generator, String generatorField, @NotNull String newValue) {
67+
public static void setNewValue(Generator generator, String generatorField, String newValue) {
6868
GeneratorField field = GeneratorField.valueOf(generatorField);
6969
String errorMessage = String.format(ERROR_MESSAGE, generator.getId());
7070
switch (field) {
@@ -82,7 +82,7 @@ public static void setNewValue(Generator generator, String generatorField, @NotN
8282
generator.setTargetP(Double.parseDouble(newValue));
8383
}
8484
case RATED_NOMINAL_POWER -> {
85-
Double ratedNominalPower = Double.parseDouble(newValue);
85+
Double ratedNominalPower = parseDoubleOrNaNIfNull(newValue);
8686
checkIsNotNegativeValue(errorMessage, ratedNominalPower, MODIFY_GENERATOR_ERROR, "Rated apparent power");
8787
modifyGeneratorActiveLimitsAttributes(
8888
null, null, new AttributeModification<>(ratedNominalPower, OperationType.SET), generator, null);
@@ -114,10 +114,14 @@ public static void setNewValue(Generator generator, String generatorField, @NotN
114114
MODIFY_GENERATOR_ERROR, errorMessage);
115115
}
116116
case TRANSIENT_REACTANCE -> modifyGeneratorShortCircuitAttributes(
117-
new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET),
117+
new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET),
118118
null, generator, null);
119119
case STEP_UP_TRANSFORMER_REACTANCE -> modifyGeneratorShortCircuitAttributes(
120-
null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), generator, null);
120+
null,
121+
new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET),
122+
generator,
123+
null
124+
);
121125
case Q_PERCENT -> generator.newExtension(CoordinatedReactiveControlAdderImpl.class)
122126
.withQPercent(Double.parseDouble(newValue))
123127
.add();

src/main/java/org/gridsuite/modification/dto/byfilter/equipmentfield/LineField.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_LINE_ERROR;
1818
import static org.gridsuite.modification.modifications.LineModification.*;
19+
import static org.gridsuite.modification.utils.ModificationUtils.parseDoubleOrNaNIfNull;
1920

2021
/**
2122
* @author Etienne Lesot <etienne.lesot at rte-france.com>
@@ -54,7 +55,7 @@ public static void setNewValue(Line line, String lineField, @NotNull String newV
5455
}
5556

5657
private static void setNewDoubleValue(Line line, LineField field, String newValue, String errorMessage) {
57-
Double doubleValue = Double.parseDouble(newValue);
58+
Double doubleValue = parseDoubleOrNaNIfNull(newValue);
5859
final AttributeModification<Double> attributeModification = new AttributeModification<>(doubleValue, OperationType.SET);
5960
switch (field) {
6061
case R -> {

src/main/java/org/gridsuite/modification/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.gridsuite.modification.modifications.GeneratorModification.ERROR_MESSAGE;
1919
import static org.gridsuite.modification.modifications.TwoWindingsTransformerModification.*;
2020
import static org.gridsuite.modification.utils.ModificationUtils.checkIsNotNegativeValue;
21+
import static org.gridsuite.modification.utils.ModificationUtils.parseDoubleOrNaNIfNull;
2122

2223
/**
2324
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
@@ -91,7 +92,7 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin
9192
private static void setNewDoubleValue(TwoWindingsTransformer transformer, TwoWindingsTransformerField field, String newValue, String errorMessage) {
9293
final PhaseTapChanger phaseTapChanger = transformer.getPhaseTapChanger();
9394
final RatioTapChanger ratioTapChanger = transformer.getRatioTapChanger();
94-
final Double doubleValue = Double.valueOf(newValue);
95+
final Double doubleValue = parseDoubleOrNaNIfNull(newValue);
9596
final AttributeModification<Double> attributeModification = new AttributeModification<>(doubleValue, OperationType.SET);
9697
switch (field) {
9798
case R -> {

src/main/java/org/gridsuite/modification/dto/byfilter/equipmentfield/VoltageLevelField.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99

1010
import com.powsybl.iidm.network.VoltageLevel;
1111
import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit;
12-
import jakarta.validation.constraints.NotNull;
1312
import org.gridsuite.modification.dto.AttributeModification;
1413
import org.gridsuite.modification.dto.OperationType;
1514

1615
import static org.gridsuite.modification.NetworkModificationException.Type.MODIFY_VOLTAGE_LEVEL_ERROR;
1716
import static org.gridsuite.modification.modifications.GeneratorModification.ERROR_MESSAGE;
1817
import static org.gridsuite.modification.modifications.VoltageLevelModification.*;
1918
import static org.gridsuite.modification.utils.ModificationUtils.checkIsNotNegativeValue;
19+
import static org.gridsuite.modification.utils.ModificationUtils.parseDoubleOrNaNIfNull;
2020

2121
/**
2222
* @author Seddik Yengui <Seddik.yengui at rte-france.com>
@@ -40,7 +40,7 @@ public static String getReferenceValue(VoltageLevel voltageLevel, String voltage
4040
};
4141
}
4242

43-
public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, @NotNull String newValue) {
43+
public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, String newValue) {
4444
VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField);
4545
final String errorMessage = String.format(ERROR_MESSAGE, voltageLevel.getId());
4646
switch (field) {
@@ -50,19 +50,21 @@ public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelFie
5050
modifyNominalV(voltageLevel, new AttributeModification<>(nominalVoltage, OperationType.SET), null);
5151
}
5252
case LOW_VOLTAGE_LIMIT -> {
53-
Double lowVoltageLimit = Double.valueOf(newValue);
53+
Double lowVoltageLimit = parseDoubleOrNaNIfNull(newValue);
5454
checkIsNotNegativeValue(errorMessage, lowVoltageLimit, MODIFY_VOLTAGE_LEVEL_ERROR, "Low voltage limit");
5555
modifLowVoltageLimit(voltageLevel, new AttributeModification<>(lowVoltageLimit, OperationType.SET), null);
5656
}
5757
case HIGH_VOLTAGE_LIMIT -> {
58-
Double highVoltageLimit = Double.valueOf(newValue);
58+
Double highVoltageLimit = parseDoubleOrNaNIfNull(newValue);
5959
checkIsNotNegativeValue(errorMessage, highVoltageLimit, MODIFY_VOLTAGE_LEVEL_ERROR, "High voltage limit");
60-
modifyHighVoltageLimit(voltageLevel, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null);
60+
modifyHighVoltageLimit(voltageLevel, new AttributeModification<>(highVoltageLimit, OperationType.SET), null);
6161
}
6262
case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> modifyVoltageLevelShortCircuit(
63-
new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, null, voltageLevel);
63+
new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET),
64+
null, null, voltageLevel);
6465
case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> modifyVoltageLevelShortCircuit(
65-
null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, voltageLevel);
66+
null, new AttributeModification<>(parseDoubleOrNaNIfNull(newValue), OperationType.SET),
67+
null, voltageLevel);
6668
}
6769
}
6870
}

src/main/java/org/gridsuite/modification/modifications/AbstractBranchModification.java

Lines changed: 58 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -103,63 +103,78 @@ private void modifyOperationalLimitsGroups(Branch<?> branch, List<OperationalLim
103103

104104
private void applySelectedOLGs(Branch<?> branch, List<ReportNode> side1LimitsReports, List<ReportNode> side2LimitsReports) {
105105
if (modificationInfos.getSelectedOperationalLimitsGroup1() != null) {
106-
applySelectedOLGOnSide1(branch, side1LimitsReports);
106+
modifySelectedOperationalLimitsGroup(
107+
branch,
108+
modificationInfos.getSelectedOperationalLimitsGroup1(),
109+
TwoSides.ONE,
110+
side1LimitsReports
111+
);
107112
}
108113
if (modificationInfos.getSelectedOperationalLimitsGroup2() != null) {
109-
applySelectedOLGOnSide2(branch, side2LimitsReports);
114+
modifySelectedOperationalLimitsGroup(
115+
branch,
116+
modificationInfos.getSelectedOperationalLimitsGroup2(),
117+
TwoSides.TWO,
118+
side2LimitsReports);
110119
}
111120
}
112121

113-
private void applySelectedOLGOnSide1(Branch<?> branch, List<ReportNode> reportNode) {
114-
if (Objects.requireNonNull(modificationInfos.getSelectedOperationalLimitsGroup1().getOp()) == OperationType.UNSET) {
122+
private static void applySelectedOLGOnSide1(Branch<?> branch, AttributeModification<String> modifOperationalLimitsGroup, List<ReportNode> reportNode, String newSelectedOLG) {
123+
if (!StringUtils.hasText(newSelectedOLG) || modifOperationalLimitsGroup.getOp() == OperationType.UNSET) {
115124
branch.cancelSelectedOperationalLimitsGroup1();
116-
reportNode.add(ReportNode.newRootReportNode()
117-
.withMessageTemplate("network.modification.noLimitSetSelectedOnSide1")
118-
.withSeverity(TypedValue.INFO_SEVERITY)
119-
.build());
120-
} else if (modificationInfos.getSelectedOperationalLimitsGroup1().getOp() == OperationType.SET) {
121-
String newSelectedOpLG1 = modificationInfos.getSelectedOperationalLimitsGroup1().getValue();
122-
if (StringUtils.hasText(newSelectedOpLG1) && branch.getOperationalLimitsGroup1(newSelectedOpLG1).isEmpty()) {
125+
if (reportNode != null) {
126+
reportNode.add(ReportNode.newRootReportNode()
127+
.withMessageTemplate("network.modification.noLimitSetSelectedOnSide1")
128+
.withSeverity(TypedValue.INFO_SEVERITY)
129+
.build());
130+
}
131+
} else {
132+
if (StringUtils.hasText(newSelectedOLG) && branch.getOperationalLimitsGroup1(newSelectedOLG).isEmpty() && reportNode != null) {
123133
reportNode.add(ReportNode.newRootReportNode()
124134
.withMessageTemplate("network.modification.limitSetAbsentOnSide1")
125-
.withUntypedValue("selectedOperationalLimitsGroup", newSelectedOpLG1)
135+
.withUntypedValue("selectedOperationalLimitsGroup", newSelectedOLG)
126136
.withSeverity(TypedValue.WARN_SEVERITY)
127137
.build());
128138

129139
} else {
130-
branch.setSelectedOperationalLimitsGroup1(newSelectedOpLG1);
131-
reportNode.add(ReportNode.newRootReportNode()
132-
.withMessageTemplate("network.modification.limitSetSelectedOnSide1")
133-
.withUntypedValue("selectedOperationalLimitsGroup1", newSelectedOpLG1)
134-
.withSeverity(TypedValue.INFO_SEVERITY)
135-
.build());
140+
branch.setSelectedOperationalLimitsGroup1(newSelectedOLG);
141+
if (reportNode != null) {
142+
reportNode.add(ReportNode.newRootReportNode()
143+
.withMessageTemplate("network.modification.limitSetSelectedOnSide1")
144+
.withUntypedValue("selectedOperationalLimitsGroup1", newSelectedOLG)
145+
.withSeverity(TypedValue.INFO_SEVERITY)
146+
.build());
147+
}
136148
}
137149
}
138150
}
139151

140-
private void applySelectedOLGOnSide2(Branch<?> branch, List<ReportNode> reportNode) {
141-
if (Objects.requireNonNull(modificationInfos.getSelectedOperationalLimitsGroup2().getOp()) == OperationType.UNSET) {
142-
branch.setSelectedOperationalLimitsGroup2("");
143-
reportNode.add(ReportNode.newRootReportNode()
144-
.withMessageTemplate("network.modification.noLimitSetSelectedOnSide2")
145-
.withSeverity(TypedValue.INFO_SEVERITY)
146-
.build());
147-
} else if (modificationInfos.getSelectedOperationalLimitsGroup2().getOp() == OperationType.SET) {
148-
String newSelectedOpLG = modificationInfos.getSelectedOperationalLimitsGroup2().getValue();
149-
if (StringUtils.hasText(newSelectedOpLG) && branch.getOperationalLimitsGroup2(newSelectedOpLG).isEmpty()) {
152+
private static void applySelectedOLGOnSide2(Branch<?> branch, AttributeModification<String> modifOperationalLimitsGroup, List<ReportNode> reportNode, String newSelectedOLG) {
153+
if (!StringUtils.hasText(newSelectedOLG) || modifOperationalLimitsGroup.getOp() == OperationType.UNSET) {
154+
branch.cancelSelectedOperationalLimitsGroup2();
155+
if (reportNode != null) {
156+
reportNode.add(ReportNode.newRootReportNode()
157+
.withMessageTemplate("network.modification.noLimitSetSelectedOnSide2")
158+
.withSeverity(TypedValue.INFO_SEVERITY)
159+
.build());
160+
}
161+
} else {
162+
if (StringUtils.hasText(newSelectedOLG) && branch.getOperationalLimitsGroup2(newSelectedOLG).isEmpty() && reportNode != null) {
150163
reportNode.add(ReportNode.newRootReportNode()
151164
.withMessageTemplate("network.modification.limitSetAbsentOnSide2")
152-
.withUntypedValue("selectedOperationalLimitsGroup2", newSelectedOpLG)
165+
.withUntypedValue("selectedOperationalLimitsGroup", newSelectedOLG)
153166
.withSeverity(TypedValue.WARN_SEVERITY)
154167
.build());
155168

156169
} else {
157-
branch.setSelectedOperationalLimitsGroup2(newSelectedOpLG);
158-
reportNode.add(ReportNode.newRootReportNode()
159-
.withMessageTemplate("network.modification.limitSetSelectedOnSide2")
160-
.withUntypedValue("selectedOperationalLimitsGroup2", newSelectedOpLG)
161-
.withSeverity(TypedValue.INFO_SEVERITY)
162-
.build());
170+
branch.setSelectedOperationalLimitsGroup2(newSelectedOLG);
171+
if (reportNode != null) {
172+
reportNode.add(ReportNode.newRootReportNode()
173+
.withMessageTemplate("network.modification.limitSetSelectedOnSide2")
174+
.withUntypedValue("selectedOperationalLimitsGroup2", newSelectedOLG)
175+
.withSeverity(TypedValue.INFO_SEVERITY)
176+
.build());
177+
}
163178
}
164179
}
165180
}
@@ -613,30 +628,18 @@ private void modifyBranchVoltageLevelBusOrBusBarSectionAttributesSide2(BranchMod
613628
);
614629
}
615630

616-
public static void modifySelectedOperationalLimitsGroup(Branch<?> branch, AttributeModification<String> modifOperationalLimitsGroup,
617-
TwoSides side, ReportNode reportNode) {
631+
public static void modifySelectedOperationalLimitsGroup(
632+
Branch<?> branch,
633+
AttributeModification<String> modifOperationalLimitsGroup,
634+
TwoSides side,
635+
List<ReportNode> reportNode) {
618636
Objects.requireNonNull(side);
619637
if (modifOperationalLimitsGroup != null) {
620-
String value = modifOperationalLimitsGroup.getValue();
621-
String previousSelectedLimitsGroup = null;
638+
String newSelectedOLG = modifOperationalLimitsGroup.getValue();
622639
if (side == TwoSides.ONE) {
623-
previousSelectedLimitsGroup = branch.getSelectedOperationalLimitsGroupId1().orElse(null);
624-
if (!StringUtils.hasText(value)) {
625-
branch.cancelSelectedOperationalLimitsGroup1();
626-
} else {
627-
branch.setSelectedOperationalLimitsGroup1(value);
628-
}
640+
applySelectedOLGOnSide1(branch, modifOperationalLimitsGroup, reportNode, newSelectedOLG);
629641
} else if (side == TwoSides.TWO) {
630-
previousSelectedLimitsGroup = branch.getSelectedOperationalLimitsGroupId2().orElse(null);
631-
if (!StringUtils.hasText(value)) {
632-
branch.cancelSelectedOperationalLimitsGroup2();
633-
} else {
634-
branch.setSelectedOperationalLimitsGroup2(value);
635-
}
636-
}
637-
if (reportNode != null) {
638-
insertReportNode(reportNode, ModificationUtils.getInstance().buildModificationReport(previousSelectedLimitsGroup,
639-
modifOperationalLimitsGroup.getValue(), "selected operational limits group side " + side.getNum()));
642+
applySelectedOLGOnSide2(branch, modifOperationalLimitsGroup, reportNode, newSelectedOLG);
640643
}
641644
}
642645
}

0 commit comments

Comments
 (0)