diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/BatteryField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/BatteryField.java index 117db9718..e8f5d93c0 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/BatteryField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/BatteryField.java @@ -64,7 +64,8 @@ public static void setNewValue(Battery battery, String batteryField, @NotNull St ActivePowerControlAdder activePowerControlAdder = battery.newExtension(ActivePowerControlAdder.class); ModificationUtils.getInstance().modifyActivePowerControlAttributes( activePowerControl, activePowerControlAdder, null, - new AttributeModification<>(Float.parseFloat(newValue), OperationType.SET), null, null); + new AttributeModification<>(Float.parseFloat(newValue), OperationType.SET), null, + null, MODIFY_BATTERY_ERROR, "Battery '" + battery.getId() + "' : "); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/GeneratorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/GeneratorField.java index 028c313f4..755e7d571 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/GeneratorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/GeneratorField.java @@ -98,7 +98,8 @@ public static void setNewValue(Generator generator, String generatorField, @NotN ActivePowerControl activePowerControl = generator.getExtension(ActivePowerControl.class); ActivePowerControlAdder activePowerControlAdder = generator.newExtension(ActivePowerControlAdder.class); ModificationUtils.getInstance().modifyActivePowerControlAttributes(activePowerControl, activePowerControlAdder, null, - new AttributeModification<>(Float.parseFloat(newValue), OperationType.SET), null, null); + new AttributeModification<>(Float.parseFloat(newValue), OperationType.SET), null, null, + MODIFY_GENERATOR_ERROR, "Generator '" + generator.getId() + "' : "); } case TRANSIENT_REACTANCE -> modifyGeneratorShortCircuitAttributes( new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), diff --git a/src/main/java/org/gridsuite/modification/server/modifications/BatteryCreation.java b/src/main/java/org/gridsuite/modification/server/modifications/BatteryCreation.java index 10345a8e2..e7a7d6ea8 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/BatteryCreation.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/BatteryCreation.java @@ -18,6 +18,7 @@ import java.util.List; import static org.gridsuite.modification.server.NetworkModificationException.Type.BATTERY_ALREADY_EXISTS; +import static org.gridsuite.modification.server.NetworkModificationException.Type.CREATE_BATTERY_ERROR; import static org.gridsuite.modification.server.modifications.ModificationUtils.*; /** @@ -38,6 +39,7 @@ public void check(Network network) throws NetworkModificationException { if (network.getBattery(modificationInfos.getEquipmentId()) != null) { throw new NetworkModificationException(BATTERY_ALREADY_EXISTS, modificationInfos.getEquipmentId()); } + String errorMessage = "Battery '" + modificationInfos.getEquipmentId() + "' : "; // check connectivity ModificationUtils.getInstance() @@ -49,6 +51,8 @@ public void check(Network network) throws NetworkModificationException { modificationInfos.getErrorType(), modificationInfos.getEquipmentId(), "Battery"); + + ModificationUtils.getInstance().checkActivePowerControl(modificationInfos.getParticipate(), modificationInfos.getDroop(), CREATE_BATTERY_ERROR, errorMessage); } @Override 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 15d9bd3ad..b4758ff66 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/BatteryModification.java @@ -25,6 +25,7 @@ import java.util.Collection; import java.util.List; +import static org.gridsuite.modification.server.NetworkModificationException.Type.CREATE_BATTERY_ERROR; import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFY_BATTERY_ERROR; import static org.gridsuite.modification.server.modifications.ModificationUtils.insertReportNode; @@ -171,7 +172,8 @@ public static ReportNode modifyBatteryActivePowerControlAttributes(AttributeModi ReportNode subReportNodeSetpoints) { ActivePowerControl activePowerControl = battery.getExtension(ActivePowerControl.class); ActivePowerControlAdder activePowerControlAdder = battery.newExtension(ActivePowerControlAdder.class); - return ModificationUtils.getInstance().modifyActivePowerControlAttributes(activePowerControl, activePowerControlAdder, participate, droop, subReportNode, subReportNodeSetpoints); + return ModificationUtils.getInstance().modifyActivePowerControlAttributes(activePowerControl, activePowerControlAdder, + participate, droop, subReportNode, subReportNodeSetpoints, CREATE_BATTERY_ERROR, "Battery '" + battery.getId() + "' : "); } private ReportNode modifyBatteryConnectivityAttributes(BatteryModificationInfos modificationInfos, diff --git a/src/main/java/org/gridsuite/modification/server/modifications/GeneratorCreation.java b/src/main/java/org/gridsuite/modification/server/modifications/GeneratorCreation.java index 8931f4a3d..3baaa915b 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/GeneratorCreation.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/GeneratorCreation.java @@ -20,7 +20,7 @@ import java.util.ArrayList; import java.util.List; -import static org.gridsuite.modification.server.NetworkModificationException.Type.GENERATOR_ALREADY_EXISTS; +import static org.gridsuite.modification.server.NetworkModificationException.Type.*; import static org.gridsuite.modification.server.modifications.ModificationUtils.*; /** @@ -41,6 +41,7 @@ public void check(Network network) throws NetworkModificationException { if (network.getGenerator(modificationInfos.getEquipmentId()) != null) { throw new NetworkModificationException(GENERATOR_ALREADY_EXISTS, modificationInfos.getEquipmentId()); } + String errorMessage = "Generator '" + modificationInfos.getEquipmentId() + "' : "; // check connectivity ModificationUtils.getInstance().controlConnectivity(network, modificationInfos.getVoltageLevelId(), @@ -58,6 +59,9 @@ public void check(Network network) throws NetworkModificationException { modificationInfos.getRegulatingTerminalId(), modificationInfos.getRegulatingTerminalType(), modificationInfos.getRegulatingTerminalVlId()); + + ModificationUtils.getInstance().checkActivePowerControl(modificationInfos.getParticipate(), + modificationInfos.getDroop(), CREATE_GENERATOR_ERROR, errorMessage); } @Override 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 71a4508b9..8160264c8 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/GeneratorModification.java @@ -56,6 +56,7 @@ public void check(Network network) throws NetworkModificationException { modificationInfos.getRegulatingTerminalVlId().getValue()); } checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(modificationInfos, generator, MODIFY_GENERATOR_ERROR, errorMessage); + checkActivePowerRegulation(modificationInfos, generator, MODIFY_GENERATOR_ERROR, errorMessage); } private void checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(GeneratorModificationInfos modificationInfos, Generator generator, NetworkModificationException.Type exceptionType, String errorMessage) { @@ -71,6 +72,15 @@ private void checkActivePowerZeroOrBetweenMinAndMaxActivePowerGenerator(Generato ); } + private void checkActivePowerRegulation(GeneratorModificationInfos modificationInfos, Generator generator, NetworkModificationException.Type exceptionType, String errorMessage) { +// ModificationUtils.getInstance().checkActivePowerControl( +// modificationInfos.getParticipate() != null ? modificationInfos.getParticipate().getValue() : null, +// modificationInfos.getDroop() != null ? modificationInfos.getDroop().getValue() : null, +// exceptionType, +// errorMessage +// ); + } + @Override public void apply(Network network, ReportNode subReportNode) { Generator generator = ModificationUtils.getInstance().getGenerator(network, modificationInfos.getEquipmentId()); @@ -210,7 +220,9 @@ private ReportNode modifyGeneratorActivePowerControlAttributes(GeneratorModifica Generator generator, ReportNode subReportNode, ReportNode subReportNodeSetpoints) { ActivePowerControl activePowerControl = generator.getExtension(ActivePowerControl.class); ActivePowerControlAdder activePowerControlAdder = generator.newExtension(ActivePowerControlAdder.class); - return ModificationUtils.getInstance().modifyActivePowerControlAttributes(activePowerControl, activePowerControlAdder, modificationInfos.getParticipate(), modificationInfos.getDroop(), subReportNode, subReportNodeSetpoints); + return ModificationUtils.getInstance().modifyActivePowerControlAttributes(activePowerControl, activePowerControlAdder, + modificationInfos.getParticipate(), modificationInfos.getDroop(), subReportNode, subReportNodeSetpoints, + MODIFY_GENERATOR_ERROR, "Generator '" + modificationInfos.getEquipmentId() + "' : "); } private void modifyGeneratorStartUpAttributes(GeneratorModificationInfos modificationInfos, Generator generator, diff --git a/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java b/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java index a2f5a4833..f4af74e8a 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java @@ -1160,18 +1160,29 @@ private void modifyExistingActivePowerControl(ActivePowerControl activePowerC private void createNewActivePowerControl(ActivePowerControlAdder adder, AttributeModification participateInfo, AttributeModification droopInfo, - List reports) { - boolean participate = participateInfo != null ? participateInfo.getValue() : false; - adder.withParticipate(participate); - if (participateInfo != null && reports != null) { - reports.add(buildModificationReport(null, participate, "Participate")); + List reports, + NetworkModificationException.Type exceptionType, + String errorMessage) { + Boolean participate = participateInfo == null ? null : participateInfo.getValue(); + Float droop = droopInfo == null ? null : droopInfo.getValue(); + checkActivePowerControl(participate, droop, exceptionType, errorMessage); + if (participate != null && droop != null) { + adder.withParticipate(participate); + if (reports != null) { + reports.add(buildModificationReport(null, participate, "Participate")); + } + adder.withDroop(droop); + if (reports != null) { + reports.add(buildModificationReport(Double.NaN, droop, "Droop")); + } + adder.add(); } - double droop = droopInfo != null ? droopInfo.getValue() : Double.NaN; - adder.withDroop(droop); - if (droopInfo != null && reports != null) { - reports.add(buildModificationReport(Double.NaN, droop, "Droop")); + } + + public void checkActivePowerControl(Boolean participate, Float droop, NetworkModificationException.Type exceptionType, String errorMessage) { + if (Boolean.TRUE.equals(participate) && droop == null) { + throw new NetworkModificationException(exceptionType, errorMessage + "for creation if participate is true, droop can not be null"); } - adder.add(); } public ReportNode modifyActivePowerControlAttributes(ActivePowerControl activePowerControl, @@ -1179,12 +1190,14 @@ public ReportNode modifyActivePowerControlAttributes(ActivePowerControl activ AttributeModification participateInfo, AttributeModification droopInfo, ReportNode subReportNode, - ReportNode subReporterSetpoints) { + ReportNode subReporterSetpoints, + NetworkModificationException.Type exceptionType, + String errorMessage) { List reports = new ArrayList<>(); if (activePowerControl != null) { modifyExistingActivePowerControl(activePowerControl, participateInfo, droopInfo, reports); } else { - createNewActivePowerControl(activePowerControlAdder, participateInfo, droopInfo, reports); + createNewActivePowerControl(activePowerControlAdder, participateInfo, droopInfo, reports, exceptionType, errorMessage); } if (subReportNode != null) { ReportNode subReportNodeSetpoints2 = subReporterSetpoints;