From 63152c7dd0200317944da901c55f6ccc8d8a9be5 Mon Sep 17 00:00:00 2001 From: Florent MILLOT Date: Thu, 14 Dec 2023 16:50:25 +0100 Subject: [PATCH 1/5] Implement the check method when necessary instead of checking data inside the apply method. Individually check the tabular modifications. Signed-off-by: Florent MILLOT --- .../modifications/BranchStatusModification.java | 10 ++++++++-- .../EquipmentAttributeModification.java | 7 ++++++- .../server/modifications/GeneratorModification.java | 6 +++--- .../server/modifications/LineModification.java | 7 ++++++- .../server/modifications/LoadModification.java | 13 ++++++++++--- .../modifications/SubstationModification.java | 7 ++++++- .../server/modifications/TabularModification.java | 8 +++++--- .../modifications/VoltageLevelModification.java | 6 +++++- 8 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/BranchStatusModification.java b/src/main/java/org/gridsuite/modification/server/modifications/BranchStatusModification.java index c4ebc065b..a9b5f662e 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/BranchStatusModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/BranchStatusModification.java @@ -23,8 +23,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.gridsuite.modification.server.NetworkModificationException.Type.BRANCH_NOT_FOUND; import static org.gridsuite.modification.server.NetworkModificationException.Type.BRANCH_ACTION_ERROR; +import static org.gridsuite.modification.server.NetworkModificationException.Type.BRANCH_NOT_FOUND; import static org.gridsuite.modification.server.modifications.ModificationUtils.distinctByKey; /** @@ -40,12 +40,18 @@ public BranchStatusModification(BranchStatusModificationInfos modificationInfos) } @Override - public void apply(Network network, Reporter subReporter) { + public void check(Network network) throws NetworkModificationException { String branchId = modificationInfos.getEquipmentId(); Branch branch = network.getBranch(branchId); if (branch == null) { throw new NetworkModificationException(BRANCH_NOT_FOUND, branchId); } + } + + @Override + public void apply(Network network, Reporter subReporter) { + String branchId = modificationInfos.getEquipmentId(); + Branch branch = network.getBranch(branchId); String branchTypeName = branch.getType() == IdentifiableType.LINE ? "Line" : "2 windings transformer"; switch (modificationInfos.getAction()) { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModification.java b/src/main/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModification.java index d639a68a3..172cd3ee2 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModification.java @@ -30,7 +30,7 @@ public EquipmentAttributeModification(EquipmentAttributeModificationInfos modifi } @Override - public void apply(Network network, Reporter subReporter) { + public void check(Network network) throws NetworkModificationException { Identifiable identifiable = network.getIdentifiable(modificationInfos.getEquipmentId()); if (identifiable == null) { throw new NetworkModificationException(EQUIPMENT_NOT_FOUND, modificationInfos.getEquipmentId()); @@ -38,6 +38,11 @@ public void apply(Network network, Reporter subReporter) { if (identifiable.getType() != modificationInfos.getEquipmentType()) { throw new NetworkModificationException(WRONG_EQUIPMENT_TYPE, String.format("Type of '%s' is not %s but %s", modificationInfos.getEquipmentId(), modificationInfos.getEquipmentType(), identifiable.getType())); } + } + + @Override + public void apply(Network network, Reporter subReporter) { + Identifiable identifiable = network.getIdentifiable(modificationInfos.getEquipmentId()); if (identifiable instanceof Switch) { changeSwitchAttribute((Switch) identifiable, modificationInfos.getEquipmentAttributeName(), modificationInfos.getEquipmentAttributeValue(), subReporter); } else if (identifiable instanceof Injection) { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java b/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java index 3107a6c2a..fc93a4ef7 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java @@ -43,6 +43,9 @@ public GeneratorModification(GeneratorModificationInfos modificationInfos) { @Override public void check(Network network) throws NetworkModificationException { + if (modificationInfos == null) { + throw new NetworkModificationException(MODIFY_GENERATOR_ERROR, "Missing required attributes to modify the equipment"); + } if (network.getGenerator(modificationInfos.getEquipmentId()) != null) { Generator generator = ModificationUtils.getInstance().getGenerator(network, modificationInfos.getEquipmentId()); // check min max reactive limits @@ -86,9 +89,6 @@ private void checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(Generato @Override public void apply(Network network, Reporter subReporter) { - if (modificationInfos == null) { - throw new NetworkModificationException(MODIFY_GENERATOR_ERROR, "Missing required attributes to modify the equipment"); - } Generator generator = ModificationUtils.getInstance().getGenerator(network, modificationInfos.getEquipmentId()); // modify the generator in the network modifyGenerator(generator, modificationInfos, subReporter); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/LineModification.java b/src/main/java/org/gridsuite/modification/server/modifications/LineModification.java index 648e1c2f4..70a356b90 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/LineModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/LineModification.java @@ -28,12 +28,17 @@ public LineModification(LineModificationInfos modificationInfos) { } @Override - public void apply(Network network, Reporter subReporter) { + public void check(Network network) throws NetworkModificationException { Line line = network.getLine(modificationInfos.getEquipmentId()); if (line == null) { throw new NetworkModificationException(LINE_NOT_FOUND, "Line " + modificationInfos.getEquipmentId() + " does not exist in network"); } + } + + @Override + public void apply(Network network, Reporter subReporter) { + Line line = network.getLine(modificationInfos.getEquipmentId()); // modify the line in the network modifyLine(line, modificationInfos, subReporter); } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/LoadModification.java b/src/main/java/org/gridsuite/modification/server/modifications/LoadModification.java index 6aa03b748..9f96caa68 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/LoadModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/LoadModification.java @@ -9,11 +9,13 @@ import com.powsybl.commons.reporter.Report; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.TypedValue; -import com.powsybl.iidm.network.*; -import static org.gridsuite.modification.server.NetworkModificationException.Type.LOAD_NOT_FOUND; +import com.powsybl.iidm.network.Load; +import com.powsybl.iidm.network.Network; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.LoadModificationInfos; +import static org.gridsuite.modification.server.NetworkModificationException.Type.LOAD_NOT_FOUND; + /** * @author Ayoub Labidi */ @@ -26,12 +28,17 @@ public LoadModification(LoadModificationInfos modificationInfos) { } @Override - public void apply(Network network, Reporter subReporter) { + public void check(Network network) throws NetworkModificationException { Load load = network.getLoad(modificationInfos.getEquipmentId()); if (load == null) { throw new NetworkModificationException(LOAD_NOT_FOUND, "Load " + modificationInfos.getEquipmentId() + " does not exist in network"); } + } + + @Override + public void apply(Network network, Reporter subReporter) { + Load load = network.getLoad(modificationInfos.getEquipmentId()); // modify the load in the network modifyLoad(load, modificationInfos, subReporter); } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/SubstationModification.java b/src/main/java/org/gridsuite/modification/server/modifications/SubstationModification.java index 32f72c668..d572acf36 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/SubstationModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/SubstationModification.java @@ -28,12 +28,17 @@ public SubstationModification(SubstationModificationInfos modificationInfos) { } @Override - public void apply(Network network, Reporter subReporter) { + public void check(Network network) throws NetworkModificationException { Substation station = network.getSubstation(modificationInfos.getEquipmentId()); if (station == null) { throw new NetworkModificationException(SUBSTATION_NOT_FOUND, "Substation " + modificationInfos.getEquipmentId() + " does not exist in network"); } + } + + @Override + public void apply(Network network, Reporter subReporter) { + Substation station = network.getSubstation(modificationInfos.getEquipmentId()); // modify the substation in the network subReporter.report(Report.builder() diff --git a/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java b/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java index 2296e8e14..bcf4b2b8d 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java @@ -45,13 +45,15 @@ public void check(Network network) throws NetworkModificationException { @Override public void apply(Network network, Reporter subReporter) { AtomicInteger applicationFailuresCount = new AtomicInteger(0); - modificationInfos.getModifications().forEach(modification -> { + modificationInfos.getModifications().forEach(modificationInfos -> { try { - modification.toModification().apply(network); + AbstractModification modification = modificationInfos.toModification(); + modification.check(network); + modification.apply(network); } catch (PowsyblException e) { applicationFailuresCount.incrementAndGet(); subReporter.report(Report.builder() - .withKey(modification.getType().name() + applicationFailuresCount.get()) + .withKey(modificationInfos.getType().name() + applicationFailuresCount.get()) .withDefaultMessage(e.getMessage()) .withSeverity(TypedValue.WARN_SEVERITY) .build()); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/VoltageLevelModification.java b/src/main/java/org/gridsuite/modification/server/modifications/VoltageLevelModification.java index a585f5aed..1d97f4fbb 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/VoltageLevelModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/VoltageLevelModification.java @@ -34,13 +34,17 @@ public VoltageLevelModification(VoltageLevelModificationInfos voltageLevelModifi } @Override - public void apply(Network network, Reporter subReporter) { + public void check(Network network) throws NetworkModificationException { VoltageLevel voltageLevel = network.getVoltageLevel(modificationInfos.getEquipmentId()); if (voltageLevel == null) { throw new NetworkModificationException(VOLTAGE_LEVEL_NOT_FOUND, String.format("Voltage level %s does not exist in network", modificationInfos.getEquipmentId())); } + } + @Override + public void apply(Network network, Reporter subReporter) { + VoltageLevel voltageLevel = network.getVoltageLevel(modificationInfos.getEquipmentId()); modifyVoltageLevel(subReporter, voltageLevel); } From a2bc01b7dff289bb2caa82bfe64e0ef68280727f Mon Sep 17 00:00:00 2001 From: Florent MILLOT Date: Tue, 19 Dec 2023 17:08:57 +0100 Subject: [PATCH 2/5] Forgot somes Signed-off-by: Florent MILLOT --- .../server/modifications/BatteryModification.java | 6 +++--- .../server/modifications/EquipmentDeletion.java | 6 +++++- .../modification/server/modifications/GroovyScript.java | 6 +++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java b/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java index be532862e..7b1115869 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java @@ -41,6 +41,9 @@ public BatteryModification(BatteryModificationInfos modificationInfos) { @Override public void check(Network network) throws NetworkModificationException { + if (modificationInfos == null) { + throw new NetworkModificationException(MODIFY_BATTERY_ERROR, "Missing required attributes to modify the equipment"); + } if (network.getBattery(modificationInfos.getEquipmentId()) == null) { throw new NetworkModificationException(BATTERY_NOT_FOUND, modificationInfos.getEquipmentId()); } @@ -74,9 +77,6 @@ private void checkActivePowerZeroOrBetweenMinAndMaxActivePowerBattery(BatteryMod @Override public void apply(Network network, Reporter subReporter) { - if (modificationInfos == null) { - throw new NetworkModificationException(MODIFY_BATTERY_ERROR, "Missing required attributes to modify the equipment"); - } Battery battery = ModificationUtils.getInstance().getBattery(network, modificationInfos.getEquipmentId()); // modify the battery in the network modifyBattery(battery, modificationInfos, subReporter); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/EquipmentDeletion.java b/src/main/java/org/gridsuite/modification/server/modifications/EquipmentDeletion.java index 9c85be2ae..274c207ad 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/EquipmentDeletion.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/EquipmentDeletion.java @@ -33,12 +33,16 @@ public EquipmentDeletion(EquipmentDeletionInfos modificationInfos) { } @Override - public void apply(Network network, Reporter subReporter) { + public void check(Network network) throws NetworkModificationException { Identifiable identifiable = ModificationUtils.getInstance().getEquipmentByIdentifiableType(network, modificationInfos.getEquipmentType(), modificationInfos.getEquipmentId()); if (identifiable == null) { throw new NetworkModificationException(EQUIPMENT_NOT_FOUND, "Equipment with id=" + modificationInfos.getEquipmentId() + " not found or of bad type"); } + } + @Override + public void apply(Network network, Reporter subReporter) { + Identifiable identifiable = ModificationUtils.getInstance().getEquipmentByIdentifiableType(network, modificationInfos.getEquipmentType(), modificationInfos.getEquipmentId()); if (identifiable instanceof Connectable) { new RemoveFeederBay(modificationInfos.getEquipmentId()).apply(network, true, subReporter); } else if (identifiable instanceof HvdcLine) { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/GroovyScript.java b/src/main/java/org/gridsuite/modification/server/modifications/GroovyScript.java index 10d73af77..7c0cbd8df 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/GroovyScript.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/GroovyScript.java @@ -32,10 +32,14 @@ public GroovyScript(GroovyScriptInfos modificationInfos) { } @Override - public void apply(Network network, Reporter subReporter) { + public void check(Network network) throws NetworkModificationException { if (StringUtils.isBlank(modificationInfos.getScript())) { throw new NetworkModificationException(GROOVY_SCRIPT_EMPTY); } + } + + @Override + public void apply(Network network, Reporter subReporter) { var conf = new CompilerConfiguration(); var binding = new Binding(); binding.setProperty("network", network); From 14edf4f3f33a8f8cbb13125d24f91856b4487abe Mon Sep 17 00:00:00 2001 From: Florent MILLOT Date: Wed, 20 Dec 2023 10:31:07 +0100 Subject: [PATCH 3/5] Refactor forEach loop variable name to 'modifInfos' in TabularModification.java. Signed-off-by: Florent MILLOT --- .../server/modifications/TabularModification.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java b/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java index 9e4ca36ae..973ad3558 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java @@ -45,15 +45,15 @@ public void check(Network network) throws NetworkModificationException { @Override public void apply(Network network, Reporter subReporter) { AtomicInteger applicationFailuresCount = new AtomicInteger(0); - modificationInfos.getModifications().forEach(modificationInfos -> { + modificationInfos.getModifications().forEach(modifInfos -> { try { - AbstractModification modification = modificationInfos.toModification(); + AbstractModification modification = modifInfos.toModification(); modification.check(network); modification.apply(network); } catch (PowsyblException e) { applicationFailuresCount.incrementAndGet(); subReporter.report(Report.builder() - .withKey(modificationInfos.getType().name() + applicationFailuresCount.get()) + .withKey(modifInfos.getType().name() + applicationFailuresCount.get()) .withDefaultMessage(e.getMessage()) .withSeverity(TypedValue.WARN_SEVERITY) .build()); From d0b75cd77a94247757c65f72172579598cca3db8 Mon Sep 17 00:00:00 2001 From: Florent MILLOT Date: Thu, 21 Dec 2023 19:01:29 +0100 Subject: [PATCH 4/5] Fix test Signed-off-by: Florent MILLOT --- .../server/modifications/BatteryModification.java | 2 +- .../server/modifications/GeneratorModification.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java b/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java index 7b1115869..f9e9ad0c6 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java @@ -45,7 +45,7 @@ public void check(Network network) throws NetworkModificationException { throw new NetworkModificationException(MODIFY_BATTERY_ERROR, "Missing required attributes to modify the equipment"); } if (network.getBattery(modificationInfos.getEquipmentId()) == null) { - throw new NetworkModificationException(BATTERY_NOT_FOUND, modificationInfos.getEquipmentId()); + throw new NetworkModificationException(BATTERY_NOT_FOUND, "Battery " + modificationInfos.getEquipmentId() + " does not exist in network"); } Battery battery = network.getBattery(modificationInfos.getEquipmentId()); String errorMessage = "Battery '" + modificationInfos.getEquipmentId() + "' : "; diff --git a/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java b/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java index c01d8d9c8..b6d8d616f 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java @@ -24,7 +24,7 @@ import java.util.Collection; import java.util.List; -import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFY_GENERATOR_ERROR; +import static org.gridsuite.modification.server.NetworkModificationException.Type.*; /** * @author Ayoub Labidi @@ -46,6 +46,9 @@ public void check(Network network) throws NetworkModificationException { if (modificationInfos == null) { throw new NetworkModificationException(MODIFY_GENERATOR_ERROR, "Missing required attributes to modify the equipment"); } + if (network.getGenerator(modificationInfos.getEquipmentId()) == null) { + throw new NetworkModificationException(GENERATOR_NOT_FOUND, "Generator " + modificationInfos.getEquipmentId() + " does not exist in network"); + } if (network.getGenerator(modificationInfos.getEquipmentId()) != null) { Generator generator = ModificationUtils.getInstance().getGenerator(network, modificationInfos.getEquipmentId()); // check min max reactive limits From 01623e12d824f6f2c60f3f560a22bfe0c2fd328a Mon Sep 17 00:00:00 2001 From: Florent MILLOT Date: Fri, 22 Dec 2023 11:22:01 +0100 Subject: [PATCH 5/5] Clean code Signed-off-by: Florent MILLOT --- .../modifications/BatteryModification.java | 6 +-- .../modifications/GeneratorModification.java | 49 +++++++++---------- 2 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java b/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java index f9e9ad0c6..065f5354b 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java @@ -22,7 +22,6 @@ import java.util.Collection; import java.util.List; -import static org.gridsuite.modification.server.NetworkModificationException.Type.BATTERY_NOT_FOUND; import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFY_BATTERY_ERROR; /** * @author Ghazwa Rehili @@ -44,10 +43,7 @@ public void check(Network network) throws NetworkModificationException { if (modificationInfos == null) { throw new NetworkModificationException(MODIFY_BATTERY_ERROR, "Missing required attributes to modify the equipment"); } - if (network.getBattery(modificationInfos.getEquipmentId()) == null) { - throw new NetworkModificationException(BATTERY_NOT_FOUND, "Battery " + modificationInfos.getEquipmentId() + " does not exist in network"); - } - Battery battery = network.getBattery(modificationInfos.getEquipmentId()); + Battery battery = ModificationUtils.getInstance().getBattery(network, modificationInfos.getEquipmentId()); String errorMessage = "Battery '" + modificationInfos.getEquipmentId() + "' : "; if (battery.getReactiveLimits().getKind() == ReactiveLimitsKind.MIN_MAX && (modificationInfos.getMinimumReactivePower() != null || modificationInfos.getMaximumReactivePower() != null)) { MinMaxReactiveLimits minMaxReactiveLimits = battery.getReactiveLimits(MinMaxReactiveLimits.class); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java b/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java index b6d8d616f..2a34c1bfd 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java @@ -46,35 +46,30 @@ public void check(Network network) throws NetworkModificationException { if (modificationInfos == null) { throw new NetworkModificationException(MODIFY_GENERATOR_ERROR, "Missing required attributes to modify the equipment"); } - if (network.getGenerator(modificationInfos.getEquipmentId()) == null) { - throw new NetworkModificationException(GENERATOR_NOT_FOUND, "Generator " + modificationInfos.getEquipmentId() + " does not exist in network"); + Generator generator = ModificationUtils.getInstance().getGenerator(network, modificationInfos.getEquipmentId()); + // check min max reactive limits + String errorMessage = "Generator '" + modificationInfos.getEquipmentId() + "' : "; + if (generator.getReactiveLimits().getKind() == ReactiveLimitsKind.MIN_MAX && (modificationInfos.getMinimumReactivePower() != null || modificationInfos.getMaximumReactivePower() != null)) { + MinMaxReactiveLimits minMaxReactiveLimits = generator.getReactiveLimits(MinMaxReactiveLimits.class); + ModificationUtils.getInstance().checkMaxReactivePowerGreaterThanMinReactivePower(minMaxReactiveLimits, modificationInfos.getMinimumReactivePower(), modificationInfos.getMaximumReactivePower(), MODIFY_GENERATOR_ERROR, errorMessage); } - if (network.getGenerator(modificationInfos.getEquipmentId()) != null) { - Generator generator = ModificationUtils.getInstance().getGenerator(network, modificationInfos.getEquipmentId()); - // check min max reactive limits - String errorMessage = "Generator '" + modificationInfos.getEquipmentId() + "' : "; - if (generator.getReactiveLimits().getKind() == ReactiveLimitsKind.MIN_MAX && (modificationInfos.getMinimumReactivePower() != null || modificationInfos.getMaximumReactivePower() != null)) { - MinMaxReactiveLimits minMaxReactiveLimits = generator.getReactiveLimits(MinMaxReactiveLimits.class); - ModificationUtils.getInstance().checkMaxReactivePowerGreaterThanMinReactivePower(minMaxReactiveLimits, modificationInfos.getMinimumReactivePower(), modificationInfos.getMaximumReactivePower(), MODIFY_GENERATOR_ERROR, errorMessage); - } - // check reactive capability curve limits - Collection points = generator.getReactiveLimits().getKind() == ReactiveLimitsKind.CURVE ? generator.getReactiveLimits(ReactiveCapabilityCurve.class).getPoints() : List.of(); - List generatorPoints = new ArrayList<>(points); - List modificationPoints = modificationInfos.getReactiveCapabilityCurvePoints(); - if (!CollectionUtils.isEmpty(points) && modificationPoints != null) { - ModificationUtils.getInstance().checkMaxQGreaterThanMinQ(generatorPoints, modificationPoints, MODIFY_GENERATOR_ERROR, errorMessage); - } - // check regulated terminal - if (modificationInfos.getRegulatingTerminalId() != null && modificationInfos.getRegulatingTerminalType() != null && - modificationInfos.getRegulatingTerminalVlId() != null) { - VoltageLevel voltageLevel = ModificationUtils.getInstance().getVoltageLevel(network, modificationInfos.getRegulatingTerminalVlId().getValue()); - ModificationUtils.getInstance().getTerminalFromIdentifiable(voltageLevel.getNetwork(), - modificationInfos.getRegulatingTerminalId().getValue(), - modificationInfos.getRegulatingTerminalType().getValue(), - modificationInfos.getRegulatingTerminalVlId().getValue()); - } - checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(modificationInfos, generator, MODIFY_GENERATOR_ERROR, errorMessage); + // check reactive capability curve limits + Collection points = generator.getReactiveLimits().getKind() == ReactiveLimitsKind.CURVE ? generator.getReactiveLimits(ReactiveCapabilityCurve.class).getPoints() : List.of(); + List generatorPoints = new ArrayList<>(points); + List modificationPoints = modificationInfos.getReactiveCapabilityCurvePoints(); + if (!CollectionUtils.isEmpty(points) && modificationPoints != null) { + ModificationUtils.getInstance().checkMaxQGreaterThanMinQ(generatorPoints, modificationPoints, MODIFY_GENERATOR_ERROR, errorMessage); + } + // check regulated terminal + if (modificationInfos.getRegulatingTerminalId() != null && modificationInfos.getRegulatingTerminalType() != null && + modificationInfos.getRegulatingTerminalVlId() != null) { + VoltageLevel voltageLevel = ModificationUtils.getInstance().getVoltageLevel(network, modificationInfos.getRegulatingTerminalVlId().getValue()); + ModificationUtils.getInstance().getTerminalFromIdentifiable(voltageLevel.getNetwork(), + modificationInfos.getRegulatingTerminalId().getValue(), + modificationInfos.getRegulatingTerminalType().getValue(), + modificationInfos.getRegulatingTerminalVlId().getValue()); } + checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(modificationInfos, generator, MODIFY_GENERATOR_ERROR, errorMessage); } private void checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(GeneratorModificationInfos modificationInfos, Generator generator, NetworkModificationException.Type exceptionType, String errorMessage) {