From b949a9a54ac18f5bbb1f93f1e4dc7d52f44a6233 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 1 Aug 2024 10:58:46 +0200 Subject: [PATCH 01/42] Modification by filter --- .../modification/server/ModificationType.java | 1 + .../server/NetworkModificationException.java | 2 +- .../dto/ByFormulaModificationInfos.java | 6 +- .../server/dto/BySimpleModificationInfos.java | 57 ++++ .../server/dto/ModificationInfos.java | 1 + .../server/dto/byfilter/DataType.java | 20 ++ .../dto/byfilter/FilterModificationInfos.java | 24 ++ .../equipmentfield/BatteryField.java | 9 +- .../equipmentfield/GeneratorField.java | 18 +- .../equipmentfield/LoadField.java | 9 +- .../equipmentfield/ShuntCompensatorField.java | 9 +- .../TwoWindingsTransformerField.java | 9 +- .../equipmentfield/VoltageLevelField.java | 9 +- .../{ => byfilter}/formula/FormulaInfos.java | 27 +- .../dto/{ => byfilter}/formula/Operator.java | 2 +- .../formula/ReferenceFieldOrValue.java | 14 +- .../AbstractSimpleModificationInfos.java | 47 +++ .../BooleanSimpleModificationInfos.java | 30 ++ .../simple/DoubleSimpleModificationInfos.java | 30 ++ .../simple/EnumSimpleModificationInfos.java | 22 ++ .../IntegerSimpleModificationInfos.java | 30 ++ .../PropertySimpleModificationInfos.java | 32 ++ .../simple/StringSimpleModificationInfos.java | 30 ++ .../ByFormulaModificationEntity.java | 5 +- .../byfilter/BySimpleModificationEntity.java | 74 +++++ .../{ => byfilter/formula}/FormulaEntity.java | 11 +- .../BooleanSimpleModificationEntity.java | 41 +++ .../DoubleSimpleModificationEntity.java | 41 +++ .../IntegerSimpleModificationEntity.java | 41 +++ .../PropertySimpleModificationEntity.java | 42 +++ .../simple/SimpleModificationEntity.java | 66 ++++ .../StringSimpleModificationEntity.java | 41 +++ .../modifications/ByFormulaModification.java | 312 ------------------ .../AbstractByFilterModification.java | 169 ++++++++++ .../byfilter/ByFormulaModification.java | 200 +++++++++++ .../byfilter/BySimpleModification.java | 175 ++++++++++ .../db/changelog/db.changelog-master.yaml | 3 + .../AbstractByFormulaModificationTest.java | 6 +- .../BatteryByFormulaModificationTest.java | 8 +- .../GeneratorByFormulaModificationTest.java | 8 +- .../LoadByFormulaModificationTest.java | 8 +- ...tCompensatorByFormulaModificationTest.java | 8 +- ...sTransformerByFormulaModificationTest.java | 8 +- ...VoltageLevelByFormulaModificationTest.java | 10 +- 44 files changed, 1321 insertions(+), 394 deletions(-) create mode 100644 src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/DataType.java create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/FilterModificationInfos.java rename src/main/java/org/gridsuite/modification/server/dto/{formula => byfilter}/equipmentfield/BatteryField.java (79%) rename src/main/java/org/gridsuite/modification/server/dto/{formula => byfilter}/equipmentfield/GeneratorField.java (92%) rename src/main/java/org/gridsuite/modification/server/dto/{formula => byfilter}/equipmentfield/LoadField.java (67%) rename src/main/java/org/gridsuite/modification/server/dto/{formula => byfilter}/equipmentfield/ShuntCompensatorField.java (86%) rename src/main/java/org/gridsuite/modification/server/dto/{formula => byfilter}/equipmentfield/TwoWindingsTransformerField.java (87%) rename src/main/java/org/gridsuite/modification/server/dto/{formula => byfilter}/equipmentfield/VoltageLevelField.java (85%) rename src/main/java/org/gridsuite/modification/server/dto/{ => byfilter}/formula/FormulaInfos.java (63%) rename src/main/java/org/gridsuite/modification/server/dto/{ => byfilter}/formula/Operator.java (87%) rename src/main/java/org/gridsuite/modification/server/dto/{ => byfilter}/formula/ReferenceFieldOrValue.java (81%) create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationInfos.java create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationInfos.java create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationInfos.java create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationInfos.java create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationInfos.java create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationInfos.java create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationInfos.java rename src/main/java/org/gridsuite/modification/server/entities/equipment/modification/{ => byfilter}/ByFormulaModificationEntity.java (93%) create mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java rename src/main/java/org/gridsuite/modification/server/entities/equipment/modification/{ => byfilter/formula}/FormulaEntity.java (88%) create mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java create mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java create mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java create mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java create mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java create mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java delete mode 100644 src/main/java/org/gridsuite/modification/server/modifications/ByFormulaModification.java create mode 100644 src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java create mode 100644 src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java create mode 100644 src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java diff --git a/src/main/java/org/gridsuite/modification/server/ModificationType.java b/src/main/java/org/gridsuite/modification/server/ModificationType.java index 0f055ca6d..cc8b3c610 100644 --- a/src/main/java/org/gridsuite/modification/server/ModificationType.java +++ b/src/main/java/org/gridsuite/modification/server/ModificationType.java @@ -50,6 +50,7 @@ public enum ModificationType { TABULAR_MODIFICATION(PreloadingStrategy.COLLECTION), TABULAR_CREATION(PreloadingStrategy.COLLECTION), BY_FORMULA_MODIFICATION(PreloadingStrategy.COLLECTION), + BY_FILTER_MODIFICATION(PreloadingStrategy.COLLECTION), COMPOSITE_MODIFICATION(PreloadingStrategy.COLLECTION); private final PreloadingStrategy strategy; diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java index 139111089..f53640784 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java @@ -113,10 +113,10 @@ public enum Type { CREATE_CONVERTER_STATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), MODIFY_CONVERTER_STATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), BY_FORMULA_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), + BY_FILTER_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), HVDC_LINE_NOT_FOUND(HttpStatus.NOT_FOUND), COMPOSITE_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR); - public final HttpStatus status; private final String message; diff --git a/src/main/java/org/gridsuite/modification/server/dto/ByFormulaModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/ByFormulaModificationInfos.java index afa985a77..8986be98f 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/ByFormulaModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/ByFormulaModificationInfos.java @@ -19,9 +19,9 @@ import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.ModificationType; import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.entities.equipment.modification.ByFormulaModificationEntity; -import org.gridsuite.modification.server.modifications.ByFormulaModification; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ByFormulaModificationEntity; +import org.gridsuite.modification.server.modifications.byfilter.ByFormulaModification; import java.util.List; diff --git a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java new file mode 100644 index 000000000..3a8833424 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto; + +import com.fasterxml.jackson.annotation.JsonTypeName; +import com.powsybl.commons.report.ReportNode; +import com.powsybl.iidm.network.IdentifiableType; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.ModificationType; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.BySimpleModificationEntity; +import org.gridsuite.modification.server.modifications.byfilter.BySimpleModification; + +import java.util.List; + +/** + * @author Thang PHAM + */ +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +@JsonTypeName("BY_SIMPLE_MODIFICATION") +@ModificationErrorTypeName("BY_SIMPLE_MODIFICATION_ERROR") +@ToString(callSuper = true) +@Schema(description = "Modification by simple assignment") +public class BySimpleModificationInfos extends ModificationInfos { + @Schema(description = "Identifiable type") + private IdentifiableType identifiableType; + + @Schema(description = "list of modifications") + private List> simpleModificationInfosList; + + @Override + public BySimpleModificationEntity toEntity() { + return new BySimpleModificationEntity(this); + } + + @Override + public BySimpleModification toModification() { + return new BySimpleModification(this); + } + + @Override + public ReportNode createSubReportNode(ReportNode reportNode) { + return reportNode.newReportNode().withMessageTemplate(ModificationType.BY_FILTER_MODIFICATION.name(), "By filter modification").add(); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java index 4e02d8c3e..366af5193 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java @@ -68,6 +68,7 @@ @JsonSubTypes.Type(value = ConverterStationCreationInfos.class), @JsonSubTypes.Type(value = TabularModificationInfos.class), @JsonSubTypes.Type(value = ByFormulaModificationInfos.class), + @JsonSubTypes.Type(value = BySimpleModificationInfos.class), @JsonSubTypes.Type(value = VscModificationInfos.class), @JsonSubTypes.Type(value = ConverterStationModificationInfos.class), @JsonSubTypes.Type(value = TabularCreationInfos.class), diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/DataType.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/DataType.java new file mode 100644 index 000000000..00b99325f --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/DataType.java @@ -0,0 +1,20 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto.byfilter; + +/** + * @author Thang PHAM + */ +public enum DataType { + STRING, + ENUM, + BOOLEAN, + INTEGER, + DOUBLE, + PROPERTY +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/FilterModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/FilterModificationInfos.java new file mode 100644 index 000000000..b62cba9b9 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/FilterModificationInfos.java @@ -0,0 +1,24 @@ +package org.gridsuite.modification.server.dto.byfilter; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.dto.FilterInfos; + +import java.util.List; +import java.util.UUID; + +@SuperBuilder +@NoArgsConstructor +@Data +public class FilterModificationInfos { + @Schema(description = "id") + private UUID id; + + @Schema(description = "List of filters") + private List filters; + + @Schema(description = "Edited field") + private String editedField; +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/BatteryField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/BatteryField.java similarity index 79% rename from src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/BatteryField.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/BatteryField.java index 079dd8a12..163823f3b 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/BatteryField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/BatteryField.java @@ -5,11 +5,12 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.formula.equipmentfield; +package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.Battery; import com.powsybl.iidm.network.extensions.ActivePowerControl; import com.powsybl.iidm.network.extensions.ActivePowerControlAdder; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; /** * @author Seddik Yengui @@ -46,4 +47,10 @@ public static void setNewValue(Battery battery, String batteryField, Double newV .add(); } } + + public static void setNewValue(Battery battery, AbstractSimpleModificationInfos fieldModificationInfos) { + switch (fieldModificationInfos.getDataType()) { + case DOUBLE -> setNewValue(battery, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + } + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/GeneratorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/GeneratorField.java similarity index 92% rename from src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/GeneratorField.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/GeneratorField.java index 7c864cbfd..bbbd2204f 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/GeneratorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/GeneratorField.java @@ -5,17 +5,11 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.formula.equipmentfield; +package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.Generator; -import com.powsybl.iidm.network.extensions.ActivePowerControl; -import com.powsybl.iidm.network.extensions.ActivePowerControlAdder; -import com.powsybl.iidm.network.extensions.CoordinatedReactiveControl; -import com.powsybl.iidm.network.extensions.CoordinatedReactiveControlAdder; -import com.powsybl.iidm.network.extensions.GeneratorShortCircuit; -import com.powsybl.iidm.network.extensions.GeneratorShortCircuitAdder; -import com.powsybl.iidm.network.extensions.GeneratorStartup; -import com.powsybl.iidm.network.extensions.GeneratorStartupAdder; +import com.powsybl.iidm.network.extensions.*; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; /** * @author Seddik Yengui @@ -146,4 +140,10 @@ public static void setNewValue(Generator generator, String generatorField, Doubl } } } + + public static void setNewValue(Generator generator, AbstractSimpleModificationInfos fieldModificationInfos) { + switch (fieldModificationInfos.getDataType()) { + case DOUBLE -> setNewValue(generator, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + } + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java similarity index 67% rename from src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/LoadField.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java index 2743186a6..a6b218426 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/LoadField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java @@ -5,9 +5,10 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.formula.equipmentfield; +package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.Load; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; /** * @author Seddik Yengui @@ -32,4 +33,10 @@ public static void setNewValue(Load load, String loadField, Double newValue) { case REACTIVE_POWER -> load.setQ0(newValue); } } + + public static void setNewValue(Load load, AbstractSimpleModificationInfos fieldModificationInfos) { + switch (fieldModificationInfos.getDataType()) { + case DOUBLE -> setNewValue(load, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + } + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java similarity index 86% rename from src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/ShuntCompensatorField.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index e155d4720..79ca6dd34 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -5,13 +5,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.formula.equipmentfield; +package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.ShuntCompensator; import com.powsybl.iidm.network.ShuntCompensatorLinearModel; import com.powsybl.iidm.network.ShuntCompensatorModelType; import com.powsybl.iidm.network.VoltageLevel; import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; /** * @author Seddik Yengui @@ -57,4 +58,10 @@ public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCo } } } + + public static void setNewValue(ShuntCompensator shuntCompensator, AbstractSimpleModificationInfos fieldModificationInfos) { + switch (fieldModificationInfos.getDataType()) { + case DOUBLE -> setNewValue(shuntCompensator, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + } + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java similarity index 87% rename from src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/TwoWindingsTransformerField.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index e0f6d52df..7dcdd64d2 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -1,8 +1,9 @@ -package org.gridsuite.modification.server.dto.formula.equipmentfield; +package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.RatioTapChanger; import com.powsybl.iidm.network.TwoWindingsTransformer; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; public enum TwoWindingsTransformerField { R, @@ -67,4 +68,10 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin case PHASE_TARGET_DEADBAND -> phaseTapChanger.setTargetDeadband(newValue); } } + + public static void setNewValue(TwoWindingsTransformer transformer, AbstractSimpleModificationInfos fieldModificationInfos) { + switch (fieldModificationInfos.getDataType()) { + case DOUBLE -> setNewValue(transformer, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + } + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java similarity index 85% rename from src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/VoltageLevelField.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java index a1fc1d644..5ddd204aa 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/VoltageLevelField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java @@ -5,11 +5,12 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.formula.equipmentfield; +package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; /** * @author Seddik Yengui @@ -57,4 +58,10 @@ public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelFie } } } + + public static void setNewValue(VoltageLevel voltageLevel, AbstractSimpleModificationInfos fieldModificationInfos) { + switch (fieldModificationInfos.getDataType()) { + case DOUBLE -> setNewValue(voltageLevel, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + } + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/FormulaInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java similarity index 63% rename from src/main/java/org/gridsuite/modification/server/dto/formula/FormulaInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java index 736556a4d..ec0691381 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/FormulaInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java @@ -5,19 +5,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.formula; +package org.gridsuite.modification.server.dto.byfilter.formula; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Getter; +import lombok.Data; import lombok.NoArgsConstructor; -import lombok.Setter; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.dto.FilterInfos; -import org.gridsuite.modification.server.entities.equipment.modification.FormulaEntity; - -import java.util.List; -import java.util.UUID; +import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.formula.FormulaEntity; /** * @author Seddik Yengui @@ -25,18 +20,8 @@ @SuperBuilder @NoArgsConstructor -@AllArgsConstructor -@Getter -@Setter -public class FormulaInfos { - @Schema(description = "id") - private UUID id; - - @Schema(description = "List of filters") - private List filters; - - @Schema(description = "Edited field") - private String editedField; +@Data +public class FormulaInfos extends FilterModificationInfos { @Schema(description = "First reference field or value") private ReferenceFieldOrValue fieldOrValue1; diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/Operator.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/Operator.java similarity index 87% rename from src/main/java/org/gridsuite/modification/server/dto/formula/Operator.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/Operator.java index d00f5e65d..df134ec57 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/Operator.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/Operator.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.formula; +package org.gridsuite.modification.server.dto.byfilter.formula; /** * @author Seddik Yengui diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/ReferenceFieldOrValue.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java similarity index 81% rename from src/main/java/org/gridsuite/modification/server/dto/formula/ReferenceFieldOrValue.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java index aaae6b502..387acf962 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/ReferenceFieldOrValue.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.formula; +package org.gridsuite.modification.server.dto.byfilter.formula; import com.powsybl.iidm.network.Battery; import com.powsybl.iidm.network.Generator; @@ -21,12 +21,12 @@ import lombok.NoArgsConstructor; import lombok.Setter; import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.formula.equipmentfield.BatteryField; -import org.gridsuite.modification.server.dto.formula.equipmentfield.GeneratorField; -import org.gridsuite.modification.server.dto.formula.equipmentfield.LoadField; -import org.gridsuite.modification.server.dto.formula.equipmentfield.ShuntCompensatorField; -import org.gridsuite.modification.server.dto.formula.equipmentfield.TwoWindingsTransformerField; -import org.gridsuite.modification.server.dto.formula.equipmentfield.VoltageLevelField; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.BatteryField; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.GeneratorField; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.LoadField; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.ShuntCompensatorField; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.VoltageLevelField; /** diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationInfos.java new file mode 100644 index 000000000..a5b7b1310 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationInfos.java @@ -0,0 +1,47 @@ + /** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto.byfilter.simple; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.dto.byfilter.DataType; +import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; + +/** + * @author Thang PHAM + */ +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + property = "dataType", + include = JsonTypeInfo.As.EXISTING_PROPERTY) +@JsonSubTypes({ + @JsonSubTypes.Type(value = StringSimpleModificationInfos.class, name = "STRING"), + @JsonSubTypes.Type(value = BooleanSimpleModificationInfos.class, name = "BOOLEAN"), + @JsonSubTypes.Type(value = EnumSimpleModificationInfos.class, name = "ENUM"), + @JsonSubTypes.Type(value = DoubleSimpleModificationInfos.class, name = "DOUBLE"), + @JsonSubTypes.Type(value = IntegerSimpleModificationInfos.class, name = "INTEGER"), + @JsonSubTypes.Type(value = PropertySimpleModificationInfos.class, name = "PROPERTY"), +}) +@JsonInclude(JsonInclude.Include.NON_NULL) +@SuperBuilder +@NoArgsConstructor +@Data +public abstract class AbstractSimpleModificationInfos extends FilterModificationInfos { + @Schema(description = "Data type") + private DataType dataType; + + public abstract SimpleModificationEntity toEntity(); + + public abstract T getValue(); +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationInfos.java new file mode 100644 index 000000000..a8b2e04ba --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationInfos.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto.byfilter.simple; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.BooleanSimpleModificationEntity; + +/** + * @author Thang PHAM + */ +@SuperBuilder +@NoArgsConstructor +@Data +public class BooleanSimpleModificationInfos extends AbstractSimpleModificationInfos { + @Schema(description = "value") + private Boolean value; + + @Override + public BooleanSimpleModificationEntity toEntity() { + return new BooleanSimpleModificationEntity(this); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationInfos.java new file mode 100644 index 000000000..1e93ae42b --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationInfos.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto.byfilter.simple; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.DoubleSimpleModificationEntity; + +/** + * @author Thang PHAM + */ +@SuperBuilder +@NoArgsConstructor +@Data +public class DoubleSimpleModificationInfos extends AbstractSimpleModificationInfos { + @Schema(description = "value") + private Double value; + + @Override + public DoubleSimpleModificationEntity toEntity() { + return new DoubleSimpleModificationEntity(this); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationInfos.java new file mode 100644 index 000000000..ba3e6a2f4 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationInfos.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto.byfilter.simple; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author Thang PHAM + */ +@SuperBuilder +@NoArgsConstructor +@Data +public class EnumSimpleModificationInfos extends StringSimpleModificationInfos { + +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationInfos.java new file mode 100644 index 000000000..92fa0b760 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationInfos.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto.byfilter.simple; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.IntegerSimpleModificationEntity; + +/** + * @author Thang PHAM + */ +@SuperBuilder +@NoArgsConstructor +@Data +public class IntegerSimpleModificationInfos extends AbstractSimpleModificationInfos { + @Schema(description = "value") + private Integer value; + + @Override + public IntegerSimpleModificationEntity toEntity() { + return new IntegerSimpleModificationEntity(this); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationInfos.java new file mode 100644 index 000000000..37e47e471 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationInfos.java @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto.byfilter.simple; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.PropertySimpleModificationEntity; + +/** + * @author Thang PHAM + */ +@SuperBuilder +@NoArgsConstructor +@Data +public class PropertySimpleModificationInfos extends StringSimpleModificationInfos { + @Schema(description = "property name") + private String propertyName; + + @Override + public PropertySimpleModificationEntity toEntity() { + PropertySimpleModificationEntity propertySimpleModificationEntity = new PropertySimpleModificationEntity(this); + propertySimpleModificationEntity.setPropertyName(propertyName); + return propertySimpleModificationEntity; + } +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationInfos.java new file mode 100644 index 000000000..534607160 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationInfos.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto.byfilter.simple; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.StringSimpleModificationEntity; + +/** + * @author Thang PHAM + */ +@SuperBuilder +@NoArgsConstructor +@Data +public class StringSimpleModificationInfos extends AbstractSimpleModificationInfos { + @Schema(description = "value") + private String value; + + @Override + public StringSimpleModificationEntity toEntity() { + return new StringSimpleModificationEntity(this); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/ByFormulaModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java similarity index 93% rename from src/main/java/org/gridsuite/modification/server/entities/equipment/modification/ByFormulaModificationEntity.java rename to src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java index 1cbe597ee..3746eb15f 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/ByFormulaModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java @@ -1,4 +1,4 @@ -package org.gridsuite.modification.server.entities.equipment.modification; +package org.gridsuite.modification.server.entities.equipment.modification.byfilter; import com.powsybl.iidm.network.IdentifiableType; import jakarta.persistence.*; @@ -8,8 +8,9 @@ import lombok.Setter; import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.entities.ModificationEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.formula.FormulaEntity; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java new file mode 100644 index 000000000..cfbf66f79 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java @@ -0,0 +1,74 @@ +package org.gridsuite.modification.server.entities.equipment.modification.byfilter; + +import com.powsybl.iidm.network.IdentifiableType; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.Setter; +import org.gridsuite.modification.server.dto.BySimpleModificationInfos; +import org.gridsuite.modification.server.dto.ModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.entities.ModificationEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; + +import java.util.List; + +@NoArgsConstructor +@Getter +@Setter +@Entity +@Table(name = "bySimpleModification") +public class BySimpleModificationEntity extends ModificationEntity { + @Column + private IdentifiableType identifiableType; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @JoinColumn(name = "by_simple_modification_id", + foreignKey = @ForeignKey(name = "by_simple_modification_id_fk")) + private List simpleModificationEntities; + + public BySimpleModificationEntity(BySimpleModificationInfos bySimpleModificationInfos) { + super(bySimpleModificationInfos); + assignAttributes(bySimpleModificationInfos); + } + + @Override + public void update(@NonNull ModificationInfos modificationInfos) { + super.update(modificationInfos); + assignAttributes((BySimpleModificationInfos) modificationInfos); + } + + private void assignAttributes(BySimpleModificationInfos bySimpleModificationInfos) { + this.identifiableType = bySimpleModificationInfos.getIdentifiableType(); + if (simpleModificationEntities == null) { + simpleModificationEntities = bySimpleModificationInfos.getSimpleModificationInfosList() + .stream() + .map(AbstractSimpleModificationInfos::toEntity) + .toList(); + } else { + simpleModificationEntities.clear(); + simpleModificationEntities.addAll(bySimpleModificationInfos.getSimpleModificationInfosList() + .stream() + .map(AbstractSimpleModificationInfos::toEntity) + .toList()); + } + } + + @Override + public BySimpleModificationInfos toModificationInfos() { + return toBySimpleModificationInfosBuilder().build(); + } + + private BySimpleModificationInfos.BySimpleModificationInfosBuilder toBySimpleModificationInfosBuilder() { + return BySimpleModificationInfos.builder() + .uuid(getId()) + .date(getDate()) + .stashed(getStashed()) + .identifiableType(getIdentifiableType()) + .simpleModificationInfosList(simpleModificationEntities.stream() + .map(SimpleModificationEntity::toSimpleModificationInfos) + .toList() + ); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/FormulaEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java similarity index 88% rename from src/main/java/org/gridsuite/modification/server/entities/equipment/modification/FormulaEntity.java rename to src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java index 1ea147165..73c162741 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/FormulaEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java @@ -5,16 +5,17 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.entities.equipment.modification; +package org.gridsuite.modification.server.entities.equipment.modification.byfilter.formula; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.gridsuite.modification.server.dto.FilterInfos; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.dto.formula.Operator; -import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.Operator; +import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; import java.util.List; import java.util.UUID; @@ -60,7 +61,7 @@ public class FormulaEntity { public FormulaEntity(FormulaInfos formulaInfos) { this.id = null; - this.filters = formulaInfos.getFilters().stream().map(FilterInfos::toEntity).collect(Collectors.toList()); + this.filters = formulaInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); this.editedField = formulaInfos.getEditedField(); this.equipmentField1 = formulaInfos.getFieldOrValue1().getEquipmentField(); this.equipmentField2 = formulaInfos.getFieldOrValue2().getEquipmentField(); diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java new file mode 100644 index 000000000..ca4a4b1ac --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.gridsuite.modification.server.dto.byfilter.simple.BooleanSimpleModificationInfos; + +/** + * @author Thang PHAM + */ +@NoArgsConstructor +@Data +@Entity +@Table(name = "simpleModificationBoolean") +public class BooleanSimpleModificationEntity extends SimpleModificationEntity { + @Column(name = "value_") // "value" is not supported in UT with H2 + Boolean value; + + public BooleanSimpleModificationEntity(BooleanSimpleModificationInfos booleanSimpleModificationInfos) { + super(booleanSimpleModificationInfos); + this.value = booleanSimpleModificationInfos.getValue(); + } + + @Override + public BooleanSimpleModificationInfos toSimpleModificationInfos() { + BooleanSimpleModificationInfos booleanSimpleModificationInfos = BooleanSimpleModificationInfos.builder() + .value(value) + .build(); + assignAttributes(booleanSimpleModificationInfos); + return booleanSimpleModificationInfos; + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java new file mode 100644 index 000000000..a7059f340 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.gridsuite.modification.server.dto.byfilter.simple.DoubleSimpleModificationInfos; + +/** + * @author Thang PHAM + */ +@NoArgsConstructor +@Data +@Entity +@Table(name = "simpleModificationDouble") +public class DoubleSimpleModificationEntity extends SimpleModificationEntity { + @Column(name = "value_") // "value" is not supported in UT with H2 + Double value; + + public DoubleSimpleModificationEntity(DoubleSimpleModificationInfos doubleSimpleModificationInfos) { + super(doubleSimpleModificationInfos); + this.value = doubleSimpleModificationInfos.getValue(); + } + + @Override + public DoubleSimpleModificationInfos toSimpleModificationInfos() { + DoubleSimpleModificationInfos doubleSimpleModificationInfos = DoubleSimpleModificationInfos.builder() + .value(value) + .build(); + assignAttributes(doubleSimpleModificationInfos); + return doubleSimpleModificationInfos; + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java new file mode 100644 index 000000000..55867883e --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.gridsuite.modification.server.dto.byfilter.simple.IntegerSimpleModificationInfos; + +/** + * @author Thang PHAM + */ +@NoArgsConstructor +@Data +@Entity +@Table(name = "simpleModificationInteger") +public class IntegerSimpleModificationEntity extends SimpleModificationEntity { + @Column(name = "value_") // "value" is not supported in UT with H2 + Integer value; + + public IntegerSimpleModificationEntity(IntegerSimpleModificationInfos integerSimpleModificationInfos) { + super(integerSimpleModificationInfos); + this.value = integerSimpleModificationInfos.getValue(); + } + + @Override + public IntegerSimpleModificationInfos toSimpleModificationInfos() { + IntegerSimpleModificationInfos integerSimpleModificationInfos = IntegerSimpleModificationInfos.builder() + .value(value) + .build(); + assignAttributes(integerSimpleModificationInfos); + return integerSimpleModificationInfos; + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java new file mode 100644 index 000000000..a9659c07a --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.gridsuite.modification.server.dto.byfilter.simple.PropertySimpleModificationInfos; + +/** + * @author Thang PHAM + */ +@NoArgsConstructor +@Data +@Entity +@Table(name = "simpleModificationProperty") +public class PropertySimpleModificationEntity extends StringSimpleModificationEntity { + @Column + String propertyName; + + public PropertySimpleModificationEntity(PropertySimpleModificationInfos propertySimpleModificationInfos) { + super(propertySimpleModificationInfos); + this.propertyName = propertySimpleModificationInfos.getPropertyName(); + } + + @Override + public PropertySimpleModificationInfos toSimpleModificationInfos() { + PropertySimpleModificationInfos propertySimpleModificationInfos = PropertySimpleModificationInfos.builder() + .value(value) + .propertyName(propertyName) + .build(); + assignAttributes(propertySimpleModificationInfos); + return propertySimpleModificationInfos; + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java new file mode 100644 index 000000000..458cf48f8 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java @@ -0,0 +1,66 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; + +import jakarta.persistence.*; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.byfilter.DataType; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; + +import java.util.List; +import java.util.UUID; + +/** + * @author Thang PHAM + */ +@NoArgsConstructor +@Data +@Entity +@Table(name = "simpleModification", indexes = @Index(name = "by_simple_modification_id_idx", columnList = "by_simple_modification_id")) +@Inheritance(strategy = InheritanceType.JOINED) +public class SimpleModificationEntity { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private UUID id; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @JoinColumn(name = "simple_modification_id", + foreignKey = @ForeignKey(name = "simple_modification_id_fk")) + private List filters; + + @Column + private String editedField; + + @Column + @Enumerated(EnumType.STRING) + private DataType dataType; + + public SimpleModificationEntity(AbstractSimpleModificationInfos simpleModificationInfos) { + this.id = null; + this.filters = simpleModificationInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); + this.editedField = simpleModificationInfos.getEditedField(); + this.dataType = simpleModificationInfos.getDataType(); + } + + protected void assignAttributes(AbstractSimpleModificationInfos simpleModificationInfos) { + simpleModificationInfos.setId(id); + simpleModificationInfos.setFilters(filters.stream() + .map(filterEntity -> new FilterInfos(filterEntity.getFilterId(), filterEntity.getName())) + .toList()); + simpleModificationInfos.setEditedField(editedField); + simpleModificationInfos.setDataType(dataType); + } + + public AbstractSimpleModificationInfos toSimpleModificationInfos() { + return null; + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java new file mode 100644 index 000000000..157b290d9 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.gridsuite.modification.server.dto.byfilter.simple.StringSimpleModificationInfos; + +/** + * @author Thang PHAM + */ +@NoArgsConstructor +@Data +@Entity +@Table(name = "simpleModificationString") +public class StringSimpleModificationEntity extends SimpleModificationEntity { + @Column(name = "value_") // "value" is not supported in UT with H2 + String value; + + public StringSimpleModificationEntity(StringSimpleModificationInfos stringSimpleModificationInfos) { + super(stringSimpleModificationInfos); + this.value = stringSimpleModificationInfos.getValue(); + } + + @Override + public StringSimpleModificationInfos toSimpleModificationInfos() { + StringSimpleModificationInfos stringSimpleModificationInfos = StringSimpleModificationInfos.builder() + .value(value) + .build(); + assignAttributes(stringSimpleModificationInfos); + return stringSimpleModificationInfos; + } +} diff --git a/src/main/java/org/gridsuite/modification/server/modifications/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/ByFormulaModification.java deleted file mode 100644 index 22460eeb4..000000000 --- a/src/main/java/org/gridsuite/modification/server/modifications/ByFormulaModification.java +++ /dev/null @@ -1,312 +0,0 @@ -/** - * Copyright (c) 2023, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.modifications; - -import com.powsybl.commons.report.ReportNode; -import com.powsybl.commons.report.TypedValue; -import com.powsybl.iidm.network.*; -import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; -import org.gridsuite.modification.server.dto.FilterEquipments; -import org.gridsuite.modification.server.dto.FilterInfos; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.dto.formula.Operator; -import org.gridsuite.modification.server.dto.formula.equipmentfield.*; -import org.gridsuite.modification.server.service.FilterService; -import org.jetbrains.annotations.NotNull; -import org.springframework.util.CollectionUtils; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; - -import static org.gridsuite.modification.server.modifications.ModificationUtils.*; - -public class ByFormulaModification extends AbstractModification { - public static final String EQUIPMENT_MODIFIED_REPORT_ERROR = "EquipmentModifiedReportError_"; - public static final String KEY_FILTER_NAME = "filterName"; - public static final String KEY_FIELD_NAME = "fieldName"; - public static final String KEY_EQPT_NAME = "eqptName"; - public static final String KEY_EQPT_TYPE = "eqptType"; - public static final String KEY_NB_CHANGED = "nbChanged"; - public static final String KEY_NB_UNCHANGED = "nbUnchanged"; - public static final String KEY_VALUE = "value"; - private final ByFormulaModificationInfos modificationInfos; - protected FilterService filterService; - private int equipmentNotModifiedCount; - private long equipmentCount; - private long equipmentNotFoundCount; - - public ByFormulaModification(ByFormulaModificationInfos modificationInfos) { - this.modificationInfos = modificationInfos; - equipmentNotModifiedCount = 0; - equipmentCount = 0; - equipmentNotFoundCount = 0; - } - - @Override - public void initApplicationContext(NetworkModificationApplicator modificationApplicator) { - filterService = modificationApplicator.getFilterService(); - } - - @Override - public void check(Network network) throws NetworkModificationException { - if (modificationInfos == null) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Missing required attributes to modify the equipment"); - } - - if (CollectionUtils.isEmpty(modificationInfos.getFormulaInfosList())) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "At least one formula is required"); - } - - if (modificationInfos.getFormulaInfosList().stream().anyMatch(formulaInfos -> CollectionUtils.isEmpty(formulaInfos.getFilters()))) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Every formula must have at least one filter"); - } - } - - @Override - public void apply(Network network, ReportNode subReportNode) { - // collect all filters from all variations - Map filters = modificationInfos.getFormulaInfosList().stream() - .flatMap(v -> v.getFilters().stream()) - .filter(distinctByKey(FilterInfos::getId)) - .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); - - Map exportFilters = ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, modificationInfos.getErrorType()); - - if (exportFilters != null) { - ReportNode formulaSubReporter = subReportNode.newReportNode().withMessageTemplate("appliedFormulasModifications", "Formulas").add(); - List formulaReports = new ArrayList<>(); - modificationInfos.getFormulaInfosList().forEach(formulaInfos -> - formulaInfos.getFilters().forEach(filterInfos -> - applyFormulaOnFilterEquipments(network, exportFilters, formulaReports, formulaInfos, filterInfos))); - subReportNode.newReportNode() - .withMessageTemplate("byFormulaModification", "New modification by formula on ${" + KEY_EQPT_TYPE + "}") - .withUntypedValue(KEY_EQPT_TYPE, modificationInfos.getIdentifiableType().name()) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); - if (equipmentNotModifiedCount == 0 && equipmentNotFoundCount == 0) { - subReportNode.newReportNode() - .withMessageTemplate("byFormulaModificationALL", "All equipment have been modified : ${" + KEY_VALUE + "} equipment(s)") - .withUntypedValue(KEY_VALUE, equipmentCount) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); - report(formulaSubReporter, formulaReports); - } else { - if (equipmentNotModifiedCount == equipmentCount) { - createReport(subReportNode, "byFormulaModificationNone", - "No equipment have been modified", - Map.of(), TypedValue.ERROR_SEVERITY); - } else { - subReportNode.newReportNode() - .withMessageTemplate("byFormulaModificationSome", "Some of the equipment have been modified : ${" + KEY_NB_CHANGED + "} equipment(s) modified and ${" + KEY_NB_UNCHANGED + "} equipment(s) not modified") - .withUntypedValue(KEY_NB_CHANGED, equipmentCount - equipmentNotModifiedCount) - .withUntypedValue(KEY_NB_UNCHANGED, equipmentNotModifiedCount + equipmentNotFoundCount) - .withSeverity(TypedValue.WARN_SEVERITY) - .add(); - report(formulaSubReporter, formulaReports); - } - } - } - } - - private void report(ReportNode formulaSubReportNode, List formulaReports) { - formulaSubReportNode.newReportNode() - .withMessageTemplate("appliedFormulasModifications", " Formulas") - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); - formulaReports.forEach(report -> insertReportNode(formulaSubReportNode, report)); - } - - private void applyFormulaOnFilterEquipments(Network network, - Map exportFilters, - List formulaReports, - FormulaInfos formulaInfos, - FilterInfos filterInfos) { - FilterEquipments filterEquipments = exportFilters.get(filterInfos.getId()); - - if (CollectionUtils.isEmpty(filterEquipments.getIdentifiableAttributes())) { - formulaReports.add(ReportNode.newRootReportNode() - .withMessageTemplate("byFormulaModificationFormulaFilter_" + formulaReports.size(), "No equipments were found for filter ${" + KEY_FILTER_NAME + "}") - .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); - } else { - equipmentCount += filterEquipments.getIdentifiableAttributes().size(); - if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { - equipmentNotFoundCount += filterEquipments.getNotFoundEquipments().size(); - } - List notEditableEquipments = new ArrayList<>(); - List equipmentsReport = new ArrayList<>(); - filterEquipments.getIdentifiableAttributes() - .stream() - .map(attributes -> network.getIdentifiable(attributes.getId())) - .filter(identifiable -> { - boolean isEditableEquipment = isEquipmentEditable(identifiable, formulaInfos, equipmentsReport); - if (!isEditableEquipment) { - notEditableEquipments.add(identifiable.getId()); - equipmentNotModifiedCount += 1; - } - return isEditableEquipment; - }) - .forEach(identifiable -> applyFormula(identifiable, formulaInfos, equipmentsReport, notEditableEquipments)); - - createFormulaReports(formulaReports, formulaInfos, filterInfos, filterEquipments, notEditableEquipments); - - formulaReports.addAll(equipmentsReport); - } - } - - private void createFormulaReports(List formulaReports, FormulaInfos formulaInfos, FilterInfos filterInfos, FilterEquipments filterEquipments, List notEditableEquipments) { - if (notEditableEquipments.size() == filterEquipments.getIdentifiableAttributes().size()) { - formulaReports.add(ReportNode.newRootReportNode() - .withMessageTemplate("byFormulaModificationFormulaFilterFailed_" + formulaReports.size(), "No equipment(s) have been modified on filter ${" + KEY_FILTER_NAME + "}") - .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); - } else { - formulaReports.add(ReportNode.newRootReportNode() - .withMessageTemplate("byFormulaModificationFormulaFilter_" + formulaReports.size(), "Successful application of new modification by formula on filter ${" + KEY_FILTER_NAME + "}") - .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) - .withSeverity(TypedValue.INFO_SEVERITY) - .build()); - - formulaReports.add(ReportNode.newRootReportNode() - .withMessageTemplate("numberOfValidEquipment" + formulaReports.size(), " Number of equipment modified : ${" + KEY_NB_CHANGED + "}") - .withUntypedValue(KEY_NB_CHANGED, filterEquipments.getIdentifiableAttributes().size() - notEditableEquipments.size()) - .withSeverity(TypedValue.INFO_SEVERITY) - .build()); - - if (!CollectionUtils.isEmpty(notEditableEquipments)) { - formulaReports.add(ReportNode.newRootReportNode() - .withMessageTemplate("NotEditedEquipmentsFilter_" + formulaReports.size(), " ${" + KEY_NB_UNCHANGED + "} equipment(s) were not modified") - .withUntypedValue(KEY_NB_UNCHANGED, notEditableEquipments.size()) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); - } - } - - formulaReports.add(ReportNode.newRootReportNode() - .withMessageTemplate("editedFieldFilter_" + formulaReports.size(), " Edited field :${" + KEY_FIELD_NAME + "}") - .withUntypedValue(KEY_FIELD_NAME, formulaInfos.getEditedField()) - .withSeverity(TypedValue.INFO_SEVERITY) - .build()); - - if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { - String equipmentIds = String.join(", ", filterEquipments.getNotFoundEquipments()); - formulaReports.add(ReportNode.newRootReportNode() - .withMessageTemplate("filterEquipmentsNotFound_" + formulaReports.size(), " Equipment not found : ${" + KEY_VALUE + "}") - .withUntypedValue(KEY_VALUE, equipmentIds) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); - } - } - - private boolean isEquipmentEditable(Identifiable identifiable, - FormulaInfos formulaInfos, - List equipmentsReport) { - if (formulaInfos.getEditedField() == null) { - return false; - } - - if (identifiable.getType() == IdentifiableType.TWO_WINDINGS_TRANSFORMER) { - TwoWindingsTransformerField editedField = TwoWindingsTransformerField.valueOf(formulaInfos.getEditedField()); - TwoWindingsTransformer twoWindingsTransformer = (TwoWindingsTransformer) identifiable; - return switch (editedField) { - case TARGET_V, RATIO_LOW_TAP_POSITION, RATIO_TAP_POSITION, RATIO_TARGET_DEADBAND -> { - boolean isEditable = twoWindingsTransformer.getRatioTapChanger() != null; - if (!isEditable) { - equipmentsReport.add(ReportNode.newRootReportNode() - .withMessageTemplate(EQUIPMENT_MODIFIED_REPORT_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Ratio tab changer is null") - .withUntypedValue(KEY_FIELD_NAME, editedField.name()) - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); - } - yield isEditable; - } - case REGULATION_VALUE, PHASE_LOW_TAP_POSITION, PHASE_TAP_POSITION, PHASE_TARGET_DEADBAND -> { - boolean isEditable = twoWindingsTransformer.getPhaseTapChanger() != null; - if (!isEditable) { - equipmentsReport.add(ReportNode.newRootReportNode() - .withMessageTemplate(EQUIPMENT_MODIFIED_REPORT_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Phase tab changer is null") - .withUntypedValue(KEY_FIELD_NAME, editedField.name()) - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); - } - yield isEditable; - } - default -> true; - }; - } - return true; - } - - private void applyFormula(Identifiable identifiable, - FormulaInfos formulaInfos, - List reports, - List notEditableEquipments) { - Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(identifiable); - Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(identifiable); - if (value1 == null || Double.isNaN(value1) || value2 == null || Double.isNaN(value2)) { - equipmentNotModifiedCount += 1; - notEditableEquipments.add(identifiable.getId()); - reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(EQUIPMENT_MODIFIED_REPORT_ERROR + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : At least one of the value or referenced field is null") - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); - } else if (value2 == 0 && formulaInfos.getOperator() == Operator.DIVISION) { - equipmentNotModifiedCount += 1; - notEditableEquipments.add(identifiable.getId()); - } else { - try { - final Double newValue = applyOperation(formulaInfos.getOperator(), value1, value2); - switch (identifiable.getType()) { - case GENERATOR -> GeneratorField.setNewValue((Generator) identifiable, formulaInfos.getEditedField(), newValue); - case BATTERY -> BatteryField.setNewValue((Battery) identifiable, formulaInfos.getEditedField(), newValue); - case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) identifiable, formulaInfos.getEditedField(), newValue); - case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, formulaInfos.getEditedField(), newValue); - case LOAD -> LoadField.setNewValue((Load) identifiable, formulaInfos.getEditedField(), newValue); - case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) identifiable, formulaInfos.getEditedField(), newValue); - default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Unsupported equipment"); - } - reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("EquipmentModifiedReport_" + reports.size(), " ${" + KEY_EQPT_TYPE + "} id : ${" + KEY_EQPT_NAME + "}, new value of ${" + KEY_FIELD_NAME + "} : ${" + KEY_VALUE + "}") - .withUntypedValue(KEY_EQPT_TYPE, modificationInfos.getIdentifiableType().name()) - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) - .withUntypedValue(KEY_FIELD_NAME, formulaInfos.getEditedField()) - .withUntypedValue(KEY_VALUE, newValue) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); - } catch (Exception e) { - notEditableEquipments.add(identifiable.getId()); - equipmentNotModifiedCount += 1; - reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("EquipmentModifiedReportExceptionf_" + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : ${" + KEY_VALUE + "}") - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) - .withUntypedValue(KEY_VALUE, e.getMessage()) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); - } - } - } - - private Double applyOperation(Operator operator, @NotNull Double value1, @NotNull Double value2) { - return switch (operator) { - case ADDITION -> value1 + value2; - case SUBTRACTION -> value1 - value2; - case MULTIPLICATION -> value1 * value2; - case DIVISION -> value1 / value2; - case PERCENTAGE -> value1 * (value2 / 100); - }; - } -} diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java new file mode 100644 index 000000000..41cb1c0bf --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -0,0 +1,169 @@ +package org.gridsuite.modification.server.modifications.byfilter; + +import com.powsybl.commons.report.ReportNode; +import com.powsybl.commons.report.TypedValue; +import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.TwoWindingsTransformer; +import org.gridsuite.modification.server.dto.FilterEquipments; +import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; +import org.gridsuite.modification.server.modifications.AbstractModification; +import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; +import org.gridsuite.modification.server.service.FilterService; +import org.springframework.util.CollectionUtils; + +import java.util.List; + +public abstract class AbstractByFilterModification extends AbstractModification { + public static final String EQUIPMENT_MODIFIED_REPORT_ERROR = "EquipmentModifiedReportError_"; + public static final String KEY_FILTER_NAME = "filterName"; + public static final String KEY_FIELD_NAME = "fieldName"; + public static final String KEY_EQPT_NAME = "eqptName"; + public static final String KEY_EQPT_TYPE = "eqptType"; + public static final String KEY_NB_CHANGED = "nbChanged"; + public static final String KEY_NB_UNCHANGED = "nbUnchanged"; + public static final String KEY_VALUE = "value"; + protected FilterService filterService; + protected int equipmentNotModifiedCount; + protected long equipmentCount; + protected long equipmentNotFoundCount; + + protected AbstractByFilterModification() { + equipmentNotModifiedCount = 0; + equipmentCount = 0; + equipmentNotFoundCount = 0; + } + + @Override + public void initApplicationContext(NetworkModificationApplicator modificationApplicator) { + filterService = modificationApplicator.getFilterService(); + } + + protected boolean isEquipmentEditable(Identifiable identifiable, + FilterModificationInfos filterModificationInfos, + List equipmentsReport) { + if (filterModificationInfos.getEditedField() == null) { + return false; + } + + if (identifiable.getType() == IdentifiableType.TWO_WINDINGS_TRANSFORMER) { + TwoWindingsTransformerField editedField = TwoWindingsTransformerField.valueOf(filterModificationInfos.getEditedField()); + TwoWindingsTransformer twoWindingsTransformer = (TwoWindingsTransformer) identifiable; + return switch (editedField) { + case TARGET_V, RATIO_LOW_TAP_POSITION, RATIO_TAP_POSITION, RATIO_TARGET_DEADBAND -> { + boolean isEditable = twoWindingsTransformer.getRatioTapChanger() != null; + if (!isEditable) { + equipmentsReport.add(ReportNode.newRootReportNode() + .withMessageTemplate(EQUIPMENT_MODIFIED_REPORT_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Ratio tab changer is null") + .withUntypedValue(KEY_FIELD_NAME, editedField.name()) + .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); + } + yield isEditable; + } + case REGULATION_VALUE, PHASE_LOW_TAP_POSITION, PHASE_TAP_POSITION, PHASE_TARGET_DEADBAND -> { + boolean isEditable = twoWindingsTransformer.getPhaseTapChanger() != null; + if (!isEditable) { + equipmentsReport.add(ReportNode.newRootReportNode() + .withMessageTemplate(EQUIPMENT_MODIFIED_REPORT_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Phase tab changer is null") + .withUntypedValue(KEY_FIELD_NAME, editedField.name()) + .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); + } + yield isEditable; + } + default -> true; + }; + } + return true; + } + + protected void createByFilterModificationReports(List reports, FilterModificationInfos filterModificationInfos, + FilterInfos filterInfos, FilterEquipments filterEquipments, List notEditableEquipments) { + if (notEditableEquipments.size() == filterEquipments.getIdentifiableAttributes().size()) { + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate("byFilterModificationFailed_" + reports.size(), "No equipment(s) have been modified on filter ${" + KEY_FILTER_NAME + "}") + .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); + } else { + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate("byFilterModification_" + reports.size(), "Successful application of new modification by formula on filter ${" + KEY_FILTER_NAME + "}") + .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) + .withSeverity(TypedValue.INFO_SEVERITY) + .build()); + + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate("numberOfValidEquipment" + reports.size(), " Number of equipment modified : ${" + KEY_NB_CHANGED + "}") + .withUntypedValue(KEY_NB_CHANGED, filterEquipments.getIdentifiableAttributes().size() - notEditableEquipments.size()) + .withSeverity(TypedValue.INFO_SEVERITY) + .build()); + + if (!CollectionUtils.isEmpty(notEditableEquipments)) { + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate("NotEditedEquipmentsFilter_" + reports.size(), " ${" + KEY_NB_UNCHANGED + "} equipment(s) were not modified") + .withUntypedValue(KEY_NB_UNCHANGED, notEditableEquipments.size()) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); + } + } + + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate("editedFieldFilter_" + reports.size(), " Edited field :${" + KEY_FIELD_NAME + "}") + .withUntypedValue(KEY_FIELD_NAME, filterModificationInfos.getEditedField()) + .withSeverity(TypedValue.INFO_SEVERITY) + .build()); + + if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { + String equipmentIds = String.join(", ", filterEquipments.getNotFoundEquipments()); + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate("filterEquipmentsNotFound_" + reports.size(), " Equipment not found : ${" + KEY_VALUE + "}") + .withUntypedValue(KEY_VALUE, equipmentIds) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); + } + } + + protected void applyModification(Identifiable identifiable, + FilterModificationInfos filterModificationInfos, + List reports, + List notEditableEquipments) { + + // check pre-conditions + if (!preCheckValue(identifiable, filterModificationInfos, reports, notEditableEquipments)) { + return; + } + + // perform to apply new value + try { + final Object newValue = applyValue(identifiable, filterModificationInfos); + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate("EquipmentModifiedReport_" + reports.size(), " ${" + KEY_EQPT_TYPE + "} id : ${" + KEY_EQPT_NAME + "}, new value of ${" + KEY_FIELD_NAME + "} : ${" + KEY_VALUE + "}") + .withUntypedValue(KEY_EQPT_TYPE, identifiable.getType().name()) + .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) + .withUntypedValue(KEY_FIELD_NAME, filterModificationInfos.getEditedField()) + .withUntypedValue(KEY_VALUE, String.valueOf(newValue)) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); + } catch (Exception e) { + notEditableEquipments.add(identifiable.getId()); + equipmentNotModifiedCount += 1; + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate("EquipmentModifiedReportExceptionf_" + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : ${" + KEY_VALUE + "}") + .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) + .withUntypedValue(KEY_VALUE, e.getMessage()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); + } + } + + protected abstract boolean preCheckValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos, + List reports, List notEditableEquipments); + + protected abstract Object applyValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos); + +} diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java new file mode 100644 index 000000000..e544e6e34 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java @@ -0,0 +1,200 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter; + +import com.powsybl.commons.report.ReportNode; +import com.powsybl.commons.report.TypedValue; +import com.powsybl.iidm.network.*; +import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; +import org.gridsuite.modification.server.dto.FilterEquipments; +import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.Operator; +import org.gridsuite.modification.server.modifications.ModificationUtils; +import org.jetbrains.annotations.NotNull; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +import static org.gridsuite.modification.server.modifications.ModificationUtils.*; + +public class ByFormulaModification extends AbstractByFilterModification { + private final ByFormulaModificationInfos modificationInfos; + + public ByFormulaModification(ByFormulaModificationInfos modificationInfos) { + super(); + this.modificationInfos = modificationInfos; + } + + @Override + public void check(Network network) throws NetworkModificationException { + if (modificationInfos == null) { + throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Missing required attributes to modify the equipment"); + } + + if (CollectionUtils.isEmpty(modificationInfos.getFormulaInfosList())) { + throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "At least one formula is required"); + } + + if (modificationInfos.getFormulaInfosList().stream().anyMatch(formulaInfos -> CollectionUtils.isEmpty(formulaInfos.getFilters()))) { + throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Every formula must have at least one filter"); + } + } + + @Override + public void apply(Network network, ReportNode subReportNode) { + // collect all filters from all variations + Map filters = modificationInfos.getFormulaInfosList().stream() + .flatMap(v -> v.getFilters().stream()) + .filter(distinctByKey(FilterInfos::getId)) + .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); + + Map exportFilters = ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, modificationInfos.getErrorType()); + + if (exportFilters != null) { + ReportNode formulaSubReporter = subReportNode.newReportNode().withMessageTemplate("appliedFormulasModifications", "Formulas").add(); + List formulaReports = new ArrayList<>(); + modificationInfos.getFormulaInfosList().forEach(formulaInfos -> + formulaInfos.getFilters().forEach(filterInfos -> + applyFormulaOnFilterEquipments(network, exportFilters, formulaReports, formulaInfos, filterInfos))); + subReportNode.newReportNode() + .withMessageTemplate("byFormulaModification", "New modification by formula on ${" + KEY_EQPT_TYPE + "}") + .withUntypedValue(KEY_EQPT_TYPE, modificationInfos.getIdentifiableType().name()) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); + if (equipmentNotModifiedCount == 0 && equipmentNotFoundCount == 0) { + subReportNode.newReportNode() + .withMessageTemplate("byFormulaModificationALL", "All equipment have been modified : ${" + KEY_VALUE + "} equipment(s)") + .withUntypedValue(KEY_VALUE, equipmentCount) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); + report(formulaSubReporter, formulaReports); + } else { + if (equipmentNotModifiedCount == equipmentCount) { + createReport(subReportNode, "byFormulaModificationNone", + "No equipment have been modified", + Map.of(), TypedValue.ERROR_SEVERITY); + } else { + subReportNode.newReportNode() + .withMessageTemplate("byFormulaModificationSome", "Some of the equipment have been modified : ${" + KEY_NB_CHANGED + "} equipment(s) modified and ${" + KEY_NB_UNCHANGED + "} equipment(s) not modified") + .withUntypedValue(KEY_NB_CHANGED, equipmentCount - equipmentNotModifiedCount) + .withUntypedValue(KEY_NB_UNCHANGED, equipmentNotModifiedCount + equipmentNotFoundCount) + .withSeverity(TypedValue.WARN_SEVERITY) + .add(); + report(formulaSubReporter, formulaReports); + } + } + } + } + + private void report(ReportNode formulaSubReportNode, List formulaReports) { + formulaSubReportNode.newReportNode() + .withMessageTemplate("appliedFormulasModifications", " Formulas") + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); + formulaReports.forEach(report -> insertReportNode(formulaSubReportNode, report)); + } + + private void applyFormulaOnFilterEquipments(Network network, + Map exportFilters, + List formulaReports, + FormulaInfos formulaInfos, + FilterInfos filterInfos) { + FilterEquipments filterEquipments = exportFilters.get(filterInfos.getId()); + + if (CollectionUtils.isEmpty(filterEquipments.getIdentifiableAttributes())) { + formulaReports.add(ReportNode.newRootReportNode() + .withMessageTemplate("byFormulaModificationFormulaFilter_" + formulaReports.size(), "No equipments were found for filter ${" + KEY_FILTER_NAME + "}") + .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); + } else { + equipmentCount += filterEquipments.getIdentifiableAttributes().size(); + if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { + equipmentNotFoundCount += filterEquipments.getNotFoundEquipments().size(); + } + List notEditableEquipments = new ArrayList<>(); + List equipmentsReport = new ArrayList<>(); + filterEquipments.getIdentifiableAttributes() + .stream() + .map(attributes -> network.getIdentifiable(attributes.getId())) + .filter(identifiable -> { + boolean isEditableEquipment = isEquipmentEditable(identifiable, formulaInfos, equipmentsReport); + if (!isEditableEquipment) { + notEditableEquipments.add(identifiable.getId()); + equipmentNotModifiedCount += 1; + } + return isEditableEquipment; + }) + .forEach(identifiable -> applyModification(identifiable, formulaInfos, equipmentsReport, notEditableEquipments)); + + createByFilterModificationReports(formulaReports, formulaInfos, filterInfos, filterEquipments, notEditableEquipments); + + formulaReports.addAll(equipmentsReport); + } + } + + @Override + protected boolean preCheckValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos, List reports, List notEditableEquipments) { + FormulaInfos formulaInfos = (FormulaInfos) filterModificationInfos; + Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(identifiable); + Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(identifiable); + if (value1 == null || Double.isNaN(value1) || value2 == null || Double.isNaN(value2)) { + equipmentNotModifiedCount += 1; + notEditableEquipments.add(identifiable.getId()); + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate(EQUIPMENT_MODIFIED_REPORT_ERROR + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : At least one of the value or referenced field is null") + .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); + return false; + } + + if (value2 == 0 && formulaInfos.getOperator() == Operator.DIVISION) { + equipmentNotModifiedCount += 1; + notEditableEquipments.add(identifiable.getId()); + return false; + } + return true; + } + + @Override + protected Object applyValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos) { + FormulaInfos formulaInfos = (FormulaInfos) filterModificationInfos; + Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(identifiable); + Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(identifiable); + final Double newValue = applyOperation(formulaInfos.getOperator(), value1, value2); + switch (identifiable.getType()) { + case GENERATOR -> GeneratorField.setNewValue((Generator) identifiable, formulaInfos.getEditedField(), newValue); + case BATTERY -> BatteryField.setNewValue((Battery) identifiable, formulaInfos.getEditedField(), newValue); + case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) identifiable, formulaInfos.getEditedField(), newValue); + case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, formulaInfos.getEditedField(), newValue); + case LOAD -> LoadField.setNewValue((Load) identifiable, formulaInfos.getEditedField(), newValue); + case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) identifiable, formulaInfos.getEditedField(), newValue); + default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Unsupported equipment"); + } + return newValue; + } + + private Double applyOperation(Operator operator, @NotNull Double value1, @NotNull Double value2) { + return switch (operator) { + case ADDITION -> value1 + value2; + case SUBTRACTION -> value1 - value2; + case MULTIPLICATION -> value1 * value2; + case DIVISION -> value1 / value2; + case PERCENTAGE -> value1 * (value2 / 100); + }; + } +} diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java new file mode 100644 index 000000000..1d616316e --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -0,0 +1,175 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter; + +import com.powsybl.commons.report.ReportNode; +import com.powsybl.commons.report.TypedValue; +import com.powsybl.iidm.network.*; +import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.BySimpleModificationInfos; +import org.gridsuite.modification.server.dto.FilterEquipments; +import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.byfilter.DataType; +import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.PropertySimpleModificationInfos; +import org.gridsuite.modification.server.modifications.ModificationUtils; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +import static org.gridsuite.modification.server.modifications.ModificationUtils.*; + +public class BySimpleModification extends AbstractByFilterModification { + private final BySimpleModificationInfos modificationInfos; + + public BySimpleModification(BySimpleModificationInfos modificationInfos) { + super(); + this.modificationInfos = modificationInfos; + } + + @Override + public void check(Network network) throws NetworkModificationException { + if (modificationInfos == null) { + throw new NetworkModificationException(NetworkModificationException.Type.BY_FILTER_MODIFICATION_ERROR, "Missing required attributes to modify the equipment"); + } + + if (CollectionUtils.isEmpty(modificationInfos.getSimpleModificationInfosList())) { + throw new NetworkModificationException(NetworkModificationException.Type.BY_FILTER_MODIFICATION_ERROR, "At least one modification is required"); + } + + if (modificationInfos.getSimpleModificationInfosList().stream().anyMatch(formulaInfos -> CollectionUtils.isEmpty(formulaInfos.getFilters()))) { + throw new NetworkModificationException(NetworkModificationException.Type.BY_FILTER_MODIFICATION_ERROR, "Every modification must have at least one filter"); + } + } + + @Override + public void apply(Network network, ReportNode subReportNode) { + // collect all filters from all variations + Map filters = modificationInfos.getSimpleModificationInfosList().stream() + .flatMap(v -> v.getFilters().stream()) + .filter(distinctByKey(FilterInfos::getId)) + .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); + + Map exportFilters = ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, modificationInfos.getErrorType()); + + if (exportFilters != null) { + ReportNode formulaSubReporter = subReportNode.newReportNode().withMessageTemplate("appliedFormulasModifications", "Formulas").add(); + List formulaReports = new ArrayList<>(); + modificationInfos.getSimpleModificationInfosList().forEach(fieldModificationInfos -> + fieldModificationInfos.getFilters().forEach(filterInfos -> + applyModificationOnFilterEquipments(network, exportFilters, formulaReports, fieldModificationInfos, filterInfos))); + subReportNode.newReportNode() + .withMessageTemplate("byFormulaModification", "New modification by formula on ${" + KEY_EQPT_TYPE + "}") + .withUntypedValue(KEY_EQPT_TYPE, modificationInfos.getIdentifiableType().name()) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); + if (equipmentNotModifiedCount == 0 && equipmentNotFoundCount == 0) { + subReportNode.newReportNode() + .withMessageTemplate("byFormulaModificationALL", "All equipment have been modified : ${" + KEY_VALUE + "} equipment(s)") + .withUntypedValue(KEY_VALUE, equipmentCount) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); + report(formulaSubReporter, formulaReports); + } else { + if (equipmentNotModifiedCount == equipmentCount) { + createReport(subReportNode, "byFormulaModificationNone", + "No equipment have been modified", + Map.of(), TypedValue.ERROR_SEVERITY); + } else { + subReportNode.newReportNode() + .withMessageTemplate("byFormulaModificationSome", "Some of the equipment have been modified : ${" + KEY_NB_CHANGED + "} equipment(s) modified and ${" + KEY_NB_UNCHANGED + "} equipment(s) not modified") + .withUntypedValue(KEY_NB_CHANGED, equipmentCount - equipmentNotModifiedCount) + .withUntypedValue(KEY_NB_UNCHANGED, equipmentNotModifiedCount + equipmentNotFoundCount) + .withSeverity(TypedValue.WARN_SEVERITY) + .add(); + report(formulaSubReporter, formulaReports); + } + } + } + } + + private void report(ReportNode formulaSubReportNode, List formulaReports) { + formulaSubReportNode.newReportNode() + .withMessageTemplate("appliedSimpleModifications", " Simple modification") + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); + formulaReports.forEach(report -> insertReportNode(formulaSubReportNode, report)); + } + + private void applyModificationOnFilterEquipments(Network network, + Map exportFilters, + List formulaReports, + AbstractSimpleModificationInfos simpleModificationInfos, + FilterInfos filterInfos) { + FilterEquipments filterEquipments = exportFilters.get(filterInfos.getId()); + + if (CollectionUtils.isEmpty(filterEquipments.getIdentifiableAttributes())) { + formulaReports.add(ReportNode.newRootReportNode() + .withMessageTemplate("byFormulaModificationFormulaFilter_" + formulaReports.size(), "No equipments were found for filter ${" + KEY_FILTER_NAME + "}") + .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); + } else { + equipmentCount += filterEquipments.getIdentifiableAttributes().size(); + if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { + equipmentNotFoundCount += filterEquipments.getNotFoundEquipments().size(); + } + List notEditableEquipments = new ArrayList<>(); + List equipmentsReport = new ArrayList<>(); + filterEquipments.getIdentifiableAttributes() + .stream() + .map(attributes -> network.getIdentifiable(attributes.getId())) + .filter(identifiable -> { + boolean isEditableEquipment = isEquipmentEditable(identifiable, simpleModificationInfos, equipmentsReport); + if (!isEditableEquipment) { + notEditableEquipments.add(identifiable.getId()); + equipmentNotModifiedCount += 1; + } + return isEditableEquipment; + }) + .forEach(identifiable -> applyModification(identifiable, simpleModificationInfos, equipmentsReport, notEditableEquipments)); + + createByFilterModificationReports(formulaReports, simpleModificationInfos, filterInfos, filterEquipments, notEditableEquipments); + + formulaReports.addAll(equipmentsReport); + } + } + + @Override + protected boolean preCheckValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos, List reports, List notEditableEquipments) { + return true; + } + + @Override + protected Object applyValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos) { + AbstractSimpleModificationInfos simpleModificationInfos = (AbstractSimpleModificationInfos) filterModificationInfos; + if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { + identifiable.setProperty( + ((PropertySimpleModificationInfos) simpleModificationInfos).getPropertyName(), + (String) simpleModificationInfos.getValue() + ); + } else { + switch (identifiable.getType()) { + case GENERATOR -> GeneratorField.setNewValue((Generator) identifiable, simpleModificationInfos); + case BATTERY -> BatteryField.setNewValue((Battery) identifiable, simpleModificationInfos); + case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) identifiable, simpleModificationInfos); + case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, simpleModificationInfos); + case LOAD -> LoadField.setNewValue((Load) identifiable, simpleModificationInfos); + case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) identifiable, simpleModificationInfos); + default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FILTER_MODIFICATION_ERROR, "Unsupported equipment"); + } + } + return simpleModificationInfos.getValue(); + } +} diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 2d7ef38e6..4877e7d8a 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -300,3 +300,6 @@ databaseChangeLog: - include: file: changesets/changelog_20240709T090545Z.xml relativeToChangelogFile: true + - include: + file: changesets/changelog_20240801T080812Z.xml + relativeToChangelogFile: true diff --git a/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java index 650e80d9a..f76234b2f 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java @@ -19,9 +19,9 @@ import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.dto.formula.Operator; -import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.Operator; +import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.service.FilterService; import org.gridsuite.modification.server.utils.NetworkCreation; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BatteryByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BatteryByFormulaModificationTest.java index c6f9d91f0..7027c79a6 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryByFormulaModificationTest.java @@ -14,10 +14,10 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.dto.formula.Operator; -import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; -import org.gridsuite.modification.server.dto.formula.equipmentfield.BatteryField; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.Operator; +import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.BatteryField; import org.junit.Test; import java.util.Date; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorByFormulaModificationTest.java index 9c3a4d38a..7de03ea24 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorByFormulaModificationTest.java @@ -23,10 +23,10 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; import org.gridsuite.modification.server.dto.FilterInfos; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.dto.formula.Operator; -import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; -import org.gridsuite.modification.server.dto.formula.equipmentfield.GeneratorField; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.Operator; +import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.GeneratorField; import org.junit.Test; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java index e765bf8eb..c6915176c 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java @@ -12,10 +12,10 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.dto.formula.Operator; -import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; -import org.gridsuite.modification.server.dto.formula.equipmentfield.LoadField; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.Operator; +import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.LoadField; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import java.util.Date; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorByFormulaModificationTest.java index 641b98be0..de45eb2e5 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorByFormulaModificationTest.java @@ -15,10 +15,10 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.dto.formula.Operator; -import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; -import org.gridsuite.modification.server.dto.formula.equipmentfield.ShuntCompensatorField; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.Operator; +import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.ShuntCompensatorField; import org.junit.Test; import java.util.Date; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerByFormulaModificationTest.java index d5d56e4ce..2e7ba50b4 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerByFormulaModificationTest.java @@ -15,10 +15,10 @@ import org.gridsuite.filter.utils.EquipmentType; import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.dto.formula.Operator; -import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; -import org.gridsuite.modification.server.dto.formula.equipmentfield.TwoWindingsTransformerField; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.Operator; +import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.junit.Test; import java.util.Date; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java index 44146aba6..0b8a15de2 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java @@ -16,15 +16,15 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.formula.FormulaInfos; -import org.gridsuite.modification.server.dto.formula.Operator; -import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; -import org.gridsuite.modification.server.dto.formula.equipmentfield.VoltageLevelField; +import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.byfilter.formula.Operator; +import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.VoltageLevelField; import java.util.Date; import java.util.List; -import static org.gridsuite.modification.server.modifications.ByFormulaModification.EQUIPMENT_MODIFIED_REPORT_ERROR; +import static org.gridsuite.modification.server.modifications.byfilter.ByFormulaModification.EQUIPMENT_MODIFIED_REPORT_ERROR; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessageWithoutRank; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; From dc12a0f3a7fc8e4477f70bb44bac0b83932cd1d7 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 1 Aug 2024 11:22:31 +0200 Subject: [PATCH 02/42] Add changelog file --- .../changesets/changelog_20240801T080812Z.xml | 250 ++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 src/main/resources/db/changelog/changesets/changelog_20240801T080812Z.xml diff --git a/src/main/resources/db/changelog/changesets/changelog_20240801T080812Z.xml b/src/main/resources/db/changelog/changesets/changelog_20240801T080812Z.xml new file mode 100644 index 000000000..adf9613d0 --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20240801T080812Z.xml @@ -0,0 +1,250 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From f85cb80d3b3b59144c6635ea676053c037578da9 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 1 Aug 2024 23:14:57 +0200 Subject: [PATCH 03/42] change naming --- .../gridsuite/modification/server/ModificationType.java | 2 +- .../modification/server/NetworkModificationException.java | 2 +- .../server/dto/BySimpleModificationInfos.java | 2 +- .../modifications/byfilter/BySimpleModification.java | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/ModificationType.java b/src/main/java/org/gridsuite/modification/server/ModificationType.java index cc8b3c610..fa08e104d 100644 --- a/src/main/java/org/gridsuite/modification/server/ModificationType.java +++ b/src/main/java/org/gridsuite/modification/server/ModificationType.java @@ -50,7 +50,7 @@ public enum ModificationType { TABULAR_MODIFICATION(PreloadingStrategy.COLLECTION), TABULAR_CREATION(PreloadingStrategy.COLLECTION), BY_FORMULA_MODIFICATION(PreloadingStrategy.COLLECTION), - BY_FILTER_MODIFICATION(PreloadingStrategy.COLLECTION), + BY_SIMPLE_MODIFICATION(PreloadingStrategy.COLLECTION), COMPOSITE_MODIFICATION(PreloadingStrategy.COLLECTION); private final PreloadingStrategy strategy; diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java index f53640784..348ce23a3 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java @@ -113,7 +113,7 @@ public enum Type { CREATE_CONVERTER_STATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), MODIFY_CONVERTER_STATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), BY_FORMULA_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), - BY_FILTER_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), + BY_SIMPLE_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), HVDC_LINE_NOT_FOUND(HttpStatus.NOT_FOUND), COMPOSITE_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR); diff --git a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java index 3a8833424..f64fb27d6 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java @@ -52,6 +52,6 @@ public BySimpleModification toModification() { @Override public ReportNode createSubReportNode(ReportNode reportNode) { - return reportNode.newReportNode().withMessageTemplate(ModificationType.BY_FILTER_MODIFICATION.name(), "By filter modification").add(); + return reportNode.newReportNode().withMessageTemplate(ModificationType.BY_SIMPLE_MODIFICATION.name(), "By filter modification").add(); } } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index 1d616316e..c3a076aad 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -41,15 +41,15 @@ public BySimpleModification(BySimpleModificationInfos modificationInfos) { @Override public void check(Network network) throws NetworkModificationException { if (modificationInfos == null) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_FILTER_MODIFICATION_ERROR, "Missing required attributes to modify the equipment"); + throw new NetworkModificationException(NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR, "Missing required attributes to modify the equipment"); } if (CollectionUtils.isEmpty(modificationInfos.getSimpleModificationInfosList())) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_FILTER_MODIFICATION_ERROR, "At least one modification is required"); + throw new NetworkModificationException(NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR, "At least one modification is required"); } if (modificationInfos.getSimpleModificationInfosList().stream().anyMatch(formulaInfos -> CollectionUtils.isEmpty(formulaInfos.getFilters()))) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_FILTER_MODIFICATION_ERROR, "Every modification must have at least one filter"); + throw new NetworkModificationException(NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR, "Every modification must have at least one filter"); } } @@ -167,7 +167,7 @@ protected Object applyValue(Identifiable identifiable, FilterModificationInfo case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, simpleModificationInfos); case LOAD -> LoadField.setNewValue((Load) identifiable, simpleModificationInfos); case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) identifiable, simpleModificationInfos); - default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FILTER_MODIFICATION_ERROR, "Unsupported equipment"); + default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR, "Unsupported equipment"); } } return simpleModificationInfos.getValue(); From 2a84f1ceb5bb86b1b11008cd37a157964671c3c5 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Wed, 21 Aug 2024 15:43:26 +0200 Subject: [PATCH 04/42] Renaming --- .../server/dto/BySimpleModificationInfos.java | 4 +-- ...=> AbstractModificationByFilterInfos.java} | 2 +- .../byfilter/equipmentfield/BatteryField.java | 4 +-- .../equipmentfield/GeneratorField.java | 4 +-- .../byfilter/equipmentfield/LoadField.java | 4 +-- .../equipmentfield/ShuntCompensatorField.java | 4 +-- .../TwoWindingsTransformerField.java | 4 +-- .../equipmentfield/VoltageLevelField.java | 4 +-- .../dto/byfilter/formula/FormulaInfos.java | 4 +-- ...oleanSimpleModificationByFilterInfos.java} | 2 +- ...oubleSimpleModificationByFilterInfos.java} | 2 +- ... EnumSimpleModificationByFilterInfos.java} | 2 +- ...tegerSimpleModificationByFilterInfos.java} | 2 +- ...pertySimpleModificationByFilterInfos.java} | 2 +- ...a => SimpleModificationByFilterInfos.java} | 26 ++++++++++++------- ...tringSimpleModificationByFilterInfos.java} | 2 +- .../byfilter/BySimpleModificationEntity.java | 6 ++--- .../BooleanSimpleModificationEntity.java | 16 ++++++------ .../DoubleSimpleModificationEntity.java | 16 ++++++------ .../IntegerSimpleModificationEntity.java | 16 ++++++------ .../PropertySimpleModificationEntity.java | 16 ++++++------ .../simple/SimpleModificationEntity.java | 8 +++--- .../StringSimpleModificationEntity.java | 16 ++++++------ .../AbstractByFilterModification.java | 12 ++++----- .../byfilter/ByFormulaModification.java | 6 ++--- .../byfilter/BySimpleModification.java | 16 ++++++------ 26 files changed, 103 insertions(+), 97 deletions(-) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/{FilterModificationInfos.java => AbstractModificationByFilterInfos.java} (90%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{BooleanSimpleModificationInfos.java => BooleanSimpleModificationByFilterInfos.java} (89%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{DoubleSimpleModificationInfos.java => DoubleSimpleModificationByFilterInfos.java} (89%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{EnumSimpleModificationInfos.java => EnumSimpleModificationByFilterInfos.java} (84%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{IntegerSimpleModificationInfos.java => IntegerSimpleModificationByFilterInfos.java} (89%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{PropertySimpleModificationInfos.java => PropertySimpleModificationByFilterInfos.java} (91%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{AbstractSimpleModificationInfos.java => SimpleModificationByFilterInfos.java} (50%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{StringSimpleModificationInfos.java => StringSimpleModificationByFilterInfos.java} (89%) diff --git a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java index f64fb27d6..ee55dae16 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java @@ -15,7 +15,7 @@ import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.ModificationType; import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.BySimpleModificationEntity; import org.gridsuite.modification.server.modifications.byfilter.BySimpleModification; @@ -38,7 +38,7 @@ public class BySimpleModificationInfos extends ModificationInfos { private IdentifiableType identifiableType; @Schema(description = "list of modifications") - private List> simpleModificationInfosList; + private List> simpleModificationInfosList; @Override public BySimpleModificationEntity toEntity() { diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/FilterModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java similarity index 90% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/FilterModificationInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java index b62cba9b9..c396f539a 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/FilterModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java @@ -12,7 +12,7 @@ @SuperBuilder @NoArgsConstructor @Data -public class FilterModificationInfos { +public abstract class AbstractModificationByFilterInfos { @Schema(description = "id") private UUID id; 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 163823f3b..f057834c7 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 @@ -10,7 +10,7 @@ import com.powsybl.iidm.network.Battery; import com.powsybl.iidm.network.extensions.ActivePowerControl; import com.powsybl.iidm.network.extensions.ActivePowerControlAdder; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -48,7 +48,7 @@ public static void setNewValue(Battery battery, String batteryField, Double newV } } - public static void setNewValue(Battery battery, AbstractSimpleModificationInfos fieldModificationInfos) { + public static void setNewValue(Battery battery, SimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(battery, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } 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 bbbd2204f..80efe6a9c 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 @@ -9,7 +9,7 @@ import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.extensions.*; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -141,7 +141,7 @@ public static void setNewValue(Generator generator, String generatorField, Doubl } } - public static void setNewValue(Generator generator, AbstractSimpleModificationInfos fieldModificationInfos) { + public static void setNewValue(Generator generator, SimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(generator, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java index a6b218426..ffbec72f2 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java @@ -8,7 +8,7 @@ package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.Load; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -34,7 +34,7 @@ public static void setNewValue(Load load, String loadField, Double newValue) { } } - public static void setNewValue(Load load, AbstractSimpleModificationInfos fieldModificationInfos) { + public static void setNewValue(Load load, SimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(load, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index 79ca6dd34..d6a0c3c65 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -12,7 +12,7 @@ import com.powsybl.iidm.network.ShuntCompensatorModelType; import com.powsybl.iidm.network.VoltageLevel; import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -59,7 +59,7 @@ public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCo } } - public static void setNewValue(ShuntCompensator shuntCompensator, AbstractSimpleModificationInfos fieldModificationInfos) { + public static void setNewValue(ShuntCompensator shuntCompensator, SimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(shuntCompensator, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index 7dcdd64d2..d7c8b7d79 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -3,7 +3,7 @@ import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.RatioTapChanger; import com.powsybl.iidm.network.TwoWindingsTransformer; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; public enum TwoWindingsTransformerField { R, @@ -69,7 +69,7 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin } } - public static void setNewValue(TwoWindingsTransformer transformer, AbstractSimpleModificationInfos fieldModificationInfos) { + public static void setNewValue(TwoWindingsTransformer transformer, SimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(transformer, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java index 5ddd204aa..1ed49454c 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java @@ -10,7 +10,7 @@ import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -59,7 +59,7 @@ public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelFie } } - public static void setNewValue(VoltageLevel voltageLevel, AbstractSimpleModificationInfos fieldModificationInfos) { + public static void setNewValue(VoltageLevel voltageLevel, SimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(voltageLevel, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java index ec0691381..6a4072bd7 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java @@ -11,7 +11,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.formula.FormulaEntity; /** @@ -21,7 +21,7 @@ @SuperBuilder @NoArgsConstructor @Data -public class FormulaInfos extends FilterModificationInfos { +public class FormulaInfos extends AbstractModificationByFilterInfos { @Schema(description = "First reference field or value") private ReferenceFieldOrValue fieldOrValue1; diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationByFilterInfos.java similarity index 89% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationByFilterInfos.java index a8b2e04ba..2f91d27d3 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationByFilterInfos.java @@ -19,7 +19,7 @@ @SuperBuilder @NoArgsConstructor @Data -public class BooleanSimpleModificationInfos extends AbstractSimpleModificationInfos { +public class BooleanSimpleModificationByFilterInfos extends SimpleModificationByFilterInfos { @Schema(description = "value") private Boolean value; diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationByFilterInfos.java similarity index 89% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationByFilterInfos.java index 1e93ae42b..e68c1adcf 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationByFilterInfos.java @@ -19,7 +19,7 @@ @SuperBuilder @NoArgsConstructor @Data -public class DoubleSimpleModificationInfos extends AbstractSimpleModificationInfos { +public class DoubleSimpleModificationByFilterInfos extends SimpleModificationByFilterInfos { @Schema(description = "value") private Double value; diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationByFilterInfos.java similarity index 84% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationByFilterInfos.java index ba3e6a2f4..80beff17d 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationByFilterInfos.java @@ -17,6 +17,6 @@ @SuperBuilder @NoArgsConstructor @Data -public class EnumSimpleModificationInfos extends StringSimpleModificationInfos { +public class EnumSimpleModificationByFilterInfos extends StringSimpleModificationByFilterInfos { } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationByFilterInfos.java similarity index 89% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationByFilterInfos.java index 92fa0b760..9fe5895a0 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationByFilterInfos.java @@ -19,7 +19,7 @@ @SuperBuilder @NoArgsConstructor @Data -public class IntegerSimpleModificationInfos extends AbstractSimpleModificationInfos { +public class IntegerSimpleModificationByFilterInfos extends SimpleModificationByFilterInfos { @Schema(description = "value") private Integer value; diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationByFilterInfos.java similarity index 91% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationByFilterInfos.java index 37e47e471..a3c83c353 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationByFilterInfos.java @@ -19,7 +19,7 @@ @SuperBuilder @NoArgsConstructor @Data -public class PropertySimpleModificationInfos extends StringSimpleModificationInfos { +public class PropertySimpleModificationByFilterInfos extends StringSimpleModificationByFilterInfos { @Schema(description = "property name") private String propertyName; diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java similarity index 50% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java index a5b7b1310..60cf4253d 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto.byfilter.simple; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; @@ -15,7 +16,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; /** @@ -26,22 +27,27 @@ property = "dataType", include = JsonTypeInfo.As.EXISTING_PROPERTY) @JsonSubTypes({ - @JsonSubTypes.Type(value = StringSimpleModificationInfos.class, name = "STRING"), - @JsonSubTypes.Type(value = BooleanSimpleModificationInfos.class, name = "BOOLEAN"), - @JsonSubTypes.Type(value = EnumSimpleModificationInfos.class, name = "ENUM"), - @JsonSubTypes.Type(value = DoubleSimpleModificationInfos.class, name = "DOUBLE"), - @JsonSubTypes.Type(value = IntegerSimpleModificationInfos.class, name = "INTEGER"), - @JsonSubTypes.Type(value = PropertySimpleModificationInfos.class, name = "PROPERTY"), + @JsonSubTypes.Type(value = StringSimpleModificationByFilterInfos.class, name = "STRING"), + @JsonSubTypes.Type(value = BooleanSimpleModificationByFilterInfos.class, name = "BOOLEAN"), + @JsonSubTypes.Type(value = EnumSimpleModificationByFilterInfos.class, name = "ENUM"), + @JsonSubTypes.Type(value = DoubleSimpleModificationByFilterInfos.class, name = "DOUBLE"), + @JsonSubTypes.Type(value = IntegerSimpleModificationByFilterInfos.class, name = "INTEGER"), + @JsonSubTypes.Type(value = PropertySimpleModificationByFilterInfos.class, name = "PROPERTY"), }) @JsonInclude(JsonInclude.Include.NON_NULL) @SuperBuilder @NoArgsConstructor @Data -public abstract class AbstractSimpleModificationInfos extends FilterModificationInfos { +public class SimpleModificationByFilterInfos extends AbstractModificationByFilterInfos { @Schema(description = "Data type") private DataType dataType; - public abstract SimpleModificationEntity toEntity(); + @JsonIgnore + public SimpleModificationEntity toEntity() { + throw new UnsupportedOperationException("Unsupported operation toEntity for instant of class " + this.getClass().getName()); + } - public abstract T getValue(); + public T getValue() { + throw new UnsupportedOperationException("Unsupported operation getValue for instant of class " + this.getClass().getName()); + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationByFilterInfos.java similarity index 89% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationByFilterInfos.java index 534607160..83a0614fd 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationByFilterInfos.java @@ -19,7 +19,7 @@ @SuperBuilder @NoArgsConstructor @Data -public class StringSimpleModificationInfos extends AbstractSimpleModificationInfos { +public class StringSimpleModificationByFilterInfos extends SimpleModificationByFilterInfos { @Schema(description = "value") private String value; diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java index cfbf66f79..f00152355 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java @@ -8,7 +8,7 @@ import lombok.Setter; import org.gridsuite.modification.server.dto.BySimpleModificationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; import org.gridsuite.modification.server.entities.ModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; @@ -44,13 +44,13 @@ private void assignAttributes(BySimpleModificationInfos bySimpleModificationInfo if (simpleModificationEntities == null) { simpleModificationEntities = bySimpleModificationInfos.getSimpleModificationInfosList() .stream() - .map(AbstractSimpleModificationInfos::toEntity) + .map(SimpleModificationByFilterInfos::toEntity) .toList(); } else { simpleModificationEntities.clear(); simpleModificationEntities.addAll(bySimpleModificationInfos.getSimpleModificationInfosList() .stream() - .map(AbstractSimpleModificationInfos::toEntity) + .map(SimpleModificationByFilterInfos::toEntity) .toList()); } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java index ca4a4b1ac..50ad4b84b 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java @@ -12,7 +12,7 @@ import jakarta.persistence.Table; import lombok.Data; import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.BooleanSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.BooleanSimpleModificationByFilterInfos; /** * @author Thang PHAM @@ -25,17 +25,17 @@ public class BooleanSimpleModificationEntity extends SimpleModificationEntity { @Column(name = "value_") // "value" is not supported in UT with H2 Boolean value; - public BooleanSimpleModificationEntity(BooleanSimpleModificationInfos booleanSimpleModificationInfos) { - super(booleanSimpleModificationInfos); - this.value = booleanSimpleModificationInfos.getValue(); + public BooleanSimpleModificationEntity(BooleanSimpleModificationByFilterInfos booleanSimpleModificationByFilterInfos) { + super(booleanSimpleModificationByFilterInfos); + this.value = booleanSimpleModificationByFilterInfos.getValue(); } @Override - public BooleanSimpleModificationInfos toSimpleModificationInfos() { - BooleanSimpleModificationInfos booleanSimpleModificationInfos = BooleanSimpleModificationInfos.builder() + public BooleanSimpleModificationByFilterInfos toSimpleModificationInfos() { + BooleanSimpleModificationByFilterInfos booleanSimpleModificationByFilterInfos = BooleanSimpleModificationByFilterInfos.builder() .value(value) .build(); - assignAttributes(booleanSimpleModificationInfos); - return booleanSimpleModificationInfos; + assignAttributes(booleanSimpleModificationByFilterInfos); + return booleanSimpleModificationByFilterInfos; } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java index a7059f340..b9ab1558f 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java @@ -12,7 +12,7 @@ import jakarta.persistence.Table; import lombok.Data; import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.DoubleSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.DoubleSimpleModificationByFilterInfos; /** * @author Thang PHAM @@ -25,17 +25,17 @@ public class DoubleSimpleModificationEntity extends SimpleModificationEntity { @Column(name = "value_") // "value" is not supported in UT with H2 Double value; - public DoubleSimpleModificationEntity(DoubleSimpleModificationInfos doubleSimpleModificationInfos) { - super(doubleSimpleModificationInfos); - this.value = doubleSimpleModificationInfos.getValue(); + public DoubleSimpleModificationEntity(DoubleSimpleModificationByFilterInfos doubleSimpleModificationByFilterInfos) { + super(doubleSimpleModificationByFilterInfos); + this.value = doubleSimpleModificationByFilterInfos.getValue(); } @Override - public DoubleSimpleModificationInfos toSimpleModificationInfos() { - DoubleSimpleModificationInfos doubleSimpleModificationInfos = DoubleSimpleModificationInfos.builder() + public DoubleSimpleModificationByFilterInfos toSimpleModificationInfos() { + DoubleSimpleModificationByFilterInfos doubleSimpleModificationByFilterInfos = DoubleSimpleModificationByFilterInfos.builder() .value(value) .build(); - assignAttributes(doubleSimpleModificationInfos); - return doubleSimpleModificationInfos; + assignAttributes(doubleSimpleModificationByFilterInfos); + return doubleSimpleModificationByFilterInfos; } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java index 55867883e..e86fc3194 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java @@ -12,7 +12,7 @@ import jakarta.persistence.Table; import lombok.Data; import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.IntegerSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.IntegerSimpleModificationByFilterInfos; /** * @author Thang PHAM @@ -25,17 +25,17 @@ public class IntegerSimpleModificationEntity extends SimpleModificationEntity { @Column(name = "value_") // "value" is not supported in UT with H2 Integer value; - public IntegerSimpleModificationEntity(IntegerSimpleModificationInfos integerSimpleModificationInfos) { - super(integerSimpleModificationInfos); - this.value = integerSimpleModificationInfos.getValue(); + public IntegerSimpleModificationEntity(IntegerSimpleModificationByFilterInfos integerSimpleModificationByFilterInfos) { + super(integerSimpleModificationByFilterInfos); + this.value = integerSimpleModificationByFilterInfos.getValue(); } @Override - public IntegerSimpleModificationInfos toSimpleModificationInfos() { - IntegerSimpleModificationInfos integerSimpleModificationInfos = IntegerSimpleModificationInfos.builder() + public IntegerSimpleModificationByFilterInfos toSimpleModificationInfos() { + IntegerSimpleModificationByFilterInfos integerSimpleModificationByFilterInfos = IntegerSimpleModificationByFilterInfos.builder() .value(value) .build(); - assignAttributes(integerSimpleModificationInfos); - return integerSimpleModificationInfos; + assignAttributes(integerSimpleModificationByFilterInfos); + return integerSimpleModificationByFilterInfos; } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java index a9659c07a..48c485456 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java @@ -12,7 +12,7 @@ import jakarta.persistence.Table; import lombok.Data; import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.PropertySimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.PropertySimpleModificationByFilterInfos; /** * @author Thang PHAM @@ -25,18 +25,18 @@ public class PropertySimpleModificationEntity extends StringSimpleModificationEn @Column String propertyName; - public PropertySimpleModificationEntity(PropertySimpleModificationInfos propertySimpleModificationInfos) { - super(propertySimpleModificationInfos); - this.propertyName = propertySimpleModificationInfos.getPropertyName(); + public PropertySimpleModificationEntity(PropertySimpleModificationByFilterInfos propertySimpleModificationByFilterInfos) { + super(propertySimpleModificationByFilterInfos); + this.propertyName = propertySimpleModificationByFilterInfos.getPropertyName(); } @Override - public PropertySimpleModificationInfos toSimpleModificationInfos() { - PropertySimpleModificationInfos propertySimpleModificationInfos = PropertySimpleModificationInfos.builder() + public PropertySimpleModificationByFilterInfos toSimpleModificationInfos() { + PropertySimpleModificationByFilterInfos propertySimpleModificationByFilterInfos = PropertySimpleModificationByFilterInfos.builder() .value(value) .propertyName(propertyName) .build(); - assignAttributes(propertySimpleModificationInfos); - return propertySimpleModificationInfos; + assignAttributes(propertySimpleModificationByFilterInfos); + return propertySimpleModificationByFilterInfos; } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java index 458cf48f8..97809c5ce 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; import java.util.List; @@ -44,14 +44,14 @@ public class SimpleModificationEntity { @Enumerated(EnumType.STRING) private DataType dataType; - public SimpleModificationEntity(AbstractSimpleModificationInfos simpleModificationInfos) { + public SimpleModificationEntity(SimpleModificationByFilterInfos simpleModificationInfos) { this.id = null; this.filters = simpleModificationInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); this.editedField = simpleModificationInfos.getEditedField(); this.dataType = simpleModificationInfos.getDataType(); } - protected void assignAttributes(AbstractSimpleModificationInfos simpleModificationInfos) { + protected void assignAttributes(SimpleModificationByFilterInfos simpleModificationInfos) { simpleModificationInfos.setId(id); simpleModificationInfos.setFilters(filters.stream() .map(filterEntity -> new FilterInfos(filterEntity.getFilterId(), filterEntity.getName())) @@ -60,7 +60,7 @@ protected void assignAttributes(AbstractSimpleModificationInfos simpleModific simpleModificationInfos.setDataType(dataType); } - public AbstractSimpleModificationInfos toSimpleModificationInfos() { + public SimpleModificationByFilterInfos toSimpleModificationInfos() { return null; } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java index 157b290d9..c4a37e77e 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java @@ -12,7 +12,7 @@ import jakarta.persistence.Table; import lombok.Data; import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.StringSimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.StringSimpleModificationByFilterInfos; /** * @author Thang PHAM @@ -25,17 +25,17 @@ public class StringSimpleModificationEntity extends SimpleModificationEntity { @Column(name = "value_") // "value" is not supported in UT with H2 String value; - public StringSimpleModificationEntity(StringSimpleModificationInfos stringSimpleModificationInfos) { - super(stringSimpleModificationInfos); - this.value = stringSimpleModificationInfos.getValue(); + public StringSimpleModificationEntity(StringSimpleModificationByFilterInfos stringSimpleModificationByFilterInfos) { + super(stringSimpleModificationByFilterInfos); + this.value = stringSimpleModificationByFilterInfos.getValue(); } @Override - public StringSimpleModificationInfos toSimpleModificationInfos() { - StringSimpleModificationInfos stringSimpleModificationInfos = StringSimpleModificationInfos.builder() + public StringSimpleModificationByFilterInfos toSimpleModificationInfos() { + StringSimpleModificationByFilterInfos stringSimpleModificationByFilterInfos = StringSimpleModificationByFilterInfos.builder() .value(value) .build(); - assignAttributes(stringSimpleModificationInfos); - return stringSimpleModificationInfos; + assignAttributes(stringSimpleModificationByFilterInfos); + return stringSimpleModificationByFilterInfos; } } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java index 41cb1c0bf..59fc01c35 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -7,7 +7,7 @@ import com.powsybl.iidm.network.TwoWindingsTransformer; import org.gridsuite.modification.server.dto.FilterEquipments; import org.gridsuite.modification.server.dto.FilterInfos; -import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; @@ -42,7 +42,7 @@ public void initApplicationContext(NetworkModificationApplicator modificationApp } protected boolean isEquipmentEditable(Identifiable identifiable, - FilterModificationInfos filterModificationInfos, + AbstractModificationByFilterInfos filterModificationInfos, List equipmentsReport) { if (filterModificationInfos.getEditedField() == null) { return false; @@ -82,7 +82,7 @@ protected boolean isEquipmentEditable(Identifiable identifiable, return true; } - protected void createByFilterModificationReports(List reports, FilterModificationInfos filterModificationInfos, + protected void createByFilterModificationReports(List reports, AbstractModificationByFilterInfos filterModificationInfos, FilterInfos filterInfos, FilterEquipments filterEquipments, List notEditableEquipments) { if (notEditableEquipments.size() == filterEquipments.getIdentifiableAttributes().size()) { reports.add(ReportNode.newRootReportNode() @@ -129,7 +129,7 @@ protected void createByFilterModificationReports(List reports, Filte } protected void applyModification(Identifiable identifiable, - FilterModificationInfos filterModificationInfos, + AbstractModificationByFilterInfos filterModificationInfos, List reports, List notEditableEquipments) { @@ -161,9 +161,9 @@ protected void applyModification(Identifiable identifiable, } } - protected abstract boolean preCheckValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos, + protected abstract boolean preCheckValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos, List reports, List notEditableEquipments); - protected abstract Object applyValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos); + protected abstract Object applyValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos); } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java index e544e6e34..5bb5b2ac0 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java @@ -14,7 +14,7 @@ import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; import org.gridsuite.modification.server.dto.FilterEquipments; import org.gridsuite.modification.server.dto.FilterInfos; -import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.dto.byfilter.formula.Operator; @@ -147,7 +147,7 @@ private void applyFormulaOnFilterEquipments(Network network, } @Override - protected boolean preCheckValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos, List reports, List notEditableEquipments) { + protected boolean preCheckValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos, List reports, List notEditableEquipments) { FormulaInfos formulaInfos = (FormulaInfos) filterModificationInfos; Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(identifiable); Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(identifiable); @@ -171,7 +171,7 @@ protected boolean preCheckValue(Identifiable identifiable, FilterModification } @Override - protected Object applyValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos) { + protected Object applyValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos) { FormulaInfos formulaInfos = (FormulaInfos) filterModificationInfos; Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(identifiable); Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(identifiable); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index c3a076aad..f2bebc74c 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -15,10 +15,10 @@ import org.gridsuite.modification.server.dto.FilterEquipments; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.dto.byfilter.FilterModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.PropertySimpleModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.PropertySimpleModificationByFilterInfos; import org.gridsuite.modification.server.modifications.ModificationUtils; import org.springframework.util.CollectionUtils; @@ -110,7 +110,7 @@ private void report(ReportNode formulaSubReportNode, List formulaRep private void applyModificationOnFilterEquipments(Network network, Map exportFilters, List formulaReports, - AbstractSimpleModificationInfos simpleModificationInfos, + SimpleModificationByFilterInfos simpleModificationInfos, FilterInfos filterInfos) { FilterEquipments filterEquipments = exportFilters.get(filterInfos.getId()); @@ -147,16 +147,16 @@ private void applyModificationOnFilterEquipments(Network network, } @Override - protected boolean preCheckValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos, List reports, List notEditableEquipments) { + protected boolean preCheckValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos, List reports, List notEditableEquipments) { return true; } @Override - protected Object applyValue(Identifiable identifiable, FilterModificationInfos filterModificationInfos) { - AbstractSimpleModificationInfos simpleModificationInfos = (AbstractSimpleModificationInfos) filterModificationInfos; + protected Object applyValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos) { + SimpleModificationByFilterInfos simpleModificationInfos = (SimpleModificationByFilterInfos) filterModificationInfos; if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { identifiable.setProperty( - ((PropertySimpleModificationInfos) simpleModificationInfos).getPropertyName(), + ((PropertySimpleModificationByFilterInfos) simpleModificationInfos).getPropertyName(), (String) simpleModificationInfos.getValue() ); } else { From e4902f105fe0ecab73abbb03fbe88373f834c515 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Wed, 21 Aug 2024 20:00:38 +0200 Subject: [PATCH 05/42] Enhance reuse --- .../AbstractByFilterModification.java | 185 ++++++++++++++++-- .../byfilter/ByFormulaModification.java | 131 ++----------- .../byfilter/BySimpleModification.java | 130 ++---------- ...VoltageLevelByFormulaModificationTest.java | 13 +- 4 files changed, 215 insertions(+), 244 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java index 59fc01c35..f5df3c0b1 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -4,20 +4,30 @@ import com.powsybl.commons.report.TypedValue; import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.TwoWindingsTransformer; +import org.apache.commons.lang3.StringUtils; +import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.FilterEquipments; import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.gridsuite.modification.server.modifications.AbstractModification; +import org.gridsuite.modification.server.modifications.ModificationUtils; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; import org.gridsuite.modification.server.service.FilterService; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.Collectors; + +import static org.gridsuite.modification.server.modifications.ModificationUtils.*; public abstract class AbstractByFilterModification extends AbstractModification { - public static final String EQUIPMENT_MODIFIED_REPORT_ERROR = "EquipmentModifiedReportError_"; public static final String KEY_FILTER_NAME = "filterName"; public static final String KEY_FIELD_NAME = "fieldName"; public static final String KEY_EQPT_NAME = "eqptName"; @@ -25,6 +35,20 @@ public abstract class AbstractByFilterModification extends AbstractModification public static final String KEY_NB_CHANGED = "nbChanged"; public static final String KEY_NB_UNCHANGED = "nbUnchanged"; public static final String KEY_VALUE = "value"; + public static final String KEY_EQUIPMENT_MODIFIED_ERROR = "EquipmentModifiedError"; + public static final String KEY_BY_FILTER_MODIFICATION_SOME = "byFilterModificationSome"; + public static final String KEY_BY_FILTER_MODIFICATION_FAILED = "byFilterModificationFailed"; + public static final String KEY_BY_FILTER_MODIFICATION_SUCCESS = "byFilterModificationSuccess"; + public static final String KEY_NUMBER_OF_VALID_EQUIPMENT = "numberOfValidEquipment"; + public static final String KEY_NOT_EDITED_EQUIPMENTS_FILTER = "NotEditedEquipmentsFilter"; + public static final String KEY_EDITED_FIELD_FILTER = "editedFieldFilter"; + public static final String KEY_FILTER_EQUIPMENTS_NOT_FOUND = "filterEquipmentsNotFound"; + public static final String KEY_EQUIPMENT_MODIFIED_REPORT = "EquipmentModifiedReport"; + public static final String KEY_EQUIPMENT_MODIFIED_REPORT_EXCEPTION = "EquipmentModifiedReportException"; + public static final String KEY_APPLIED_BY_FILTER_MODIFICATIONS = "appliedByFilterModifications"; + public static final String KEY_BY_FILTER_MODIFICATION = "byFilterModification"; + public static final String KEY_BY_FILTER_MODIFICATION_ALL = "byFilterModificationAll"; + public static final String KEY_BY_FILTER_MODIFICATION_NONE = "byFilterModificationNone"; protected FilterService filterService; protected int equipmentNotModifiedCount; protected long equipmentCount; @@ -36,12 +60,90 @@ protected AbstractByFilterModification() { equipmentNotFoundCount = 0; } + public abstract String getModificationLabel(); + + public abstract ModificationInfos getModificationInfos(); + + public abstract IdentifiableType getIdentifiableType(); + + public abstract NetworkModificationException.Type getExceptionType(); + + public abstract List getModificationByFilterInfosList(); + + protected abstract boolean preCheckValue(Identifiable identifiable, + AbstractModificationByFilterInfos filterModificationInfos, + List reports, List notEditableEquipments); + + protected abstract Object applyValue(Identifiable identifiable, + AbstractModificationByFilterInfos filterModificationInfos); + @Override public void initApplicationContext(NetworkModificationApplicator modificationApplicator) { filterService = modificationApplicator.getFilterService(); } - protected boolean isEquipmentEditable(Identifiable identifiable, + @Override + public void check(Network network) throws NetworkModificationException { + if (getModificationInfos() == null) { + throw new NetworkModificationException(getExceptionType(), "Missing required attributes to modify the equipment"); + } + + if (CollectionUtils.isEmpty(getModificationByFilterInfosList())) { + throw new NetworkModificationException(getExceptionType(), String.format("At least one %s is required", getModificationLabel())); + } + + if (getModificationByFilterInfosList().stream().anyMatch(modificationByFilterInfos -> CollectionUtils.isEmpty(modificationByFilterInfos.getFilters()))) { + throw new NetworkModificationException(getExceptionType(), String.format("Every %s must have at least one filter", getModificationLabel())); + } + } + + @Override + public void apply(Network network, ReportNode subReportNode) { + // collect all filters from all variations + Map filters = getFilters(); + + Map exportFilters = + ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, getModificationInfos().getErrorType()); + + if (exportFilters != null) { + ReportNode subReporter = subReportNode.newReportNode().withMessageTemplate(KEY_APPLIED_BY_FILTER_MODIFICATIONS, StringUtils.capitalize(getModificationLabel())).add(); + List reports = new ArrayList<>(); + // perform modifications + getModificationByFilterInfosList().forEach(modificationByFilterInfos -> + modificationByFilterInfos.getFilters().forEach(filterInfos -> + applyOnFilterEquipments(network, exportFilters, reports, modificationByFilterInfos, filterInfos))); + // reporting + subReportNode.newReportNode() + .withMessageTemplate(KEY_BY_FILTER_MODIFICATION, String.format("New %s on ${%s}", getModificationLabel(), KEY_EQPT_TYPE)) + .withUntypedValue(KEY_EQPT_TYPE, getIdentifiableType().name()) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); + if (equipmentNotModifiedCount == 0 && equipmentNotFoundCount == 0) { + subReportNode.newReportNode() + .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_ALL, "All equipment have been modified : ${" + KEY_VALUE + "} equipment(s)") + .withUntypedValue(KEY_VALUE, equipmentCount) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); + report(subReporter, reports); + } else { + if (equipmentNotModifiedCount == equipmentCount) { + createReport(subReportNode, KEY_BY_FILTER_MODIFICATION_NONE, + "No equipment have been modified", + Map.of(), TypedValue.ERROR_SEVERITY); + } else { + subReportNode.newReportNode() + .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_SOME, "Some of the equipment have been modified : ${" + KEY_NB_CHANGED + "} equipment(s) modified and ${" + KEY_NB_UNCHANGED + "} equipment(s) not modified") + .withUntypedValue(KEY_NB_CHANGED, equipmentCount - equipmentNotModifiedCount) + .withUntypedValue(KEY_NB_UNCHANGED, equipmentNotModifiedCount + equipmentNotFoundCount) + .withSeverity(TypedValue.WARN_SEVERITY) + .add(); + report(subReporter, reports); + } + } + } + } + + private boolean isEquipmentEditable(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos, List equipmentsReport) { if (filterModificationInfos.getEditedField() == null) { @@ -56,7 +158,7 @@ protected boolean isEquipmentEditable(Identifiable identifiable, boolean isEditable = twoWindingsTransformer.getRatioTapChanger() != null; if (!isEditable) { equipmentsReport.add(ReportNode.newRootReportNode() - .withMessageTemplate(EQUIPMENT_MODIFIED_REPORT_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Ratio tab changer is null") + .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Ratio tab changer is null") .withUntypedValue(KEY_FIELD_NAME, editedField.name()) .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) .withSeverity(TypedValue.TRACE_SEVERITY) @@ -68,7 +170,7 @@ protected boolean isEquipmentEditable(Identifiable identifiable, boolean isEditable = twoWindingsTransformer.getPhaseTapChanger() != null; if (!isEditable) { equipmentsReport.add(ReportNode.newRootReportNode() - .withMessageTemplate(EQUIPMENT_MODIFIED_REPORT_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Phase tab changer is null") + .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Phase tab changer is null") .withUntypedValue(KEY_FIELD_NAME, editedField.name()) .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) .withSeverity(TypedValue.TRACE_SEVERITY) @@ -82,30 +184,30 @@ protected boolean isEquipmentEditable(Identifiable identifiable, return true; } - protected void createByFilterModificationReports(List reports, AbstractModificationByFilterInfos filterModificationInfos, + private void createByFilterModificationReports(List reports, AbstractModificationByFilterInfos filterModificationInfos, FilterInfos filterInfos, FilterEquipments filterEquipments, List notEditableEquipments) { if (notEditableEquipments.size() == filterEquipments.getIdentifiableAttributes().size()) { reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("byFilterModificationFailed_" + reports.size(), "No equipment(s) have been modified on filter ${" + KEY_FILTER_NAME + "}") + .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_FAILED + reports.size(), "No equipment(s) have been modified on filter ${" + KEY_FILTER_NAME + "}") .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) .withSeverity(TypedValue.WARN_SEVERITY) .build()); } else { reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("byFilterModification_" + reports.size(), "Successful application of new modification by formula on filter ${" + KEY_FILTER_NAME + "}") + .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_SUCCESS + reports.size(), String.format("Successful application of %s on filter ${" + KEY_FILTER_NAME + "}", getModificationLabel())) .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) .withSeverity(TypedValue.INFO_SEVERITY) .build()); reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("numberOfValidEquipment" + reports.size(), " Number of equipment modified : ${" + KEY_NB_CHANGED + "}") + .withMessageTemplate(KEY_NUMBER_OF_VALID_EQUIPMENT + reports.size(), " Number of equipment modified : ${" + KEY_NB_CHANGED + "}") .withUntypedValue(KEY_NB_CHANGED, filterEquipments.getIdentifiableAttributes().size() - notEditableEquipments.size()) .withSeverity(TypedValue.INFO_SEVERITY) .build()); if (!CollectionUtils.isEmpty(notEditableEquipments)) { reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("NotEditedEquipmentsFilter_" + reports.size(), " ${" + KEY_NB_UNCHANGED + "} equipment(s) were not modified") + .withMessageTemplate(KEY_NOT_EDITED_EQUIPMENTS_FILTER + reports.size(), " ${" + KEY_NB_UNCHANGED + "} equipment(s) were not modified") .withUntypedValue(KEY_NB_UNCHANGED, notEditableEquipments.size()) .withSeverity(TypedValue.WARN_SEVERITY) .build()); @@ -113,7 +215,7 @@ protected void createByFilterModificationReports(List reports, Abstr } reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("editedFieldFilter_" + reports.size(), " Edited field :${" + KEY_FIELD_NAME + "}") + .withMessageTemplate(KEY_EDITED_FIELD_FILTER + reports.size(), " Edited field :${" + KEY_FIELD_NAME + "}") .withUntypedValue(KEY_FIELD_NAME, filterModificationInfos.getEditedField()) .withSeverity(TypedValue.INFO_SEVERITY) .build()); @@ -121,14 +223,14 @@ protected void createByFilterModificationReports(List reports, Abstr if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { String equipmentIds = String.join(", ", filterEquipments.getNotFoundEquipments()); reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("filterEquipmentsNotFound_" + reports.size(), " Equipment not found : ${" + KEY_VALUE + "}") + .withMessageTemplate(KEY_FILTER_EQUIPMENTS_NOT_FOUND + reports.size(), " Equipment not found : ${" + KEY_VALUE + "}") .withUntypedValue(KEY_VALUE, equipmentIds) .withSeverity(TypedValue.WARN_SEVERITY) .build()); } } - protected void applyModification(Identifiable identifiable, + private void applyModification(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos, List reports, List notEditableEquipments) { @@ -142,7 +244,7 @@ protected void applyModification(Identifiable identifiable, try { final Object newValue = applyValue(identifiable, filterModificationInfos); reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("EquipmentModifiedReport_" + reports.size(), " ${" + KEY_EQPT_TYPE + "} id : ${" + KEY_EQPT_NAME + "}, new value of ${" + KEY_FIELD_NAME + "} : ${" + KEY_VALUE + "}") + .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_REPORT + reports.size(), " ${" + KEY_EQPT_TYPE + "} id : ${" + KEY_EQPT_NAME + "}, new value of ${" + KEY_FIELD_NAME + "} : ${" + KEY_VALUE + "}") .withUntypedValue(KEY_EQPT_TYPE, identifiable.getType().name()) .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) .withUntypedValue(KEY_FIELD_NAME, filterModificationInfos.getEditedField()) @@ -153,7 +255,7 @@ protected void applyModification(Identifiable identifiable, notEditableEquipments.add(identifiable.getId()); equipmentNotModifiedCount += 1; reports.add(ReportNode.newRootReportNode() - .withMessageTemplate("EquipmentModifiedReportExceptionf_" + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : ${" + KEY_VALUE + "}") + .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_REPORT_EXCEPTION + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : ${" + KEY_VALUE + "}") .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) .withUntypedValue(KEY_VALUE, e.getMessage()) .withSeverity(TypedValue.TRACE_SEVERITY) @@ -161,9 +263,58 @@ protected void applyModification(Identifiable identifiable, } } - protected abstract boolean preCheckValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos, - List reports, List notEditableEquipments); + private Map getFilters() { + return getModificationByFilterInfosList().stream() + .flatMap(v -> v.getFilters().stream()) + .filter(distinctByKey(FilterInfos::getId)) + .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); + } + + private void applyOnFilterEquipments(Network network, + Map exportFilters, + List reports, + AbstractModificationByFilterInfos modificationByFilterInfos, + FilterInfos filterInfos) { + FilterEquipments filterEquipments = exportFilters.get(filterInfos.getId()); - protected abstract Object applyValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos); + if (CollectionUtils.isEmpty(filterEquipments.getIdentifiableAttributes())) { + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_NONE + reports.size(), "No equipments were found for filter ${" + KEY_FILTER_NAME + "}") + .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); + } else { + equipmentCount += filterEquipments.getIdentifiableAttributes().size(); + if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { + equipmentNotFoundCount += filterEquipments.getNotFoundEquipments().size(); + } + List notEditableEquipments = new ArrayList<>(); + List equipmentsReport = new ArrayList<>(); + filterEquipments.getIdentifiableAttributes() + .stream() + .map(attributes -> network.getIdentifiable(attributes.getId())) + .filter(identifiable -> { + boolean isEditableEquipment = isEquipmentEditable(identifiable, modificationByFilterInfos, equipmentsReport); + if (!isEditableEquipment) { + notEditableEquipments.add(identifiable.getId()); + equipmentNotModifiedCount += 1; + } + return isEditableEquipment; + }) + .forEach(identifiable -> applyModification(identifiable, modificationByFilterInfos, equipmentsReport, notEditableEquipments)); + + createByFilterModificationReports(reports, modificationByFilterInfos, filterInfos, filterEquipments, notEditableEquipments); + + reports.addAll(equipmentsReport); + } + } + + private void report(ReportNode subReportNode, List reports) { + subReportNode.newReportNode() + .withMessageTemplate(KEY_APPLIED_BY_FILTER_MODIFICATIONS, String.format(" %s", StringUtils.capitalize(getModificationLabel()))) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); + reports.forEach(report -> insertReportNode(subReportNode, report)); + } } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java index 5bb5b2ac0..133b41541 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java @@ -12,23 +12,17 @@ import com.powsybl.iidm.network.*; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; -import org.gridsuite.modification.server.dto.FilterEquipments; -import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.dto.byfilter.formula.Operator; -import org.gridsuite.modification.server.modifications.ModificationUtils; -import org.jetbrains.annotations.NotNull; -import org.springframework.util.CollectionUtils; -import java.util.ArrayList; +import javax.annotation.Nonnull; +import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; -import static org.gridsuite.modification.server.modifications.ModificationUtils.*; +import static org.gridsuite.modification.server.NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR; public class ByFormulaModification extends AbstractByFilterModification { private final ByFormulaModificationInfos modificationInfos; @@ -39,111 +33,28 @@ public ByFormulaModification(ByFormulaModificationInfos modificationInfos) { } @Override - public void check(Network network) throws NetworkModificationException { - if (modificationInfos == null) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Missing required attributes to modify the equipment"); - } - - if (CollectionUtils.isEmpty(modificationInfos.getFormulaInfosList())) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "At least one formula is required"); - } - - if (modificationInfos.getFormulaInfosList().stream().anyMatch(formulaInfos -> CollectionUtils.isEmpty(formulaInfos.getFilters()))) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Every formula must have at least one filter"); - } + public String getModificationLabel() { + return "modification by formula"; } @Override - public void apply(Network network, ReportNode subReportNode) { - // collect all filters from all variations - Map filters = modificationInfos.getFormulaInfosList().stream() - .flatMap(v -> v.getFilters().stream()) - .filter(distinctByKey(FilterInfos::getId)) - .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); - - Map exportFilters = ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, modificationInfos.getErrorType()); - - if (exportFilters != null) { - ReportNode formulaSubReporter = subReportNode.newReportNode().withMessageTemplate("appliedFormulasModifications", "Formulas").add(); - List formulaReports = new ArrayList<>(); - modificationInfos.getFormulaInfosList().forEach(formulaInfos -> - formulaInfos.getFilters().forEach(filterInfos -> - applyFormulaOnFilterEquipments(network, exportFilters, formulaReports, formulaInfos, filterInfos))); - subReportNode.newReportNode() - .withMessageTemplate("byFormulaModification", "New modification by formula on ${" + KEY_EQPT_TYPE + "}") - .withUntypedValue(KEY_EQPT_TYPE, modificationInfos.getIdentifiableType().name()) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); - if (equipmentNotModifiedCount == 0 && equipmentNotFoundCount == 0) { - subReportNode.newReportNode() - .withMessageTemplate("byFormulaModificationALL", "All equipment have been modified : ${" + KEY_VALUE + "} equipment(s)") - .withUntypedValue(KEY_VALUE, equipmentCount) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); - report(formulaSubReporter, formulaReports); - } else { - if (equipmentNotModifiedCount == equipmentCount) { - createReport(subReportNode, "byFormulaModificationNone", - "No equipment have been modified", - Map.of(), TypedValue.ERROR_SEVERITY); - } else { - subReportNode.newReportNode() - .withMessageTemplate("byFormulaModificationSome", "Some of the equipment have been modified : ${" + KEY_NB_CHANGED + "} equipment(s) modified and ${" + KEY_NB_UNCHANGED + "} equipment(s) not modified") - .withUntypedValue(KEY_NB_CHANGED, equipmentCount - equipmentNotModifiedCount) - .withUntypedValue(KEY_NB_UNCHANGED, equipmentNotModifiedCount + equipmentNotFoundCount) - .withSeverity(TypedValue.WARN_SEVERITY) - .add(); - report(formulaSubReporter, formulaReports); - } - } - } + public ModificationInfos getModificationInfos() { + return modificationInfos; } - private void report(ReportNode formulaSubReportNode, List formulaReports) { - formulaSubReportNode.newReportNode() - .withMessageTemplate("appliedFormulasModifications", " Formulas") - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); - formulaReports.forEach(report -> insertReportNode(formulaSubReportNode, report)); + @Override + public IdentifiableType getIdentifiableType() { + return modificationInfos.getIdentifiableType(); } - private void applyFormulaOnFilterEquipments(Network network, - Map exportFilters, - List formulaReports, - FormulaInfos formulaInfos, - FilterInfos filterInfos) { - FilterEquipments filterEquipments = exportFilters.get(filterInfos.getId()); - - if (CollectionUtils.isEmpty(filterEquipments.getIdentifiableAttributes())) { - formulaReports.add(ReportNode.newRootReportNode() - .withMessageTemplate("byFormulaModificationFormulaFilter_" + formulaReports.size(), "No equipments were found for filter ${" + KEY_FILTER_NAME + "}") - .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); - } else { - equipmentCount += filterEquipments.getIdentifiableAttributes().size(); - if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { - equipmentNotFoundCount += filterEquipments.getNotFoundEquipments().size(); - } - List notEditableEquipments = new ArrayList<>(); - List equipmentsReport = new ArrayList<>(); - filterEquipments.getIdentifiableAttributes() - .stream() - .map(attributes -> network.getIdentifiable(attributes.getId())) - .filter(identifiable -> { - boolean isEditableEquipment = isEquipmentEditable(identifiable, formulaInfos, equipmentsReport); - if (!isEditableEquipment) { - notEditableEquipments.add(identifiable.getId()); - equipmentNotModifiedCount += 1; - } - return isEditableEquipment; - }) - .forEach(identifiable -> applyModification(identifiable, formulaInfos, equipmentsReport, notEditableEquipments)); - - createByFilterModificationReports(formulaReports, formulaInfos, filterInfos, filterEquipments, notEditableEquipments); + @Override + public List getModificationByFilterInfosList() { + return Collections.unmodifiableList(modificationInfos.getFormulaInfosList()); + } - formulaReports.addAll(equipmentsReport); - } + @Override + public NetworkModificationException.Type getExceptionType() { + return BY_FORMULA_MODIFICATION_ERROR; } @Override @@ -155,7 +66,7 @@ protected boolean preCheckValue(Identifiable identifiable, AbstractModificati equipmentNotModifiedCount += 1; notEditableEquipments.add(identifiable.getId()); reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(EQUIPMENT_MODIFIED_REPORT_ERROR + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : At least one of the value or referenced field is null") + .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_ERROR + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : At least one of the value or referenced field is null") .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) .withSeverity(TypedValue.TRACE_SEVERITY) .build()); @@ -183,12 +94,12 @@ protected Object applyValue(Identifiable identifiable, AbstractModificationBy case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, formulaInfos.getEditedField(), newValue); case LOAD -> LoadField.setNewValue((Load) identifiable, formulaInfos.getEditedField(), newValue); case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) identifiable, formulaInfos.getEditedField(), newValue); - default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Unsupported equipment"); + default -> throw new NetworkModificationException(BY_FORMULA_MODIFICATION_ERROR, "Unsupported equipment"); } return newValue; } - private Double applyOperation(Operator operator, @NotNull Double value1, @NotNull Double value2) { + private Double applyOperation(Operator operator, @Nonnull Double value1, @Nonnull Double value2) { return switch (operator) { case ADDITION -> value1 + value2; case SUBTRACTION -> value1 - value2; diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index f2bebc74c..8dbbb34c1 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -8,27 +8,20 @@ package org.gridsuite.modification.server.modifications.byfilter; import com.powsybl.commons.report.ReportNode; -import com.powsybl.commons.report.TypedValue; import com.powsybl.iidm.network.*; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.BySimpleModificationInfos; -import org.gridsuite.modification.server.dto.FilterEquipments; -import org.gridsuite.modification.server.dto.FilterInfos; -import org.gridsuite.modification.server.dto.byfilter.DataType; +import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.simple.PropertySimpleModificationByFilterInfos; -import org.gridsuite.modification.server.modifications.ModificationUtils; -import org.springframework.util.CollectionUtils; +import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; -import static org.gridsuite.modification.server.modifications.ModificationUtils.*; +import static org.gridsuite.modification.server.NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR; public class BySimpleModification extends AbstractByFilterModification { private final BySimpleModificationInfos modificationInfos; @@ -39,111 +32,28 @@ public BySimpleModification(BySimpleModificationInfos modificationInfos) { } @Override - public void check(Network network) throws NetworkModificationException { - if (modificationInfos == null) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR, "Missing required attributes to modify the equipment"); - } - - if (CollectionUtils.isEmpty(modificationInfos.getSimpleModificationInfosList())) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR, "At least one modification is required"); - } - - if (modificationInfos.getSimpleModificationInfosList().stream().anyMatch(formulaInfos -> CollectionUtils.isEmpty(formulaInfos.getFilters()))) { - throw new NetworkModificationException(NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR, "Every modification must have at least one filter"); - } + public String getModificationLabel() { + return "modification by filter"; } @Override - public void apply(Network network, ReportNode subReportNode) { - // collect all filters from all variations - Map filters = modificationInfos.getSimpleModificationInfosList().stream() - .flatMap(v -> v.getFilters().stream()) - .filter(distinctByKey(FilterInfos::getId)) - .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); - - Map exportFilters = ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, modificationInfos.getErrorType()); - - if (exportFilters != null) { - ReportNode formulaSubReporter = subReportNode.newReportNode().withMessageTemplate("appliedFormulasModifications", "Formulas").add(); - List formulaReports = new ArrayList<>(); - modificationInfos.getSimpleModificationInfosList().forEach(fieldModificationInfos -> - fieldModificationInfos.getFilters().forEach(filterInfos -> - applyModificationOnFilterEquipments(network, exportFilters, formulaReports, fieldModificationInfos, filterInfos))); - subReportNode.newReportNode() - .withMessageTemplate("byFormulaModification", "New modification by formula on ${" + KEY_EQPT_TYPE + "}") - .withUntypedValue(KEY_EQPT_TYPE, modificationInfos.getIdentifiableType().name()) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); - if (equipmentNotModifiedCount == 0 && equipmentNotFoundCount == 0) { - subReportNode.newReportNode() - .withMessageTemplate("byFormulaModificationALL", "All equipment have been modified : ${" + KEY_VALUE + "} equipment(s)") - .withUntypedValue(KEY_VALUE, equipmentCount) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); - report(formulaSubReporter, formulaReports); - } else { - if (equipmentNotModifiedCount == equipmentCount) { - createReport(subReportNode, "byFormulaModificationNone", - "No equipment have been modified", - Map.of(), TypedValue.ERROR_SEVERITY); - } else { - subReportNode.newReportNode() - .withMessageTemplate("byFormulaModificationSome", "Some of the equipment have been modified : ${" + KEY_NB_CHANGED + "} equipment(s) modified and ${" + KEY_NB_UNCHANGED + "} equipment(s) not modified") - .withUntypedValue(KEY_NB_CHANGED, equipmentCount - equipmentNotModifiedCount) - .withUntypedValue(KEY_NB_UNCHANGED, equipmentNotModifiedCount + equipmentNotFoundCount) - .withSeverity(TypedValue.WARN_SEVERITY) - .add(); - report(formulaSubReporter, formulaReports); - } - } - } + public ModificationInfos getModificationInfos() { + return modificationInfos; } - private void report(ReportNode formulaSubReportNode, List formulaReports) { - formulaSubReportNode.newReportNode() - .withMessageTemplate("appliedSimpleModifications", " Simple modification") - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); - formulaReports.forEach(report -> insertReportNode(formulaSubReportNode, report)); + @Override + public IdentifiableType getIdentifiableType() { + return modificationInfos.getIdentifiableType(); } - private void applyModificationOnFilterEquipments(Network network, - Map exportFilters, - List formulaReports, - SimpleModificationByFilterInfos simpleModificationInfos, - FilterInfos filterInfos) { - FilterEquipments filterEquipments = exportFilters.get(filterInfos.getId()); - - if (CollectionUtils.isEmpty(filterEquipments.getIdentifiableAttributes())) { - formulaReports.add(ReportNode.newRootReportNode() - .withMessageTemplate("byFormulaModificationFormulaFilter_" + formulaReports.size(), "No equipments were found for filter ${" + KEY_FILTER_NAME + "}") - .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); - } else { - equipmentCount += filterEquipments.getIdentifiableAttributes().size(); - if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { - equipmentNotFoundCount += filterEquipments.getNotFoundEquipments().size(); - } - List notEditableEquipments = new ArrayList<>(); - List equipmentsReport = new ArrayList<>(); - filterEquipments.getIdentifiableAttributes() - .stream() - .map(attributes -> network.getIdentifiable(attributes.getId())) - .filter(identifiable -> { - boolean isEditableEquipment = isEquipmentEditable(identifiable, simpleModificationInfos, equipmentsReport); - if (!isEditableEquipment) { - notEditableEquipments.add(identifiable.getId()); - equipmentNotModifiedCount += 1; - } - return isEditableEquipment; - }) - .forEach(identifiable -> applyModification(identifiable, simpleModificationInfos, equipmentsReport, notEditableEquipments)); - - createByFilterModificationReports(formulaReports, simpleModificationInfos, filterInfos, filterEquipments, notEditableEquipments); + @Override + public List getModificationByFilterInfosList() { + return Collections.unmodifiableList(modificationInfos.getSimpleModificationInfosList()); + } - formulaReports.addAll(equipmentsReport); - } + @Override + public NetworkModificationException.Type getExceptionType() { + return BY_SIMPLE_MODIFICATION_ERROR; } @Override @@ -167,7 +77,7 @@ protected Object applyValue(Identifiable identifiable, AbstractModificationBy case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, simpleModificationInfos); case LOAD -> LoadField.setNewValue((Load) identifiable, simpleModificationInfos); case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) identifiable, simpleModificationInfos); - default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR, "Unsupported equipment"); + default -> throw new NetworkModificationException(BY_SIMPLE_MODIFICATION_ERROR, "Unsupported equipment"); } } return simpleModificationInfos.getValue(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java index 0b8a15de2..12be9038f 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java @@ -16,19 +16,18 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.VoltageLevelField; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.dto.byfilter.formula.Operator; import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.VoltageLevelField; import java.util.Date; import java.util.List; -import static org.gridsuite.modification.server.modifications.byfilter.ByFormulaModification.EQUIPMENT_MODIFIED_REPORT_ERROR; +import static org.gridsuite.modification.server.modifications.byfilter.AbstractByFilterModification.KEY_BY_FILTER_MODIFICATION_SOME; +import static org.gridsuite.modification.server.modifications.byfilter.ByFormulaModification.KEY_EQUIPMENT_MODIFIED_ERROR; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessageWithoutRank; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; /** * @author Seddik Yengui @@ -242,8 +241,8 @@ protected void assertAfterNetworkModificationCreation() { assertTrue(Double.isNaN(getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_7).getLowVoltageLimit())); assertTrue(Double.isNaN(getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_7).getHighVoltageLimit())); - assertLogMessageWithoutRank("Cannot modify equipment v7 : At least one of the value or referenced field is null", EQUIPMENT_MODIFIED_REPORT_ERROR + "0", reportService); - assertLogMessageWithoutRank("Some of the equipment have been modified : 14 equipment(s) modified and 4 equipment(s) not modified", "byFormulaModificationSome", reportService); + assertLogMessageWithoutRank("Cannot modify equipment v7 : At least one of the value or referenced field is null", KEY_EQUIPMENT_MODIFIED_ERROR + "0", reportService); + assertLogMessageWithoutRank("Some of the equipment have been modified : 14 equipment(s) modified and 4 equipment(s) not modified", KEY_BY_FILTER_MODIFICATION_SOME, reportService); } @Override From b83e7a8d4aefbc225478eb6c81938276d775a76a Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 22 Aug 2024 15:18:10 +0200 Subject: [PATCH 06/42] refactor entities by filter --- .../byfilter/ModificationByFilterEntity.java | 41 ++++++++++++++ .../byfilter/formula/FormulaEntity.java | 56 ++++++------------- .../simple/SimpleModificationEntity.java | 35 ++---------- 3 files changed, 62 insertions(+), 70 deletions(-) create mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java new file mode 100644 index 000000000..f406b26aa --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java @@ -0,0 +1,41 @@ +package org.gridsuite.modification.server.entities.equipment.modification.byfilter; + +import jakarta.persistence.*; +import lombok.NoArgsConstructor; +import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; +import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; + +import java.util.List; +import java.util.UUID; + +@NoArgsConstructor +@Entity +public class ModificationByFilterEntity { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private UUID id; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @JoinColumn(name = "modification_by_filter_id", + foreignKey = @ForeignKey(name = "modification_by_filter_id_fk")) + private List filters; + + @Column + private String editedField; + + protected ModificationByFilterEntity(AbstractModificationByFilterInfos modificationByFilterInfos) { + this.id = null; + this.filters = modificationByFilterInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); + this.editedField = modificationByFilterInfos.getEditedField(); + } + + protected void assignAttributes(AbstractModificationByFilterInfos modificationByFilterInfos) { + modificationByFilterInfos.setId(id); + modificationByFilterInfos.setFilters(filters.stream() + .map(filterEntity -> new FilterInfos(filterEntity.getFilterId(), filterEntity.getName())) + .toList()); + modificationByFilterInfos.setEditedField(editedField); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java index 73c162741..d1dd7f18f 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java @@ -7,43 +7,24 @@ package org.gridsuite.modification.server.entities.equipment.modification.byfilter.formula; -import jakarta.persistence.*; -import lombok.Getter; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Index; +import jakarta.persistence.Table; import lombok.NoArgsConstructor; -import lombok.Setter; -import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.dto.byfilter.formula.Operator; import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; -import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; - -import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ModificationByFilterEntity; /** * @author Seddik Yengui */ @NoArgsConstructor -@Getter -@Setter @Entity -@Table(name = "formula", indexes = @Index(name = "by_formula_modification_id_idx", columnList = "by_formula_modification_id")) -public class FormulaEntity { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - @Column(name = "id") - private UUID id; - - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) - @JoinColumn(name = "formula_id", - foreignKey = @ForeignKey(name = "formula_id_fk")) - private List filters; - - @Column - private String editedField; - +@Table(name = "formula", indexes = @Index(name = "modification_by_filter_id_idx", columnList = "modification_by_filter_id")) +public class FormulaEntity extends ModificationByFilterEntity { @Column private String equipmentField1; @@ -60,9 +41,7 @@ public class FormulaEntity { private Operator operator; public FormulaEntity(FormulaInfos formulaInfos) { - this.id = null; - this.filters = formulaInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); - this.editedField = formulaInfos.getEditedField(); + super(formulaInfos); this.equipmentField1 = formulaInfos.getFieldOrValue1().getEquipmentField(); this.equipmentField2 = formulaInfos.getFieldOrValue2().getEquipmentField(); this.value1 = formulaInfos.getFieldOrValue1().getValue(); @@ -71,21 +50,18 @@ public FormulaEntity(FormulaInfos formulaInfos) { } public FormulaInfos toFormulaInfos() { - return FormulaInfos.builder() - .id(getId()) - .filters(getFilters().stream() - .map(filterEntity -> new FilterInfos(filterEntity.getFilterId(), filterEntity.getName())) - .collect(Collectors.toList())) - .editedField(getEditedField()) + FormulaInfos formulaInfos = FormulaInfos.builder() .fieldOrValue1(ReferenceFieldOrValue.builder() - .equipmentField(getEquipmentField1()) - .value(getValue1()) + .equipmentField(equipmentField1) + .value(value1) .build()) .fieldOrValue2(ReferenceFieldOrValue.builder() - .equipmentField(getEquipmentField2()) - .value(getValue2()) + .equipmentField(equipmentField2) + .value(value2) .build()) - .operator(getOperator()) + .operator(operator) .build(); + assignAttributes(formulaInfos); + return formulaInfos; } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java index 97809c5ce..85fdae86f 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java @@ -8,55 +8,30 @@ package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; import jakarta.persistence.*; -import lombok.Data; import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; -import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; - -import java.util.List; -import java.util.UUID; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ModificationByFilterEntity; /** * @author Thang PHAM */ @NoArgsConstructor -@Data @Entity -@Table(name = "simpleModification", indexes = @Index(name = "by_simple_modification_id_idx", columnList = "by_simple_modification_id")) +@Table(name = "simpleModification", indexes = @Index(name = "modification_by_filter_id_idx", columnList = "modification_by_filter_id")) @Inheritance(strategy = InheritanceType.JOINED) -public class SimpleModificationEntity { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - @Column(name = "id") - private UUID id; - - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) - @JoinColumn(name = "simple_modification_id", - foreignKey = @ForeignKey(name = "simple_modification_id_fk")) - private List filters; - - @Column - private String editedField; - +public class SimpleModificationEntity extends ModificationByFilterEntity { @Column @Enumerated(EnumType.STRING) private DataType dataType; public SimpleModificationEntity(SimpleModificationByFilterInfos simpleModificationInfos) { - this.id = null; - this.filters = simpleModificationInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); - this.editedField = simpleModificationInfos.getEditedField(); + super(simpleModificationInfos); this.dataType = simpleModificationInfos.getDataType(); } protected void assignAttributes(SimpleModificationByFilterInfos simpleModificationInfos) { - simpleModificationInfos.setId(id); - simpleModificationInfos.setFilters(filters.stream() - .map(filterEntity -> new FilterInfos(filterEntity.getFilterId(), filterEntity.getName())) - .toList()); - simpleModificationInfos.setEditedField(editedField); + super.assignAttributes(simpleModificationInfos); simpleModificationInfos.setDataType(dataType); } From 54aaadfd4f7381b035563346b90e3e73ac275446 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 27 Aug 2024 17:10:57 +0200 Subject: [PATCH 07/42] Using JOIN strategy for tables --- ... => BooleanModificationByFilterInfos.java} | 13 +--- ...a => DoubleModificationByFilterInfos.java} | 13 +--- ...ava => EnumModificationByFilterInfos.java} | 2 +- .../IntegerModificationByFilterInfos.java | 19 +++++ ...=> PropertyModificationByFilterInfos.java} | 14 ++-- ...opertySimpleModificationByFilterInfos.java | 32 --------- .../SimpleModificationByFilterInfos.java | 21 +++--- ...a => StringModificationByFilterInfos.java} | 11 +-- .../modification/VariationFilterEntity.java | 2 +- .../byfilter/ByFormulaModificationEntity.java | 9 +-- .../byfilter/BySimpleModificationEntity.java | 1 + .../byfilter/ModificationByFilterEntity.java | 4 ++ .../byfilter/formula/FormulaEntity.java | 8 +-- .../BooleanSimpleModificationEntity.java | 41 ----------- .../DoubleSimpleModificationEntity.java | 41 ----------- .../IntegerSimpleModificationEntity.java | 41 ----------- .../PropertySimpleModificationEntity.java | 42 ----------- .../simple/SimpleModificationEntity.java | 44 ++++++++++-- .../StringSimpleModificationEntity.java | 41 ----------- .../byfilter/BySimpleModification.java | 4 +- .../changesets/changelog_20240827T134336Z.xml | 69 +++++++++++++++++++ .../db/changelog/db.changelog-master.yaml | 2 +- 22 files changed, 164 insertions(+), 310 deletions(-) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{DoubleSimpleModificationByFilterInfos.java => BooleanModificationByFilterInfos.java} (50%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{IntegerSimpleModificationByFilterInfos.java => DoubleModificationByFilterInfos.java} (50%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{EnumSimpleModificationByFilterInfos.java => EnumModificationByFilterInfos.java} (84%) create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{BooleanSimpleModificationByFilterInfos.java => PropertyModificationByFilterInfos.java} (59%) delete mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationByFilterInfos.java rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{StringSimpleModificationByFilterInfos.java => StringModificationByFilterInfos.java} (53%) delete mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java delete mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java delete mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java delete mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java delete mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java create mode 100644 src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java similarity index 50% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java index e68c1adcf..c10906445 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleSimpleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java @@ -7,24 +7,13 @@ package org.gridsuite.modification.server.dto.byfilter.simple; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.DoubleSimpleModificationEntity; /** * @author Thang PHAM */ @SuperBuilder @NoArgsConstructor -@Data -public class DoubleSimpleModificationByFilterInfos extends SimpleModificationByFilterInfos { - @Schema(description = "value") - private Double value; - - @Override - public DoubleSimpleModificationEntity toEntity() { - return new DoubleSimpleModificationEntity(this); - } +public class BooleanModificationByFilterInfos extends SimpleModificationByFilterInfos { } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java similarity index 50% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java index 9fe5895a0..93ff06b2f 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerSimpleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java @@ -7,24 +7,13 @@ package org.gridsuite.modification.server.dto.byfilter.simple; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.IntegerSimpleModificationEntity; /** * @author Thang PHAM */ @SuperBuilder @NoArgsConstructor -@Data -public class IntegerSimpleModificationByFilterInfos extends SimpleModificationByFilterInfos { - @Schema(description = "value") - private Integer value; - - @Override - public IntegerSimpleModificationEntity toEntity() { - return new IntegerSimpleModificationEntity(this); - } +public class DoubleModificationByFilterInfos extends SimpleModificationByFilterInfos { } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java similarity index 84% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java index 80beff17d..f7065986e 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumSimpleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java @@ -17,6 +17,6 @@ @SuperBuilder @NoArgsConstructor @Data -public class EnumSimpleModificationByFilterInfos extends StringSimpleModificationByFilterInfos { +public class EnumModificationByFilterInfos extends StringModificationByFilterInfos { } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java new file mode 100644 index 000000000..eb7dbabe4 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.dto.byfilter.simple; + +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author Thang PHAM + */ +@SuperBuilder +@NoArgsConstructor +public class IntegerModificationByFilterInfos extends SimpleModificationByFilterInfos { +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java similarity index 59% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java index 2f91d27d3..b0528ca67 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanSimpleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java @@ -11,7 +11,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.BooleanSimpleModificationEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; /** * @author Thang PHAM @@ -19,12 +19,14 @@ @SuperBuilder @NoArgsConstructor @Data -public class BooleanSimpleModificationByFilterInfos extends SimpleModificationByFilterInfos { - @Schema(description = "value") - private Boolean value; +public class PropertyModificationByFilterInfos extends StringModificationByFilterInfos { + @Schema(description = "Property name") + private String propertyName; @Override - public BooleanSimpleModificationEntity toEntity() { - return new BooleanSimpleModificationEntity(this); + public SimpleModificationEntity toEntity() { + SimpleModificationEntity simpleModificationEntity = super.toEntity(); + simpleModificationEntity.setPropertyName(propertyName); + return simpleModificationEntity; } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationByFilterInfos.java deleted file mode 100644 index a3c83c353..000000000 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertySimpleModificationByFilterInfos.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (c) 2023, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.dto.byfilter.simple; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.PropertySimpleModificationEntity; - -/** - * @author Thang PHAM - */ -@SuperBuilder -@NoArgsConstructor -@Data -public class PropertySimpleModificationByFilterInfos extends StringSimpleModificationByFilterInfos { - @Schema(description = "property name") - private String propertyName; - - @Override - public PropertySimpleModificationEntity toEntity() { - PropertySimpleModificationEntity propertySimpleModificationEntity = new PropertySimpleModificationEntity(this); - propertySimpleModificationEntity.setPropertyName(propertyName); - return propertySimpleModificationEntity; - } -} diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java index 60cf4253d..cb335af02 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java @@ -27,12 +27,12 @@ property = "dataType", include = JsonTypeInfo.As.EXISTING_PROPERTY) @JsonSubTypes({ - @JsonSubTypes.Type(value = StringSimpleModificationByFilterInfos.class, name = "STRING"), - @JsonSubTypes.Type(value = BooleanSimpleModificationByFilterInfos.class, name = "BOOLEAN"), - @JsonSubTypes.Type(value = EnumSimpleModificationByFilterInfos.class, name = "ENUM"), - @JsonSubTypes.Type(value = DoubleSimpleModificationByFilterInfos.class, name = "DOUBLE"), - @JsonSubTypes.Type(value = IntegerSimpleModificationByFilterInfos.class, name = "INTEGER"), - @JsonSubTypes.Type(value = PropertySimpleModificationByFilterInfos.class, name = "PROPERTY"), + @JsonSubTypes.Type(value = StringModificationByFilterInfos.class, name = "STRING"), + @JsonSubTypes.Type(value = BooleanModificationByFilterInfos.class, name = "BOOLEAN"), + @JsonSubTypes.Type(value = EnumModificationByFilterInfos.class, name = "ENUM"), + @JsonSubTypes.Type(value = DoubleModificationByFilterInfos.class, name = "DOUBLE"), + @JsonSubTypes.Type(value = IntegerModificationByFilterInfos.class, name = "INTEGER"), + @JsonSubTypes.Type(value = PropertyModificationByFilterInfos.class, name = "PROPERTY"), }) @JsonInclude(JsonInclude.Include.NON_NULL) @SuperBuilder @@ -42,12 +42,11 @@ public class SimpleModificationByFilterInfos extends AbstractModificationByFi @Schema(description = "Data type") private DataType dataType; + @Schema(description = "Value") + private T value; + @JsonIgnore public SimpleModificationEntity toEntity() { - throw new UnsupportedOperationException("Unsupported operation toEntity for instant of class " + this.getClass().getName()); - } - - public T getValue() { - throw new UnsupportedOperationException("Unsupported operation getValue for instant of class " + this.getClass().getName()); + return new SimpleModificationEntity(this); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java similarity index 53% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java index 83a0614fd..6b3c94798 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringSimpleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java @@ -7,11 +7,9 @@ package org.gridsuite.modification.server.dto.byfilter.simple; -import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.StringSimpleModificationEntity; /** * @author Thang PHAM @@ -19,12 +17,5 @@ @SuperBuilder @NoArgsConstructor @Data -public class StringSimpleModificationByFilterInfos extends SimpleModificationByFilterInfos { - @Schema(description = "value") - private String value; - - @Override - public StringSimpleModificationEntity toEntity() { - return new StringSimpleModificationEntity(this); - } +public class StringModificationByFilterInfos extends SimpleModificationByFilterInfos { } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/VariationFilterEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/VariationFilterEntity.java index ee9e4c15f..31ea798f4 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/VariationFilterEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/VariationFilterEntity.java @@ -28,7 +28,7 @@ @Getter @Setter @Entity -@Table(name = "VariationFilter", indexes = @Index(name = "formula_id_idx", columnList = "formula_id")) +@Table(name = "VariationFilter", indexes = @Index(name = "modification_by_filter_id_idx", columnList = "modification_by_filter_id")) public class VariationFilterEntity { @Id diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java index 3746eb15f..791397660 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java @@ -2,10 +2,7 @@ import com.powsybl.iidm.network.IdentifiableType; import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.NonNull; -import lombok.Setter; +import lombok.*; import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; @@ -16,10 +13,10 @@ import java.util.stream.Collectors; @NoArgsConstructor -@Getter -@Setter +@Data @Entity @Table(name = "byFormulaModification") +@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "byFormulaModification_id_fk_constraint")) public class ByFormulaModificationEntity extends ModificationEntity { @Column private IdentifiableType identifiableType; diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java index f00152355..b23b5aa4d 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java @@ -19,6 +19,7 @@ @Setter @Entity @Table(name = "bySimpleModification") +@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "bySimpleModification_id_fk_constraint")) public class BySimpleModificationEntity extends ModificationEntity { @Column private IdentifiableType identifiableType; diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java index f406b26aa..506e56eb5 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java @@ -9,8 +9,12 @@ import java.util.List; import java.util.UUID; +import static jakarta.persistence.InheritanceType.JOINED; + @NoArgsConstructor @Entity +@Inheritance(strategy = JOINED) +@Table(name = "modification_by_filter") public class ModificationByFilterEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java index d1dd7f18f..c7958c724 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java @@ -7,10 +7,7 @@ package org.gridsuite.modification.server.entities.equipment.modification.byfilter.formula; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Index; -import jakarta.persistence.Table; +import jakarta.persistence.*; import lombok.NoArgsConstructor; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.dto.byfilter.formula.Operator; @@ -23,7 +20,8 @@ @NoArgsConstructor @Entity -@Table(name = "formula", indexes = @Index(name = "modification_by_filter_id_idx", columnList = "modification_by_filter_id")) +@Table(name = "formula", indexes = @Index(name = "by_formula_modification_id_idx", columnList = "by_formula_modification_id")) +@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "formula_id_fk_constraint")) public class FormulaEntity extends ModificationByFilterEntity { @Column private String equipmentField1; diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java deleted file mode 100644 index 50ad4b84b..000000000 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/BooleanSimpleModificationEntity.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) 2023, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.BooleanSimpleModificationByFilterInfos; - -/** - * @author Thang PHAM - */ -@NoArgsConstructor -@Data -@Entity -@Table(name = "simpleModificationBoolean") -public class BooleanSimpleModificationEntity extends SimpleModificationEntity { - @Column(name = "value_") // "value" is not supported in UT with H2 - Boolean value; - - public BooleanSimpleModificationEntity(BooleanSimpleModificationByFilterInfos booleanSimpleModificationByFilterInfos) { - super(booleanSimpleModificationByFilterInfos); - this.value = booleanSimpleModificationByFilterInfos.getValue(); - } - - @Override - public BooleanSimpleModificationByFilterInfos toSimpleModificationInfos() { - BooleanSimpleModificationByFilterInfos booleanSimpleModificationByFilterInfos = BooleanSimpleModificationByFilterInfos.builder() - .value(value) - .build(); - assignAttributes(booleanSimpleModificationByFilterInfos); - return booleanSimpleModificationByFilterInfos; - } -} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java deleted file mode 100644 index b9ab1558f..000000000 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/DoubleSimpleModificationEntity.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) 2023, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.DoubleSimpleModificationByFilterInfos; - -/** - * @author Thang PHAM - */ -@NoArgsConstructor -@Data -@Entity -@Table(name = "simpleModificationDouble") -public class DoubleSimpleModificationEntity extends SimpleModificationEntity { - @Column(name = "value_") // "value" is not supported in UT with H2 - Double value; - - public DoubleSimpleModificationEntity(DoubleSimpleModificationByFilterInfos doubleSimpleModificationByFilterInfos) { - super(doubleSimpleModificationByFilterInfos); - this.value = doubleSimpleModificationByFilterInfos.getValue(); - } - - @Override - public DoubleSimpleModificationByFilterInfos toSimpleModificationInfos() { - DoubleSimpleModificationByFilterInfos doubleSimpleModificationByFilterInfos = DoubleSimpleModificationByFilterInfos.builder() - .value(value) - .build(); - assignAttributes(doubleSimpleModificationByFilterInfos); - return doubleSimpleModificationByFilterInfos; - } -} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java deleted file mode 100644 index e86fc3194..000000000 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/IntegerSimpleModificationEntity.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) 2023, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.IntegerSimpleModificationByFilterInfos; - -/** - * @author Thang PHAM - */ -@NoArgsConstructor -@Data -@Entity -@Table(name = "simpleModificationInteger") -public class IntegerSimpleModificationEntity extends SimpleModificationEntity { - @Column(name = "value_") // "value" is not supported in UT with H2 - Integer value; - - public IntegerSimpleModificationEntity(IntegerSimpleModificationByFilterInfos integerSimpleModificationByFilterInfos) { - super(integerSimpleModificationByFilterInfos); - this.value = integerSimpleModificationByFilterInfos.getValue(); - } - - @Override - public IntegerSimpleModificationByFilterInfos toSimpleModificationInfos() { - IntegerSimpleModificationByFilterInfos integerSimpleModificationByFilterInfos = IntegerSimpleModificationByFilterInfos.builder() - .value(value) - .build(); - assignAttributes(integerSimpleModificationByFilterInfos); - return integerSimpleModificationByFilterInfos; - } -} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java deleted file mode 100644 index 48c485456..000000000 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/PropertySimpleModificationEntity.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (c) 2023, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.PropertySimpleModificationByFilterInfos; - -/** - * @author Thang PHAM - */ -@NoArgsConstructor -@Data -@Entity -@Table(name = "simpleModificationProperty") -public class PropertySimpleModificationEntity extends StringSimpleModificationEntity { - @Column - String propertyName; - - public PropertySimpleModificationEntity(PropertySimpleModificationByFilterInfos propertySimpleModificationByFilterInfos) { - super(propertySimpleModificationByFilterInfos); - this.propertyName = propertySimpleModificationByFilterInfos.getPropertyName(); - } - - @Override - public PropertySimpleModificationByFilterInfos toSimpleModificationInfos() { - PropertySimpleModificationByFilterInfos propertySimpleModificationByFilterInfos = PropertySimpleModificationByFilterInfos.builder() - .value(value) - .propertyName(propertyName) - .build(); - assignAttributes(propertySimpleModificationByFilterInfos); - return propertySimpleModificationByFilterInfos; - } -} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java index 85fdae86f..4d1766517 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java @@ -8,26 +8,37 @@ package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; import jakarta.persistence.*; +import lombok.Data; import lombok.NoArgsConstructor; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.*; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ModificationByFilterEntity; +import java.util.Optional; + /** * @author Thang PHAM */ @NoArgsConstructor @Entity -@Table(name = "simpleModification", indexes = @Index(name = "modification_by_filter_id_idx", columnList = "modification_by_filter_id")) -@Inheritance(strategy = InheritanceType.JOINED) +@Data +@Table(name = "simpleModification", indexes = @Index(name = "by_simple_modification_id_idx", columnList = "by_simple_modification_id")) +@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "simple_modification_id_fk_constraint")) public class SimpleModificationEntity extends ModificationByFilterEntity { @Column @Enumerated(EnumType.STRING) private DataType dataType; + @Column(name = "value_") // "value" is not supported in UT with H2 + private String value; // all values of different data types will be serialized as a string, deserialization is based on dataType + + @Column + private String propertyName; // dedicated to an exceptional case, i.e. modify a property + public SimpleModificationEntity(SimpleModificationByFilterInfos simpleModificationInfos) { super(simpleModificationInfos); this.dataType = simpleModificationInfos.getDataType(); + this.value = Optional.ofNullable(simpleModificationInfos.getValue()).map(Object::toString).orElse(null); } protected void assignAttributes(SimpleModificationByFilterInfos simpleModificationInfos) { @@ -35,7 +46,30 @@ protected void assignAttributes(SimpleModificationByFilterInfos simpleModific simpleModificationInfos.setDataType(dataType); } - public SimpleModificationByFilterInfos toSimpleModificationInfos() { - return null; + public SimpleModificationByFilterInfos toSimpleModificationInfos() { + SimpleModificationByFilterInfos simpleModificationByFilterInfos = switch (dataType) { + case BOOLEAN -> BooleanModificationByFilterInfos.builder() + .value(value != null ? Boolean.valueOf(value) : null) + .build(); + case INTEGER -> IntegerModificationByFilterInfos.builder() + .value(value != null ? Integer.valueOf(value) : null) + .build(); + case DOUBLE -> DoubleModificationByFilterInfos.builder() + .value(value != null ? Double.valueOf(value) : null) + .build(); + case STRING -> StringModificationByFilterInfos.builder() + .value(value) + .build(); + case ENUM -> EnumModificationByFilterInfos.builder() + .value(value) + .build(); + case PROPERTY -> PropertyModificationByFilterInfos.builder() + .value(value) + .propertyName(propertyName) + .build(); + }; + + assignAttributes(simpleModificationByFilterInfos); + return simpleModificationByFilterInfos; } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java deleted file mode 100644 index c4a37e77e..000000000 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/StringSimpleModificationEntity.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (c) 2023, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.simple.StringSimpleModificationByFilterInfos; - -/** - * @author Thang PHAM - */ -@NoArgsConstructor -@Data -@Entity -@Table(name = "simpleModificationString") -public class StringSimpleModificationEntity extends SimpleModificationEntity { - @Column(name = "value_") // "value" is not supported in UT with H2 - String value; - - public StringSimpleModificationEntity(StringSimpleModificationByFilterInfos stringSimpleModificationByFilterInfos) { - super(stringSimpleModificationByFilterInfos); - this.value = stringSimpleModificationByFilterInfos.getValue(); - } - - @Override - public StringSimpleModificationByFilterInfos toSimpleModificationInfos() { - StringSimpleModificationByFilterInfos stringSimpleModificationByFilterInfos = StringSimpleModificationByFilterInfos.builder() - .value(value) - .build(); - assignAttributes(stringSimpleModificationByFilterInfos); - return stringSimpleModificationByFilterInfos; - } -} diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index 8dbbb34c1..411446efd 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -15,7 +15,7 @@ import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; -import org.gridsuite.modification.server.dto.byfilter.simple.PropertySimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.PropertyModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; import java.util.Collections; @@ -66,7 +66,7 @@ protected Object applyValue(Identifiable identifiable, AbstractModificationBy SimpleModificationByFilterInfos simpleModificationInfos = (SimpleModificationByFilterInfos) filterModificationInfos; if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { identifiable.setProperty( - ((PropertySimpleModificationByFilterInfos) simpleModificationInfos).getPropertyName(), + ((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName(), (String) simpleModificationInfos.getValue() ); } else { diff --git a/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml b/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml new file mode 100644 index 000000000..016aa83db --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 560620afe..2d9b167a4 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -304,5 +304,5 @@ databaseChangeLog: file: changesets/changelog_20240703T170634Z.xml relativeToChangelogFile: true - include: - file: changesets/changelog_20240801T080812Z.xml + file: changesets/changelog_20240827T134336Z.xml relativeToChangelogFile: true From ce031c04267f143f5daab90ed6e4fd6a4ede9110 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 27 Aug 2024 17:21:31 +0200 Subject: [PATCH 08/42] Compilation issue --- .../byfilter/simple/SimpleModificationEntity.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java index 4d1766517..effcd1e53 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java @@ -8,8 +8,8 @@ package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; import jakarta.persistence.*; -import lombok.Data; import lombok.NoArgsConstructor; +import lombok.Setter; import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.dto.byfilter.simple.*; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ModificationByFilterEntity; @@ -21,7 +21,6 @@ */ @NoArgsConstructor @Entity -@Data @Table(name = "simpleModification", indexes = @Index(name = "by_simple_modification_id_idx", columnList = "by_simple_modification_id")) @PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "simple_modification_id_fk_constraint")) public class SimpleModificationEntity extends ModificationByFilterEntity { @@ -32,6 +31,7 @@ public class SimpleModificationEntity extends ModificationByFilterEntity { @Column(name = "value_") // "value" is not supported in UT with H2 private String value; // all values of different data types will be serialized as a string, deserialization is based on dataType + @Setter @Column private String propertyName; // dedicated to an exceptional case, i.e. modify a property @@ -46,8 +46,8 @@ protected void assignAttributes(SimpleModificationByFilterInfos simpleModific simpleModificationInfos.setDataType(dataType); } - public SimpleModificationByFilterInfos toSimpleModificationInfos() { - SimpleModificationByFilterInfos simpleModificationByFilterInfos = switch (dataType) { + public SimpleModificationByFilterInfos toSimpleModificationInfos() { + SimpleModificationByFilterInfos simpleModificationByFilterInfos = switch (dataType) { case BOOLEAN -> BooleanModificationByFilterInfos.builder() .value(value != null ? Boolean.valueOf(value) : null) .build(); From 1b75aef124731f8d584b55af43193cbc4d04f10c Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Wed, 28 Aug 2024 22:55:07 +0200 Subject: [PATCH 09/42] Migration formula data --- .../changesets/changelog_20240801T080812Z.xml | 250 ------------------ .../changesets/changelog_20240827T134336Z.xml | 25 +- .../migrationFormula_20240827T134336Z.sql | 7 + 3 files changed, 22 insertions(+), 260 deletions(-) delete mode 100644 src/main/resources/db/changelog/changesets/changelog_20240801T080812Z.xml create mode 100644 src/main/resources/db/changelog/changesets/migrationFormula_20240827T134336Z.sql diff --git a/src/main/resources/db/changelog/changesets/changelog_20240801T080812Z.xml b/src/main/resources/db/changelog/changesets/changelog_20240801T080812Z.xml deleted file mode 100644 index adf9613d0..000000000 --- a/src/main/resources/db/changelog/changesets/changelog_20240801T080812Z.xml +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml b/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml index 016aa83db..42754b58a 100644 --- a/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml +++ b/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml @@ -1,5 +1,7 @@ - + @@ -28,9 +30,10 @@ - - - + + + + @@ -42,6 +45,14 @@ + + + @@ -58,12 +69,6 @@ - - - - - - diff --git a/src/main/resources/db/changelog/changesets/migrationFormula_20240827T134336Z.sql b/src/main/resources/db/changelog/changesets/migrationFormula_20240827T134336Z.sql new file mode 100644 index 000000000..ad5b91317 --- /dev/null +++ b/src/main/resources/db/changelog/changesets/migrationFormula_20240827T134336Z.sql @@ -0,0 +1,7 @@ +--- Migrate partially data from formula table to new modification_by_filter table +INSERT INTO modification_by_filter (id, edited_field) +SELECT + id, + edited_field +FROM formula; + From 300e26c989bd6922a8f404594fc92800b43db200 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 29 Aug 2024 19:46:26 +0200 Subject: [PATCH 10/42] Correct dataType null in dto --- .../server/dto/BySimpleModificationInfos.java | 4 ++-- .../byfilter/equipmentfield/BatteryField.java | 4 ++-- .../byfilter/equipmentfield/GeneratorField.java | 4 ++-- .../dto/byfilter/equipmentfield/LoadField.java | 4 ++-- .../equipmentfield/ShuntCompensatorField.java | 4 ++-- .../TwoWindingsTransformerField.java | 4 ++-- .../equipmentfield/VoltageLevelField.java | 4 ++-- ...bstractSimpleModificationByFilterInfos.java} | 17 +++++++++-------- .../BooleanModificationByFilterInfos.java | 9 ++++++++- .../simple/DoubleModificationByFilterInfos.java | 9 ++++++++- .../simple/EnumModificationByFilterInfos.java | 10 +++++++--- .../IntegerModificationByFilterInfos.java | 9 ++++++++- .../PropertyModificationByFilterInfos.java | 14 ++++++++++++-- .../simple/StringModificationByFilterInfos.java | 15 ++++++++++++--- .../byfilter/BySimpleModificationEntity.java | 6 +++--- .../simple/SimpleModificationEntity.java | 9 ++++----- .../byfilter/AbstractByFilterModification.java | 2 +- .../byfilter/BySimpleModification.java | 6 +++--- 18 files changed, 89 insertions(+), 45 deletions(-) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/{SimpleModificationByFilterInfos.java => AbstractSimpleModificationByFilterInfos.java} (87%) diff --git a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java index ee55dae16..1032a0b83 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java @@ -15,7 +15,7 @@ import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.ModificationType; import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.BySimpleModificationEntity; import org.gridsuite.modification.server.modifications.byfilter.BySimpleModification; @@ -38,7 +38,7 @@ public class BySimpleModificationInfos extends ModificationInfos { private IdentifiableType identifiableType; @Schema(description = "list of modifications") - private List> simpleModificationInfosList; + private List> simpleModificationInfosList; @Override public BySimpleModificationEntity toEntity() { 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 f057834c7..6fff6a757 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 @@ -10,7 +10,7 @@ import com.powsybl.iidm.network.Battery; import com.powsybl.iidm.network.extensions.ActivePowerControl; import com.powsybl.iidm.network.extensions.ActivePowerControlAdder; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -48,7 +48,7 @@ public static void setNewValue(Battery battery, String batteryField, Double newV } } - public static void setNewValue(Battery battery, SimpleModificationByFilterInfos fieldModificationInfos) { + public static void setNewValue(Battery battery, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(battery, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } 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 80efe6a9c..46c46edf8 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 @@ -9,7 +9,7 @@ import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.extensions.*; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -141,7 +141,7 @@ public static void setNewValue(Generator generator, String generatorField, Doubl } } - public static void setNewValue(Generator generator, SimpleModificationByFilterInfos fieldModificationInfos) { + public static void setNewValue(Generator generator, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(generator, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java index ffbec72f2..a1a1d7257 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java @@ -8,7 +8,7 @@ package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.Load; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -34,7 +34,7 @@ public static void setNewValue(Load load, String loadField, Double newValue) { } } - public static void setNewValue(Load load, SimpleModificationByFilterInfos fieldModificationInfos) { + public static void setNewValue(Load load, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(load, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index d6a0c3c65..55d72245c 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -12,7 +12,7 @@ import com.powsybl.iidm.network.ShuntCompensatorModelType; import com.powsybl.iidm.network.VoltageLevel; import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -59,7 +59,7 @@ public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCo } } - public static void setNewValue(ShuntCompensator shuntCompensator, SimpleModificationByFilterInfos fieldModificationInfos) { + public static void setNewValue(ShuntCompensator shuntCompensator, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(shuntCompensator, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index d7c8b7d79..6a27e97d9 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -3,7 +3,7 @@ import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.RatioTapChanger; import com.powsybl.iidm.network.TwoWindingsTransformer; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; public enum TwoWindingsTransformerField { R, @@ -69,7 +69,7 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin } } - public static void setNewValue(TwoWindingsTransformer transformer, SimpleModificationByFilterInfos fieldModificationInfos) { + public static void setNewValue(TwoWindingsTransformer transformer, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(transformer, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java index 1ed49454c..029c1f55d 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java @@ -10,7 +10,7 @@ import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; /** * @author Seddik Yengui @@ -59,7 +59,7 @@ public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelFie } } - public static void setNewValue(VoltageLevel voltageLevel, SimpleModificationByFilterInfos fieldModificationInfos) { + public static void setNewValue(VoltageLevel voltageLevel, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { switch (fieldModificationInfos.getDataType()) { case DOUBLE -> setNewValue(voltageLevel, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java similarity index 87% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java index cb335af02..ec68680fe 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/SimpleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. @@ -12,11 +12,12 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; +import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; /** @@ -37,14 +38,14 @@ @JsonInclude(JsonInclude.Include.NON_NULL) @SuperBuilder @NoArgsConstructor -@Data -public class SimpleModificationByFilterInfos extends AbstractModificationByFilterInfos { - @Schema(description = "Data type") - private DataType dataType; - +@Getter +@Setter +public abstract class AbstractSimpleModificationByFilterInfos extends AbstractModificationByFilterInfos { @Schema(description = "Value") private T value; + public abstract DataType getDataType(); + @JsonIgnore public SimpleModificationEntity toEntity() { return new SimpleModificationEntity(this); diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java index c10906445..dffc897a1 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java @@ -7,13 +7,20 @@ package org.gridsuite.modification.server.dto.byfilter.simple; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.dto.byfilter.DataType; /** * @author Thang PHAM */ @SuperBuilder @NoArgsConstructor -public class BooleanModificationByFilterInfos extends SimpleModificationByFilterInfos { +public class BooleanModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { + @Override + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public DataType getDataType() { + return DataType.BOOLEAN; + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java index 93ff06b2f..84aca05d6 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java @@ -7,13 +7,20 @@ package org.gridsuite.modification.server.dto.byfilter.simple; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.dto.byfilter.DataType; /** * @author Thang PHAM */ @SuperBuilder @NoArgsConstructor -public class DoubleModificationByFilterInfos extends SimpleModificationByFilterInfos { +public class DoubleModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { + @Override + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public DataType getDataType() { + return DataType.DOUBLE; + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java index f7065986e..0012b219c 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java @@ -7,16 +7,20 @@ package org.gridsuite.modification.server.dto.byfilter.simple; -import lombok.Data; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.dto.byfilter.DataType; /** * @author Thang PHAM */ @SuperBuilder @NoArgsConstructor -@Data public class EnumModificationByFilterInfos extends StringModificationByFilterInfos { - + @Override + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public DataType getDataType() { + return DataType.ENUM; + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java index eb7dbabe4..2136138fd 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java @@ -7,13 +7,20 @@ package org.gridsuite.modification.server.dto.byfilter.simple; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.dto.byfilter.DataType; /** * @author Thang PHAM */ @SuperBuilder @NoArgsConstructor -public class IntegerModificationByFilterInfos extends SimpleModificationByFilterInfos { +public class IntegerModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { + @Override + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public DataType getDataType() { + return DataType.INTEGER; + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java index b0528ca67..0a5d68b4c 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java @@ -7,10 +7,13 @@ package org.gridsuite.modification.server.dto.byfilter.simple; +import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; +import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; /** @@ -18,11 +21,18 @@ */ @SuperBuilder @NoArgsConstructor -@Data +@Getter +@Setter public class PropertyModificationByFilterInfos extends StringModificationByFilterInfos { @Schema(description = "Property name") private String propertyName; + @Override + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public DataType getDataType() { + return DataType.PROPERTY; + } + @Override public SimpleModificationEntity toEntity() { SimpleModificationEntity simpleModificationEntity = super.toEntity(); diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java index 6b3c94798..db7ffcab9 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java @@ -7,15 +7,24 @@ package org.gridsuite.modification.server.dto.byfilter.simple; -import lombok.Data; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.dto.byfilter.DataType; /** * @author Thang PHAM */ @SuperBuilder @NoArgsConstructor -@Data -public class StringModificationByFilterInfos extends SimpleModificationByFilterInfos { +@Getter +@Setter +public class StringModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { + @Override + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + public DataType getDataType() { + return DataType.STRING; + } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java index b23b5aa4d..5f3a9e794 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java @@ -8,7 +8,7 @@ import lombok.Setter; import org.gridsuite.modification.server.dto.BySimpleModificationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; import org.gridsuite.modification.server.entities.ModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; @@ -45,13 +45,13 @@ private void assignAttributes(BySimpleModificationInfos bySimpleModificationInfo if (simpleModificationEntities == null) { simpleModificationEntities = bySimpleModificationInfos.getSimpleModificationInfosList() .stream() - .map(SimpleModificationByFilterInfos::toEntity) + .map(AbstractSimpleModificationByFilterInfos::toEntity) .toList(); } else { simpleModificationEntities.clear(); simpleModificationEntities.addAll(bySimpleModificationInfos.getSimpleModificationInfosList() .stream() - .map(SimpleModificationByFilterInfos::toEntity) + .map(AbstractSimpleModificationByFilterInfos::toEntity) .toList()); } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java index effcd1e53..851f44ccc 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java @@ -35,19 +35,18 @@ public class SimpleModificationEntity extends ModificationByFilterEntity { @Column private String propertyName; // dedicated to an exceptional case, i.e. modify a property - public SimpleModificationEntity(SimpleModificationByFilterInfos simpleModificationInfos) { + public SimpleModificationEntity(AbstractSimpleModificationByFilterInfos simpleModificationInfos) { super(simpleModificationInfos); this.dataType = simpleModificationInfos.getDataType(); this.value = Optional.ofNullable(simpleModificationInfos.getValue()).map(Object::toString).orElse(null); } - protected void assignAttributes(SimpleModificationByFilterInfos simpleModificationInfos) { + protected void assignAttributes(AbstractSimpleModificationByFilterInfos simpleModificationInfos) { super.assignAttributes(simpleModificationInfos); - simpleModificationInfos.setDataType(dataType); } - public SimpleModificationByFilterInfos toSimpleModificationInfos() { - SimpleModificationByFilterInfos simpleModificationByFilterInfos = switch (dataType) { + public AbstractSimpleModificationByFilterInfos toSimpleModificationInfos() { + AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos = switch (dataType) { case BOOLEAN -> BooleanModificationByFilterInfos.builder() .value(value != null ? Boolean.valueOf(value) : null) .build(); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java index f5df3c0b1..d83cf9b5e 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -215,7 +215,7 @@ private void createByFilterModificationReports(List reports, Abstrac } reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_EDITED_FIELD_FILTER + reports.size(), " Edited field :${" + KEY_FIELD_NAME + "}") + .withMessageTemplate(KEY_EDITED_FIELD_FILTER + reports.size(), " Edited field : ${" + KEY_FIELD_NAME + "}") .withUntypedValue(KEY_FIELD_NAME, filterModificationInfos.getEditedField()) .withSeverity(TypedValue.INFO_SEVERITY) .build()); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index 411446efd..324754284 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -16,7 +16,7 @@ import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; import org.gridsuite.modification.server.dto.byfilter.simple.PropertyModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.SimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; import java.util.Collections; import java.util.List; @@ -33,7 +33,7 @@ public BySimpleModification(BySimpleModificationInfos modificationInfos) { @Override public String getModificationLabel() { - return "modification by filter"; + return "simple modification"; } @Override @@ -63,7 +63,7 @@ protected boolean preCheckValue(Identifiable identifiable, AbstractModificati @Override protected Object applyValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos) { - SimpleModificationByFilterInfos simpleModificationInfos = (SimpleModificationByFilterInfos) filterModificationInfos; + AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) filterModificationInfos; if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { identifiable.setProperty( ((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName(), From 81d8fa0674ab28fb4350239cf113c9cf8bb2f1fa Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Mon, 2 Sep 2024 10:41:48 +0200 Subject: [PATCH 11/42] Modification by filter (without formula data migration) --- .../server/dto/BySimpleModificationInfos.java | 10 +- .../AbstractModificationByFilterInfos.java | 16 +- .../byfilter/equipmentfield/BatteryField.java | 6 +- .../equipmentfield/GeneratorField.java | 6 +- .../byfilter/equipmentfield/LoadField.java | 6 +- .../equipmentfield/ShuntCompensatorField.java | 6 +- .../TwoWindingsTransformerField.java | 6 +- .../equipmentfield/VoltageLevelField.java | 6 +- .../dto/byfilter/formula/FormulaInfos.java | 6 +- .../BooleanModificationByFilterInfos.java | 2 +- .../DoubleModificationByFilterInfos.java | 2 +- .../simple/EnumModificationByFilterInfos.java | 2 +- .../IntegerModificationByFilterInfos.java | 2 +- .../PropertyModificationByFilterInfos.java | 6 +- .../StringModificationByFilterInfos.java | 6 +- .../modification/VariationFilterEntity.java | 2 +- .../byfilter/ByFormulaModificationEntity.java | 4 +- .../byfilter/BySimpleModificationEntity.java | 21 +- .../byfilter/ModificationByFilterEntity.java | 28 +- .../byfilter/formula/FormulaEntity.java | 14 +- .../simple/SimpleModificationEntity.java | 19 +- .../AbstractByFilterModification.java | 291 ++++++++++-------- .../byfilter/ByFormulaModification.java | 47 +-- .../byfilter/BySimpleModification.java | 33 +- .../changesets/changelog_20240827T134336Z.xml | 74 ----- .../changesets/changelog_20240902T071959Z.xml | 42 +++ .../migrationFormula_20240827T134336Z.sql | 7 - .../db/changelog/db.changelog-master.yaml | 2 +- ...VoltageLevelByFormulaModificationTest.java | 8 +- 29 files changed, 356 insertions(+), 324 deletions(-) delete mode 100644 src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml create mode 100644 src/main/resources/db/changelog/changesets/changelog_20240902T071959Z.xml delete mode 100644 src/main/resources/db/changelog/changesets/migrationFormula_20240827T134336Z.sql diff --git a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java index 1032a0b83..498c5305f 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java @@ -11,7 +11,10 @@ import com.powsybl.commons.report.ReportNode; import com.powsybl.iidm.network.IdentifiableType; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.ModificationType; import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; @@ -26,7 +29,6 @@ */ @SuperBuilder @NoArgsConstructor -@AllArgsConstructor @Getter @Setter @JsonTypeName("BY_SIMPLE_MODIFICATION") @@ -34,8 +36,8 @@ @ToString(callSuper = true) @Schema(description = "Modification by simple assignment") public class BySimpleModificationInfos extends ModificationInfos { - @Schema(description = "Identifiable type") - private IdentifiableType identifiableType; + @Schema(description = "Equipment type") + private IdentifiableType equipmentType; @Schema(description = "list of modifications") private List> simpleModificationInfosList; diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java index c396f539a..688132860 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java @@ -1,17 +1,29 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + package org.gridsuite.modification.server.dto.byfilter; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; +import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.FilterInfos; import java.util.List; import java.util.UUID; +/** + * @author Thang PHAM + */ @SuperBuilder @NoArgsConstructor -@Data +@Getter +@Setter public abstract class AbstractModificationByFilterInfos { @Schema(description = "id") private UUID id; 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 6fff6a757..0bc394644 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 @@ -48,9 +48,9 @@ public static void setNewValue(Battery battery, String batteryField, Double newV } } - public static void setNewValue(Battery battery, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { - switch (fieldModificationInfos.getDataType()) { - case DOUBLE -> setNewValue(battery, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + public static void setNewValue(Battery battery, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { + switch (modificationByFilterInfos.getDataType()) { + case DOUBLE -> setNewValue(battery, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); } } } 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 46c46edf8..c7b32f6df 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 @@ -141,9 +141,9 @@ public static void setNewValue(Generator generator, String generatorField, Doubl } } - public static void setNewValue(Generator generator, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { - switch (fieldModificationInfos.getDataType()) { - case DOUBLE -> setNewValue(generator, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + public static void setNewValue(Generator generator, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { + switch (modificationByFilterInfos.getDataType()) { + case DOUBLE -> setNewValue(generator, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java index a1a1d7257..2e7ef1199 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java @@ -34,9 +34,9 @@ public static void setNewValue(Load load, String loadField, Double newValue) { } } - public static void setNewValue(Load load, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { - switch (fieldModificationInfos.getDataType()) { - case DOUBLE -> setNewValue(load, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + public static void setNewValue(Load load, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { + switch (modificationByFilterInfos.getDataType()) { + case DOUBLE -> setNewValue(load, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index 55d72245c..5712451d3 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -59,9 +59,9 @@ public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCo } } - public static void setNewValue(ShuntCompensator shuntCompensator, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { - switch (fieldModificationInfos.getDataType()) { - case DOUBLE -> setNewValue(shuntCompensator, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + public static void setNewValue(ShuntCompensator shuntCompensator, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { + switch (modificationByFilterInfos.getDataType()) { + case DOUBLE -> setNewValue(shuntCompensator, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index 6a27e97d9..4f577469c 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -69,9 +69,9 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin } } - public static void setNewValue(TwoWindingsTransformer transformer, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { - switch (fieldModificationInfos.getDataType()) { - case DOUBLE -> setNewValue(transformer, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + public static void setNewValue(TwoWindingsTransformer transformer, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { + switch (modificationByFilterInfos.getDataType()) { + case DOUBLE -> setNewValue(transformer, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java index 029c1f55d..26404b49c 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java @@ -59,9 +59,9 @@ public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelFie } } - public static void setNewValue(VoltageLevel voltageLevel, AbstractSimpleModificationByFilterInfos fieldModificationInfos) { - switch (fieldModificationInfos.getDataType()) { - case DOUBLE -> setNewValue(voltageLevel, fieldModificationInfos.getEditedField(), (Double) fieldModificationInfos.getValue()); + public static void setNewValue(VoltageLevel voltageLevel, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { + switch (modificationByFilterInfos.getDataType()) { + case DOUBLE -> setNewValue(voltageLevel, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java index 6a4072bd7..dd51cb3e8 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java @@ -8,8 +8,9 @@ package org.gridsuite.modification.server.dto.byfilter.formula; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; +import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.formula.FormulaEntity; @@ -20,7 +21,8 @@ @SuperBuilder @NoArgsConstructor -@Data +@Getter +@Setter public class FormulaInfos extends AbstractModificationByFilterInfos { @Schema(description = "First reference field or value") diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java index dffc897a1..9a187a764 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java index 84aca05d6..d5e3de0f0 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java index 0012b219c..fa2cc34a0 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java index 2136138fd..5710ad4ae 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java index 0a5d68b4c..4cb94c9d4 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. @@ -11,7 +11,6 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; @@ -21,10 +20,9 @@ */ @SuperBuilder @NoArgsConstructor -@Getter -@Setter public class PropertyModificationByFilterInfos extends StringModificationByFilterInfos { @Schema(description = "Property name") + @Getter private String propertyName; @Override diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java index db7ffcab9..098593e91 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. @@ -8,9 +8,7 @@ package org.gridsuite.modification.server.dto.byfilter.simple; import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.byfilter.DataType; @@ -19,8 +17,6 @@ */ @SuperBuilder @NoArgsConstructor -@Getter -@Setter public class StringModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { @Override @JsonProperty(access = JsonProperty.Access.READ_ONLY) diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/VariationFilterEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/VariationFilterEntity.java index 31ea798f4..ee9e4c15f 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/VariationFilterEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/VariationFilterEntity.java @@ -28,7 +28,7 @@ @Getter @Setter @Entity -@Table(name = "VariationFilter", indexes = @Index(name = "modification_by_filter_id_idx", columnList = "modification_by_filter_id")) +@Table(name = "VariationFilter", indexes = @Index(name = "formula_id_idx", columnList = "formula_id")) public class VariationFilterEntity { @Id diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java index 791397660..a6b5c2bce 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ByFormulaModificationEntity.java @@ -13,10 +13,10 @@ import java.util.stream.Collectors; @NoArgsConstructor -@Data +@Getter +@Setter @Entity @Table(name = "byFormulaModification") -@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "byFormulaModification_id_fk_constraint")) public class ByFormulaModificationEntity extends ModificationEntity { @Column private IdentifiableType identifiableType; diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java index 5f3a9e794..84221d401 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java @@ -1,11 +1,16 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + package org.gridsuite.modification.server.entities.equipment.modification.byfilter; import com.powsybl.iidm.network.IdentifiableType; import jakarta.persistence.*; -import lombok.Getter; import lombok.NoArgsConstructor; import lombok.NonNull; -import lombok.Setter; import org.gridsuite.modification.server.dto.BySimpleModificationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; @@ -14,15 +19,17 @@ import java.util.List; +/** + * @author Thang PHAM + */ @NoArgsConstructor -@Getter -@Setter @Entity @Table(name = "bySimpleModification") @PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "bySimpleModification_id_fk_constraint")) public class BySimpleModificationEntity extends ModificationEntity { + @Enumerated(EnumType.STRING) @Column - private IdentifiableType identifiableType; + private IdentifiableType equipmentType; @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) @JoinColumn(name = "by_simple_modification_id", @@ -41,7 +48,7 @@ public void update(@NonNull ModificationInfos modificationInfos) { } private void assignAttributes(BySimpleModificationInfos bySimpleModificationInfos) { - this.identifiableType = bySimpleModificationInfos.getIdentifiableType(); + this.equipmentType = bySimpleModificationInfos.getEquipmentType(); if (simpleModificationEntities == null) { simpleModificationEntities = bySimpleModificationInfos.getSimpleModificationInfosList() .stream() @@ -66,7 +73,7 @@ public BySimpleModificationInfos toModificationInfos() { .uuid(getId()) .date(getDate()) .stashed(getStashed()) - .identifiableType(getIdentifiableType()) + .equipmentType(equipmentType) .simpleModificationInfosList(simpleModificationEntities.stream() .map(SimpleModificationEntity::toSimpleModificationInfos) .toList() diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java index 506e56eb5..4acfb8aef 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java @@ -1,45 +1,39 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + package org.gridsuite.modification.server.entities.equipment.modification.byfilter; import jakarta.persistence.*; import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; -import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; -import java.util.List; import java.util.UUID; -import static jakarta.persistence.InheritanceType.JOINED; - +/** + * @author Thang PHAM + */ @NoArgsConstructor -@Entity -@Inheritance(strategy = JOINED) -@Table(name = "modification_by_filter") +@MappedSuperclass public class ModificationByFilterEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") private UUID id; - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) - @JoinColumn(name = "modification_by_filter_id", - foreignKey = @ForeignKey(name = "modification_by_filter_id_fk")) - private List filters; - @Column private String editedField; protected ModificationByFilterEntity(AbstractModificationByFilterInfos modificationByFilterInfos) { this.id = null; - this.filters = modificationByFilterInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); this.editedField = modificationByFilterInfos.getEditedField(); } protected void assignAttributes(AbstractModificationByFilterInfos modificationByFilterInfos) { modificationByFilterInfos.setId(id); - modificationByFilterInfos.setFilters(filters.stream() - .map(filterEntity -> new FilterInfos(filterEntity.getFilterId(), filterEntity.getName())) - .toList()); modificationByFilterInfos.setEditedField(editedField); } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java index c7958c724..33ec33ae6 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java @@ -9,11 +9,15 @@ import jakarta.persistence.*; import lombok.NoArgsConstructor; +import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.dto.byfilter.formula.Operator; import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ModificationByFilterEntity; +import java.util.List; + /** * @author Seddik Yengui */ @@ -21,8 +25,12 @@ @NoArgsConstructor @Entity @Table(name = "formula", indexes = @Index(name = "by_formula_modification_id_idx", columnList = "by_formula_modification_id")) -@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "formula_id_fk_constraint")) public class FormulaEntity extends ModificationByFilterEntity { + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @JoinColumn(name = "formula_id", + foreignKey = @ForeignKey(name = "formula_id_fk")) + private List filters; + @Column private String equipmentField1; @@ -45,10 +53,14 @@ public FormulaEntity(FormulaInfos formulaInfos) { this.value1 = formulaInfos.getFieldOrValue1().getValue(); this.value2 = formulaInfos.getFieldOrValue2().getValue(); this.operator = formulaInfos.getOperator(); + this.filters = formulaInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); } public FormulaInfos toFormulaInfos() { FormulaInfos formulaInfos = FormulaInfos.builder() + .filters(filters.stream() + .map(filterEntity -> new FilterInfos(filterEntity.getFilterId(), filterEntity.getName())) + .toList()) .fieldOrValue1(ReferenceFieldOrValue.builder() .equipmentField(equipmentField1) .value(value1) diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java index 851f44ccc..cfdfba8d4 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. @@ -10,10 +10,13 @@ import jakarta.persistence.*; import lombok.NoArgsConstructor; import lombok.Setter; +import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.dto.byfilter.simple.*; +import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ModificationByFilterEntity; +import java.util.List; import java.util.Optional; /** @@ -22,7 +25,6 @@ @NoArgsConstructor @Entity @Table(name = "simpleModification", indexes = @Index(name = "by_simple_modification_id_idx", columnList = "by_simple_modification_id")) -@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "simple_modification_id_fk_constraint")) public class SimpleModificationEntity extends ModificationByFilterEntity { @Column @Enumerated(EnumType.STRING) @@ -35,14 +37,16 @@ public class SimpleModificationEntity extends ModificationByFilterEntity { @Column private String propertyName; // dedicated to an exceptional case, i.e. modify a property + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @JoinColumn(name = "simple_modification_id", + foreignKey = @ForeignKey(name = "simple_modification_id_fk")) + private List filters; + public SimpleModificationEntity(AbstractSimpleModificationByFilterInfos simpleModificationInfos) { super(simpleModificationInfos); this.dataType = simpleModificationInfos.getDataType(); this.value = Optional.ofNullable(simpleModificationInfos.getValue()).map(Object::toString).orElse(null); - } - - protected void assignAttributes(AbstractSimpleModificationByFilterInfos simpleModificationInfos) { - super.assignAttributes(simpleModificationInfos); + this.filters = simpleModificationInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); } public AbstractSimpleModificationByFilterInfos toSimpleModificationInfos() { @@ -69,6 +73,9 @@ public AbstractSimpleModificationByFilterInfos toSimpleModificationInfos() { }; assignAttributes(simpleModificationByFilterInfos); + simpleModificationByFilterInfos.setFilters(filters.stream() + .map(filterEntity -> new FilterInfos(filterEntity.getFilterId(), filterEntity.getName())) + .toList()); return simpleModificationByFilterInfos; } } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java index d83cf9b5e..2a0dbdd18 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -1,3 +1,10 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + package org.gridsuite.modification.server.modifications.byfilter; import com.powsybl.commons.report.ReportNode; @@ -27,28 +34,40 @@ import static org.gridsuite.modification.server.modifications.ModificationUtils.*; +/** + * @author Thang PHAM + */ public abstract class AbstractByFilterModification extends AbstractModification { - public static final String KEY_FILTER_NAME = "filterName"; - public static final String KEY_FIELD_NAME = "fieldName"; - public static final String KEY_EQPT_NAME = "eqptName"; - public static final String KEY_EQPT_TYPE = "eqptType"; - public static final String KEY_NB_CHANGED = "nbChanged"; - public static final String KEY_NB_UNCHANGED = "nbUnchanged"; - public static final String KEY_VALUE = "value"; - public static final String KEY_EQUIPMENT_MODIFIED_ERROR = "EquipmentModifiedError"; - public static final String KEY_BY_FILTER_MODIFICATION_SOME = "byFilterModificationSome"; - public static final String KEY_BY_FILTER_MODIFICATION_FAILED = "byFilterModificationFailed"; - public static final String KEY_BY_FILTER_MODIFICATION_SUCCESS = "byFilterModificationSuccess"; - public static final String KEY_NUMBER_OF_VALID_EQUIPMENT = "numberOfValidEquipment"; - public static final String KEY_NOT_EDITED_EQUIPMENTS_FILTER = "NotEditedEquipmentsFilter"; - public static final String KEY_EDITED_FIELD_FILTER = "editedFieldFilter"; - public static final String KEY_FILTER_EQUIPMENTS_NOT_FOUND = "filterEquipmentsNotFound"; - public static final String KEY_EQUIPMENT_MODIFIED_REPORT = "EquipmentModifiedReport"; - public static final String KEY_EQUIPMENT_MODIFIED_REPORT_EXCEPTION = "EquipmentModifiedReportException"; - public static final String KEY_APPLIED_BY_FILTER_MODIFICATIONS = "appliedByFilterModifications"; - public static final String KEY_BY_FILTER_MODIFICATION = "byFilterModification"; - public static final String KEY_BY_FILTER_MODIFICATION_ALL = "byFilterModificationAll"; - public static final String KEY_BY_FILTER_MODIFICATION_NONE = "byFilterModificationNone"; + public static final String VALUE_KEY_FILTER_NAME = "filterName"; + public static final String VALUE_KEY_FIELD_NAME = "fieldName"; + public static final String VALUE_KEY_EQUIPMENT_NAME = "equipmentName"; + public static final String VALUE_KEY_EQUIPMENT_TYPE = "equipmentType"; + public static final String VALUE_KEY_EQUIPMENT_COUNT = "equipmentCount"; + public static final String VALUE_KEY_EQUIPMENT_IDS = "equipmentIds"; + public static final String VALUE_KEY_NB_CHANGED = "nbChanged"; + public static final String VALUE_KEY_NB_UNCHANGED = "nbUnchanged"; + public static final String VALUE_KEY_VALUE = "value"; + public static final String VALUE_KEY_MODIFICATION_TYPE_LABEL = "modificationTypeLabel"; + public static final String VALUE_KEY_ERROR_MESSAGE = "errorMessage"; + public static final String REPORT_KEY_RATIO_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR = "ratioTapChangerEquipmentModifiedError"; + public static final String REPORT_KEY_PHASE_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR = "phaseTapChangerEquipmentModifiedError"; + public static final String REPORT_KEY_EQUIPMENT_MODIFIED_ERROR = "equipmentModifiedError"; + public static final String REPORT_KEY_BY_FILTER_MODIFICATION_SOME = "byFilterModificationSome"; + public static final String REPORT_KEY_BY_FILTER_MODIFICATION_FAILED = "byFilterModificationFailed"; + public static final String REPORT_KEY_BY_FILTER_MODIFICATION_SUCCESS = "byFilterModificationSuccess"; + public static final String REPORT_KEY_NUMBER_OF_VALID_EQUIPMENT = "numberOfValidEquipment"; + public static final String REPORT_KEY_NOT_EDITED_EQUIPMENTS_FILTER = "notEditedEquipmentsFilter"; + public static final String REPORT_KEY_EDITED_FIELD_FILTER = "editedFieldFilter"; + public static final String REPORT_KEY_FILTER_EQUIPMENTS_NOT_FOUND = "filterEquipmentsNotFound"; + public static final String REPORT_KEY_EQUIPMENT_MODIFIED_REPORT = "equipmentModifiedReport"; + public static final String REPORT_KEY_EQUIPMENT_MODIFIED_REPORT_EXCEPTION = "equipmentModifiedReportException"; + public static final String REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS = "appliedByFilterModifications"; + public static final String REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS_INFO = "appliedByFilterModificationsInfo"; + public static final String REPORT_KEY_BY_FILTER_MODIFICATION = "byFilterModification"; + public static final String REPORT_KEY_BY_FILTER_MODIFICATION_ALL = "byFilterModificationAll"; + public static final String REPORT_KEY_BY_FILTER_MODIFICATION_NONE = "byFilterModificationNone"; + public static final String REPORT_KEY_BY_FILTER_MODIFICATION_NOT_FOUND = "byFilterModificationNotFound"; + protected FilterService filterService; protected int equipmentNotModifiedCount; protected long equipmentCount; @@ -60,22 +79,22 @@ protected AbstractByFilterModification() { equipmentNotFoundCount = 0; } - public abstract String getModificationLabel(); + public abstract String getModificationTypeLabel(); public abstract ModificationInfos getModificationInfos(); - public abstract IdentifiableType getIdentifiableType(); + public abstract IdentifiableType getEquipmentType(); public abstract NetworkModificationException.Type getExceptionType(); public abstract List getModificationByFilterInfosList(); - protected abstract boolean preCheckValue(Identifiable identifiable, - AbstractModificationByFilterInfos filterModificationInfos, + protected abstract boolean preCheckValue(Identifiable equipment, + AbstractModificationByFilterInfos modificationByFilterInfos, List reports, List notEditableEquipments); - protected abstract Object applyValue(Identifiable identifiable, - AbstractModificationByFilterInfos filterModificationInfos); + protected abstract Object applyValue(Identifiable equipment, + AbstractModificationByFilterInfos modificationByFilterInfos); @Override public void initApplicationContext(NetworkModificationApplicator modificationApplicator) { @@ -89,11 +108,11 @@ public void check(Network network) throws NetworkModificationException { } if (CollectionUtils.isEmpty(getModificationByFilterInfosList())) { - throw new NetworkModificationException(getExceptionType(), String.format("At least one %s is required", getModificationLabel())); + throw new NetworkModificationException(getExceptionType(), String.format("At least one %s is required", getModificationTypeLabel())); } if (getModificationByFilterInfosList().stream().anyMatch(modificationByFilterInfos -> CollectionUtils.isEmpty(modificationByFilterInfos.getFilters()))) { - throw new NetworkModificationException(getExceptionType(), String.format("Every %s must have at least one filter", getModificationLabel())); + throw new NetworkModificationException(getExceptionType(), String.format("Every %s must have at least one filter", getModificationTypeLabel())); } } @@ -103,66 +122,74 @@ public void apply(Network network, ReportNode subReportNode) { Map filters = getFilters(); Map exportFilters = - ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, getModificationInfos().getErrorType()); + ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, getModificationInfos().getErrorType()); if (exportFilters != null) { - ReportNode subReporter = subReportNode.newReportNode().withMessageTemplate(KEY_APPLIED_BY_FILTER_MODIFICATIONS, StringUtils.capitalize(getModificationLabel())).add(); + ReportNode subReporter = subReportNode.newReportNode() + .withMessageTemplate(REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "}") + .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, StringUtils.capitalize(getModificationTypeLabel())) + .add(); List reports = new ArrayList<>(); // perform modifications getModificationByFilterInfosList().forEach(modificationByFilterInfos -> - modificationByFilterInfos.getFilters().forEach(filterInfos -> - applyOnFilterEquipments(network, exportFilters, reports, modificationByFilterInfos, filterInfos))); + modificationByFilterInfos.getFilters().forEach(filterInfos -> + applyOnFilterEquipments(network, exportFilters, reports, modificationByFilterInfos, filterInfos))); // reporting subReportNode.newReportNode() - .withMessageTemplate(KEY_BY_FILTER_MODIFICATION, String.format("New %s on ${%s}", getModificationLabel(), KEY_EQPT_TYPE)) - .withUntypedValue(KEY_EQPT_TYPE, getIdentifiableType().name()) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); + .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION, + "New ${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "} on ${" + VALUE_KEY_EQUIPMENT_TYPE + "}") + .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, getModificationTypeLabel()) + .withUntypedValue(VALUE_KEY_EQUIPMENT_TYPE, getEquipmentType().name()) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); if (equipmentNotModifiedCount == 0 && equipmentNotFoundCount == 0) { subReportNode.newReportNode() - .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_ALL, "All equipment have been modified : ${" + KEY_VALUE + "} equipment(s)") - .withUntypedValue(KEY_VALUE, equipmentCount) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); + .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION_ALL, + "All equipment have been modified : ${" + VALUE_KEY_EQUIPMENT_COUNT + "} equipment(s)") + .withUntypedValue(VALUE_KEY_EQUIPMENT_COUNT, equipmentCount) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); report(subReporter, reports); } else { if (equipmentNotModifiedCount == equipmentCount) { - createReport(subReportNode, KEY_BY_FILTER_MODIFICATION_NONE, - "No equipment have been modified", - Map.of(), TypedValue.ERROR_SEVERITY); + createReport(subReportNode, REPORT_KEY_BY_FILTER_MODIFICATION_NONE, + "No equipment have been modified", + Map.of(), TypedValue.ERROR_SEVERITY); } else { subReportNode.newReportNode() - .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_SOME, "Some of the equipment have been modified : ${" + KEY_NB_CHANGED + "} equipment(s) modified and ${" + KEY_NB_UNCHANGED + "} equipment(s) not modified") - .withUntypedValue(KEY_NB_CHANGED, equipmentCount - equipmentNotModifiedCount) - .withUntypedValue(KEY_NB_UNCHANGED, equipmentNotModifiedCount + equipmentNotFoundCount) - .withSeverity(TypedValue.WARN_SEVERITY) - .add(); + .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION_SOME, + "Some of the equipment have been modified : ${" + VALUE_KEY_NB_CHANGED + "} equipment(s) modified and ${" + VALUE_KEY_NB_UNCHANGED + "} equipment(s) not modified") + .withUntypedValue(VALUE_KEY_NB_CHANGED, equipmentCount - equipmentNotModifiedCount) + .withUntypedValue(VALUE_KEY_NB_UNCHANGED, equipmentNotModifiedCount + equipmentNotFoundCount) + .withSeverity(TypedValue.WARN_SEVERITY) + .add(); report(subReporter, reports); } } } } - private boolean isEquipmentEditable(Identifiable identifiable, - AbstractModificationByFilterInfos filterModificationInfos, + private boolean isEquipmentEditable(Identifiable equipment, + AbstractModificationByFilterInfos modificationByFilterInfos, List equipmentsReport) { - if (filterModificationInfos.getEditedField() == null) { + if (modificationByFilterInfos.getEditedField() == null) { return false; } - if (identifiable.getType() == IdentifiableType.TWO_WINDINGS_TRANSFORMER) { - TwoWindingsTransformerField editedField = TwoWindingsTransformerField.valueOf(filterModificationInfos.getEditedField()); - TwoWindingsTransformer twoWindingsTransformer = (TwoWindingsTransformer) identifiable; + if (equipment.getType() == IdentifiableType.TWO_WINDINGS_TRANSFORMER) { + TwoWindingsTransformerField editedField = TwoWindingsTransformerField.valueOf(modificationByFilterInfos.getEditedField()); + TwoWindingsTransformer twoWindingsTransformer = (TwoWindingsTransformer) equipment; return switch (editedField) { case TARGET_V, RATIO_LOW_TAP_POSITION, RATIO_TAP_POSITION, RATIO_TARGET_DEADBAND -> { boolean isEditable = twoWindingsTransformer.getRatioTapChanger() != null; if (!isEditable) { equipmentsReport.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Ratio tab changer is null") - .withUntypedValue(KEY_FIELD_NAME, editedField.name()) - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_RATIO_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), + " Cannot modify field ${" + VALUE_KEY_FIELD_NAME + "} of equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : Ratio tab changer is null") + .withUntypedValue(VALUE_KEY_FIELD_NAME, editedField.name()) + .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); } yield isEditable; } @@ -170,11 +197,12 @@ private boolean isEquipmentEditable(Identifiable identifiable, boolean isEditable = twoWindingsTransformer.getPhaseTapChanger() != null; if (!isEditable) { equipmentsReport.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), " Cannot modify field ${" + KEY_FIELD_NAME + "} of equipment ${" + KEY_EQPT_NAME + "} : Phase tab changer is null") - .withUntypedValue(KEY_FIELD_NAME, editedField.name()) - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_PHASE_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), + " Cannot modify field ${" + VALUE_KEY_FIELD_NAME + "} of equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : Phase tab changer is null") + .withUntypedValue(VALUE_KEY_FIELD_NAME, editedField.name()) + .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); } yield isEditable; } @@ -184,90 +212,96 @@ private boolean isEquipmentEditable(Identifiable identifiable, return true; } - private void createByFilterModificationReports(List reports, AbstractModificationByFilterInfos filterModificationInfos, + private void createByFilterModificationReports(List reports, AbstractModificationByFilterInfos modificationByFilterInfos, FilterInfos filterInfos, FilterEquipments filterEquipments, List notEditableEquipments) { if (notEditableEquipments.size() == filterEquipments.getIdentifiableAttributes().size()) { reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_FAILED + reports.size(), "No equipment(s) have been modified on filter ${" + KEY_FILTER_NAME + "}") - .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION_FAILED, + "No equipment(s) have been modified on filter ${" + VALUE_KEY_FILTER_NAME + "}") + .withUntypedValue(VALUE_KEY_FILTER_NAME, filterInfos.getName()) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); } else { reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_SUCCESS + reports.size(), String.format("Successful application of %s on filter ${" + KEY_FILTER_NAME + "}", getModificationLabel())) - .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) - .withSeverity(TypedValue.INFO_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION_SUCCESS, + "Successful application of ${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "} on filter ${" + VALUE_KEY_FILTER_NAME + "}") + .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, getModificationTypeLabel()) + .withUntypedValue(VALUE_KEY_FILTER_NAME, filterInfos.getName()) + .withSeverity(TypedValue.INFO_SEVERITY) + .build()); reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_NUMBER_OF_VALID_EQUIPMENT + reports.size(), " Number of equipment modified : ${" + KEY_NB_CHANGED + "}") - .withUntypedValue(KEY_NB_CHANGED, filterEquipments.getIdentifiableAttributes().size() - notEditableEquipments.size()) - .withSeverity(TypedValue.INFO_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_NUMBER_OF_VALID_EQUIPMENT, " Number of equipment modified : ${" + VALUE_KEY_NB_CHANGED + "}") + .withUntypedValue(VALUE_KEY_NB_CHANGED, filterEquipments.getIdentifiableAttributes().size() - notEditableEquipments.size()) + .withSeverity(TypedValue.INFO_SEVERITY) + .build()); if (!CollectionUtils.isEmpty(notEditableEquipments)) { reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_NOT_EDITED_EQUIPMENTS_FILTER + reports.size(), " ${" + KEY_NB_UNCHANGED + "} equipment(s) were not modified") - .withUntypedValue(KEY_NB_UNCHANGED, notEditableEquipments.size()) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_NOT_EDITED_EQUIPMENTS_FILTER, + " ${" + VALUE_KEY_NB_UNCHANGED + "} equipment(s) were not modified") + .withUntypedValue(VALUE_KEY_NB_UNCHANGED, notEditableEquipments.size()) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); } } reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_EDITED_FIELD_FILTER + reports.size(), " Edited field : ${" + KEY_FIELD_NAME + "}") - .withUntypedValue(KEY_FIELD_NAME, filterModificationInfos.getEditedField()) - .withSeverity(TypedValue.INFO_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_EDITED_FIELD_FILTER, " Edited field : ${" + VALUE_KEY_FIELD_NAME + "}") + .withUntypedValue(VALUE_KEY_FIELD_NAME, modificationByFilterInfos.getEditedField()) + .withSeverity(TypedValue.INFO_SEVERITY) + .build()); if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { String equipmentIds = String.join(", ", filterEquipments.getNotFoundEquipments()); reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_FILTER_EQUIPMENTS_NOT_FOUND + reports.size(), " Equipment not found : ${" + KEY_VALUE + "}") - .withUntypedValue(KEY_VALUE, equipmentIds) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_FILTER_EQUIPMENTS_NOT_FOUND, " Equipment not found : ${" + VALUE_KEY_EQUIPMENT_IDS + "}") + .withUntypedValue(VALUE_KEY_EQUIPMENT_IDS, equipmentIds) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); } } - private void applyModification(Identifiable identifiable, - AbstractModificationByFilterInfos filterModificationInfos, + private void applyModification(Identifiable equipment, + AbstractModificationByFilterInfos modificationByFilterInfos, List reports, List notEditableEquipments) { // check pre-conditions - if (!preCheckValue(identifiable, filterModificationInfos, reports, notEditableEquipments)) { + if (!preCheckValue(equipment, modificationByFilterInfos, reports, notEditableEquipments)) { return; } // perform to apply new value try { - final Object newValue = applyValue(identifiable, filterModificationInfos); + final Object newValue = applyValue(equipment, modificationByFilterInfos); reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_REPORT + reports.size(), " ${" + KEY_EQPT_TYPE + "} id : ${" + KEY_EQPT_NAME + "}, new value of ${" + KEY_FIELD_NAME + "} : ${" + KEY_VALUE + "}") - .withUntypedValue(KEY_EQPT_TYPE, identifiable.getType().name()) - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) - .withUntypedValue(KEY_FIELD_NAME, filterModificationInfos.getEditedField()) - .withUntypedValue(KEY_VALUE, String.valueOf(newValue)) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_REPORT, + " ${" + VALUE_KEY_EQUIPMENT_TYPE + "} id : ${" + VALUE_KEY_EQUIPMENT_NAME + "}, new value of ${" + VALUE_KEY_FIELD_NAME + "} : ${" + VALUE_KEY_VALUE + "}") + .withUntypedValue(VALUE_KEY_EQUIPMENT_TYPE, equipment.getType().name()) + .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) + .withUntypedValue(VALUE_KEY_FIELD_NAME, modificationByFilterInfos.getEditedField()) + .withUntypedValue(VALUE_KEY_VALUE, String.valueOf(newValue)) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); } catch (Exception e) { - notEditableEquipments.add(identifiable.getId()); + notEditableEquipments.add(equipment.getId()); equipmentNotModifiedCount += 1; reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_REPORT_EXCEPTION + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : ${" + KEY_VALUE + "}") - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) - .withUntypedValue(KEY_VALUE, e.getMessage()) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_REPORT_EXCEPTION, + " Cannot modify equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : ${" + VALUE_KEY_ERROR_MESSAGE + "}") + .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) + .withUntypedValue(VALUE_KEY_ERROR_MESSAGE, e.getMessage()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); } } private Map getFilters() { return getModificationByFilterInfosList().stream() - .flatMap(v -> v.getFilters().stream()) - .filter(distinctByKey(FilterInfos::getId)) - .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); + .flatMap(v -> v.getFilters().stream()) + .filter(distinctByKey(FilterInfos::getId)) + .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); } private void applyOnFilterEquipments(Network network, @@ -279,10 +313,10 @@ private void applyOnFilterEquipments(Network network, if (CollectionUtils.isEmpty(filterEquipments.getIdentifiableAttributes())) { reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_BY_FILTER_MODIFICATION_NONE + reports.size(), "No equipments were found for filter ${" + KEY_FILTER_NAME + "}") - .withUntypedValue(KEY_FILTER_NAME, filterInfos.getName()) - .withSeverity(TypedValue.WARN_SEVERITY) - .build()); + .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION_NOT_FOUND, "No equipments were found for filter ${" + VALUE_KEY_FILTER_NAME + "}") + .withUntypedValue(VALUE_KEY_FILTER_NAME, filterInfos.getName()) + .withSeverity(TypedValue.WARN_SEVERITY) + .build()); } else { equipmentCount += filterEquipments.getIdentifiableAttributes().size(); if (!CollectionUtils.isEmpty(filterEquipments.getNotFoundEquipments())) { @@ -291,17 +325,17 @@ private void applyOnFilterEquipments(Network network, List notEditableEquipments = new ArrayList<>(); List equipmentsReport = new ArrayList<>(); filterEquipments.getIdentifiableAttributes() - .stream() - .map(attributes -> network.getIdentifiable(attributes.getId())) - .filter(identifiable -> { - boolean isEditableEquipment = isEquipmentEditable(identifiable, modificationByFilterInfos, equipmentsReport); - if (!isEditableEquipment) { - notEditableEquipments.add(identifiable.getId()); - equipmentNotModifiedCount += 1; - } - return isEditableEquipment; - }) - .forEach(identifiable -> applyModification(identifiable, modificationByFilterInfos, equipmentsReport, notEditableEquipments)); + .stream() + .map(attributes -> network.getIdentifiable(attributes.getId())) + .filter(equipment -> { + boolean isEditableEquipment = isEquipmentEditable(equipment, modificationByFilterInfos, equipmentsReport); + if (!isEditableEquipment) { + notEditableEquipments.add(equipment.getId()); + equipmentNotModifiedCount += 1; + } + return isEditableEquipment; + }) + .forEach(equipment -> applyModification(equipment, modificationByFilterInfos, equipmentsReport, notEditableEquipments)); createByFilterModificationReports(reports, modificationByFilterInfos, filterInfos, filterEquipments, notEditableEquipments); @@ -311,9 +345,10 @@ private void applyOnFilterEquipments(Network network, private void report(ReportNode subReportNode, List reports) { subReportNode.newReportNode() - .withMessageTemplate(KEY_APPLIED_BY_FILTER_MODIFICATIONS, String.format(" %s", StringUtils.capitalize(getModificationLabel()))) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); + .withMessageTemplate(REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS_INFO, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "}") + .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, StringUtils.capitalize(getModificationTypeLabel())) + .withSeverity(TypedValue.INFO_SEVERITY) + .add(); reports.forEach(report -> insertReportNode(subReportNode, report)); } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java index 133b41541..d6af08e64 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. @@ -24,6 +24,9 @@ import static org.gridsuite.modification.server.NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR; +/** + * @author Thang PHAM + */ public class ByFormulaModification extends AbstractByFilterModification { private final ByFormulaModificationInfos modificationInfos; @@ -33,7 +36,7 @@ public ByFormulaModification(ByFormulaModificationInfos modificationInfos) { } @Override - public String getModificationLabel() { + public String getModificationTypeLabel() { return "modification by formula"; } @@ -43,7 +46,7 @@ public ModificationInfos getModificationInfos() { } @Override - public IdentifiableType getIdentifiableType() { + public IdentifiableType getEquipmentType() { return modificationInfos.getIdentifiableType(); } @@ -58,16 +61,16 @@ public NetworkModificationException.Type getExceptionType() { } @Override - protected boolean preCheckValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos, List reports, List notEditableEquipments) { - FormulaInfos formulaInfos = (FormulaInfos) filterModificationInfos; - Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(identifiable); - Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(identifiable); + protected boolean preCheckValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List reports, List notEditableEquipments) { + FormulaInfos formulaInfos = (FormulaInfos) modificationByFilterInfos; + Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(equipment); + Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(equipment); if (value1 == null || Double.isNaN(value1) || value2 == null || Double.isNaN(value2)) { equipmentNotModifiedCount += 1; - notEditableEquipments.add(identifiable.getId()); + notEditableEquipments.add(equipment.getId()); reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(KEY_EQUIPMENT_MODIFIED_ERROR + reports.size(), " Cannot modify equipment ${" + KEY_EQPT_NAME + "} : At least one of the value or referenced field is null") - .withUntypedValue(KEY_EQPT_NAME, identifiable.getId()) + .withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_ERROR, " Cannot modify equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : At least one of the value or referenced field is null") + .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) .withSeverity(TypedValue.TRACE_SEVERITY) .build()); return false; @@ -75,25 +78,25 @@ protected boolean preCheckValue(Identifiable identifiable, AbstractModificati if (value2 == 0 && formulaInfos.getOperator() == Operator.DIVISION) { equipmentNotModifiedCount += 1; - notEditableEquipments.add(identifiable.getId()); + notEditableEquipments.add(equipment.getId()); return false; } return true; } @Override - protected Object applyValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos) { - FormulaInfos formulaInfos = (FormulaInfos) filterModificationInfos; - Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(identifiable); - Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(identifiable); + protected Object applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + FormulaInfos formulaInfos = (FormulaInfos) modificationByFilterInfos; + Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(equipment); + Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(equipment); final Double newValue = applyOperation(formulaInfos.getOperator(), value1, value2); - switch (identifiable.getType()) { - case GENERATOR -> GeneratorField.setNewValue((Generator) identifiable, formulaInfos.getEditedField(), newValue); - case BATTERY -> BatteryField.setNewValue((Battery) identifiable, formulaInfos.getEditedField(), newValue); - case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) identifiable, formulaInfos.getEditedField(), newValue); - case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, formulaInfos.getEditedField(), newValue); - case LOAD -> LoadField.setNewValue((Load) identifiable, formulaInfos.getEditedField(), newValue); - case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) identifiable, formulaInfos.getEditedField(), newValue); + switch (equipment.getType()) { + case GENERATOR -> GeneratorField.setNewValue((Generator) equipment, formulaInfos.getEditedField(), newValue); + case BATTERY -> BatteryField.setNewValue((Battery) equipment, formulaInfos.getEditedField(), newValue); + case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) equipment, formulaInfos.getEditedField(), newValue); + case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) equipment, formulaInfos.getEditedField(), newValue); + case LOAD -> LoadField.setNewValue((Load) equipment, formulaInfos.getEditedField(), newValue); + case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) equipment, formulaInfos.getEditedField(), newValue); default -> throw new NetworkModificationException(BY_FORMULA_MODIFICATION_ERROR, "Unsupported equipment"); } return newValue; diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index 324754284..66a3bbe53 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -1,5 +1,5 @@ /** - * Copyright (c) 2023, RTE (http://www.rte-france.com) + * Copyright (c) 2024, RTE (http://www.rte-france.com) * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. @@ -23,6 +23,9 @@ import static org.gridsuite.modification.server.NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR; +/** + * @author Thang PHAM + */ public class BySimpleModification extends AbstractByFilterModification { private final BySimpleModificationInfos modificationInfos; @@ -32,7 +35,7 @@ public BySimpleModification(BySimpleModificationInfos modificationInfos) { } @Override - public String getModificationLabel() { + public String getModificationTypeLabel() { return "simple modification"; } @@ -42,8 +45,8 @@ public ModificationInfos getModificationInfos() { } @Override - public IdentifiableType getIdentifiableType() { - return modificationInfos.getIdentifiableType(); + public IdentifiableType getEquipmentType() { + return modificationInfos.getEquipmentType(); } @Override @@ -57,26 +60,26 @@ public NetworkModificationException.Type getExceptionType() { } @Override - protected boolean preCheckValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos, List reports, List notEditableEquipments) { + protected boolean preCheckValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List reports, List notEditableEquipments) { return true; } @Override - protected Object applyValue(Identifiable identifiable, AbstractModificationByFilterInfos filterModificationInfos) { - AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) filterModificationInfos; + protected Object applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { - identifiable.setProperty( + equipment.setProperty( ((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName(), (String) simpleModificationInfos.getValue() ); } else { - switch (identifiable.getType()) { - case GENERATOR -> GeneratorField.setNewValue((Generator) identifiable, simpleModificationInfos); - case BATTERY -> BatteryField.setNewValue((Battery) identifiable, simpleModificationInfos); - case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) identifiable, simpleModificationInfos); - case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, simpleModificationInfos); - case LOAD -> LoadField.setNewValue((Load) identifiable, simpleModificationInfos); - case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) identifiable, simpleModificationInfos); + switch (equipment.getType()) { + case GENERATOR -> GeneratorField.setNewValue((Generator) equipment, simpleModificationInfos); + case BATTERY -> BatteryField.setNewValue((Battery) equipment, simpleModificationInfos); + case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) equipment, simpleModificationInfos); + case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) equipment, simpleModificationInfos); + case LOAD -> LoadField.setNewValue((Load) equipment, simpleModificationInfos); + case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) equipment, simpleModificationInfos); default -> throw new NetworkModificationException(BY_SIMPLE_MODIFICATION_ERROR, "Unsupported equipment"); } } diff --git a/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml b/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml deleted file mode 100644 index 42754b58a..000000000 --- a/src/main/resources/db/changelog/changesets/changelog_20240827T134336Z.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/db/changelog/changesets/changelog_20240902T071959Z.xml b/src/main/resources/db/changelog/changesets/changelog_20240902T071959Z.xml new file mode 100644 index 000000000..81f00e3a7 --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20240902T071959Z.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/changesets/migrationFormula_20240827T134336Z.sql b/src/main/resources/db/changelog/changesets/migrationFormula_20240827T134336Z.sql deleted file mode 100644 index ad5b91317..000000000 --- a/src/main/resources/db/changelog/changesets/migrationFormula_20240827T134336Z.sql +++ /dev/null @@ -1,7 +0,0 @@ ---- Migrate partially data from formula table to new modification_by_filter table -INSERT INTO modification_by_filter (id, edited_field) -SELECT - id, - edited_field -FROM formula; - diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 2d9b167a4..99cbfa99d 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -304,5 +304,5 @@ databaseChangeLog: file: changesets/changelog_20240703T170634Z.xml relativeToChangelogFile: true - include: - file: changesets/changelog_20240827T134336Z.xml + file: changesets/changelog_20240902T071959Z.xml relativeToChangelogFile: true diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java index 12be9038f..76bc38bc7 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java @@ -24,8 +24,8 @@ import java.util.Date; import java.util.List; -import static org.gridsuite.modification.server.modifications.byfilter.AbstractByFilterModification.KEY_BY_FILTER_MODIFICATION_SOME; -import static org.gridsuite.modification.server.modifications.byfilter.ByFormulaModification.KEY_EQUIPMENT_MODIFIED_ERROR; +import static org.gridsuite.modification.server.modifications.byfilter.AbstractByFilterModification.REPORT_KEY_BY_FILTER_MODIFICATION_SOME; +import static org.gridsuite.modification.server.modifications.byfilter.ByFormulaModification.REPORT_KEY_EQUIPMENT_MODIFIED_ERROR; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessageWithoutRank; import static org.junit.Assert.*; @@ -241,8 +241,8 @@ protected void assertAfterNetworkModificationCreation() { assertTrue(Double.isNaN(getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_7).getLowVoltageLimit())); assertTrue(Double.isNaN(getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_7).getHighVoltageLimit())); - assertLogMessageWithoutRank("Cannot modify equipment v7 : At least one of the value or referenced field is null", KEY_EQUIPMENT_MODIFIED_ERROR + "0", reportService); - assertLogMessageWithoutRank("Some of the equipment have been modified : 14 equipment(s) modified and 4 equipment(s) not modified", KEY_BY_FILTER_MODIFICATION_SOME, reportService); + assertLogMessageWithoutRank("Cannot modify equipment v7 : At least one of the value or referenced field is null", REPORT_KEY_EQUIPMENT_MODIFIED_ERROR, reportService); + assertLogMessageWithoutRank("Some of the equipment have been modified : 14 equipment(s) modified and 4 equipment(s) not modified", REPORT_KEY_BY_FILTER_MODIFICATION_SOME, reportService); } @Override From 2e6305ac2aa897d7cddf689b59c5459fb4da0b8f Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Mon, 2 Sep 2024 18:09:56 +0200 Subject: [PATCH 12/42] Report rectification --- .../byfilter/AbstractModificationByFilterInfos.java | 6 ++++++ .../simple/PropertyModificationByFilterInfos.java | 7 +++++++ .../byfilter/AbstractByFilterModification.java | 12 ++++++++---- .../byfilter/ByFormulaModification.java | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java index 688132860..c2b340d23 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto.byfilter; +import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.NoArgsConstructor; @@ -33,4 +34,9 @@ public abstract class AbstractModificationByFilterInfos { @Schema(description = "Edited field") private String editedField; + + @JsonIgnore + public String getEditedFieldLabel() { + return editedField; + } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java index 4cb94c9d4..e6c114714 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto.byfilter.simple; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; @@ -31,6 +32,12 @@ public DataType getDataType() { return DataType.PROPERTY; } + @JsonIgnore + @Override + public String getEditedFieldLabel() { + return propertyName + " " + super.getEditedFieldLabel(); + } + @Override public SimpleModificationEntity toEntity() { SimpleModificationEntity simpleModificationEntity = super.toEntity(); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java index 2a0dbdd18..5bdf9bb22 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -81,6 +81,10 @@ protected AbstractByFilterModification() { public abstract String getModificationTypeLabel(); + private String getEditedFieldLabel(AbstractModificationByFilterInfos modificationByFilterInfos) { + return modificationByFilterInfos.getEditedFieldLabel(); + } + public abstract ModificationInfos getModificationInfos(); public abstract IdentifiableType getEquipmentType(); @@ -126,7 +130,7 @@ public void apply(Network network, ReportNode subReportNode) { if (exportFilters != null) { ReportNode subReporter = subReportNode.newReportNode() - .withMessageTemplate(REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "}") + .withMessageTemplate(REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "}s") .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, StringUtils.capitalize(getModificationTypeLabel())) .add(); List reports = new ArrayList<>(); @@ -248,7 +252,7 @@ private void createByFilterModificationReports(List reports, Abstrac reports.add(ReportNode.newRootReportNode() .withMessageTemplate(REPORT_KEY_EDITED_FIELD_FILTER, " Edited field : ${" + VALUE_KEY_FIELD_NAME + "}") - .withUntypedValue(VALUE_KEY_FIELD_NAME, modificationByFilterInfos.getEditedField()) + .withUntypedValue(VALUE_KEY_FIELD_NAME, getEditedFieldLabel(modificationByFilterInfos)) .withSeverity(TypedValue.INFO_SEVERITY) .build()); @@ -280,7 +284,7 @@ private void applyModification(Identifiable equipment, " ${" + VALUE_KEY_EQUIPMENT_TYPE + "} id : ${" + VALUE_KEY_EQUIPMENT_NAME + "}, new value of ${" + VALUE_KEY_FIELD_NAME + "} : ${" + VALUE_KEY_VALUE + "}") .withUntypedValue(VALUE_KEY_EQUIPMENT_TYPE, equipment.getType().name()) .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) - .withUntypedValue(VALUE_KEY_FIELD_NAME, modificationByFilterInfos.getEditedField()) + .withUntypedValue(VALUE_KEY_FIELD_NAME, getEditedFieldLabel(modificationByFilterInfos)) .withUntypedValue(VALUE_KEY_VALUE, String.valueOf(newValue)) .withSeverity(TypedValue.TRACE_SEVERITY) .build()); @@ -345,7 +349,7 @@ private void applyOnFilterEquipments(Network network, private void report(ReportNode subReportNode, List reports) { subReportNode.newReportNode() - .withMessageTemplate(REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS_INFO, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "}") + .withMessageTemplate(REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS_INFO, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "}s") .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, StringUtils.capitalize(getModificationTypeLabel())) .withSeverity(TypedValue.INFO_SEVERITY) .add(); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java index d6af08e64..b8e22a394 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java @@ -37,7 +37,7 @@ public ByFormulaModification(ByFormulaModificationInfos modificationInfos) { @Override public String getModificationTypeLabel() { - return "modification by formula"; + return "formula"; } @Override From f1b02dbe838a61d9a9d259d70b6824b2e746ba8d Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 3 Sep 2024 15:20:30 +0200 Subject: [PATCH 13/42] add support enum, boolean, string data types --- .../equipmentfield/GeneratorField.java | 26 +++++++++++++++--- .../byfilter/equipmentfield/LoadField.java | 27 ++++++++++++++++--- .../equipmentfield/ShuntCompensatorField.java | 12 ++++++--- .../TwoWindingsTransformerField.java | 22 ++++++++++++--- .../equipmentfield/VoltageLevelField.java | 13 ++++++--- 5 files changed, 81 insertions(+), 19 deletions(-) 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 c7b32f6df..369d9aa4f 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 @@ -9,13 +9,16 @@ import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.extensions.*; +import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; + /** * @author Seddik Yengui */ - public enum GeneratorField { + VOLTAGE_REGULATOR_ON, MINIMUM_ACTIVE_POWER, MAXIMUM_ACTIVE_POWER, RATED_NOMINAL_POWER, @@ -31,6 +34,9 @@ public enum GeneratorField { STEP_UP_TRANSFORMER_REACTANCE, Q_PERCENT; + public static final String UNSUPPORTED_GENERATOR_FIELD_ERROR_MESSAGE = "Unsupported generator field: "; + public static final String UNSUPPORTED_GENERATOR_DATA_TYPE_ERROR_MESSAGE = "Unsupported generator data type: "; + public static Double getReferenceValue(Generator generator, String generatorField) { ActivePowerControl activePowerControl = generator.getExtension(ActivePowerControl.class); GeneratorStartup generatorStartup = generator.getExtension(GeneratorStartup.class); @@ -52,6 +58,7 @@ public static Double getReferenceValue(Generator generator, String generatorFiel case TRANSIENT_REACTANCE -> generatorShortCircuit != null ? generatorShortCircuit.getDirectTransX() : null; case STEP_UP_TRANSFORMER_REACTANCE -> generatorShortCircuit != null ? generatorShortCircuit.getStepUpTransformerX() : null; case Q_PERCENT -> coordinatedReactiveControl != null ? coordinatedReactiveControl.getQPercent() : null; + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_GENERATOR_FIELD_ERROR_MESSAGE + field); }; } @@ -137,13 +144,24 @@ public static void setNewValue(Generator generator, String generatorField, Doubl case Q_PERCENT -> generator.newExtension(CoordinatedReactiveControlAdder.class) .withQPercent(newValue) .add(); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_GENERATOR_FIELD_ERROR_MESSAGE + field); } } } - public static void setNewValue(Generator generator, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { - switch (modificationByFilterInfos.getDataType()) { - case DOUBLE -> setNewValue(generator, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); + public static void setNewValue(Generator generator, String generatorField, Boolean newValue) { + GeneratorField field = GeneratorField.valueOf(generatorField); + switch (field) { + case VOLTAGE_REGULATOR_ON -> generator.setVoltageRegulatorOn(newValue); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_GENERATOR_FIELD_ERROR_MESSAGE + field); + } + } + + public static void setNewValue(Generator generator, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { + switch (simpleModificationByFilterInfos.getDataType()) { + case DOUBLE, INTEGER -> setNewValue(generator, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); + case BOOLEAN -> setNewValue(generator, simpleModificationByFilterInfos.getEditedField(), (Boolean) simpleModificationByFilterInfos.getValue()); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_GENERATOR_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java index 2e7ef1199..2f381100a 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java @@ -8,21 +8,29 @@ package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.Load; +import com.powsybl.iidm.network.LoadType; +import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; + /** * @author Seddik Yengui */ - public enum LoadField { + LOAD_TYPE, ACTIVE_POWER, REACTIVE_POWER; + public static final String UNSUPPORTED_LOAD_FIELD_ERROR_MESSAGE = "Unsupported load field: "; + public static final String UNSUPPORTED_LOAD_DATA_TYPE_ERROR_MESSAGE = "Unsupported load data type: "; + public static Double getReferenceValue(Load load, String loadField) { LoadField field = LoadField.valueOf(loadField); return switch (field) { case ACTIVE_POWER -> load.getP0(); case REACTIVE_POWER -> load.getQ0(); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_LOAD_FIELD_ERROR_MESSAGE + field); }; } @@ -31,12 +39,23 @@ public static void setNewValue(Load load, String loadField, Double newValue) { switch (field) { case ACTIVE_POWER -> load.setP0(newValue); case REACTIVE_POWER -> load.setQ0(newValue); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_LOAD_FIELD_ERROR_MESSAGE + field); + } + } + + public static void setNewValue(Load load, String loadField, String newValue) { + LoadField field = LoadField.valueOf(loadField); + switch (field) { + case LOAD_TYPE -> load.setLoadType(newValue != null ? LoadType.valueOf(newValue) : null); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_LOAD_FIELD_ERROR_MESSAGE + field); } } - public static void setNewValue(Load load, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { - switch (modificationByFilterInfos.getDataType()) { - case DOUBLE -> setNewValue(load, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); + public static void setNewValue(Load load, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { + switch (simpleModificationByFilterInfos.getDataType()) { + case DOUBLE, INTEGER -> setNewValue(load, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); + case ENUM, STRING -> setNewValue(load, simpleModificationByFilterInfos.getEditedField(), (String) simpleModificationByFilterInfos.getValue()); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_LOAD_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index 5712451d3..d07233200 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -14,16 +14,19 @@ import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; + /** * @author Seddik Yengui */ - public enum ShuntCompensatorField { MAXIMUM_SECTION_COUNT, SECTION_COUNT, MAXIMUM_SUSCEPTANCE, MAXIMUM_Q_AT_NOMINAL_VOLTAGE; + public static final String UNSUPPORTED_SHUNT_COMPENSATOR_DATA_TYPE_ERROR_MESSAGE = "Unsupported shunt compensator data type: "; + public static Double getReferenceValue(ShuntCompensator shuntCompensator, String shuntCompensatorField) { VoltageLevel voltageLevel = shuntCompensator.getTerminal().getVoltageLevel(); ShuntCompensatorField field = ShuntCompensatorField.valueOf(shuntCompensatorField); @@ -59,9 +62,10 @@ public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCo } } - public static void setNewValue(ShuntCompensator shuntCompensator, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { - switch (modificationByFilterInfos.getDataType()) { - case DOUBLE -> setNewValue(shuntCompensator, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); + public static void setNewValue(ShuntCompensator shuntCompensator, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { + switch (simpleModificationByFilterInfos.getDataType()) { + case DOUBLE, INTEGER -> setNewValue(shuntCompensator, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_SHUNT_COMPENSATOR_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index 4f577469c..439761ab2 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -1,10 +1,23 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.RatioTapChanger; import com.powsybl.iidm.network.TwoWindingsTransformer; +import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; + +/** + * @author Seddik Yengui + */ public enum TwoWindingsTransformerField { R, X, @@ -22,6 +35,8 @@ public enum TwoWindingsTransformerField { PHASE_TAP_POSITION, PHASE_TARGET_DEADBAND; + public static final String UNSUPPORTED_TWO_WINDINGS_TRANSFORMER_DATA_TYPE_ERROR_MESSAGE = "Unsupported two windings transformer data type: "; + public static Double getReferenceValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField) { TwoWindingsTransformerField field = TwoWindingsTransformerField.valueOf(twoWindingsTransformerField); final PhaseTapChanger phaseTapChanger = transformer.getPhaseTapChanger(); @@ -69,9 +84,10 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin } } - public static void setNewValue(TwoWindingsTransformer transformer, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { - switch (modificationByFilterInfos.getDataType()) { - case DOUBLE -> setNewValue(transformer, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); + public static void setNewValue(TwoWindingsTransformer transformer, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { + switch (simpleModificationByFilterInfos.getDataType()) { + case DOUBLE, INTEGER -> setNewValue(transformer, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_TWO_WINDINGS_TRANSFORMER_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java index 26404b49c..85b247a6d 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java @@ -10,12 +10,14 @@ import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; +import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; + /** * @author Seddik Yengui */ - public enum VoltageLevelField { NOMINAL_VOLTAGE, LOW_VOLTAGE_LIMIT, @@ -23,6 +25,8 @@ public enum VoltageLevelField { LOW_SHORT_CIRCUIT_CURRENT_LIMIT, HIGH_SHORT_CIRCUIT_CURRENT_LIMIT; + public static final String UNSUPPORTED_VOLTAGE_LEVEL_DATA_TYPE_ERROR_MESSAGE = "Unsupported voltage level data type: "; + public static Double getReferenceValue(VoltageLevel voltageLevel, String voltageLevelField) { IdentifiableShortCircuit identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class); VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField); @@ -59,9 +63,10 @@ public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelFie } } - public static void setNewValue(VoltageLevel voltageLevel, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { - switch (modificationByFilterInfos.getDataType()) { - case DOUBLE -> setNewValue(voltageLevel, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); + public static void setNewValue(VoltageLevel voltageLevel, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { + switch (simpleModificationByFilterInfos.getDataType()) { + case DOUBLE, INTEGER -> setNewValue(voltageLevel, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_VOLTAGE_LEVEL_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); } } } From c25ffa3ac005c1127ccb54a742a83f071c759333 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 3 Sep 2024 15:28:41 +0200 Subject: [PATCH 14/42] add default case --- .../dto/byfilter/equipmentfield/BatteryField.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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 0bc394644..b3a2e8ead 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 @@ -10,8 +10,11 @@ import com.powsybl.iidm.network.Battery; import com.powsybl.iidm.network.extensions.ActivePowerControl; import com.powsybl.iidm.network.extensions.ActivePowerControlAdder; +import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; + /** * @author Seddik Yengui */ @@ -23,6 +26,8 @@ public enum BatteryField { REACTIVE_POWER_SET_POINT, DROOP; + public static final String UNSUPPORTED_BATTERY_DATA_TYPE_ERROR_MESSAGE = "Unsupported battery data type: "; + public static Double getReferenceValue(Battery battery, String batteryField) { ActivePowerControl activePowerControl = battery.getExtension(ActivePowerControl.class); BatteryField field = BatteryField.valueOf(batteryField); @@ -48,9 +53,10 @@ public static void setNewValue(Battery battery, String batteryField, Double newV } } - public static void setNewValue(Battery battery, AbstractSimpleModificationByFilterInfos modificationByFilterInfos) { - switch (modificationByFilterInfos.getDataType()) { - case DOUBLE -> setNewValue(battery, modificationByFilterInfos.getEditedField(), (Double) modificationByFilterInfos.getValue()); + public static void setNewValue(Battery battery, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { + switch (simpleModificationByFilterInfos.getDataType()) { + case DOUBLE -> setNewValue(battery, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); + default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_BATTERY_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); } } } From f761ba1adfd7d2f6c6ffa1bda5953d99b5ccbbb8 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Wed, 4 Sep 2024 13:53:42 +0200 Subject: [PATCH 15/42] Remove STRING data type --- .../server/dto/byfilter/DataType.java | 1 - ...stractSimpleModificationByFilterInfos.java | 1 - .../simple/EnumModificationByFilterInfos.java | 2 +- .../PropertyModificationByFilterInfos.java | 2 +- .../StringModificationByFilterInfos.java | 26 ------------------- .../simple/SimpleModificationEntity.java | 3 --- 6 files changed, 2 insertions(+), 33 deletions(-) delete mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/DataType.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/DataType.java index 00b99325f..5ab6d5e87 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/DataType.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/DataType.java @@ -11,7 +11,6 @@ * @author Thang PHAM */ public enum DataType { - STRING, ENUM, BOOLEAN, INTEGER, diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java index ec68680fe..ad19b1a38 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java @@ -28,7 +28,6 @@ property = "dataType", include = JsonTypeInfo.As.EXISTING_PROPERTY) @JsonSubTypes({ - @JsonSubTypes.Type(value = StringModificationByFilterInfos.class, name = "STRING"), @JsonSubTypes.Type(value = BooleanModificationByFilterInfos.class, name = "BOOLEAN"), @JsonSubTypes.Type(value = EnumModificationByFilterInfos.class, name = "ENUM"), @JsonSubTypes.Type(value = DoubleModificationByFilterInfos.class, name = "DOUBLE"), diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java index fa2cc34a0..5b86930a0 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java @@ -17,7 +17,7 @@ */ @SuperBuilder @NoArgsConstructor -public class EnumModificationByFilterInfos extends StringModificationByFilterInfos { +public class EnumModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { @Override @JsonProperty(access = JsonProperty.Access.READ_ONLY) public DataType getDataType() { diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java index e6c114714..fd66f0f0b 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java @@ -21,7 +21,7 @@ */ @SuperBuilder @NoArgsConstructor -public class PropertyModificationByFilterInfos extends StringModificationByFilterInfos { +public class PropertyModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { @Schema(description = "Property name") @Getter private String propertyName; diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java deleted file mode 100644 index 098593e91..000000000 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/StringModificationByFilterInfos.java +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (c) 2024, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.dto.byfilter.simple; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.dto.byfilter.DataType; - -/** - * @author Thang PHAM - */ -@SuperBuilder -@NoArgsConstructor -public class StringModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { - @Override - @JsonProperty(access = JsonProperty.Access.READ_ONLY) - public DataType getDataType() { - return DataType.STRING; - } -} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java index cfdfba8d4..413114979 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java @@ -60,9 +60,6 @@ public AbstractSimpleModificationByFilterInfos toSimpleModificationInfos() { case DOUBLE -> DoubleModificationByFilterInfos.builder() .value(value != null ? Double.valueOf(value) : null) .build(); - case STRING -> StringModificationByFilterInfos.builder() - .value(value) - .build(); case ENUM -> EnumModificationByFilterInfos.builder() .value(value) .build(); From 72783fa90a4705c81700aa9c1e6c06eddb13edc4 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Wed, 4 Sep 2024 15:03:28 +0200 Subject: [PATCH 16/42] compilation error --- .../server/dto/byfilter/equipmentfield/LoadField.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java index 2f381100a..3adba1c33 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java @@ -54,7 +54,7 @@ public static void setNewValue(Load load, String loadField, String newValue) { public static void setNewValue(Load load, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { switch (simpleModificationByFilterInfos.getDataType()) { case DOUBLE, INTEGER -> setNewValue(load, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); - case ENUM, STRING -> setNewValue(load, simpleModificationByFilterInfos.getEditedField(), (String) simpleModificationByFilterInfos.getValue()); + case ENUM -> setNewValue(load, simpleModificationByFilterInfos.getEditedField(), (String) simpleModificationByFilterInfos.getValue()); default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_LOAD_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); } } From 22e845846bb61a1f6a4f9b869556befd3ee0314b Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Wed, 4 Sep 2024 18:02:37 +0200 Subject: [PATCH 17/42] code clean --- .../byfilter/equipmentfield/BatteryField.java | 27 +-- .../equipmentfield/GeneratorField.java | 183 ++++++++---------- .../byfilter/equipmentfield/LoadField.java | 35 +--- .../equipmentfield/ShuntCompensatorField.java | 24 +-- .../TwoWindingsTransformerField.java | 47 ++--- .../equipmentfield/VoltageLevelField.java | 27 +-- .../formula/ReferenceFieldOrValue.java | 24 +-- .../AbstractByFilterModification.java | 27 ++- .../byfilter/ByFormulaModification.java | 18 +- .../byfilter/BySimpleModification.java | 34 ++-- 10 files changed, 165 insertions(+), 281 deletions(-) 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 b3a2e8ead..0dbe9c023 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 @@ -10,10 +10,6 @@ import com.powsybl.iidm.network.Battery; import com.powsybl.iidm.network.extensions.ActivePowerControl; import com.powsybl.iidm.network.extensions.ActivePowerControlAdder; -import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; - -import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; /** * @author Seddik Yengui @@ -26,9 +22,7 @@ public enum BatteryField { REACTIVE_POWER_SET_POINT, DROOP; - public static final String UNSUPPORTED_BATTERY_DATA_TYPE_ERROR_MESSAGE = "Unsupported battery data type: "; - - public static Double getReferenceValue(Battery battery, String batteryField) { + public static Object getReferenceValue(Battery battery, String batteryField) { ActivePowerControl activePowerControl = battery.getExtension(ActivePowerControl.class); BatteryField field = BatteryField.valueOf(batteryField); return switch (field) { @@ -40,23 +34,16 @@ public static Double getReferenceValue(Battery battery, String batteryField) { }; } - public static void setNewValue(Battery battery, String batteryField, Double newValue) { + public static void setNewValue(Battery battery, String batteryField, T newValue) { BatteryField field = BatteryField.valueOf(batteryField); switch (field) { - case MINIMUM_ACTIVE_POWER -> battery.setMinP(newValue); - case MAXIMUM_ACTIVE_POWER -> battery.setMaxP(newValue); - case ACTIVE_POWER_SET_POINT -> battery.setTargetP(newValue); - case REACTIVE_POWER_SET_POINT -> battery.setTargetQ(newValue); + case MINIMUM_ACTIVE_POWER -> battery.setMinP((double) newValue); + case MAXIMUM_ACTIVE_POWER -> battery.setMaxP((double) newValue); + case ACTIVE_POWER_SET_POINT -> battery.setTargetP((double) newValue); + case REACTIVE_POWER_SET_POINT -> battery.setTargetQ((double) newValue); case DROOP -> battery.newExtension(ActivePowerControlAdder.class) - .withDroop(newValue) + .withDroop((double) newValue) .add(); } } - - public static void setNewValue(Battery battery, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { - switch (simpleModificationByFilterInfos.getDataType()) { - case DOUBLE -> setNewValue(battery, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_BATTERY_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); - } - } } 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 369d9aa4f..44f66de93 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 @@ -9,10 +9,6 @@ import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.extensions.*; -import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; - -import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; /** * @author Seddik Yengui @@ -34,16 +30,14 @@ public enum GeneratorField { STEP_UP_TRANSFORMER_REACTANCE, Q_PERCENT; - public static final String UNSUPPORTED_GENERATOR_FIELD_ERROR_MESSAGE = "Unsupported generator field: "; - public static final String UNSUPPORTED_GENERATOR_DATA_TYPE_ERROR_MESSAGE = "Unsupported generator data type: "; - - public static Double getReferenceValue(Generator generator, String generatorField) { + public static Object getReferenceValue(Generator generator, String generatorField) { ActivePowerControl activePowerControl = generator.getExtension(ActivePowerControl.class); GeneratorStartup generatorStartup = generator.getExtension(GeneratorStartup.class); GeneratorShortCircuit generatorShortCircuit = generator.getExtension(GeneratorShortCircuit.class); CoordinatedReactiveControl coordinatedReactiveControl = generator.getExtension(CoordinatedReactiveControl.class); GeneratorField field = GeneratorField.valueOf(generatorField); return switch (field) { + case VOLTAGE_REGULATOR_ON -> generator.isVoltageRegulatorOn(); case MAXIMUM_ACTIVE_POWER -> generator.getMaxP(); case MINIMUM_ACTIVE_POWER -> generator.getMinP(); case ACTIVE_POWER_SET_POINT -> generator.getTargetP(); @@ -58,110 +52,91 @@ public static Double getReferenceValue(Generator generator, String generatorFiel case TRANSIENT_REACTANCE -> generatorShortCircuit != null ? generatorShortCircuit.getDirectTransX() : null; case STEP_UP_TRANSFORMER_REACTANCE -> generatorShortCircuit != null ? generatorShortCircuit.getStepUpTransformerX() : null; case Q_PERCENT -> coordinatedReactiveControl != null ? coordinatedReactiveControl.getQPercent() : null; - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_GENERATOR_FIELD_ERROR_MESSAGE + field); }; } - public static void setNewValue(Generator generator, String generatorField, Double newValue) { - if (!Double.isNaN(newValue)) { - GeneratorStartup generatorStartup = generator.getExtension(GeneratorStartup.class); - GeneratorShortCircuit generatorShortCircuit = generator.getExtension(GeneratorShortCircuit.class); - GeneratorField field = GeneratorField.valueOf(generatorField); - switch (field) { - case MAXIMUM_ACTIVE_POWER -> generator.setMaxP(newValue); - case MINIMUM_ACTIVE_POWER -> generator.setMinP(newValue); - case ACTIVE_POWER_SET_POINT -> generator.setTargetP(newValue); - case RATED_NOMINAL_POWER -> generator.setRatedS(newValue); - case REACTIVE_POWER_SET_POINT -> generator.setTargetQ(newValue); - case VOLTAGE_SET_POINT -> generator.setTargetV(newValue); - case PLANNED_ACTIVE_POWER_SET_POINT -> { - if (generatorStartup == null) { - generator.newExtension(GeneratorStartupAdder.class) - .withPlannedActivePowerSetpoint(newValue) - .add(); - } else { - generator.newExtension(GeneratorStartupAdder.class) - .withMarginalCost(generatorStartup.getMarginalCost()) - .withPlannedActivePowerSetpoint(newValue) - .withPlannedOutageRate(generatorStartup.getPlannedOutageRate()) - .withForcedOutageRate(generatorStartup.getForcedOutageRate()) - .add(); - } + public static void setNewValue(Generator generator, String generatorField, T newValue) { + GeneratorStartup generatorStartup = generator.getExtension(GeneratorStartup.class); + GeneratorShortCircuit generatorShortCircuit = generator.getExtension(GeneratorShortCircuit.class); + GeneratorField field = GeneratorField.valueOf(generatorField); + switch (field) { + case MAXIMUM_ACTIVE_POWER -> generator.setMaxP((double) newValue); + case MINIMUM_ACTIVE_POWER -> generator.setMinP((double) newValue); + case ACTIVE_POWER_SET_POINT -> generator.setTargetP((double) newValue); + case RATED_NOMINAL_POWER -> generator.setRatedS((double) newValue); + case REACTIVE_POWER_SET_POINT -> generator.setTargetQ((double) newValue); + case VOLTAGE_SET_POINT -> generator.setTargetV((double) newValue); + case PLANNED_ACTIVE_POWER_SET_POINT -> { + if (generatorStartup == null) { + generator.newExtension(GeneratorStartupAdder.class) + .withPlannedActivePowerSetpoint((double) newValue) + .add(); + } else { + generator.newExtension(GeneratorStartupAdder.class) + .withMarginalCost(generatorStartup.getMarginalCost()) + .withPlannedActivePowerSetpoint((double) newValue) + .withPlannedOutageRate(generatorStartup.getPlannedOutageRate()) + .withForcedOutageRate(generatorStartup.getForcedOutageRate()) + .add(); } - case MARGINAL_COST -> { - if (generatorStartup == null) { - generator.newExtension(GeneratorStartupAdder.class) - .withMarginalCost(newValue) - .add(); - } else { - generator.newExtension(GeneratorStartupAdder.class) - .withMarginalCost(newValue) - .withPlannedActivePowerSetpoint(generatorStartup.getPlannedActivePowerSetpoint()) - .withPlannedOutageRate(generatorStartup.getPlannedOutageRate()) - .withForcedOutageRate(generatorStartup.getForcedOutageRate()) - .add(); - } + } + case MARGINAL_COST -> { + if (generatorStartup == null) { + generator.newExtension(GeneratorStartupAdder.class) + .withMarginalCost((double) newValue) + .add(); + } else { + generator.newExtension(GeneratorStartupAdder.class) + .withMarginalCost((double) newValue) + .withPlannedActivePowerSetpoint(generatorStartup.getPlannedActivePowerSetpoint()) + .withPlannedOutageRate(generatorStartup.getPlannedOutageRate()) + .withForcedOutageRate(generatorStartup.getForcedOutageRate()) + .add(); } - case PLANNED_OUTAGE_RATE -> { - if (generatorStartup == null) { - generator.newExtension(GeneratorStartupAdder.class) - .withPlannedOutageRate(newValue) - .add(); - } else { - generator.newExtension(GeneratorStartupAdder.class) - .withMarginalCost(generatorStartup.getMarginalCost()) - .withPlannedActivePowerSetpoint(generatorStartup.getPlannedActivePowerSetpoint()) - .withPlannedOutageRate(newValue) - .withForcedOutageRate(generatorStartup.getForcedOutageRate()) - .add(); - } + } + case PLANNED_OUTAGE_RATE -> { + if (generatorStartup == null) { + generator.newExtension(GeneratorStartupAdder.class) + .withPlannedOutageRate((double) newValue) + .add(); + } else { + generator.newExtension(GeneratorStartupAdder.class) + .withMarginalCost(generatorStartup.getMarginalCost()) + .withPlannedActivePowerSetpoint(generatorStartup.getPlannedActivePowerSetpoint()) + .withPlannedOutageRate((double) newValue) + .withForcedOutageRate(generatorStartup.getForcedOutageRate()) + .add(); } - case FORCED_OUTAGE_RATE -> { - if (generatorStartup == null) { - generator.newExtension(GeneratorStartupAdder.class) - .withForcedOutageRate(newValue) - .add(); - } else { - generator.newExtension(GeneratorStartupAdder.class) - .withMarginalCost(generatorStartup.getMarginalCost()) - .withPlannedActivePowerSetpoint(generatorStartup.getPlannedActivePowerSetpoint()) - .withPlannedOutageRate(generatorStartup.getForcedOutageRate()) - .withForcedOutageRate(newValue) - .add(); - } + } + case FORCED_OUTAGE_RATE -> { + if (generatorStartup == null) { + generator.newExtension(GeneratorStartupAdder.class) + .withForcedOutageRate((double) newValue) + .add(); + } else { + generator.newExtension(GeneratorStartupAdder.class) + .withMarginalCost(generatorStartup.getMarginalCost()) + .withPlannedActivePowerSetpoint(generatorStartup.getPlannedActivePowerSetpoint()) + .withPlannedOutageRate(generatorStartup.getForcedOutageRate()) + .withForcedOutageRate((double) newValue) + .add(); } - case DROOP -> generator.newExtension(ActivePowerControlAdder.class) - .withDroop(newValue) - .add(); - case TRANSIENT_REACTANCE -> generator.newExtension(GeneratorShortCircuitAdder.class) - .withDirectTransX(newValue) - .withStepUpTransformerX(generatorShortCircuit == null ? Double.NaN : generatorShortCircuit.getStepUpTransformerX()) - .add(); - case STEP_UP_TRANSFORMER_REACTANCE -> generator.newExtension(GeneratorShortCircuitAdder.class) - .withDirectTransX(generatorShortCircuit == null ? 0.0D : generatorShortCircuit.getDirectTransX()) - .withStepUpTransformerX(newValue) - .add(); - case Q_PERCENT -> generator.newExtension(CoordinatedReactiveControlAdder.class) - .withQPercent(newValue) - .add(); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_GENERATOR_FIELD_ERROR_MESSAGE + field); } - } - } - - public static void setNewValue(Generator generator, String generatorField, Boolean newValue) { - GeneratorField field = GeneratorField.valueOf(generatorField); - switch (field) { - case VOLTAGE_REGULATOR_ON -> generator.setVoltageRegulatorOn(newValue); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_GENERATOR_FIELD_ERROR_MESSAGE + field); - } - } - - public static void setNewValue(Generator generator, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { - switch (simpleModificationByFilterInfos.getDataType()) { - case DOUBLE, INTEGER -> setNewValue(generator, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); - case BOOLEAN -> setNewValue(generator, simpleModificationByFilterInfos.getEditedField(), (Boolean) simpleModificationByFilterInfos.getValue()); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_GENERATOR_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); + case DROOP -> generator.newExtension(ActivePowerControlAdder.class) + .withDroop((double) newValue) + .add(); + case TRANSIENT_REACTANCE -> generator.newExtension(GeneratorShortCircuitAdder.class) + .withDirectTransX((double) newValue) + .withStepUpTransformerX(generatorShortCircuit == null ? Double.NaN : generatorShortCircuit.getStepUpTransformerX()) + .add(); + case STEP_UP_TRANSFORMER_REACTANCE -> generator.newExtension(GeneratorShortCircuitAdder.class) + .withDirectTransX(generatorShortCircuit == null ? 0.0D : generatorShortCircuit.getDirectTransX()) + .withStepUpTransformerX((double) newValue) + .add(); + case Q_PERCENT -> generator.newExtension(CoordinatedReactiveControlAdder.class) + .withQPercent((double) newValue) + .add(); + case VOLTAGE_REGULATOR_ON -> generator.setVoltageRegulatorOn((boolean) newValue); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java index 3adba1c33..8cb572639 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java @@ -9,10 +9,6 @@ import com.powsybl.iidm.network.Load; import com.powsybl.iidm.network.LoadType; -import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; - -import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; /** * @author Seddik Yengui @@ -22,40 +18,21 @@ public enum LoadField { ACTIVE_POWER, REACTIVE_POWER; - public static final String UNSUPPORTED_LOAD_FIELD_ERROR_MESSAGE = "Unsupported load field: "; - public static final String UNSUPPORTED_LOAD_DATA_TYPE_ERROR_MESSAGE = "Unsupported load data type: "; - - public static Double getReferenceValue(Load load, String loadField) { + public static Object getReferenceValue(Load load, String loadField) { LoadField field = LoadField.valueOf(loadField); return switch (field) { + case LOAD_TYPE -> load.getLoadType(); case ACTIVE_POWER -> load.getP0(); case REACTIVE_POWER -> load.getQ0(); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_LOAD_FIELD_ERROR_MESSAGE + field); }; } - public static void setNewValue(Load load, String loadField, Double newValue) { - LoadField field = LoadField.valueOf(loadField); - switch (field) { - case ACTIVE_POWER -> load.setP0(newValue); - case REACTIVE_POWER -> load.setQ0(newValue); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_LOAD_FIELD_ERROR_MESSAGE + field); - } - } - - public static void setNewValue(Load load, String loadField, String newValue) { + public static void setNewValue(Load load, String loadField, T newValue) { LoadField field = LoadField.valueOf(loadField); switch (field) { - case LOAD_TYPE -> load.setLoadType(newValue != null ? LoadType.valueOf(newValue) : null); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_LOAD_FIELD_ERROR_MESSAGE + field); - } - } - - public static void setNewValue(Load load, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { - switch (simpleModificationByFilterInfos.getDataType()) { - case DOUBLE, INTEGER -> setNewValue(load, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); - case ENUM -> setNewValue(load, simpleModificationByFilterInfos.getEditedField(), (String) simpleModificationByFilterInfos.getValue()); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_LOAD_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); + case LOAD_TYPE -> load.setLoadType(newValue != null ? LoadType.valueOf((String) newValue) : null); + case ACTIVE_POWER -> load.setP0((double) newValue); + case REACTIVE_POWER -> load.setQ0((double) newValue); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index d07233200..93a7252ab 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -12,9 +12,6 @@ import com.powsybl.iidm.network.ShuntCompensatorModelType; import com.powsybl.iidm.network.VoltageLevel; import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; - -import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; /** * @author Seddik Yengui @@ -25,9 +22,7 @@ public enum ShuntCompensatorField { MAXIMUM_SUSCEPTANCE, MAXIMUM_Q_AT_NOMINAL_VOLTAGE; - public static final String UNSUPPORTED_SHUNT_COMPENSATOR_DATA_TYPE_ERROR_MESSAGE = "Unsupported shunt compensator data type: "; - - public static Double getReferenceValue(ShuntCompensator shuntCompensator, String shuntCompensatorField) { + public static Object getReferenceValue(ShuntCompensator shuntCompensator, String shuntCompensatorField) { VoltageLevel voltageLevel = shuntCompensator.getTerminal().getVoltageLevel(); ShuntCompensatorField field = ShuntCompensatorField.valueOf(shuntCompensatorField); return switch (field) { @@ -38,7 +33,7 @@ public static Double getReferenceValue(ShuntCompensator shuntCompensator, String }; } - public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCompensatorField, Double newValue) { + public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCompensatorField, T newValue) { if (shuntCompensator.getModelType() != ShuntCompensatorModelType.LINEAR) { throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, String.format("Shunt compensator with %s model is not supported", shuntCompensator.getModelType())); @@ -48,24 +43,17 @@ public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCo VoltageLevel voltageLevel = shuntCompensator.getTerminal().getVoltageLevel(); switch (field) { case MAXIMUM_SECTION_COUNT -> { - int maximumSectionCount = newValue.intValue(); + int maximumSectionCount = ((Number) newValue).intValue(); model.setBPerSection(model.getBPerSection() * shuntCompensator.getMaximumSectionCount() / maximumSectionCount); model.setMaximumSectionCount(maximumSectionCount); } - case SECTION_COUNT -> shuntCompensator.setSectionCount(newValue.intValue()); - case MAXIMUM_SUSCEPTANCE -> model.setBPerSection(newValue / shuntCompensator.getMaximumSectionCount()); + case SECTION_COUNT -> shuntCompensator.setSectionCount(((Number) newValue).intValue()); + case MAXIMUM_SUSCEPTANCE -> model.setBPerSection(((double) newValue) / shuntCompensator.getMaximumSectionCount()); case MAXIMUM_Q_AT_NOMINAL_VOLTAGE -> { - double newQatNominalV = newValue / shuntCompensator.getMaximumSectionCount(); + double newQatNominalV = ((double) newValue) / shuntCompensator.getMaximumSectionCount(); double newSusceptancePerSection = newQatNominalV / Math.pow(voltageLevel.getNominalV(), 2); model.setBPerSection(newSusceptancePerSection); } } } - - public static void setNewValue(ShuntCompensator shuntCompensator, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { - switch (simpleModificationByFilterInfos.getDataType()) { - case DOUBLE, INTEGER -> setNewValue(shuntCompensator, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_SHUNT_COMPENSATOR_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); - } - } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index 439761ab2..48935364e 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -10,10 +10,6 @@ import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.RatioTapChanger; import com.powsybl.iidm.network.TwoWindingsTransformer; -import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; - -import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; /** * @author Seddik Yengui @@ -35,9 +31,7 @@ public enum TwoWindingsTransformerField { PHASE_TAP_POSITION, PHASE_TARGET_DEADBAND; - public static final String UNSUPPORTED_TWO_WINDINGS_TRANSFORMER_DATA_TYPE_ERROR_MESSAGE = "Unsupported two windings transformer data type: "; - - public static Double getReferenceValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField) { + public static Object getReferenceValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField) { TwoWindingsTransformerField field = TwoWindingsTransformerField.valueOf(twoWindingsTransformerField); final PhaseTapChanger phaseTapChanger = transformer.getPhaseTapChanger(); final RatioTapChanger ratioTapChanger = transformer.getRatioTapChanger(); @@ -60,34 +54,27 @@ public static Double getReferenceValue(TwoWindingsTransformer transformer, Strin }; } - public static void setNewValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField, Double newValue) { + public static void setNewValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField, T newValue) { TwoWindingsTransformerField field = TwoWindingsTransformerField.valueOf(twoWindingsTransformerField); final PhaseTapChanger phaseTapChanger = transformer.getPhaseTapChanger(); final RatioTapChanger ratioTapChanger = transformer.getRatioTapChanger(); switch (field) { - case R -> transformer.setR(newValue); - case X -> transformer.setX(newValue); - case G -> transformer.setG(newValue); - case B -> transformer.setB(newValue); - case RATED_U1 -> transformer.setRatedU1(newValue); - case RATED_U2 -> transformer.setRatedU2(newValue); - case RATED_S -> transformer.setRatedS(newValue); - case TARGET_V -> ratioTapChanger.setTargetV(newValue); - case RATIO_LOW_TAP_POSITION -> ratioTapChanger.setLowTapPosition(newValue.intValue()); - case RATIO_TAP_POSITION -> ratioTapChanger.setTapPosition(newValue.intValue()); - case RATIO_TARGET_DEADBAND -> ratioTapChanger.setTargetDeadband(newValue); - case REGULATION_VALUE -> phaseTapChanger.setRegulationValue(newValue); - case PHASE_LOW_TAP_POSITION -> phaseTapChanger.setLowTapPosition(newValue.intValue()); - case PHASE_TAP_POSITION -> phaseTapChanger.setTapPosition(newValue.intValue()); - case PHASE_TARGET_DEADBAND -> phaseTapChanger.setTargetDeadband(newValue); - } - } - - public static void setNewValue(TwoWindingsTransformer transformer, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { - switch (simpleModificationByFilterInfos.getDataType()) { - case DOUBLE, INTEGER -> setNewValue(transformer, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_TWO_WINDINGS_TRANSFORMER_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); + case R -> transformer.setR((double) newValue); + case X -> transformer.setX((double) newValue); + case G -> transformer.setG((double) newValue); + case B -> transformer.setB((double) newValue); + case RATED_U1 -> transformer.setRatedU1((double) newValue); + case RATED_U2 -> transformer.setRatedU2((double) newValue); + case RATED_S -> transformer.setRatedS((double) newValue); + case TARGET_V -> ratioTapChanger.setTargetV((double) newValue); + case RATIO_LOW_TAP_POSITION -> ratioTapChanger.setLowTapPosition(((Number) newValue).intValue()); + case RATIO_TAP_POSITION -> ratioTapChanger.setTapPosition(((Number) newValue).intValue()); + case RATIO_TARGET_DEADBAND -> ratioTapChanger.setTargetDeadband((double) newValue); + case REGULATION_VALUE -> phaseTapChanger.setRegulationValue((double) newValue); + case PHASE_LOW_TAP_POSITION -> phaseTapChanger.setLowTapPosition(((Number) newValue).intValue()); + case PHASE_TAP_POSITION -> phaseTapChanger.setTapPosition(((Number) newValue).intValue()); + case PHASE_TARGET_DEADBAND -> phaseTapChanger.setTargetDeadband((double) newValue); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java index 85b247a6d..7a5256faf 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java @@ -10,10 +10,6 @@ import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; -import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; - -import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_ERROR; /** * @author Seddik Yengui @@ -25,9 +21,7 @@ public enum VoltageLevelField { LOW_SHORT_CIRCUIT_CURRENT_LIMIT, HIGH_SHORT_CIRCUIT_CURRENT_LIMIT; - public static final String UNSUPPORTED_VOLTAGE_LEVEL_DATA_TYPE_ERROR_MESSAGE = "Unsupported voltage level data type: "; - - public static Double getReferenceValue(VoltageLevel voltageLevel, String voltageLevelField) { + public static Object getReferenceValue(VoltageLevel voltageLevel, String voltageLevelField) { IdentifiableShortCircuit identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class); VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField); return switch (field) { @@ -39,22 +33,22 @@ public static Double getReferenceValue(VoltageLevel voltageLevel, String voltage }; } - public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, Double newValue) { + public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, T newValue) { IdentifiableShortCircuit identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class); VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField); switch (field) { - case NOMINAL_VOLTAGE -> voltageLevel.setNominalV(newValue); - case LOW_VOLTAGE_LIMIT -> voltageLevel.setLowVoltageLimit(newValue); - case HIGH_VOLTAGE_LIMIT -> voltageLevel.setHighVoltageLimit(newValue); + case NOMINAL_VOLTAGE -> voltageLevel.setNominalV((double) newValue); + case LOW_VOLTAGE_LIMIT -> voltageLevel.setLowVoltageLimit((double) newValue); + case HIGH_VOLTAGE_LIMIT -> voltageLevel.setHighVoltageLimit((double) newValue); case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> { - IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMin(newValue); + IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMin((double) newValue); if (identifiableShortCircuit != null) { adder.withIpMax(identifiableShortCircuit.getIpMax()); } adder.add(); } case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> { - IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMax(newValue); + IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMax((double) newValue); if (identifiableShortCircuit != null) { adder.withIpMin(identifiableShortCircuit.getIpMin()); } @@ -62,11 +56,4 @@ public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelFie } } } - - public static void setNewValue(VoltageLevel voltageLevel, AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos) { - switch (simpleModificationByFilterInfos.getDataType()) { - case DOUBLE, INTEGER -> setNewValue(voltageLevel, simpleModificationByFilterInfos.getEditedField(), (Double) simpleModificationByFilterInfos.getValue()); - default -> throw new NetworkModificationException(MODIFICATION_ERROR, UNSUPPORTED_VOLTAGE_LEVEL_DATA_TYPE_ERROR_MESSAGE + simpleModificationByFilterInfos.getDataType()); - } - } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java index 387acf962..e2cd18d33 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java @@ -7,26 +7,10 @@ package org.gridsuite.modification.server.dto.byfilter.formula; -import com.powsybl.iidm.network.Battery; -import com.powsybl.iidm.network.Generator; -import com.powsybl.iidm.network.Identifiable; -import com.powsybl.iidm.network.IdentifiableType; -import com.powsybl.iidm.network.Load; -import com.powsybl.iidm.network.ShuntCompensator; -import com.powsybl.iidm.network.TwoWindingsTransformer; -import com.powsybl.iidm.network.VoltageLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import com.powsybl.iidm.network.*; +import lombok.*; import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.BatteryField; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.GeneratorField; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.LoadField; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.ShuntCompensatorField; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.VoltageLevelField; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; /** @@ -54,7 +38,7 @@ public Double getRefOrValue(Identifiable identifiable) { } IdentifiableType identifiableType = identifiable.getType(); - return switch (identifiableType) { + return (Double) switch (identifiableType) { case GENERATOR -> GeneratorField.getReferenceValue((Generator) identifiable, equipmentField); case BATTERY -> BatteryField.getReferenceValue((Battery) identifiable, equipmentField); case SHUNT_COMPENSATOR -> ShuntCompensatorField.getReferenceValue((ShuntCompensator) identifiable, equipmentField); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java index 5bdf9bb22..e9e3c33e3 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -9,17 +9,14 @@ import com.powsybl.commons.report.ReportNode; import com.powsybl.commons.report.TypedValue; -import com.powsybl.iidm.network.Identifiable; -import com.powsybl.iidm.network.IdentifiableType; -import com.powsybl.iidm.network.Network; -import com.powsybl.iidm.network.TwoWindingsTransformer; +import com.powsybl.iidm.network.*; import org.apache.commons.lang3.StringUtils; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.FilterEquipments; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.ModificationUtils; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; @@ -97,8 +94,24 @@ protected abstract boolean preCheckValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List reports, List notEditableEquipments); - protected abstract Object applyValue(Identifiable equipment, - AbstractModificationByFilterInfos modificationByFilterInfos); + protected abstract T getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos); + + protected T applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + // get new value + T newValue = getNewValue(equipment, modificationByFilterInfos); + + // set new value for the equipment + switch (equipment.getType()) { + case GENERATOR -> GeneratorField.setNewValue((Generator) equipment, modificationByFilterInfos.getEditedField(), newValue); + case BATTERY -> BatteryField.setNewValue((Battery) equipment, modificationByFilterInfos.getEditedField(), newValue); + case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) equipment, modificationByFilterInfos.getEditedField(), newValue); + case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) equipment, modificationByFilterInfos.getEditedField(), newValue); + case LOAD -> LoadField.setNewValue((Load) equipment, modificationByFilterInfos.getEditedField(), newValue); + case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) equipment, modificationByFilterInfos.getEditedField(), newValue); + default -> throw new NetworkModificationException(getExceptionType(), "Unsupported equipment"); + } + return newValue; + } @Override public void initApplicationContext(NetworkModificationApplicator modificationApplicator) { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java index b8e22a394..839b4c4b8 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java @@ -9,12 +9,12 @@ import com.powsybl.commons.report.ReportNode; import com.powsybl.commons.report.TypedValue; -import com.powsybl.iidm.network.*; +import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.IdentifiableType; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.dto.byfilter.formula.Operator; @@ -85,21 +85,11 @@ protected boolean preCheckValue(Identifiable equipment, AbstractModificationB } @Override - protected Object applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + protected T getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { FormulaInfos formulaInfos = (FormulaInfos) modificationByFilterInfos; Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(equipment); Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(equipment); - final Double newValue = applyOperation(formulaInfos.getOperator(), value1, value2); - switch (equipment.getType()) { - case GENERATOR -> GeneratorField.setNewValue((Generator) equipment, formulaInfos.getEditedField(), newValue); - case BATTERY -> BatteryField.setNewValue((Battery) equipment, formulaInfos.getEditedField(), newValue); - case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) equipment, formulaInfos.getEditedField(), newValue); - case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) equipment, formulaInfos.getEditedField(), newValue); - case LOAD -> LoadField.setNewValue((Load) equipment, formulaInfos.getEditedField(), newValue); - case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) equipment, formulaInfos.getEditedField(), newValue); - default -> throw new NetworkModificationException(BY_FORMULA_MODIFICATION_ERROR, "Unsupported equipment"); - } - return newValue; + return (T) applyOperation(formulaInfos.getOperator(), value1, value2); } private Double applyOperation(Operator operator, @Nonnull Double value1, @Nonnull Double value2) { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index 66a3bbe53..fb9d410e3 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -8,15 +8,15 @@ package org.gridsuite.modification.server.modifications.byfilter; import com.powsybl.commons.report.ReportNode; -import com.powsybl.iidm.network.*; +import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.IdentifiableType; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.BySimpleModificationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; -import org.gridsuite.modification.server.dto.byfilter.simple.PropertyModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.PropertyModificationByFilterInfos; import java.util.Collections; import java.util.List; @@ -65,24 +65,20 @@ protected boolean preCheckValue(Identifiable equipment, AbstractModificationB } @Override - protected Object applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { - AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; + protected T getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; + return simpleModificationInfos.getValue(); + } + + @Override + protected T applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { - equipment.setProperty( - ((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName(), - (String) simpleModificationInfos.getValue() - ); + T newValue = getNewValue(equipment, modificationByFilterInfos); + equipment.setProperty(((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName(), (String) newValue); + return newValue; } else { - switch (equipment.getType()) { - case GENERATOR -> GeneratorField.setNewValue((Generator) equipment, simpleModificationInfos); - case BATTERY -> BatteryField.setNewValue((Battery) equipment, simpleModificationInfos); - case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) equipment, simpleModificationInfos); - case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) equipment, simpleModificationInfos); - case LOAD -> LoadField.setNewValue((Load) equipment, simpleModificationInfos); - case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) equipment, simpleModificationInfos); - default -> throw new NetworkModificationException(BY_SIMPLE_MODIFICATION_ERROR, "Unsupported equipment"); - } + return super.applyValue(equipment, modificationByFilterInfos); } - return simpleModificationInfos.getValue(); } } From 0cbafe56ee5ee294bae2ae1148050f393e16729b Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Wed, 4 Sep 2024 22:53:00 +0200 Subject: [PATCH 18/42] untyping value --- .../byfilter/equipmentfield/BatteryField.java | 24 +++---- .../byfilter/equipmentfield/FieldUtils.java | 42 +++++++++++ .../equipmentfield/GeneratorField.java | 72 +++++++++---------- .../byfilter/equipmentfield/LoadField.java | 16 ++--- .../equipmentfield/ShuntCompensatorField.java | 20 +++--- .../TwoWindingsTransformerField.java | 64 ++++++++--------- .../equipmentfield/VoltageLevelField.java | 24 +++---- .../formula/ReferenceFieldOrValue.java | 24 +++---- .../AbstractByFilterModification.java | 38 +++++----- .../byfilter/ByFormulaModification.java | 4 +- .../byfilter/BySimpleModification.java | 14 ++-- 11 files changed, 192 insertions(+), 150 deletions(-) create mode 100644 src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/FieldUtils.java 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 0dbe9c023..fc4302327 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 @@ -22,27 +22,27 @@ public enum BatteryField { REACTIVE_POWER_SET_POINT, DROOP; - public static Object getReferenceValue(Battery battery, String batteryField) { + public static String getReferenceValue(Battery battery, String batteryField) { ActivePowerControl activePowerControl = battery.getExtension(ActivePowerControl.class); BatteryField field = BatteryField.valueOf(batteryField); return switch (field) { - case MINIMUM_ACTIVE_POWER -> battery.getMinP(); - case MAXIMUM_ACTIVE_POWER -> battery.getMaxP(); - case ACTIVE_POWER_SET_POINT -> battery.getTargetP(); - case REACTIVE_POWER_SET_POINT -> battery.getTargetQ(); - case DROOP -> activePowerControl != null ? activePowerControl.getDroop() : null; + case MINIMUM_ACTIVE_POWER -> String.valueOf(battery.getMinP()); + case MAXIMUM_ACTIVE_POWER -> String.valueOf(battery.getMaxP()); + case ACTIVE_POWER_SET_POINT -> String.valueOf(battery.getTargetP()); + case REACTIVE_POWER_SET_POINT -> String.valueOf(battery.getTargetQ()); + case DROOP -> activePowerControl != null ? String.valueOf(activePowerControl.getDroop()) : null; }; } - public static void setNewValue(Battery battery, String batteryField, T newValue) { + public static void setNewValue(Battery battery, String batteryField, String newValue) { BatteryField field = BatteryField.valueOf(batteryField); switch (field) { - case MINIMUM_ACTIVE_POWER -> battery.setMinP((double) newValue); - case MAXIMUM_ACTIVE_POWER -> battery.setMaxP((double) newValue); - case ACTIVE_POWER_SET_POINT -> battery.setTargetP((double) newValue); - case REACTIVE_POWER_SET_POINT -> battery.setTargetQ((double) newValue); + case MINIMUM_ACTIVE_POWER -> battery.setMinP(Double.parseDouble(newValue)); + case MAXIMUM_ACTIVE_POWER -> battery.setMaxP(Double.parseDouble(newValue)); + case ACTIVE_POWER_SET_POINT -> battery.setTargetP(Double.parseDouble(newValue)); + case REACTIVE_POWER_SET_POINT -> battery.setTargetQ(Double.parseDouble(newValue)); case DROOP -> battery.newExtension(ActivePowerControlAdder.class) - .withDroop((double) newValue) + .withDroop(Double.parseDouble(newValue)) .add(); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/FieldUtils.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/FieldUtils.java new file mode 100644 index 000000000..3faa48f35 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/FieldUtils.java @@ -0,0 +1,42 @@ +package org.gridsuite.modification.server.dto.byfilter.equipmentfield; + +import com.powsybl.iidm.network.*; +import org.gridsuite.modification.server.NetworkModificationException; + +import javax.annotation.Nullable; + +public final class FieldUtils { + + private FieldUtils() { + + } + + @Nullable + public static String getFieldValue(Identifiable equipment, String equipmentField) { + return switch (equipment.getType()) { + case GENERATOR -> GeneratorField.getReferenceValue((Generator) equipment, equipmentField); + case BATTERY -> BatteryField.getReferenceValue((Battery) equipment, equipmentField); + case SHUNT_COMPENSATOR -> + ShuntCompensatorField.getReferenceValue((ShuntCompensator) equipment, equipmentField); + case VOLTAGE_LEVEL -> VoltageLevelField.getReferenceValue((VoltageLevel) equipment, equipmentField); + case LOAD -> LoadField.getReferenceValue((Load) equipment, equipmentField); + case TWO_WINDINGS_TRANSFORMER -> + TwoWindingsTransformerField.getReferenceValue((TwoWindingsTransformer) equipment, equipmentField); + default -> throw new NetworkModificationException(NetworkModificationException.Type.MODIFICATION_ERROR, + "Unsupported getting value for equipment type : " + equipment.getType().name()); + }; + } + + public static void setFieldValue(Identifiable equipment, String equipmentField, String newValue) { + switch (equipment.getType()) { + case GENERATOR -> GeneratorField.setNewValue((Generator) equipment, equipmentField, newValue); + case BATTERY -> BatteryField.setNewValue((Battery) equipment, equipmentField, newValue); + case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) equipment, equipmentField, newValue); + case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) equipment, equipmentField, newValue); + case LOAD -> LoadField.setNewValue((Load) equipment, equipmentField, newValue); + case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) equipment, equipmentField, newValue); + default -> throw new NetworkModificationException(NetworkModificationException.Type.MODIFICATION_ERROR, + "Unsupported setting value for equipment type : " + equipment.getType().name()); + } + } +} 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 44f66de93..2cd1d37fb 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 @@ -30,51 +30,51 @@ public enum GeneratorField { STEP_UP_TRANSFORMER_REACTANCE, Q_PERCENT; - public static Object getReferenceValue(Generator generator, String generatorField) { + public static String getReferenceValue(Generator generator, String generatorField) { ActivePowerControl activePowerControl = generator.getExtension(ActivePowerControl.class); GeneratorStartup generatorStartup = generator.getExtension(GeneratorStartup.class); GeneratorShortCircuit generatorShortCircuit = generator.getExtension(GeneratorShortCircuit.class); CoordinatedReactiveControl coordinatedReactiveControl = generator.getExtension(CoordinatedReactiveControl.class); GeneratorField field = GeneratorField.valueOf(generatorField); return switch (field) { - case VOLTAGE_REGULATOR_ON -> generator.isVoltageRegulatorOn(); - case MAXIMUM_ACTIVE_POWER -> generator.getMaxP(); - case MINIMUM_ACTIVE_POWER -> generator.getMinP(); - case ACTIVE_POWER_SET_POINT -> generator.getTargetP(); - case RATED_NOMINAL_POWER -> generator.getRatedS(); - case REACTIVE_POWER_SET_POINT -> generator.getTargetQ(); - case VOLTAGE_SET_POINT -> generator.getTargetV(); - case PLANNED_ACTIVE_POWER_SET_POINT -> generatorStartup != null ? generatorStartup.getPlannedActivePowerSetpoint() : null; - case MARGINAL_COST -> generatorStartup != null ? generatorStartup.getMarginalCost() : null; - case PLANNED_OUTAGE_RATE -> generatorStartup != null ? generatorStartup.getPlannedOutageRate() : null; - case FORCED_OUTAGE_RATE -> generatorStartup != null ? generatorStartup.getForcedOutageRate() : null; - case DROOP -> activePowerControl != null ? activePowerControl.getDroop() : null; - case TRANSIENT_REACTANCE -> generatorShortCircuit != null ? generatorShortCircuit.getDirectTransX() : null; - case STEP_UP_TRANSFORMER_REACTANCE -> generatorShortCircuit != null ? generatorShortCircuit.getStepUpTransformerX() : null; - case Q_PERCENT -> coordinatedReactiveControl != null ? coordinatedReactiveControl.getQPercent() : null; + case VOLTAGE_REGULATOR_ON -> String.valueOf(generator.isVoltageRegulatorOn()); + case MAXIMUM_ACTIVE_POWER -> String.valueOf(generator.getMaxP()); + case MINIMUM_ACTIVE_POWER -> String.valueOf(generator.getMinP()); + case ACTIVE_POWER_SET_POINT -> String.valueOf(generator.getTargetP()); + case RATED_NOMINAL_POWER -> String.valueOf(generator.getRatedS()); + case REACTIVE_POWER_SET_POINT -> String.valueOf(generator.getTargetQ()); + case VOLTAGE_SET_POINT -> String.valueOf(generator.getTargetV()); + case PLANNED_ACTIVE_POWER_SET_POINT -> generatorStartup != null ? String.valueOf(generatorStartup.getPlannedActivePowerSetpoint()) : null; + case MARGINAL_COST -> generatorStartup != null ? String.valueOf(generatorStartup.getMarginalCost()) : null; + case PLANNED_OUTAGE_RATE -> generatorStartup != null ? String.valueOf(generatorStartup.getPlannedOutageRate()) : null; + case FORCED_OUTAGE_RATE -> generatorStartup != null ? String.valueOf(generatorStartup.getForcedOutageRate()) : null; + case DROOP -> activePowerControl != null ? String.valueOf(activePowerControl.getDroop()) : null; + case TRANSIENT_REACTANCE -> generatorShortCircuit != null ? String.valueOf(generatorShortCircuit.getDirectTransX()) : null; + case STEP_UP_TRANSFORMER_REACTANCE -> generatorShortCircuit != null ? String.valueOf(generatorShortCircuit.getStepUpTransformerX()) : null; + case Q_PERCENT -> coordinatedReactiveControl != null ? String.valueOf(coordinatedReactiveControl.getQPercent()) : null; }; } - public static void setNewValue(Generator generator, String generatorField, T newValue) { + public static void setNewValue(Generator generator, String generatorField, String newValue) { GeneratorStartup generatorStartup = generator.getExtension(GeneratorStartup.class); GeneratorShortCircuit generatorShortCircuit = generator.getExtension(GeneratorShortCircuit.class); GeneratorField field = GeneratorField.valueOf(generatorField); switch (field) { - case MAXIMUM_ACTIVE_POWER -> generator.setMaxP((double) newValue); - case MINIMUM_ACTIVE_POWER -> generator.setMinP((double) newValue); - case ACTIVE_POWER_SET_POINT -> generator.setTargetP((double) newValue); - case RATED_NOMINAL_POWER -> generator.setRatedS((double) newValue); - case REACTIVE_POWER_SET_POINT -> generator.setTargetQ((double) newValue); - case VOLTAGE_SET_POINT -> generator.setTargetV((double) newValue); + case MAXIMUM_ACTIVE_POWER -> generator.setMaxP(Double.parseDouble(newValue)); + case MINIMUM_ACTIVE_POWER -> generator.setMinP(Double.parseDouble(newValue)); + case ACTIVE_POWER_SET_POINT -> generator.setTargetP(Double.parseDouble(newValue)); + case RATED_NOMINAL_POWER -> generator.setRatedS(Double.parseDouble(newValue)); + case REACTIVE_POWER_SET_POINT -> generator.setTargetQ(Double.parseDouble(newValue)); + case VOLTAGE_SET_POINT -> generator.setTargetV(Double.parseDouble(newValue)); case PLANNED_ACTIVE_POWER_SET_POINT -> { if (generatorStartup == null) { generator.newExtension(GeneratorStartupAdder.class) - .withPlannedActivePowerSetpoint((double) newValue) + .withPlannedActivePowerSetpoint(Double.parseDouble(newValue)) .add(); } else { generator.newExtension(GeneratorStartupAdder.class) .withMarginalCost(generatorStartup.getMarginalCost()) - .withPlannedActivePowerSetpoint((double) newValue) + .withPlannedActivePowerSetpoint(Double.parseDouble(newValue)) .withPlannedOutageRate(generatorStartup.getPlannedOutageRate()) .withForcedOutageRate(generatorStartup.getForcedOutageRate()) .add(); @@ -83,11 +83,11 @@ public static void setNewValue(Generator generator, String generatorField, T case MARGINAL_COST -> { if (generatorStartup == null) { generator.newExtension(GeneratorStartupAdder.class) - .withMarginalCost((double) newValue) + .withMarginalCost(Double.parseDouble(newValue)) .add(); } else { generator.newExtension(GeneratorStartupAdder.class) - .withMarginalCost((double) newValue) + .withMarginalCost(Double.parseDouble(newValue)) .withPlannedActivePowerSetpoint(generatorStartup.getPlannedActivePowerSetpoint()) .withPlannedOutageRate(generatorStartup.getPlannedOutageRate()) .withForcedOutageRate(generatorStartup.getForcedOutageRate()) @@ -97,13 +97,13 @@ public static void setNewValue(Generator generator, String generatorField, T case PLANNED_OUTAGE_RATE -> { if (generatorStartup == null) { generator.newExtension(GeneratorStartupAdder.class) - .withPlannedOutageRate((double) newValue) + .withPlannedOutageRate(Double.parseDouble(newValue)) .add(); } else { generator.newExtension(GeneratorStartupAdder.class) .withMarginalCost(generatorStartup.getMarginalCost()) .withPlannedActivePowerSetpoint(generatorStartup.getPlannedActivePowerSetpoint()) - .withPlannedOutageRate((double) newValue) + .withPlannedOutageRate(Double.parseDouble(newValue)) .withForcedOutageRate(generatorStartup.getForcedOutageRate()) .add(); } @@ -111,32 +111,32 @@ public static void setNewValue(Generator generator, String generatorField, T case FORCED_OUTAGE_RATE -> { if (generatorStartup == null) { generator.newExtension(GeneratorStartupAdder.class) - .withForcedOutageRate((double) newValue) + .withForcedOutageRate(Double.parseDouble(newValue)) .add(); } else { generator.newExtension(GeneratorStartupAdder.class) .withMarginalCost(generatorStartup.getMarginalCost()) .withPlannedActivePowerSetpoint(generatorStartup.getPlannedActivePowerSetpoint()) .withPlannedOutageRate(generatorStartup.getForcedOutageRate()) - .withForcedOutageRate((double) newValue) + .withForcedOutageRate(Double.parseDouble(newValue)) .add(); } } case DROOP -> generator.newExtension(ActivePowerControlAdder.class) - .withDroop((double) newValue) + .withDroop(Double.parseDouble(newValue)) .add(); case TRANSIENT_REACTANCE -> generator.newExtension(GeneratorShortCircuitAdder.class) - .withDirectTransX((double) newValue) + .withDirectTransX(Double.parseDouble(newValue)) .withStepUpTransformerX(generatorShortCircuit == null ? Double.NaN : generatorShortCircuit.getStepUpTransformerX()) .add(); case STEP_UP_TRANSFORMER_REACTANCE -> generator.newExtension(GeneratorShortCircuitAdder.class) .withDirectTransX(generatorShortCircuit == null ? 0.0D : generatorShortCircuit.getDirectTransX()) - .withStepUpTransformerX((double) newValue) + .withStepUpTransformerX(Double.parseDouble(newValue)) .add(); case Q_PERCENT -> generator.newExtension(CoordinatedReactiveControlAdder.class) - .withQPercent((double) newValue) + .withQPercent(Double.parseDouble(newValue)) .add(); - case VOLTAGE_REGULATOR_ON -> generator.setVoltageRegulatorOn((boolean) newValue); + case VOLTAGE_REGULATOR_ON -> generator.setVoltageRegulatorOn(Boolean.parseBoolean(newValue)); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java index 8cb572639..4582df7d1 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java @@ -18,21 +18,21 @@ public enum LoadField { ACTIVE_POWER, REACTIVE_POWER; - public static Object getReferenceValue(Load load, String loadField) { + public static String getReferenceValue(Load load, String loadField) { LoadField field = LoadField.valueOf(loadField); return switch (field) { - case LOAD_TYPE -> load.getLoadType(); - case ACTIVE_POWER -> load.getP0(); - case REACTIVE_POWER -> load.getQ0(); + case LOAD_TYPE -> load.getLoadType().name(); + case ACTIVE_POWER -> String.valueOf(load.getP0()); + case REACTIVE_POWER -> String.valueOf(load.getQ0()); }; } - public static void setNewValue(Load load, String loadField, T newValue) { + public static void setNewValue(Load load, String loadField, String newValue) { LoadField field = LoadField.valueOf(loadField); switch (field) { - case LOAD_TYPE -> load.setLoadType(newValue != null ? LoadType.valueOf((String) newValue) : null); - case ACTIVE_POWER -> load.setP0((double) newValue); - case REACTIVE_POWER -> load.setQ0((double) newValue); + case LOAD_TYPE -> load.setLoadType(newValue != null ? LoadType.valueOf(newValue) : null); + case ACTIVE_POWER -> load.setP0(Double.parseDouble(newValue)); + case REACTIVE_POWER -> load.setQ0(Double.parseDouble(newValue)); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index 93a7252ab..82ecc1a94 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -22,18 +22,18 @@ public enum ShuntCompensatorField { MAXIMUM_SUSCEPTANCE, MAXIMUM_Q_AT_NOMINAL_VOLTAGE; - public static Object getReferenceValue(ShuntCompensator shuntCompensator, String shuntCompensatorField) { + public static String getReferenceValue(ShuntCompensator shuntCompensator, String shuntCompensatorField) { VoltageLevel voltageLevel = shuntCompensator.getTerminal().getVoltageLevel(); ShuntCompensatorField field = ShuntCompensatorField.valueOf(shuntCompensatorField); return switch (field) { - case MAXIMUM_SECTION_COUNT -> (double) shuntCompensator.getMaximumSectionCount(); - case SECTION_COUNT -> (double) shuntCompensator.getSectionCount(); - case MAXIMUM_SUSCEPTANCE -> shuntCompensator.getB() * shuntCompensator.getMaximumSectionCount(); - case MAXIMUM_Q_AT_NOMINAL_VOLTAGE -> Math.abs(Math.pow(voltageLevel.getNominalV(), 2) * shuntCompensator.getB()) * shuntCompensator.getMaximumSectionCount(); + case MAXIMUM_SECTION_COUNT -> String.valueOf(shuntCompensator.getMaximumSectionCount()); + case SECTION_COUNT -> String.valueOf(shuntCompensator.getSectionCount()); + case MAXIMUM_SUSCEPTANCE -> String.valueOf(shuntCompensator.getB() * shuntCompensator.getMaximumSectionCount()); + case MAXIMUM_Q_AT_NOMINAL_VOLTAGE -> String.valueOf(Math.abs(Math.pow(voltageLevel.getNominalV(), 2) * shuntCompensator.getB()) * shuntCompensator.getMaximumSectionCount()); }; } - public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCompensatorField, T newValue) { + public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCompensatorField, String newValue) { if (shuntCompensator.getModelType() != ShuntCompensatorModelType.LINEAR) { throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, String.format("Shunt compensator with %s model is not supported", shuntCompensator.getModelType())); @@ -43,14 +43,14 @@ public static void setNewValue(ShuntCompensator shuntCompensator, String shu VoltageLevel voltageLevel = shuntCompensator.getTerminal().getVoltageLevel(); switch (field) { case MAXIMUM_SECTION_COUNT -> { - int maximumSectionCount = ((Number) newValue).intValue(); + int maximumSectionCount = (int) Double.parseDouble(newValue); model.setBPerSection(model.getBPerSection() * shuntCompensator.getMaximumSectionCount() / maximumSectionCount); model.setMaximumSectionCount(maximumSectionCount); } - case SECTION_COUNT -> shuntCompensator.setSectionCount(((Number) newValue).intValue()); - case MAXIMUM_SUSCEPTANCE -> model.setBPerSection(((double) newValue) / shuntCompensator.getMaximumSectionCount()); + case SECTION_COUNT -> shuntCompensator.setSectionCount((int) Double.parseDouble(newValue)); + case MAXIMUM_SUSCEPTANCE -> model.setBPerSection(Double.parseDouble(newValue) / shuntCompensator.getMaximumSectionCount()); case MAXIMUM_Q_AT_NOMINAL_VOLTAGE -> { - double newQatNominalV = ((double) newValue) / shuntCompensator.getMaximumSectionCount(); + double newQatNominalV = Double.parseDouble(newValue) / shuntCompensator.getMaximumSectionCount(); double newSusceptancePerSection = newQatNominalV / Math.pow(voltageLevel.getNominalV(), 2); model.setBPerSection(newSusceptancePerSection); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index 48935364e..b60bfa937 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -31,50 +31,50 @@ public enum TwoWindingsTransformerField { PHASE_TAP_POSITION, PHASE_TARGET_DEADBAND; - public static Object getReferenceValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField) { + public static String getReferenceValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField) { TwoWindingsTransformerField field = TwoWindingsTransformerField.valueOf(twoWindingsTransformerField); final PhaseTapChanger phaseTapChanger = transformer.getPhaseTapChanger(); final RatioTapChanger ratioTapChanger = transformer.getRatioTapChanger(); return switch (field) { - case R -> transformer.getR(); - case X -> transformer.getX(); - case G -> transformer.getG(); - case B -> transformer.getB(); - case RATED_U1 -> transformer.getRatedU1(); - case RATED_U2 -> transformer.getRatedU2(); - case RATED_S -> transformer.getRatedS(); - case TARGET_V -> ratioTapChanger != null ? ratioTapChanger.getTargetV() : null; - case RATIO_LOW_TAP_POSITION -> ratioTapChanger != null ? (double) ratioTapChanger.getLowTapPosition() : null; - case RATIO_TAP_POSITION -> ratioTapChanger != null ? (double) ratioTapChanger.getTapPosition() : null; - case RATIO_TARGET_DEADBAND -> ratioTapChanger != null ? ratioTapChanger.getTargetDeadband() : null; - case REGULATION_VALUE -> phaseTapChanger != null ? phaseTapChanger.getRegulationValue() : null; - case PHASE_LOW_TAP_POSITION -> phaseTapChanger != null ? (double) phaseTapChanger.getLowTapPosition() : null; - case PHASE_TAP_POSITION -> phaseTapChanger != null ? (double) phaseTapChanger.getTapPosition() : null; - case PHASE_TARGET_DEADBAND -> phaseTapChanger != null ? phaseTapChanger.getTargetDeadband() : null; + case R -> String.valueOf(transformer.getR()); + case X -> String.valueOf(transformer.getX()); + case G -> String.valueOf(transformer.getG()); + case B -> String.valueOf(transformer.getB()); + case RATED_U1 -> String.valueOf(transformer.getRatedU1()); + case RATED_U2 -> String.valueOf(transformer.getRatedU2()); + case RATED_S -> String.valueOf(transformer.getRatedS()); + case TARGET_V -> ratioTapChanger != null ? String.valueOf(ratioTapChanger.getTargetV()) : null; + case RATIO_LOW_TAP_POSITION -> ratioTapChanger != null ? String.valueOf(ratioTapChanger.getLowTapPosition()) : null; + case RATIO_TAP_POSITION -> ratioTapChanger != null ? String.valueOf(ratioTapChanger.getTapPosition()) : null; + case RATIO_TARGET_DEADBAND -> ratioTapChanger != null ? String.valueOf(ratioTapChanger.getTargetDeadband()) : null; + case REGULATION_VALUE -> phaseTapChanger != null ? String.valueOf(phaseTapChanger.getRegulationValue()) : null; + case PHASE_LOW_TAP_POSITION -> phaseTapChanger != null ? String.valueOf(phaseTapChanger.getLowTapPosition()) : null; + case PHASE_TAP_POSITION -> phaseTapChanger != null ? String.valueOf(phaseTapChanger.getTapPosition()) : null; + case PHASE_TARGET_DEADBAND -> phaseTapChanger != null ? String.valueOf(phaseTapChanger.getTargetDeadband()) : null; }; } - public static void setNewValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField, T newValue) { + public static void setNewValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField, String newValue) { TwoWindingsTransformerField field = TwoWindingsTransformerField.valueOf(twoWindingsTransformerField); final PhaseTapChanger phaseTapChanger = transformer.getPhaseTapChanger(); final RatioTapChanger ratioTapChanger = transformer.getRatioTapChanger(); switch (field) { - case R -> transformer.setR((double) newValue); - case X -> transformer.setX((double) newValue); - case G -> transformer.setG((double) newValue); - case B -> transformer.setB((double) newValue); - case RATED_U1 -> transformer.setRatedU1((double) newValue); - case RATED_U2 -> transformer.setRatedU2((double) newValue); - case RATED_S -> transformer.setRatedS((double) newValue); - case TARGET_V -> ratioTapChanger.setTargetV((double) newValue); - case RATIO_LOW_TAP_POSITION -> ratioTapChanger.setLowTapPosition(((Number) newValue).intValue()); - case RATIO_TAP_POSITION -> ratioTapChanger.setTapPosition(((Number) newValue).intValue()); - case RATIO_TARGET_DEADBAND -> ratioTapChanger.setTargetDeadband((double) newValue); - case REGULATION_VALUE -> phaseTapChanger.setRegulationValue((double) newValue); - case PHASE_LOW_TAP_POSITION -> phaseTapChanger.setLowTapPosition(((Number) newValue).intValue()); - case PHASE_TAP_POSITION -> phaseTapChanger.setTapPosition(((Number) newValue).intValue()); - case PHASE_TARGET_DEADBAND -> phaseTapChanger.setTargetDeadband((double) newValue); + case R -> transformer.setR(Double.parseDouble(newValue)); + case X -> transformer.setX(Double.parseDouble(newValue)); + case G -> transformer.setG(Double.parseDouble(newValue)); + case B -> transformer.setB(Double.parseDouble(newValue)); + case RATED_U1 -> transformer.setRatedU1(Double.parseDouble(newValue)); + case RATED_U2 -> transformer.setRatedU2(Double.parseDouble(newValue)); + case RATED_S -> transformer.setRatedS(Double.parseDouble(newValue)); + case TARGET_V -> ratioTapChanger.setTargetV(Double.parseDouble(newValue)); + case RATIO_LOW_TAP_POSITION -> ratioTapChanger.setLowTapPosition((int) Double.parseDouble(newValue)); + case RATIO_TAP_POSITION -> ratioTapChanger.setTapPosition((int) Double.parseDouble(newValue)); + case RATIO_TARGET_DEADBAND -> ratioTapChanger.setTargetDeadband(Double.parseDouble(newValue)); + case REGULATION_VALUE -> phaseTapChanger.setRegulationValue(Double.parseDouble(newValue)); + case PHASE_LOW_TAP_POSITION -> phaseTapChanger.setLowTapPosition((int) Double.parseDouble(newValue)); + case PHASE_TAP_POSITION -> phaseTapChanger.setTapPosition((int) Double.parseDouble(newValue)); + case PHASE_TARGET_DEADBAND -> phaseTapChanger.setTargetDeadband(Double.parseDouble(newValue)); } } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java index 7a5256faf..2303457c2 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java @@ -21,34 +21,34 @@ public enum VoltageLevelField { LOW_SHORT_CIRCUIT_CURRENT_LIMIT, HIGH_SHORT_CIRCUIT_CURRENT_LIMIT; - public static Object getReferenceValue(VoltageLevel voltageLevel, String voltageLevelField) { + public static String getReferenceValue(VoltageLevel voltageLevel, String voltageLevelField) { IdentifiableShortCircuit identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class); VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField); return switch (field) { - case NOMINAL_VOLTAGE -> voltageLevel.getNominalV(); - case LOW_VOLTAGE_LIMIT -> voltageLevel.getLowVoltageLimit(); - case HIGH_VOLTAGE_LIMIT -> voltageLevel.getHighVoltageLimit(); - case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> identifiableShortCircuit == null ? null : identifiableShortCircuit.getIpMin(); - case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> identifiableShortCircuit == null ? null : identifiableShortCircuit.getIpMax(); + case NOMINAL_VOLTAGE -> String.valueOf(voltageLevel.getNominalV()); + case LOW_VOLTAGE_LIMIT -> String.valueOf(voltageLevel.getLowVoltageLimit()); + case HIGH_VOLTAGE_LIMIT -> String.valueOf(voltageLevel.getHighVoltageLimit()); + case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> identifiableShortCircuit != null ? String.valueOf(identifiableShortCircuit.getIpMin()) : null; + case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> identifiableShortCircuit != null ? String.valueOf(identifiableShortCircuit.getIpMax()) : null; }; } - public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, T newValue) { + public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, String newValue) { IdentifiableShortCircuit identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class); VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField); switch (field) { - case NOMINAL_VOLTAGE -> voltageLevel.setNominalV((double) newValue); - case LOW_VOLTAGE_LIMIT -> voltageLevel.setLowVoltageLimit((double) newValue); - case HIGH_VOLTAGE_LIMIT -> voltageLevel.setHighVoltageLimit((double) newValue); + case NOMINAL_VOLTAGE -> voltageLevel.setNominalV(Double.parseDouble(newValue)); + case LOW_VOLTAGE_LIMIT -> voltageLevel.setLowVoltageLimit(Double.parseDouble(newValue)); + case HIGH_VOLTAGE_LIMIT -> voltageLevel.setHighVoltageLimit(Double.parseDouble(newValue)); case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> { - IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMin((double) newValue); + IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMin(Double.parseDouble(newValue)); if (identifiableShortCircuit != null) { adder.withIpMax(identifiableShortCircuit.getIpMax()); } adder.add(); } case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> { - IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMax((double) newValue); + IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMax(Double.parseDouble(newValue)); if (identifiableShortCircuit != null) { adder.withIpMin(identifiableShortCircuit.getIpMin()); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java index e2cd18d33..1967b81dd 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/ReferenceFieldOrValue.java @@ -7,10 +7,11 @@ package org.gridsuite.modification.server.dto.byfilter.formula; -import com.powsybl.iidm.network.*; +import com.powsybl.iidm.network.Identifiable; import lombok.*; import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; + +import static org.gridsuite.modification.server.dto.byfilter.equipmentfield.FieldUtils.getFieldValue; /** @@ -37,16 +38,13 @@ public Double getRefOrValue(Identifiable identifiable) { return value; } - IdentifiableType identifiableType = identifiable.getType(); - return (Double) switch (identifiableType) { - case GENERATOR -> GeneratorField.getReferenceValue((Generator) identifiable, equipmentField); - case BATTERY -> BatteryField.getReferenceValue((Battery) identifiable, equipmentField); - case SHUNT_COMPENSATOR -> ShuntCompensatorField.getReferenceValue((ShuntCompensator) identifiable, equipmentField); - case VOLTAGE_LEVEL -> VoltageLevelField.getReferenceValue((VoltageLevel) identifiable, equipmentField); - case LOAD -> LoadField.getReferenceValue((Load) identifiable, equipmentField); - case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.getReferenceValue((TwoWindingsTransformer) identifiable, equipmentField); - default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, - String.format("Unsupported equipment type : %s", identifiableType.name())); - }; + String referenceValue = getFieldValue(identifiable, equipmentField); + + if (referenceValue == null) { + return Double.NaN; + } + + return Double.parseDouble(referenceValue); } + } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java index e9e3c33e3..3533ad730 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -9,14 +9,17 @@ import com.powsybl.commons.report.ReportNode; import com.powsybl.commons.report.TypedValue; -import com.powsybl.iidm.network.*; +import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.TwoWindingsTransformer; import org.apache.commons.lang3.StringUtils; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.FilterEquipments; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.*; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.ModificationUtils; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; @@ -29,6 +32,8 @@ import java.util.UUID; import java.util.stream.Collectors; +import static org.gridsuite.modification.server.dto.byfilter.equipmentfield.FieldUtils.getFieldValue; +import static org.gridsuite.modification.server.dto.byfilter.equipmentfield.FieldUtils.setFieldValue; import static org.gridsuite.modification.server.modifications.ModificationUtils.*; /** @@ -43,7 +48,8 @@ public abstract class AbstractByFilterModification extends AbstractModification public static final String VALUE_KEY_EQUIPMENT_IDS = "equipmentIds"; public static final String VALUE_KEY_NB_CHANGED = "nbChanged"; public static final String VALUE_KEY_NB_UNCHANGED = "nbUnchanged"; - public static final String VALUE_KEY_VALUE = "value"; + public static final String VALUE_KEY_OLD_VALUE = "oldValue"; + public static final String VALUE_KEY_NEW_VALUE = "newValue"; public static final String VALUE_KEY_MODIFICATION_TYPE_LABEL = "modificationTypeLabel"; public static final String VALUE_KEY_ERROR_MESSAGE = "errorMessage"; public static final String REPORT_KEY_RATIO_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR = "ratioTapChangerEquipmentModifiedError"; @@ -94,22 +100,14 @@ protected abstract boolean preCheckValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List reports, List notEditableEquipments); - protected abstract T getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos); + protected abstract String getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos); - protected T applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + protected String applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { // get new value - T newValue = getNewValue(equipment, modificationByFilterInfos); + String newValue = getNewValue(equipment, modificationByFilterInfos); // set new value for the equipment - switch (equipment.getType()) { - case GENERATOR -> GeneratorField.setNewValue((Generator) equipment, modificationByFilterInfos.getEditedField(), newValue); - case BATTERY -> BatteryField.setNewValue((Battery) equipment, modificationByFilterInfos.getEditedField(), newValue); - case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) equipment, modificationByFilterInfos.getEditedField(), newValue); - case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) equipment, modificationByFilterInfos.getEditedField(), newValue); - case LOAD -> LoadField.setNewValue((Load) equipment, modificationByFilterInfos.getEditedField(), newValue); - case TWO_WINDINGS_TRANSFORMER -> TwoWindingsTransformerField.setNewValue((TwoWindingsTransformer) equipment, modificationByFilterInfos.getEditedField(), newValue); - default -> throw new NetworkModificationException(getExceptionType(), "Unsupported equipment"); - } + setFieldValue(equipment, modificationByFilterInfos.getEditedField(), newValue); return newValue; } @@ -291,14 +289,17 @@ private void applyModification(Identifiable equipment, // perform to apply new value try { - final Object newValue = applyValue(equipment, modificationByFilterInfos); + final String oldValue = getFieldValue(equipment, modificationByFilterInfos.getEditedField()); + final String newValue = applyValue(equipment, modificationByFilterInfos); reports.add(ReportNode.newRootReportNode() .withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_REPORT, - " ${" + VALUE_KEY_EQUIPMENT_TYPE + "} id : ${" + VALUE_KEY_EQUIPMENT_NAME + "}, new value of ${" + VALUE_KEY_FIELD_NAME + "} : ${" + VALUE_KEY_VALUE + "}") + " ${" + VALUE_KEY_EQUIPMENT_TYPE + "} id : ${" + VALUE_KEY_EQUIPMENT_NAME + + "}, new value of ${" + VALUE_KEY_FIELD_NAME + "} : ${" + VALUE_KEY_OLD_VALUE + "} -> ${" + VALUE_KEY_NEW_VALUE + "}") .withUntypedValue(VALUE_KEY_EQUIPMENT_TYPE, equipment.getType().name()) .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) .withUntypedValue(VALUE_KEY_FIELD_NAME, getEditedFieldLabel(modificationByFilterInfos)) - .withUntypedValue(VALUE_KEY_VALUE, String.valueOf(newValue)) + .withUntypedValue(VALUE_KEY_OLD_VALUE, oldValue) + .withUntypedValue(VALUE_KEY_NEW_VALUE, newValue) .withSeverity(TypedValue.TRACE_SEVERITY) .build()); } catch (Exception e) { @@ -311,6 +312,7 @@ private void applyModification(Identifiable equipment, .withUntypedValue(VALUE_KEY_ERROR_MESSAGE, e.getMessage()) .withSeverity(TypedValue.TRACE_SEVERITY) .build()); + throw e; } } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java index 839b4c4b8..67c92c38f 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java @@ -85,11 +85,11 @@ protected boolean preCheckValue(Identifiable equipment, AbstractModificationB } @Override - protected T getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + protected String getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { FormulaInfos formulaInfos = (FormulaInfos) modificationByFilterInfos; Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(equipment); Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(equipment); - return (T) applyOperation(formulaInfos.getOperator(), value1, value2); + return applyOperation(formulaInfos.getOperator(), value1, value2).toString(); } private Double applyOperation(Operator operator, @Nonnull Double value1, @Nonnull Double value2) { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index fb9d410e3..f0e5c2e9e 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -65,17 +65,17 @@ protected boolean preCheckValue(Identifiable equipment, AbstractModificationB } @Override - protected T getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { - AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; - return simpleModificationInfos.getValue(); + protected String getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; + return simpleModificationInfos.getValue().toString(); } @Override - protected T applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { - AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; + protected String applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { - T newValue = getNewValue(equipment, modificationByFilterInfos); - equipment.setProperty(((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName(), (String) newValue); + String newValue = getNewValue(equipment, modificationByFilterInfos); + equipment.setProperty(((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName(), newValue); return newValue; } else { return super.applyValue(equipment, modificationByFilterInfos); From d2ed37c0239678ed13693010bcdea48bf081fef7 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 5 Sep 2024 16:04:19 +0200 Subject: [PATCH 19/42] NPE with property --- .../byfilter/AbstractByFilterModification.java | 10 +++++++--- .../modifications/byfilter/BySimpleModification.java | 10 ++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java index 3533ad730..151a1d711 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -102,6 +102,10 @@ protected abstract boolean preCheckValue(Identifiable equipment, protected abstract String getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos); + protected String getOldValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + return getFieldValue(equipment, modificationByFilterInfos.getEditedField()); + } + protected String applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { // get new value String newValue = getNewValue(equipment, modificationByFilterInfos); @@ -289,16 +293,16 @@ private void applyModification(Identifiable equipment, // perform to apply new value try { - final String oldValue = getFieldValue(equipment, modificationByFilterInfos.getEditedField()); + final String oldValue = getOldValue(equipment, modificationByFilterInfos); final String newValue = applyValue(equipment, modificationByFilterInfos); reports.add(ReportNode.newRootReportNode() .withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_REPORT, " ${" + VALUE_KEY_EQUIPMENT_TYPE + "} id : ${" + VALUE_KEY_EQUIPMENT_NAME + - "}, new value of ${" + VALUE_KEY_FIELD_NAME + "} : ${" + VALUE_KEY_OLD_VALUE + "} -> ${" + VALUE_KEY_NEW_VALUE + "}") + "}, ${" + VALUE_KEY_FIELD_NAME + "} : ${" + VALUE_KEY_OLD_VALUE + "} → ${" + VALUE_KEY_NEW_VALUE + "}") .withUntypedValue(VALUE_KEY_EQUIPMENT_TYPE, equipment.getType().name()) .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) .withUntypedValue(VALUE_KEY_FIELD_NAME, getEditedFieldLabel(modificationByFilterInfos)) - .withUntypedValue(VALUE_KEY_OLD_VALUE, oldValue) + .withUntypedValue(VALUE_KEY_OLD_VALUE, oldValue == null ? NO_VALUE : oldValue) .withUntypedValue(VALUE_KEY_NEW_VALUE, newValue) .withSeverity(TypedValue.TRACE_SEVERITY) .build()); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index f0e5c2e9e..4fc837ac8 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -64,6 +64,16 @@ protected boolean preCheckValue(Identifiable equipment, AbstractModificationB return true; } + @Override + protected String getOldValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; + if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { + return equipment.getProperty(((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName()); + } else { + return super.getOldValue(equipment, modificationByFilterInfos); + } + } + @Override protected String getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; From 097f1fe47898c687692f682b45fb8f72fd77326b Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 5 Sep 2024 23:25:28 +0200 Subject: [PATCH 20/42] Tests --- .../byfilter/equipmentfield/FieldUtils.java | 10 + .../NetworkModificationApplicator.java | 4 +- .../AbstractByFormulaModificationTest.java | 7 +- .../BatteryByFormulaModificationTest.java | 2 +- .../GeneratorByFormulaModificationTest.java | 2 +- .../LoadByFormulaModificationTest.java | 2 +- ...tCompensatorByFormulaModificationTest.java | 2 +- ...sTransformerByFormulaModificationTest.java | 2 +- ...VoltageLevelByFormulaModificationTest.java | 2 +- .../AbstractBySimpleModificationTest.java | 264 +++++++++++ .../GeneratorBySimpleModificationTest.java | 448 ++++++++++++++++++ .../simple/LoadBySimpleModificationTest.java | 126 +++++ 12 files changed, 860 insertions(+), 11 deletions(-) rename src/test/java/org/gridsuite/modification/server/modifications/{ => byfilter/formula}/AbstractByFormulaModificationTest.java (98%) rename src/test/java/org/gridsuite/modification/server/modifications/{ => byfilter/formula}/BatteryByFormulaModificationTest.java (99%) rename src/test/java/org/gridsuite/modification/server/modifications/{ => byfilter/formula}/GeneratorByFormulaModificationTest.java (99%) rename src/test/java/org/gridsuite/modification/server/modifications/{ => byfilter/formula}/LoadByFormulaModificationTest.java (98%) rename src/test/java/org/gridsuite/modification/server/modifications/{ => byfilter/formula}/ShuntCompensatorByFormulaModificationTest.java (99%) rename src/test/java/org/gridsuite/modification/server/modifications/{ => byfilter/formula}/TwoWindingsTransformerByFormulaModificationTest.java (99%) rename src/test/java/org/gridsuite/modification/server/modifications/{ => byfilter/formula}/VoltageLevelByFormulaModificationTest.java (99%) create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/FieldUtils.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/FieldUtils.java index 3faa48f35..66e924caf 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/FieldUtils.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/FieldUtils.java @@ -1,3 +1,10 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + package org.gridsuite.modification.server.dto.byfilter.equipmentfield; import com.powsybl.iidm.network.*; @@ -5,6 +12,9 @@ import javax.annotation.Nullable; +/** + * @author Thang PHAM + */ public final class FieldUtils { private FieldUtils() { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java index 5b50d029e..5eacf7883 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java @@ -198,9 +198,9 @@ private void apply(AbstractModification modification, Network network, ReportNod private void handleException(NetworkModificationException.Type typeIfError, ReportNode subReportNode, Exception e) { boolean isApplicationException = PowsyblException.class.isAssignableFrom(e.getClass()); - if (!isApplicationException && LOGGER.isErrorEnabled()) { + //if (!isApplicationException /*&& LOGGER.isErrorEnabled()*/) { LOGGER.error(e.toString(), e); - } + //} String errorMessage = isApplicationException ? e.getMessage() : "Technical error: " + e; subReportNode.newReportNode() diff --git a/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java similarity index 98% rename from src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java index f76234b2f..355ed6f17 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications; +package org.gridsuite.modification.server.modifications.byfilter.formula; import com.fasterxml.jackson.core.type.TypeReference; import com.github.tomakehurst.wiremock.client.WireMock; @@ -23,6 +23,7 @@ import org.gridsuite.modification.server.dto.byfilter.formula.Operator; import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; +import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.service.FilterService; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.Before; @@ -264,8 +265,8 @@ Map handleQueryParams(List filterIds) { return Map.of("ids", WireMock.matching(filterIds.stream().map(uuid -> ".+").collect(Collectors.joining(",")))); } - String getPath(boolean isRegexPhat) { - if (isRegexPhat) { + String getPath(boolean isRegexPath) { + if (isRegexPath) { return "/v1/filters/metadata\\?ids="; } return "/v1/filters/metadata?ids="; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BatteryByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/BatteryByFormulaModificationTest.java similarity index 99% rename from src/test/java/org/gridsuite/modification/server/modifications/BatteryByFormulaModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/BatteryByFormulaModificationTest.java index 7027c79a6..34eb4f325 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/BatteryByFormulaModificationTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications; +package org.gridsuite.modification.server.modifications.byfilter.formula; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.extensions.ActivePowerControl; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/GeneratorByFormulaModificationTest.java similarity index 99% rename from src/test/java/org/gridsuite/modification/server/modifications/GeneratorByFormulaModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/GeneratorByFormulaModificationTest.java index 7de03ea24..332750b0a 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/GeneratorByFormulaModificationTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications; +package org.gridsuite.modification.server.modifications.byfilter.formula; import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.IdentifiableType; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/LoadByFormulaModificationTest.java similarity index 98% rename from src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/LoadByFormulaModificationTest.java index c6915176c..c3c5f1aac 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/LoadByFormulaModificationTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications; +package org.gridsuite.modification.server.modifications.byfilter.formula; import com.powsybl.iidm.network.IdentifiableType; import org.gridsuite.filter.AbstractFilter; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/ShuntCompensatorByFormulaModificationTest.java similarity index 99% rename from src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorByFormulaModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/ShuntCompensatorByFormulaModificationTest.java index de45eb2e5..215c528b6 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/ShuntCompensatorByFormulaModificationTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications; +package org.gridsuite.modification.server.modifications.byfilter.formula; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.ShuntCompensator; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/TwoWindingsTransformerByFormulaModificationTest.java similarity index 99% rename from src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerByFormulaModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/TwoWindingsTransformerByFormulaModificationTest.java index 2e7ba50b4..9a629984a 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/TwoWindingsTransformerByFormulaModificationTest.java @@ -1,4 +1,4 @@ -package org.gridsuite.modification.server.modifications; +package org.gridsuite.modification.server.modifications.byfilter.formula; import com.github.tomakehurst.wiremock.client.WireMock; import com.powsybl.iidm.network.IdentifiableType; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/VoltageLevelByFormulaModificationTest.java similarity index 99% rename from src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/VoltageLevelByFormulaModificationTest.java index 76bc38bc7..e1f7ab3eb 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/VoltageLevelByFormulaModificationTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications; +package org.gridsuite.modification.server.modifications.byfilter.formula; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.TopologyKind; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java new file mode 100644 index 000000000..6219b8c86 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java @@ -0,0 +1,264 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter.simple; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.github.tomakehurst.wiremock.client.WireMock; +import com.github.tomakehurst.wiremock.matching.StringValuePattern; +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.Network; +import org.gridsuite.filter.AbstractFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; +import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.server.dto.BySimpleModificationInfos; +import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.NetworkModificationResult; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.impacts.AbstractBaseImpact; +import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; +import org.gridsuite.modification.server.service.FilterService; +import org.gridsuite.modification.server.utils.NetworkCreation; +import org.junit.Before; +import org.junit.Test; +import org.junit.jupiter.api.Tag; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MvcResult; + +import java.util.*; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.gridsuite.modification.server.Impacts.TestImpactUtils.createCollectionElementImpact; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * @author Thang PHAM + */ +@Tag("IntegrationTest") +public abstract class AbstractBySimpleModificationTest extends AbstractNetworkModificationTest { + protected static final UUID FILTER_ID_1 = UUID.randomUUID(); + protected static final UUID FILTER_ID_2 = UUID.randomUUID(); + protected static final UUID FILTER_ID_3 = UUID.randomUUID(); + protected static final UUID FILTER_ID_4 = UUID.randomUUID(); + protected static final UUID FILTER_ID_5 = UUID.randomUUID(); + protected static final UUID FILTER_ID_6 = UUID.randomUUID(); + protected static final UUID FILTER_WITH_ALL_WRONG_IDS = UUID.randomUUID(); + protected static final UUID FILTER_WITH_ONE_WRONG_ID = UUID.randomUUID(); + protected final FilterInfos filter1 = new FilterInfos(FILTER_ID_1, "filter1"); + protected final FilterInfos filter2 = new FilterInfos(FILTER_ID_2, "filter2"); + protected final FilterInfos filter3 = new FilterInfos(FILTER_ID_3, "filter3"); + protected final FilterInfos filter4 = new FilterInfos(FILTER_ID_4, "filter4"); + protected final FilterInfos filter5 = new FilterInfos(FILTER_ID_5, "filter5"); + protected final FilterInfos filter6 = new FilterInfos(FILTER_ID_6, "filter6"); + protected final FilterInfos filterWithOneWrongId = new FilterInfos(FILTER_WITH_ONE_WRONG_ID, "filterWithOneWrongId"); + + public static final String PATH = "/v1/filters/metadata"; + + @Override + protected void assertResultImpacts(List impacts) { + assertThat(impacts).containsExactly(createCollectionElementImpact(getIdentifiableType())); + } + + @Before + public void specificSetUp() { + FilterService.setFilterServerBaseUri(wireMockServer.baseUrl()); + + getNetwork().getVariantManager().setWorkingVariant("variant_1"); + createEquipments(); + } + + @Test + public void testByModificationError() throws Exception { + //Test with modification = null + mockMvc.perform(post(getNetworkModificationUri()).content(mapper.writeValueAsString(null)).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + + // Test with empty list of simple modification + checkCreationApplicationStatus(BySimpleModificationInfos.builder().equipmentType(getIdentifiableType()).simpleModificationInfosList(List.of()).build(), + NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + + // Test with empty list of filters in simple modification + List> simpleInfosWithNoFilters = getSimpleModificationInfos().stream().peek(simpleInfos -> simpleInfos.setFilters(List.of())).toList(); + checkCreationApplicationStatus(BySimpleModificationInfos.builder().equipmentType(getIdentifiableType()).simpleModificationInfosList(simpleInfosWithNoFilters).build(), + NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + + // Test with editedField = null + AbstractSimpleModificationByFilterInfos simpleInfosWithNoEditedField = DoubleModificationByFilterInfos.builder() + .value(50.) + .filters(List.of()) + .build(); + checkCreationApplicationStatus(BySimpleModificationInfos.builder().equipmentType(getIdentifiableType()).simpleModificationInfosList(List.of(simpleInfosWithNoEditedField)).build(), + NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + } + + protected void checkCreateWithWarning(List> simpleInfos, List existingEquipmentList) throws Exception { + AbstractFilter filter = getFilterEquipments(FILTER_WITH_ONE_WRONG_ID, existingEquipmentList); + + UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching("/v1/filters/metadata\\?ids=" + FILTER_WITH_ONE_WRONG_ID)) + .willReturn(WireMock.ok() + .withBody(mapper.writeValueAsString(List.of(filter))) + .withHeader("Content-Type", "application/json"))).getId(); + + BySimpleModificationInfos bySimpleModificationInfos = BySimpleModificationInfos.builder() + .simpleModificationInfosList(simpleInfos) + .equipmentType(getIdentifiableType()) + .build(); + + checkCreationApplicationStatus(bySimpleModificationInfos, NetworkModificationResult.ApplicationStatus.WITH_WARNINGS); + + wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(List.of(FILTER_WITH_ONE_WRONG_ID)), false); + } + + protected void checkCreateWithError(List> simpleInfos, List filterEquipments) throws Exception { + String filterIds = filterEquipments.stream() + .map(AbstractFilter::getId) + .map(UUID::toString) + .collect(Collectors.joining(",")); + + UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching("/v1/filters/metadata\\?ids=" + filterIds)) + .willReturn(WireMock.ok() + .withBody(mapper.writeValueAsString(filterEquipments)) + .withHeader("Content-Type", "application/json"))).getId(); + + BySimpleModificationInfos bySimpleModificationInfos = BySimpleModificationInfos.builder() + .simpleModificationInfosList(simpleInfos) + .equipmentType(getIdentifiableType()) + .build(); + + checkCreationApplicationStatus(bySimpleModificationInfos, NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + + wireMockUtils.verifyGetRequest(stubId, + PATH, + handleQueryParams(filterEquipments.stream().map(AbstractFilter::getId).collect(Collectors.toList())), + false); + } + + @Test + public void testModificationWithAllWrongEquipmentIds() throws Exception { + AbstractFilter filter = getFilterEquipments(FILTER_WITH_ALL_WRONG_IDS, List.of()); + + List> simpleInfosList = getSimpleModificationInfos().stream() + .peek(simpleInfos -> simpleInfos.setFilters(List.of(new FilterInfos(FILTER_WITH_ALL_WRONG_IDS, "filterWithWrongId")))) + .toList(); + + UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching("/v1/filters/metadata\\?ids=" + FILTER_WITH_ALL_WRONG_IDS)) + .willReturn(WireMock.ok() + .withBody(mapper.writeValueAsString(List.of(filter))) + .withHeader("Content-Type", "application/json"))).getId(); + + BySimpleModificationInfos bySimpleModificationInfos = BySimpleModificationInfos.builder() + .simpleModificationInfosList(simpleInfosList) + .equipmentType(getIdentifiableType()) + .build(); + + checkCreationApplicationStatus(bySimpleModificationInfos, NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + + wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(List.of(FILTER_WITH_ALL_WRONG_IDS)), false); + } + + @Test + @Override + public void testCreate() throws Exception { + List filters = getTestFilters(); + UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching(getPath(true) + ".{2,}")) + .willReturn(WireMock.ok() + .withBody(mapper.writeValueAsString(filters)) + .withHeader("Content-Type", "application/json"))).getId(); + + super.testCreate(); + + wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(filters.stream().map(AbstractFilter::getId).collect(Collectors.toList())), false); + } + + @Test + @Override + public void testCopy() throws Exception { + List filters = getTestFilters(); + UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching(getPath(true) + ".{2,}")) + .willReturn(WireMock.ok() + .withBody(mapper.writeValueAsString(filters)) + .withHeader("Content-Type", "application/json"))).getId(); + + super.testCopy(); + + wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(filters.stream().map(AbstractFilter::getId).collect(Collectors.toList())), false); + } + + protected void checkCreationApplicationStatus(BySimpleModificationInfos bySimpleModificationInfos, + NetworkModificationResult.ApplicationStatus applicationStatus) throws Exception { + String modificationToCreateJson = mapper.writeValueAsString(bySimpleModificationInfos); + + MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()).andReturn(); + + Optional networkModificationResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); + assertTrue(networkModificationResult.isPresent()); + assertEquals(applicationStatus, networkModificationResult.get().getApplicationStatus()); + } + + @Override + protected Network createNetwork(UUID networkUuid) { + return NetworkCreation.create(networkUuid, true); + } + + @Override + protected BySimpleModificationInfos buildModification() { + return BySimpleModificationInfos.builder() + .equipmentType(getIdentifiableType()) + .simpleModificationInfosList(getSimpleModificationInfos()) + .stashed(false) + .build(); + } + + @Override + protected BySimpleModificationInfos buildModificationUpdate() { + return BySimpleModificationInfos.builder() + .equipmentType(getIdentifiableType()) + .simpleModificationInfosList(getUpdatedSimpleModificationInfos()) + .stashed(false) + .build(); + } + + protected IdentifierListFilterEquipmentAttributes getIdentifiableAttributes(String id, Double distributionKey) { + return new IdentifierListFilterEquipmentAttributes(id, distributionKey); + } + + protected AbstractFilter getFilterEquipments(UUID filterID, List identifiableAttributes) { + return IdentifierListFilter.builder().id(filterID).modificationDate(new Date()).equipmentType(getEquipmentType()) + .filterEquipmentsAttributes(identifiableAttributes) + .build(); + } + + Map handleQueryParams(List filterIds) { + return Map.of("ids", WireMock.matching(filterIds.stream().map(uuid -> ".+").collect(Collectors.joining(",")))); + } + + String getPath(boolean isRegexPath) { + if (isRegexPath) { + return "/v1/filters/metadata\\?ids="; + } + return "/v1/filters/metadata?ids="; + } + + protected abstract void createEquipments(); + + protected abstract List getTestFilters(); + + protected abstract List> getSimpleModificationInfos(); + + protected abstract List> getUpdatedSimpleModificationInfos(); + + protected abstract IdentifiableType getIdentifiableType(); + + protected abstract EquipmentType getEquipmentType(); +} diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java new file mode 100644 index 000000000..5a6580ce4 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java @@ -0,0 +1,448 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter.simple; + +import com.powsybl.iidm.network.Generator; +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.extensions.*; +import org.gridsuite.filter.AbstractFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; +import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.GeneratorField; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.BooleanModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.junit.Test; +import org.junit.jupiter.api.Tag; + +import java.util.Date; +import java.util.List; + +import static org.gridsuite.modification.server.utils.NetworkUtil.createGenerator; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +/** + * @author Thang PHAM + */ +@Tag("IntegrationTest") +public class GeneratorBySimpleModificationTest extends AbstractBySimpleModificationTest { + private static final String GENERATOR_ID_1 = "idGenerator"; + private static final String GENERATOR_ID_2 = "v5generator"; + private static final String GENERATOR_ID_3 = "v6generator"; + private static final String GENERATOR_ID_4 = "gen4"; + private static final String GENERATOR_ID_5 = "gen5"; + private static final String GENERATOR_ID_6 = "gen6"; + private static final String GENERATOR_ID_7 = "gen7"; + private static final String GENERATOR_ID_8 = "gen8"; + private static final String GENERATOR_ID_9 = "gen9"; + private static final String GENERATOR_ID_10 = "gen10"; + + @Test + public void testCreateWithWarning() throws Exception { + IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(GENERATOR_ID_1, 1.0); + IdentifierListFilterEquipmentAttributes wrongIdAttributes = getIdentifiableAttributes("wrongId", 1.0); + + DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + .filters(List.of(filterWithOneWrongId)) + .editedField(GeneratorField.ACTIVE_POWER_SET_POINT.name()) + .value(55.) + .build(); + + checkCreateWithWarning(List.of(simpleInfos), List.of(identifiableAttributes, wrongIdAttributes)); + assertEquals(55, getNetwork().getGenerator(GENERATOR_ID_1).getTargetP(), 0); + } + + @Test + public void testWithNullValue() throws Exception { + IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(GENERATOR_ID_1, 1.0); + AbstractFilter filterEquipments = getFilterEquipments(FILTER_ID_1, List.of(identifiableAttributes)); + + DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + .filters(List.of(new FilterInfos(FILTER_ID_1, "filter1"))) + .editedField(GeneratorField.ACTIVE_POWER_SET_POINT.name()) + .value(null) + .build(); + + checkCreateWithError(List.of(simpleInfos), List.of(filterEquipments)); + } + + protected void createEquipments() { + getNetwork().getGenerator(GENERATOR_ID_1) + .setTargetP(100) + .setMaxP(500) + .setMinP(0) + .setTargetV(10) + .setTargetQ(20) + .newExtension(GeneratorStartupAdder.class) + .withMarginalCost(30.) + .withPlannedOutageRate(25.) + .withPlannedActivePowerSetpoint(40.) + .withForcedOutageRate(55.) + .add(); + + getNetwork().getGenerator(GENERATOR_ID_2) + .setTargetP(200) + .setMaxP(2000) + .setMinP(50) + .setTargetV(10) + .setTargetQ(20) + .newExtension(GeneratorStartupAdder.class) + .withMarginalCost(30.) + .withPlannedOutageRate(25.) + .withPlannedActivePowerSetpoint(40.) + .withForcedOutageRate(55.) + .add(); + + getNetwork().getGenerator(GENERATOR_ID_3) + .setTargetP(300) + .setMaxP(2000) + .setMinP(70) + .newExtension(GeneratorShortCircuitAdder.class) + .withDirectTransX(40.) + .withStepUpTransformerX(38.) + .add(); + + createGenerator(getNetwork().getVoltageLevel("v1"), GENERATOR_ID_4, 3, 400, 1.0, "cn10", 11, ConnectablePosition.Direction.TOP, 700, 110); + getNetwork().getGenerator(GENERATOR_ID_4) + .newExtension(GeneratorShortCircuitAdder.class) + .withDirectTransX(46.) + .withStepUpTransformerX(50.) + .add(); + + createGenerator(getNetwork().getVoltageLevel("v1"), GENERATOR_ID_5, 20, 200, 1.0, "cn10", 12, ConnectablePosition.Direction.TOP, 2000, 50); + getNetwork().getGenerator(GENERATOR_ID_5).newExtension(ActivePowerControlAdder.class).withDroop(2).add(); + + createGenerator(getNetwork().getVoltageLevel("v2"), GENERATOR_ID_6, 11, 100, 1.0, "cn10", 13, ConnectablePosition.Direction.TOP, 500, 20); + getNetwork().getGenerator(GENERATOR_ID_6).newExtension(ActivePowerControlAdder.class).withDroop(3).add(); + + createGenerator(getNetwork().getVoltageLevel("v6"), GENERATOR_ID_7, 10, 200, 1.0, "cn10", 14, ConnectablePosition.Direction.TOP, 2000, 50); + getNetwork().getGenerator(GENERATOR_ID_7).newExtension(CoordinatedReactiveControlAdder.class) + .withQPercent(6) + .add(); + getNetwork().getGenerator(GENERATOR_ID_7).newExtension(GeneratorStartupAdder.class).withMarginalCost(50).add(); + + createGenerator(getNetwork().getVoltageLevel("v3"), GENERATOR_ID_8, 10, 100, 1.0, "cn10", 15, ConnectablePosition.Direction.TOP, 500, 20); + getNetwork().getGenerator(GENERATOR_ID_8).newExtension(CoordinatedReactiveControlAdder.class) + .withQPercent(12) + .add(); + getNetwork().getGenerator(GENERATOR_ID_8).newExtension(GeneratorStartupAdder.class).withMarginalCost(60).add(); + + createGenerator(getNetwork().getVoltageLevel("v4"), GENERATOR_ID_9, 10, 200, 1.0, "cn10", 16, ConnectablePosition.Direction.TOP, 2000, 50); + getNetwork().getGenerator(GENERATOR_ID_9).setRatedS(60.); + + createGenerator(getNetwork().getVoltageLevel("v5"), GENERATOR_ID_10, 10, 100, 1.0, "cn10", 17, ConnectablePosition.Direction.TOP, 500, 20); + getNetwork().getGenerator(GENERATOR_ID_10).setRatedS(30.); + } + + protected List getTestFilters() { + IdentifierListFilter filter1 = IdentifierListFilter.builder().id(FILTER_ID_1).modificationDate(new Date()).equipmentType(EquipmentType.GENERATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_1, 1.0), + new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_2, 2.0))) + .build(); + IdentifierListFilter filter2 = IdentifierListFilter.builder().id(FILTER_ID_2).modificationDate(new Date()).equipmentType(EquipmentType.GENERATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_3, 2.0), + new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_4, 5.0))) + .build(); + IdentifierListFilter filter3 = IdentifierListFilter.builder().id(FILTER_ID_3).modificationDate(new Date()).equipmentType(EquipmentType.GENERATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_5, 6.0), + new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_6, 7.0))) + .build(); + IdentifierListFilter filter4 = IdentifierListFilter.builder().id(FILTER_ID_4).modificationDate(new Date()).equipmentType(EquipmentType.GENERATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_7, 3.0), + new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_8, 8.0))) + .build(); + IdentifierListFilter filter5 = IdentifierListFilter.builder().id(FILTER_ID_5).modificationDate(new Date()).equipmentType(EquipmentType.GENERATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_9, 0.0), + new IdentifierListFilterEquipmentAttributes(GENERATOR_ID_10, 9.0))) + .build(); + + return List.of(filter1, filter2, filter3, filter4, filter5); + } + + @Override + protected List> getSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.REACTIVE_POWER_SET_POINT.name()) + .value(50.) + .filters(List.of(filter1, filter2)) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.DROOP.name()) + .value(2.) + .filters(List.of(filter3)) + .build(); + + DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.RATED_NOMINAL_POWER.name()) + .value(2.) + .filters(List.of(filter5)) + .build(); + + DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.MARGINAL_COST.name()) + .value(2.) + .filters(List.of(filter1)) + .build(); + + DoubleModificationByFilterInfos simpleInfos5 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.VOLTAGE_SET_POINT.name()) + .value(2.) + .filters(List.of(filter4)) + .build(); + + DoubleModificationByFilterInfos simpleInfos6 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.PLANNED_ACTIVE_POWER_SET_POINT.name()) + .value(10.) + .filters(List.of(filter1)) + .build(); + + DoubleModificationByFilterInfos simpleInfos7 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.MINIMUM_ACTIVE_POWER.name()) + .value(2.) + .filters(List.of(filter1, filter2)) + .build(); + + DoubleModificationByFilterInfos simpleInfos8 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.PLANNED_OUTAGE_RATE.name()) + .value(0.1) + .filters(List.of(filter1)) + .build(); + + DoubleModificationByFilterInfos simpleInfos9 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.FORCED_OUTAGE_RATE.name()) + .value(0.05) + .filters(List.of(filter1)) + .build(); + + DoubleModificationByFilterInfos simpleInfos10 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.MAXIMUM_ACTIVE_POWER.name()) + .value(50.) + .filters(List.of(filter1, filter2, filter3, filter4, filter5)) + .build(); + + DoubleModificationByFilterInfos simpleInfos11 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.TRANSIENT_REACTANCE.name()) + .value(0.2) + .filters(List.of(filter2)) + .build(); + + DoubleModificationByFilterInfos simpleInfos12 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.STEP_UP_TRANSFORMER_REACTANCE.name()) + .value(0.3) + .filters(List.of(filter2)) + .build(); + + DoubleModificationByFilterInfos simpleInfos13 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.Q_PERCENT.name()) + .value(0.25) + .filters(List.of(filter4)) + .build(); + + BooleanModificationByFilterInfos simpleInfos14 = BooleanModificationByFilterInfos.builder() + .editedField(GeneratorField.VOLTAGE_REGULATOR_ON.name()) + .value(true) + .filters(List.of(filter1)) + .build(); + + return List.of(simpleInfos1, + simpleInfos2, + simpleInfos3, + simpleInfos4, + simpleInfos5, + simpleInfos6, + simpleInfos7, + simpleInfos8, + simpleInfos9, + simpleInfos10, + simpleInfos11, + simpleInfos12, + simpleInfos13, + simpleInfos14 + ); + } + + @Override + protected List> getUpdatedSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.REACTIVE_POWER_SET_POINT.name()) + .value(2.) + .filters(List.of(filter1, filter2)) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .editedField(GeneratorField.MINIMUM_ACTIVE_POWER.name()) + .value(0.5) + .filters(List.of(filter3)) + .build(); + + return List.of(simpleInfos1, simpleInfos2); + } + + @Override + protected void assertAfterNetworkModificationCreation() { + Generator generator1 = getNetwork().getGenerator(GENERATOR_ID_1); + GeneratorStartup generatorStartup1 = generator1.getExtension(GeneratorStartup.class); + assertNotNull(generatorStartup1); + assertEquals(100, generator1.getTargetP(), 0); + assertEquals(2, generatorStartup1.getMarginalCost(), 0); + assertEquals(55, generatorStartup1.getPlannedOutageRate(), 0); + assertEquals(0.05, generatorStartup1.getForcedOutageRate(), 0); + assertEquals(10, generatorStartup1.getPlannedActivePowerSetpoint(), 0); + assertEquals(50, generator1.getMaxP(), 0); + assertEquals(2, generator1.getMinP(), 0); + assertEquals(true, generator1.isVoltageRegulatorOn()); + + Generator generator2 = getNetwork().getGenerator(GENERATOR_ID_2); + GeneratorStartup generatorStartup2 = generator2.getExtension(GeneratorStartup.class); + assertNotNull(generatorStartup2); + assertEquals(200, generator2.getTargetP(), 0); + assertEquals(2, generatorStartup2.getMarginalCost(), 0); + assertEquals(55, generatorStartup2.getPlannedOutageRate(), 0); + assertEquals(0.05, generatorStartup2.getForcedOutageRate(), 0); + assertEquals(10, generatorStartup2.getPlannedActivePowerSetpoint(), 0); + assertEquals(50, generator2.getMaxP(), 0); + assertEquals(2, generator2.getMinP(), 0); + + Generator generator3 = getNetwork().getGenerator(GENERATOR_ID_3); + GeneratorShortCircuit generatorShortCircuit3 = generator3.getExtension(GeneratorShortCircuit.class); + assertNotNull(generatorShortCircuit3); + assertEquals(300, generator3.getTargetP(), 0); + assertEquals(0.2, generatorShortCircuit3.getDirectTransX(), 0); + assertEquals(0.3, generatorShortCircuit3.getStepUpTransformerX(), 0); + assertEquals(50, generator3.getMaxP(), 0); + assertEquals(2, generator3.getMinP(), 0); + + Generator generator4 = getNetwork().getGenerator(GENERATOR_ID_4); + GeneratorShortCircuit generatorShortCircuit4 = generator4.getExtension(GeneratorShortCircuit.class); + assertNotNull(generatorShortCircuit4); + assertEquals(0.2, generatorShortCircuit4.getDirectTransX(), 0); + assertEquals(0.3, generatorShortCircuit4.getStepUpTransformerX(), 0); + assertEquals(400, generator4.getTargetP(), 0); + assertEquals(50, generator4.getMaxP(), 0); + assertEquals(2, generator4.getMinP(), 0); + + Generator generator5 = getNetwork().getGenerator(GENERATOR_ID_5); + ActivePowerControl activePowerControl5 = generator5.getExtension(ActivePowerControl.class); + assertNotNull(activePowerControl5); + assertEquals(50, generator5.getMaxP(), 0); + assertEquals(2, activePowerControl5.getDroop(), 0); + + Generator generator6 = getNetwork().getGenerator(GENERATOR_ID_6); + ActivePowerControl activePowerControl6 = generator6.getExtension(ActivePowerControl.class); + assertNotNull(activePowerControl6); + assertEquals(50, generator6.getMaxP(), 0); + assertEquals(2, activePowerControl6.getDroop(), 0); + + Generator generator7 = getNetwork().getGenerator(GENERATOR_ID_7); + CoordinatedReactiveControl coordinatedReactiveControl7 = generator7.getExtension(CoordinatedReactiveControl.class); + assertNotNull(coordinatedReactiveControl7); + GeneratorStartup generatorStartup7 = generator7.getExtension(GeneratorStartup.class); + assertNotNull(generatorStartup7); + assertEquals(50, generatorStartup7.getMarginalCost(), 0); + assertEquals(0.25, coordinatedReactiveControl7.getQPercent(), 0); + + Generator generator8 = getNetwork().getGenerator(GENERATOR_ID_8); + CoordinatedReactiveControl coordinatedReactiveControl8 = generator8.getExtension(CoordinatedReactiveControl.class); + assertNotNull(coordinatedReactiveControl8); + GeneratorStartup generatorStartup8 = generator8.getExtension(GeneratorStartup.class); + assertNotNull(generatorStartup8); + assertEquals(60, generatorStartup8.getMarginalCost(), 0); + assertEquals(0.25, coordinatedReactiveControl8.getQPercent(), 0); + + assertEquals(2, getNetwork().getGenerator(GENERATOR_ID_9).getRatedS(), 0); + assertEquals(2, getNetwork().getGenerator(GENERATOR_ID_10).getRatedS(), 0); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + Generator generator1 = getNetwork().getGenerator(GENERATOR_ID_1); + GeneratorStartup generatorStartup1 = generator1.getExtension(GeneratorStartup.class); + assertNotNull(generatorStartup1); + assertEquals(100, generator1.getTargetP(), 0); + assertEquals(30, generatorStartup1.getMarginalCost(), 0); + assertEquals(25, generatorStartup1.getPlannedOutageRate(), 0); + assertEquals(55, generatorStartup1.getForcedOutageRate(), 0); + assertEquals(40, generatorStartup1.getPlannedActivePowerSetpoint(), 0); + assertEquals(500, generator1.getMaxP(), 0); + assertEquals(0, generator1.getMinP(), 0); + + Generator generator2 = getNetwork().getGenerator(GENERATOR_ID_2); + GeneratorStartup generatorStartup2 = generator2.getExtension(GeneratorStartup.class); + assertNotNull(generatorStartup2); + assertEquals(200, generator2.getTargetP(), 0); + assertEquals(30, generatorStartup2.getMarginalCost(), 0); + assertEquals(25, generatorStartup2.getPlannedOutageRate(), 0); + assertEquals(55, generatorStartup2.getForcedOutageRate(), 0); + assertEquals(40, generatorStartup2.getPlannedActivePowerSetpoint(), 0); + assertEquals(2000, generator2.getMaxP(), 0); + assertEquals(50, generator2.getMinP(), 0); + + Generator generator3 = getNetwork().getGenerator(GENERATOR_ID_3); + GeneratorShortCircuit generatorShortCircuit3 = generator3.getExtension(GeneratorShortCircuit.class); + assertNotNull(generatorShortCircuit3); + assertEquals(300, generator3.getTargetP(), 0); + assertEquals(40, generatorShortCircuit3.getDirectTransX(), 0); + assertEquals(38, generatorShortCircuit3.getStepUpTransformerX(), 0); + assertEquals(2000, generator3.getMaxP(), 0); + assertEquals(70, generator3.getMinP(), 0); + + Generator generator4 = getNetwork().getGenerator(GENERATOR_ID_4); + GeneratorShortCircuit generatorShortCircuit4 = generator4.getExtension(GeneratorShortCircuit.class); + assertNotNull(generatorShortCircuit4); + assertEquals(46, generatorShortCircuit4.getDirectTransX(), 0); + assertEquals(50, generatorShortCircuit4.getStepUpTransformerX(), 0); + assertEquals(400, generator4.getTargetP(), 0); + assertEquals(700, generator4.getMaxP(), 0); + assertEquals(110, generator4.getMinP(), 0); + + Generator generator5 = getNetwork().getGenerator(GENERATOR_ID_5); + ActivePowerControl activePowerControl5 = generator5.getExtension(ActivePowerControl.class); + assertNotNull(activePowerControl5); + assertEquals(2000, generator5.getMaxP(), 0); + assertEquals(2, activePowerControl5.getDroop(), 0); + + Generator generator6 = getNetwork().getGenerator(GENERATOR_ID_6); + ActivePowerControl activePowerControl6 = generator6.getExtension(ActivePowerControl.class); + assertNotNull(activePowerControl6); + assertEquals(500, generator6.getMaxP(), 0); + assertEquals(3, activePowerControl6.getDroop(), 0); + + Generator generator7 = getNetwork().getGenerator(GENERATOR_ID_7); + CoordinatedReactiveControl coordinatedReactiveControl7 = generator7.getExtension(CoordinatedReactiveControl.class); + assertNotNull(coordinatedReactiveControl7); + GeneratorStartup generatorStartup7 = generator7.getExtension(GeneratorStartup.class); + assertNotNull(generatorStartup7); + assertEquals(50, generatorStartup7.getMarginalCost(), 0); + assertEquals(6, coordinatedReactiveControl7.getQPercent(), 0); + + Generator generator8 = getNetwork().getGenerator(GENERATOR_ID_8); + CoordinatedReactiveControl coordinatedReactiveControl8 = generator8.getExtension(CoordinatedReactiveControl.class); + assertNotNull(coordinatedReactiveControl8); + GeneratorStartup generatorStartup8 = generator8.getExtension(GeneratorStartup.class); + assertNotNull(generatorStartup8); + assertEquals(60, generatorStartup8.getMarginalCost(), 0); + assertEquals(12, coordinatedReactiveControl8.getQPercent(), 0); + + assertEquals(60, getNetwork().getGenerator(GENERATOR_ID_9).getRatedS(), 0); + assertEquals(30, getNetwork().getGenerator(GENERATOR_ID_10).getRatedS(), 0); + } + + @Override + protected IdentifiableType getIdentifiableType() { + return IdentifiableType.GENERATOR; + } + + @Override + protected EquipmentType getEquipmentType() { + return EquipmentType.GENERATOR; + } +} diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java new file mode 100644 index 000000000..d7a58f10d --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java @@ -0,0 +1,126 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter.simple; + +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.LoadType; +import org.gridsuite.filter.AbstractFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; +import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.LoadField; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.EnumModificationByFilterInfos; +import org.gridsuite.modification.server.impacts.AbstractBaseImpact; + +import java.util.Date; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.gridsuite.modification.server.utils.NetworkUtil.createLoad; +import static org.junit.Assert.assertEquals; + +/** + * @author Thang PHAM + */ +public class LoadBySimpleModificationTest extends AbstractBySimpleModificationTest { + private static final String LOAD_ID_1 = "load1"; + private static final String LOAD_ID_2 = "load2"; + private static final String LOAD_ID_3 = "load3"; + private static final String LOAD_ID_4 = "load4"; + + @Override + protected void createEquipments() { + createLoad(getNetwork().getVoltageLevel("v1"), LOAD_ID_1, "load1", 100, 100, 120, null, 5, null); + createLoad(getNetwork().getVoltageLevel("v2"), LOAD_ID_2, "load2", 200, 80, 90, null, 5, null); + createLoad(getNetwork().getVoltageLevel("v3"), LOAD_ID_3, "load3", 300, 100, 70, null, 5, null); + createLoad(getNetwork().getVoltageLevel("v4"), LOAD_ID_4, "load4", 400, 50, 150, null, 5, null); + } + + @Override + protected List getTestFilters() { + IdentifierListFilter filter1 = IdentifierListFilter.builder().id(FILTER_ID_1).modificationDate(new Date()).equipmentType(EquipmentType.LOAD) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(LOAD_ID_1, 1.0), + new IdentifierListFilterEquipmentAttributes(LOAD_ID_2, 2.0))) + .build(); + IdentifierListFilter filter2 = IdentifierListFilter.builder().id(FILTER_ID_2).modificationDate(new Date()).equipmentType(EquipmentType.LOAD) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(LOAD_ID_3, 2.0), + new IdentifierListFilterEquipmentAttributes(LOAD_ID_4, 5.0))) + .build(); + + return List.of(filter1, filter2); + } + + @Override + protected List> getSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .editedField(LoadField.ACTIVE_POWER.name()) + .value(25.) + .filters(List.of(filter1)) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .editedField(LoadField.REACTIVE_POWER.name()) + .value(2.5) + .filters(List.of(filter2)) + .build(); + + EnumModificationByFilterInfos simpleInfos3 = EnumModificationByFilterInfos.builder() + .editedField(LoadField.LOAD_TYPE.name()) + .value(LoadType.AUXILIARY.name()) + .filters(List.of(filter1)) + .build(); + + return List.of(simpleInfos1, simpleInfos2, simpleInfos3); + } + + @Override + protected List> getUpdatedSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .editedField(LoadField.ACTIVE_POWER.name()) + .value(200.) + .filters(List.of(filter1)) + .build(); + + return List.of(simpleInfos1); + } + + @Override + protected IdentifiableType getIdentifiableType() { + return IdentifiableType.LOAD; + } + + @Override + protected EquipmentType getEquipmentType() { + return EquipmentType.LOAD; + } + + @Override + protected void assertAfterNetworkModificationCreation() { + assertEquals(25, getNetwork().getLoad(LOAD_ID_1).getP0(), 0); + assertEquals(25, getNetwork().getLoad(LOAD_ID_2).getP0(), 0); + assertEquals(2.5, getNetwork().getLoad(LOAD_ID_3).getQ0(), 0); + assertEquals(2.5, getNetwork().getLoad(LOAD_ID_4).getQ0(), 0); + assertThat(getNetwork().getLoad(LOAD_ID_1).getLoadType()).isEqualTo(LoadType.AUXILIARY); + assertThat(getNetwork().getLoad(LOAD_ID_2).getLoadType()).isEqualTo(LoadType.AUXILIARY); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + assertEquals(100, getNetwork().getLoad(LOAD_ID_1).getP0(), 0); + assertEquals(80, getNetwork().getLoad(LOAD_ID_2).getP0(), 0); + assertEquals(70, getNetwork().getLoad(LOAD_ID_3).getQ0(), 0); + assertEquals(150, getNetwork().getLoad(LOAD_ID_4).getQ0(), 0); + } + + @Override + protected void assertResultImpacts(List impacts) { + // TODO later + } +} From aafd7a6892cb38fc821f431a71933b4645bc9329 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 5 Sep 2024 23:29:15 +0200 Subject: [PATCH 21/42] clean code --- .../server/modifications/NetworkModificationApplicator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java index 5eacf7883..5b50d029e 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java @@ -198,9 +198,9 @@ private void apply(AbstractModification modification, Network network, ReportNod private void handleException(NetworkModificationException.Type typeIfError, ReportNode subReportNode, Exception e) { boolean isApplicationException = PowsyblException.class.isAssignableFrom(e.getClass()); - //if (!isApplicationException /*&& LOGGER.isErrorEnabled()*/) { + if (!isApplicationException && LOGGER.isErrorEnabled()) { LOGGER.error(e.toString(), e); - //} + } String errorMessage = isApplicationException ? e.getMessage() : "Technical error: " + e; subReportNode.newReportNode() From f1dce777cbaf7ae2025fa0087d2dac622f5ceeb5 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Mon, 9 Sep 2024 22:57:32 +0200 Subject: [PATCH 22/42] remove TODO --- .../simple/LoadBySimpleModificationTest.java | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java index d7a58f10d..88bd748ce 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java @@ -17,7 +17,6 @@ import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.simple.EnumModificationByFilterInfos; -import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import java.util.Date; import java.util.List; @@ -91,16 +90,6 @@ protected List> getUpdatedSimpleModif return List.of(simpleInfos1); } - @Override - protected IdentifiableType getIdentifiableType() { - return IdentifiableType.LOAD; - } - - @Override - protected EquipmentType getEquipmentType() { - return EquipmentType.LOAD; - } - @Override protected void assertAfterNetworkModificationCreation() { assertEquals(25, getNetwork().getLoad(LOAD_ID_1).getP0(), 0); @@ -120,7 +109,13 @@ protected void assertAfterNetworkModificationDeletion() { } @Override - protected void assertResultImpacts(List impacts) { - // TODO later + protected IdentifiableType getIdentifiableType() { + return IdentifiableType.LOAD; } + + @Override + protected EquipmentType getEquipmentType() { + return EquipmentType.LOAD; + } + } From 932e7b55cd0aef30534d8705169fd142d29b532a Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 10 Sep 2024 11:01:21 +0200 Subject: [PATCH 23/42] Voltage Level test --- .../simple/LoadBySimpleModificationTest.java | 6 + .../VoltageLevelBySimpleModificationTest.java | 227 ++++++++++++++++++ 2 files changed, 233 insertions(+) create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java index 88bd748ce..e9700c3c1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java @@ -17,6 +17,7 @@ import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.simple.EnumModificationByFilterInfos; +import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import java.util.Date; import java.util.List; @@ -118,4 +119,9 @@ protected EquipmentType getEquipmentType() { return EquipmentType.LOAD; } + @Override + protected void assertResultImpacts(List impacts) { + // TODO later + } + } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java new file mode 100644 index 000000000..2e2d00c81 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java @@ -0,0 +1,227 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter.simple; + +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; +import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; +import org.gridsuite.filter.AbstractFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; +import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.VoltageLevelField; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.impacts.AbstractBaseImpact; + +import java.util.Date; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +/** + * @author Thang PHAM + */ +public class VoltageLevelBySimpleModificationTest extends AbstractBySimpleModificationTest { + private static final String VOLTAGE_LEVEL_ID_1 = "v1"; + private static final String VOLTAGE_LEVEL_ID_2 = "v2"; + private static final String VOLTAGE_LEVEL_ID_3 = "v3"; + private static final String VOLTAGE_LEVEL_ID_4 = "v4"; + private static final String VOLTAGE_LEVEL_ID_5 = "v5"; + private static final String VOLTAGE_LEVEL_ID_6 = "v6"; + + @Override + protected void createEquipments() { + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_1).setNominalV(400) + .setHighVoltageLimit(200) + .setLowVoltageLimit(100) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(10).withIpMax(120).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_2).setNominalV(150) + .setLowVoltageLimit(100) + .setHighVoltageLimit(1000) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(10).withIpMax(120).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_3).setNominalV(70) + .setLowVoltageLimit(50) + .setHighVoltageLimit(250) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(50).withIpMax(150).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_4).setNominalV(100) + .setLowVoltageLimit(70) + .setHighVoltageLimit(300) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(10).withIpMax(100).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_5).setNominalV(210) + .setLowVoltageLimit(10) + .setHighVoltageLimit(500) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(25).withIpMax(75).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_6).setNominalV(750) + .setHighVoltageLimit(1000) + .setLowVoltageLimit(90) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(100).withIpMax(200).add(); + } + + @Override + protected List getTestFilters() { + IdentifierListFilter filter1 = IdentifierListFilter.builder().id(FILTER_ID_1).modificationDate(new Date()).equipmentType(EquipmentType.VOLTAGE_LEVEL) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_1, 1.0), + new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_2, 2.0))) + .build(); + IdentifierListFilter filter2 = IdentifierListFilter.builder().id(FILTER_ID_2).modificationDate(new Date()).equipmentType(EquipmentType.VOLTAGE_LEVEL) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_3, 2.0), + new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_4, 5.0))) + .build(); + IdentifierListFilter filter3 = IdentifierListFilter.builder().id(FILTER_ID_3).modificationDate(new Date()).equipmentType(EquipmentType.VOLTAGE_LEVEL) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_5, 6.0), + new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_6, 7.0))) + .build(); + IdentifierListFilter filter4 = IdentifierListFilter.builder().id(FILTER_ID_4).modificationDate(new Date()).equipmentType(EquipmentType.VOLTAGE_LEVEL) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_2, 2.0), + new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_5, 6.0))) + .build(); + IdentifierListFilter filter5 = IdentifierListFilter.builder().id(FILTER_ID_5).modificationDate(new Date()).equipmentType(EquipmentType.VOLTAGE_LEVEL) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_4, 5.0), + new IdentifierListFilterEquipmentAttributes(VOLTAGE_LEVEL_ID_6, 7.0))) + .build(); + + return List.of(filter1, filter2, filter3, filter4, filter5); + } + + @Override + protected List> getSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .editedField(VoltageLevelField.LOW_VOLTAGE_LIMIT.name()) + .value(10.) + .filters(List.of(filter1, filter2)) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .editedField(VoltageLevelField.HIGH_VOLTAGE_LIMIT.name()) + .value(120.) + .filters(List.of(filter3)) + .build(); + + DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + .editedField(VoltageLevelField.NOMINAL_VOLTAGE.name()) + .value(150.) + .filters(List.of(filter4)) + .build(); + + DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + .editedField(VoltageLevelField.LOW_SHORT_CIRCUIT_CURRENT_LIMIT.name()) + .value(2.) + .filters(List.of(filter5)) + .build(); + + DoubleModificationByFilterInfos simpleInfos5 = DoubleModificationByFilterInfos.builder() + .editedField(VoltageLevelField.HIGH_SHORT_CIRCUIT_CURRENT_LIMIT.name()) + .value(5.) + .filters(List.of(filter4, filter5)) + .build(); + + return List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4, simpleInfos5); + } + + @Override + protected List> getUpdatedSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .editedField(VoltageLevelField.LOW_VOLTAGE_LIMIT.name()) + .value(5.) + .filters(List.of(filter1, filter2)) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .editedField(VoltageLevelField.HIGH_VOLTAGE_LIMIT.name()) + .value(1.5) + .filters(List.of(filter3)) + .build(); + + DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + .editedField(VoltageLevelField.NOMINAL_VOLTAGE.name()) + .value(150.) + .filters(List.of(filter4)) + .build(); + + return List.of(simpleInfos1, simpleInfos2, simpleInfos3); + } + + @Override + protected IdentifiableType getIdentifiableType() { + return IdentifiableType.VOLTAGE_LEVEL; + } + + @Override + protected EquipmentType getEquipmentType() { + return EquipmentType.VOLTAGE_LEVEL; + } + + @Override + protected void assertAfterNetworkModificationCreation() { + assertEquals(10, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_1).getLowVoltageLimit(), 0); + assertEquals(10, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_2).getLowVoltageLimit(), 0); + assertEquals(10, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_3).getLowVoltageLimit(), 0); + + VoltageLevel voltageLevel4 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_4); + IdentifiableShortCircuit identifiableShortCircuit4 = voltageLevel4.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit4); + assertEquals(10, voltageLevel4.getLowVoltageLimit(), 0); + assertEquals(2, identifiableShortCircuit4.getIpMin(), 0); + assertEquals(5, identifiableShortCircuit4.getIpMax(), 0); + + VoltageLevel voltageLevel5 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_5); + IdentifiableShortCircuit identifiableShortCircuit5 = voltageLevel5.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit5); + assertEquals(120, voltageLevel5.getHighVoltageLimit(), 0); + assertEquals(150, voltageLevel5.getNominalV(), 0); + assertEquals(5, identifiableShortCircuit5.getIpMax(), 0); + + VoltageLevel voltageLevel6 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_6); + IdentifiableShortCircuit identifiableShortCircuit6 = voltageLevel6.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit6); + assertEquals(120, voltageLevel6.getHighVoltageLimit(), 0); + assertEquals(2, identifiableShortCircuit6.getIpMin(), 0); + assertEquals(5, identifiableShortCircuit6.getIpMax(), 0); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + assertEquals(100, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_1).getLowVoltageLimit(), 0); + assertEquals(100, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_2).getLowVoltageLimit(), 0); + assertEquals(250, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_3).getHighVoltageLimit(), 0); + + VoltageLevel voltageLevel4 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_4); + IdentifiableShortCircuit identifiableShortCircuit4 = voltageLevel4.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit4); + assertEquals(300, voltageLevel4.getHighVoltageLimit(), 0); + assertEquals(10, identifiableShortCircuit4.getIpMin(), 0); + assertEquals(100, identifiableShortCircuit4.getIpMax(), 0); + + VoltageLevel voltageLevel5 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_5); + IdentifiableShortCircuit identifiableShortCircuit5 = voltageLevel5.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit5); + assertEquals(500, voltageLevel5.getHighVoltageLimit(), 0); + assertEquals(210, voltageLevel5.getNominalV(), 0); + assertEquals(75, identifiableShortCircuit5.getIpMax(), 0); + + VoltageLevel voltageLevel6 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_6); + IdentifiableShortCircuit identifiableShortCircuit6 = voltageLevel6.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit6); + assertEquals(1000, voltageLevel6.getHighVoltageLimit(), 0); + assertEquals(100, identifiableShortCircuit6.getIpMin(), 0); + assertEquals(200, identifiableShortCircuit6.getIpMax(), 0); + } + + @Override + protected void assertResultImpacts(List impacts) { + // TODO later + } +} From cd123008622a3a6b990aad6a18674738f8667f46 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 10 Sep 2024 11:33:10 +0200 Subject: [PATCH 24/42] Battery test --- .../BatteryBySimpleModificationTest.java | 216 ++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java new file mode 100644 index 000000000..a37f94796 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java @@ -0,0 +1,216 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter.simple; + +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.extensions.ActivePowerControl; +import com.powsybl.iidm.network.extensions.ActivePowerControlAdder; +import org.gridsuite.filter.AbstractFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; +import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.BatteryField; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.impacts.AbstractBaseImpact; +import org.junit.Test; + +import java.util.Date; +import java.util.List; + +import static org.gridsuite.modification.server.utils.NetworkUtil.createBattery; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +/** + * @author Thang PHAM + */ +public class BatteryBySimpleModificationTest extends AbstractBySimpleModificationTest { + private static final String BATTERY_ID_1 = "v3Battery"; + private static final String BATTERY_ID_2 = "battery2"; + private static final String BATTERY_ID_3 = "battery3"; + private static final String BATTERY_ID_4 = "battery4"; + private static final String BATTERY_ID_5 = "battery5"; + private static final String BATTERY_ID_6 = "battery6"; + + @Test + public void testCreateWithWarning() throws Exception { + IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(BATTERY_ID_1, 1.0); + IdentifierListFilterEquipmentAttributes wrongIdAttributes = getIdentifiableAttributes("wrongId", 1.0); + + DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + .filters(List.of(filterWithOneWrongId)) + .editedField(BatteryField.ACTIVE_POWER_SET_POINT.name()) + .value(55.) + .build(); + + checkCreateWithWarning(List.of(simpleInfos), List.of(identifiableAttributes, wrongIdAttributes)); + assertEquals(55, getNetwork().getBattery(BATTERY_ID_1).getTargetP(), 0); + } + + @Override + protected void createEquipments() { + getNetwork().getBattery(BATTERY_ID_1).setTargetP(100).setMaxP(500).setMinP(0).setTargetQ(80); + getNetwork().getBattery(BATTERY_ID_1).newExtension(ActivePowerControlAdder.class).withDroop(1).add(); + + createBattery(getNetwork().getVoltageLevel("v2"), BATTERY_ID_2, "v2Battery2", 20, 50, 2000, 200, 50); + createBattery(getNetwork().getVoltageLevel("v3"), BATTERY_ID_3, "v3Battery3", 30, 70, 400, 300, 50); + + createBattery(getNetwork().getVoltageLevel("v4"), BATTERY_ID_4, "v4Battery4", 40, 25, 350, 70, 50); + + createBattery(getNetwork().getVoltageLevel("v5"), BATTERY_ID_5, "v5Battery5", 50, 50, 600, 55, 140); + getNetwork().getBattery(BATTERY_ID_5).newExtension(ActivePowerControlAdder.class).withDroop(4).add(); + + createBattery(getNetwork().getVoltageLevel("v6"), BATTERY_ID_6, "v6Battery6", 60, 200, 700, 250, 210); + } + + @Override + protected List getTestFilters() { + IdentifierListFilter filter1 = IdentifierListFilter.builder().id(FILTER_ID_1).modificationDate(new Date()).equipmentType(EquipmentType.BATTERY) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(BATTERY_ID_1, 1.0), + new IdentifierListFilterEquipmentAttributes(BATTERY_ID_2, 2.0))) + .build(); + IdentifierListFilter filter2 = IdentifierListFilter.builder().id(FILTER_ID_2).modificationDate(new Date()).equipmentType(EquipmentType.BATTERY) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(BATTERY_ID_3, 2.0), + new IdentifierListFilterEquipmentAttributes(BATTERY_ID_4, 5.0))) + .build(); + IdentifierListFilter filter3 = IdentifierListFilter.builder().id(FILTER_ID_3).modificationDate(new Date()).equipmentType(EquipmentType.BATTERY) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(BATTERY_ID_5, 6.0), + new IdentifierListFilterEquipmentAttributes(BATTERY_ID_6, 7.0))) + .build(); + IdentifierListFilter filter4 = IdentifierListFilter.builder().id(FILTER_ID_4).modificationDate(new Date()).equipmentType(EquipmentType.BATTERY) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(BATTERY_ID_1, 1.0), + new IdentifierListFilterEquipmentAttributes(BATTERY_ID_5, 6.0))) + .build(); + IdentifierListFilter filter5 = IdentifierListFilter.builder().id(FILTER_ID_5).modificationDate(new Date()).equipmentType(EquipmentType.BATTERY) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(BATTERY_ID_2, 2.0), + new IdentifierListFilterEquipmentAttributes(BATTERY_ID_3, 3.0))) + .build(); + + return List.of(filter1, filter2, filter3, filter4, filter5); + } + + @Override + protected List> getSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter1, filter2)) + .editedField(BatteryField.MAXIMUM_ACTIVE_POWER.name()) + .value(80.) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter3)) + .editedField(BatteryField.MINIMUM_ACTIVE_POWER.name()) + .value(30.) + .build(); + + DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter5)) + .editedField(BatteryField.ACTIVE_POWER_SET_POINT.name()) + .value(30.) + .build(); + + DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter4)) + .editedField(BatteryField.REACTIVE_POWER_SET_POINT.name()) + .value(2.) + .build(); + + DoubleModificationByFilterInfos simpleInfos5 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter4)) + .editedField(BatteryField.DROOP.name()) + .value(2.) + .build(); + + return List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4, simpleInfos5); + } + + @Override + protected List> getUpdatedSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter1, filter2)) + .editedField(BatteryField.MAXIMUM_ACTIVE_POWER.name()) + .value(200.) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter3)) + .editedField(BatteryField.MINIMUM_ACTIVE_POWER.name()) + .value(35.) + .build(); + + DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter3)) + .editedField(BatteryField.ACTIVE_POWER_SET_POINT.name()) + .value(10.) + .build(); + + return List.of(simpleInfos1, simpleInfos2, simpleInfos3); + } + + @Override + protected void assertAfterNetworkModificationCreation() { + assertEquals(80, getNetwork().getBattery(BATTERY_ID_1).getMaxP(), 0); + assertEquals(2, getNetwork().getBattery(BATTERY_ID_1).getTargetQ(), 0); + ActivePowerControl activePowerControl1 = getNetwork().getBattery(BATTERY_ID_1).getExtension(ActivePowerControl.class); + assertNotNull(activePowerControl1); + assertEquals(2, activePowerControl1.getDroop(), 0); + + assertEquals(80, getNetwork().getBattery(BATTERY_ID_2).getMaxP(), 0); + assertEquals(30, getNetwork().getBattery(BATTERY_ID_2).getTargetP(), 0); + assertEquals(80, getNetwork().getBattery(BATTERY_ID_3).getMaxP(), 0); + assertEquals(30, getNetwork().getBattery(BATTERY_ID_3).getTargetP(), 0); + assertEquals(80, getNetwork().getBattery(BATTERY_ID_4).getMaxP(), 0); + + assertEquals(30, getNetwork().getBattery(BATTERY_ID_5).getMinP(), 0); + assertEquals(2, getNetwork().getBattery(BATTERY_ID_5).getTargetQ(), 0); + ActivePowerControl activePowerControl5 = getNetwork().getBattery(BATTERY_ID_5).getExtension(ActivePowerControl.class); + assertNotNull(activePowerControl5); + assertEquals(2, activePowerControl5.getDroop(), 0); + + assertEquals(30, getNetwork().getBattery(BATTERY_ID_6).getMinP(), 0); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + assertEquals(500, getNetwork().getBattery(BATTERY_ID_1).getMaxP(), 0); + assertEquals(80, getNetwork().getBattery(BATTERY_ID_1).getTargetQ(), 0); + ActivePowerControl activePowerControl1 = getNetwork().getBattery(BATTERY_ID_1).getExtension(ActivePowerControl.class); + assertNotNull(activePowerControl1); + assertEquals(1, activePowerControl1.getDroop(), 0); + + assertEquals(2000, getNetwork().getBattery(BATTERY_ID_2).getMaxP(), 0); + assertEquals(200, getNetwork().getBattery(BATTERY_ID_2).getTargetP(), 0); + assertEquals(400, getNetwork().getBattery(BATTERY_ID_3).getMaxP(), 0); + assertEquals(300, getNetwork().getBattery(BATTERY_ID_3).getTargetP(), 0); + assertEquals(350, getNetwork().getBattery(BATTERY_ID_4).getMaxP(), 0); + + assertEquals(50, getNetwork().getBattery(BATTERY_ID_5).getMinP(), 0); + assertEquals(140, getNetwork().getBattery(BATTERY_ID_5).getTargetQ(), 0); + ActivePowerControl activePowerControl5 = getNetwork().getBattery(BATTERY_ID_5).getExtension(ActivePowerControl.class); + assertNotNull(activePowerControl5); + assertEquals(4, activePowerControl5.getDroop(), 0); + + assertEquals(200, getNetwork().getBattery(BATTERY_ID_6).getMinP(), 0); + } + + @Override + protected IdentifiableType getIdentifiableType() { + return IdentifiableType.BATTERY; + } + + @Override + protected EquipmentType getEquipmentType() { + return EquipmentType.BATTERY; + } + + @Override + protected void assertResultImpacts(List impacts) { + // TODO later + } +} From efaacade0894f6aa1259e8e7b774efba15002115 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 10 Sep 2024 15:37:26 +0200 Subject: [PATCH 25/42] Shunt compensator test --- ...ntCompensatorBySimpleModificationTest.java | 185 ++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java new file mode 100644 index 000000000..0604028c7 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java @@ -0,0 +1,185 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter.simple; + +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.ShuntCompensator; +import com.powsybl.iidm.network.ShuntCompensatorLinearModel; +import com.powsybl.iidm.network.extensions.ConnectablePosition; +import org.gridsuite.filter.AbstractFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; +import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.ShuntCompensatorField; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.impacts.AbstractBaseImpact; +import org.junit.Test; + +import java.util.Date; +import java.util.List; + +import static org.gridsuite.modification.server.utils.NetworkUtil.createShuntCompensator; +import static org.junit.Assert.assertEquals; + +/** + * @author Thang PHAM + */ +public class ShuntCompensatorBySimpleModificationTest extends AbstractBySimpleModificationTest { + private static final String SHUNT_COMPENSATOR_ID_1 = "v1shunt"; + private static final String SHUNT_COMPENSATOR_ID_2 = "v2shunt"; + private static final String SHUNT_COMPENSATOR_ID_3 = "v3shunt"; + private static final String SHUNT_COMPENSATOR_ID_4 = "v4shunt"; + private static final String SHUNT_COMPENSATOR_ID_5 = "v5shunt"; + + @Test + public void testCreateWithWarning() throws Exception { + IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(SHUNT_COMPENSATOR_ID_1, 1.0); + IdentifierListFilterEquipmentAttributes wrongIdAttributes = getIdentifiableAttributes("wrongId", 1.0); + + DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + .editedField(ShuntCompensatorField.MAXIMUM_SECTION_COUNT.name()) + .value(2.) + .filters(List.of(filterWithOneWrongId)) + .build(); + + checkCreateWithWarning(List.of(simpleInfos), List.of(identifiableAttributes, wrongIdAttributes)); + assertEquals(2, getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_1).getMaximumSectionCount(), 0); + } + + @Override + protected void createEquipments() { + createShuntCompensator(getNetwork().getVoltageLevel("v1"), SHUNT_COMPENSATOR_ID_1, "v1shunt", 8, 225., 10, true, 4, 2, 3, 2, "cn11", 22, ConnectablePosition.Direction.BOTTOM); + createShuntCompensator(getNetwork().getVoltageLevel("v3"), SHUNT_COMPENSATOR_ID_3, "v3shunt", 10, 305., 20, true, 6, 3, 3, 4, "cn11", 22, ConnectablePosition.Direction.BOTTOM); + createShuntCompensator(getNetwork().getVoltageLevel("v4"), SHUNT_COMPENSATOR_ID_4, "v3shunt", 10, 305., 20, true, 15, 4, 3, 10, "cn11", 22, ConnectablePosition.Direction.BOTTOM); + } + + @Override + protected List getTestFilters() { + IdentifierListFilter filter1 = IdentifierListFilter.builder().id(FILTER_ID_1).modificationDate(new Date()).equipmentType(EquipmentType.SHUNT_COMPENSATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(SHUNT_COMPENSATOR_ID_1, 1.0))) + .build(); + IdentifierListFilter filter2 = IdentifierListFilter.builder().id(FILTER_ID_2).modificationDate(new Date()).equipmentType(EquipmentType.SHUNT_COMPENSATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(SHUNT_COMPENSATOR_ID_2, 1.0))) + .build(); + IdentifierListFilter filter3 = IdentifierListFilter.builder().id(FILTER_ID_3).modificationDate(new Date()).equipmentType(EquipmentType.SHUNT_COMPENSATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(SHUNT_COMPENSATOR_ID_3, 1.0))) + .build(); + IdentifierListFilter filter4 = IdentifierListFilter.builder().id(FILTER_ID_4).modificationDate(new Date()).equipmentType(EquipmentType.SHUNT_COMPENSATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(SHUNT_COMPENSATOR_ID_4, 1.0))) + .build(); + IdentifierListFilter filter5 = IdentifierListFilter.builder().id(FILTER_ID_5).modificationDate(new Date()).equipmentType(EquipmentType.SHUNT_COMPENSATOR) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(SHUNT_COMPENSATOR_ID_5, 1.0))) + .build(); + + return List.of(filter1, filter2, filter3, filter4, filter5); + } + + @Override + protected List> getSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .editedField(ShuntCompensatorField.MAXIMUM_SECTION_COUNT.name()) + .value(8.) + .filters(List.of(filter1, filter2)) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .editedField(ShuntCompensatorField.SECTION_COUNT.name()) + .value(2.) + .filters(List.of(filter3)) + .build(); + + DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + .editedField(ShuntCompensatorField.MAXIMUM_SUSCEPTANCE.name()) + .value(5.) + .filters(List.of(filter4)) + .build(); + + DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + .editedField(ShuntCompensatorField.MAXIMUM_Q_AT_NOMINAL_VOLTAGE.name()) + .value(10.) + .filters(List.of(filter5)) + .build(); + + return List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4); + } + + @Override + protected List> getUpdatedSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .editedField(ShuntCompensatorField.MAXIMUM_SECTION_COUNT.name()) + .value(150.) + .filters(List.of(filter1, filter2)) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .editedField(ShuntCompensatorField.SECTION_COUNT.name()) + .value(2.) + .filters(List.of(filter3)) + .build(); + return List.of(simpleInfos1, simpleInfos2); + } + + @Override + protected void assertAfterNetworkModificationCreation() { + ShuntCompensator shuntCompensator1 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_1); + assertEquals(8, shuntCompensator1.getMaximumSectionCount()); + assertEquals(1, shuntCompensator1.getModel(ShuntCompensatorLinearModel.class).getBPerSection(), 0); + + ShuntCompensator shuntCompensator2 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_2); + assertEquals(8, shuntCompensator2.getMaximumSectionCount()); + assertEquals(0.375, shuntCompensator2.getModel(ShuntCompensatorLinearModel.class).getBPerSection(), 0); + + ShuntCompensator shuntCompensator3 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_3); + assertEquals(6, shuntCompensator3.getMaximumSectionCount()); + assertEquals(3, shuntCompensator3.getModel(ShuntCompensatorLinearModel.class).getBPerSection(), 0); + + ShuntCompensator shuntCompensator4 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_4); + assertEquals(10, shuntCompensator4.getSectionCount()); + + ShuntCompensator shuntCompensator5 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_5); + assertEquals(2, shuntCompensator5.getSectionCount()); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + ShuntCompensator shuntCompensator1 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_1); + assertEquals(4, shuntCompensator1.getMaximumSectionCount()); + assertEquals(2, shuntCompensator1.getModel(ShuntCompensatorLinearModel.class).getBPerSection(), 0); + + ShuntCompensator shuntCompensator2 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_2); + assertEquals(3, shuntCompensator2.getMaximumSectionCount()); + assertEquals(1, shuntCompensator2.getModel(ShuntCompensatorLinearModel.class).getBPerSection(), 0); + + ShuntCompensator shuntCompensator3 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_3); + assertEquals(6, shuntCompensator3.getMaximumSectionCount()); + assertEquals(3, shuntCompensator3.getModel(ShuntCompensatorLinearModel.class).getBPerSection(), 0); + + ShuntCompensator shuntCompensator4 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_4); + assertEquals(10, shuntCompensator4.getSectionCount()); + + ShuntCompensator shuntCompensator5 = getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_5); + assertEquals(2, shuntCompensator5.getSectionCount()); + assertEquals(1, shuntCompensator5.getModel(ShuntCompensatorLinearModel.class).getBPerSection(), 0); + } + + @Override + protected IdentifiableType getIdentifiableType() { + return IdentifiableType.SHUNT_COMPENSATOR; + } + + @Override + protected EquipmentType getEquipmentType() { + return EquipmentType.SHUNT_COMPENSATOR; + } + + @Override + protected void assertResultImpacts(List impacts) { + // TODO later + } +} From f1d4fbc7638f8cb1a9c34f56a4e7f79b48ed5a67 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 10 Sep 2024 17:26:38 +0200 Subject: [PATCH 26/42] 2WT test --- ...gsTransformerBySimpleModificationTest.java | 573 ++++++++++++++++++ 1 file changed, 573 insertions(+) create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java new file mode 100644 index 000000000..cb18f92f5 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java @@ -0,0 +1,573 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter.simple; + +import com.github.tomakehurst.wiremock.client.WireMock; +import com.powsybl.iidm.network.*; +import com.powsybl.iidm.network.extensions.ConnectablePosition; +import org.gridsuite.filter.AbstractFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; +import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; +import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.server.dto.BySimpleModificationInfos; +import org.gridsuite.modification.server.dto.NetworkModificationResult; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; +import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.junit.Test; + +import java.util.Date; +import java.util.List; +import java.util.UUID; + +import static org.gridsuite.modification.server.utils.NetworkUtil.createTwoWindingsTransformer; +import static org.junit.Assert.*; + +/** + * @author Thang PHAM + */ +public class TwoWindingsTransformerBySimpleModificationTest extends AbstractBySimpleModificationTest { + private static final String TWT_ID_1 = "twt1"; + private static final String TWT_ID_2 = "twt2"; + private static final String TWT_ID_3 = "twt3"; + private static final String TWT_ID_4 = "twt4"; + private static final String TWT_ID_5 = "twt5"; + private static final String TWT_ID_6 = "twt6"; + + @Test + public void testModifyTwtWithError() throws Exception { + // Test modifying ratio tab changer field when ratio tab changer is null + IdentifierListFilterEquipmentAttributes identifiableAttributes1 = getIdentifiableAttributes(TWT_ID_4, 1.); + IdentifierListFilterEquipmentAttributes identifiableAttributes2 = getIdentifiableAttributes(TWT_ID_6, 1.); + AbstractFilter filter = getFilterEquipments(FILTER_ID_4, List.of(identifiableAttributes1, identifiableAttributes2)); + DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) + .value(1.) + .filters(List.of(filter4)) + .build(); + + checkCreateWithError(List.of(simpleInfos), List.of(filter)); + + assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_4).getRatioTapChanger()); + assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_6).getRatioTapChanger()); + + // Test modifying phase tab changer field when phase tab changer is null + IdentifierListFilterEquipmentAttributes identifiableAttributes3 = getIdentifiableAttributes(TWT_ID_1, 1.); + IdentifierListFilterEquipmentAttributes identifiableAttributes4 = getIdentifiableAttributes(TWT_ID_2, 1.); + AbstractFilter filter2 = getFilterEquipments(FILTER_ID_1, List.of(identifiableAttributes3, identifiableAttributes4)); + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .editedField(TwoWindingsTransformerField.PHASE_TAP_POSITION.name()) + .value(1.) + .filters(List.of(filter1)) + .build(); + + checkCreateWithError(List.of(simpleInfos2), List.of(filter2)); + + assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_1).getPhaseTapChanger()); + assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_2).getPhaseTapChanger()); + } + + @Test + public void testModifyTwtWithWarning() throws Exception { + IdentifierListFilterEquipmentAttributes identifiableAttributes1 = getIdentifiableAttributes(TWT_ID_1, 1.); + IdentifierListFilterEquipmentAttributes identifiableAttributes2 = getIdentifiableAttributes(TWT_ID_2, 1.); + IdentifierListFilterEquipmentAttributes identifiableAttributes3 = getIdentifiableAttributes(TWT_ID_4, 1.); + IdentifierListFilterEquipmentAttributes identifiableAttributes4 = getIdentifiableAttributes(TWT_ID_6, 1.); + AbstractFilter filterTwt1 = getFilterEquipments(FILTER_ID_1, List.of(identifiableAttributes1, identifiableAttributes2)); + AbstractFilter filterTwt2 = getFilterEquipments(FILTER_ID_4, List.of(identifiableAttributes3, identifiableAttributes4)); + + UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching(getPath(true) + ".{2,}")) + .willReturn(WireMock.ok() + .withBody(mapper.writeValueAsString(List.of(filterTwt1, filterTwt2))) + .withHeader("Content-Type", "application/json"))).getId(); + + DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter1, filter4)) + .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) + .value(4.) + .build(); + + checkCreationApplicationStatus(BySimpleModificationInfos.builder() + .equipmentType(getIdentifiableType()) + .simpleModificationInfosList(List.of(simpleInfos)) + .build(), + NetworkModificationResult.ApplicationStatus.WITH_WARNINGS); + + assertNotNull(getNetwork().getTwoWindingsTransformer(TWT_ID_1).getRatioTapChanger()); + assertNotNull(getNetwork().getTwoWindingsTransformer(TWT_ID_2).getRatioTapChanger()); + assertEquals(4, getNetwork().getTwoWindingsTransformer(TWT_ID_1).getRatioTapChanger().getTapPosition()); + assertEquals(4, getNetwork().getTwoWindingsTransformer(TWT_ID_2).getRatioTapChanger().getTapPosition()); + assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_4).getRatioTapChanger()); + assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_6).getRatioTapChanger()); + + wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(List.of(FILTER_ID_1, FILTER_ID_4)), false); + } + + @Override + protected void createEquipments() { + Substation s1 = getNetwork().getSubstation("s1"); + Substation s3 = getNetwork().getSubstation("s3"); + TwoWindingsTransformer twt1 = createTwoWindingsTransformer(s1, TWT_ID_1, TWT_ID_1, 30, 40, 50, + 60, 10, 20, 100, 100, + "v1", "v2", + "trf1", 11, ConnectablePosition.Direction.TOP, + "trf1", 22, ConnectablePosition.Direction.BOTTOM); + twt1.setRatedS(11); + addRatioTapChangerSteps(twt1.newRatioTapChanger().setTargetV(50).setLowTapPosition(0).setTapPosition(1).setTargetDeadband(55)); + + TwoWindingsTransformer twt2 = createTwoWindingsTransformer(s1, TWT_ID_2, TWT_ID_2, 35, 45, 55, + 65, 15, 25, 101, 100, + "v1", "v4", + "trf1", 33, ConnectablePosition.Direction.TOP, + "trf1", 44, ConnectablePosition.Direction.BOTTOM); + twt2.setRatedS(10); + addRatioTapChangerSteps(twt2.newRatioTapChanger().setTargetV(53).setLowTapPosition(3).setTapPosition(4).setTargetDeadband(58)); + + TwoWindingsTransformer twt3 = createTwoWindingsTransformer(s1, TWT_ID_3, TWT_ID_3, 40, 50, 60, + 70, 20, 30, 101, 101, + "v2", "v4", + "trf1", 10, ConnectablePosition.Direction.TOP, + "trf1", 20, ConnectablePosition.Direction.BOTTOM); + twt3.setRatedS(25); + addRatioTapChangerSteps(twt3.newRatioTapChanger().setTargetV(56).setLowTapPosition(0).setTapPosition(1).setTargetDeadband(61)); + + TwoWindingsTransformer twt4 = createTwoWindingsTransformer(s3, TWT_ID_4, TWT_ID_4, 45, 55, 65, + 75, 25, 35, 100, 100, + "v5", "v6", + "trf1", 30, ConnectablePosition.Direction.TOP, + "trf1", 40, ConnectablePosition.Direction.BOTTOM); + twt4.setRatedS(15); + addPhaseTapChangerSteps(twt4.newPhaseTapChanger().setRegulationValue(45).setLowTapPosition(1).setTapPosition(2).setTargetDeadband(34)); + + TwoWindingsTransformer twt5 = createTwoWindingsTransformer(s3, TWT_ID_5, TWT_ID_5, 50, 60, 70, + 80, 30, 40, 101, 101, + "v5", "v6", + "trf1", 15, ConnectablePosition.Direction.TOP, + "trf1", 26, ConnectablePosition.Direction.BOTTOM); + twt5.setRatedS(30); + addPhaseTapChangerSteps(twt5.newPhaseTapChanger().setRegulationValue(46).setLowTapPosition(2).setTapPosition(2).setTargetDeadband(35)); + + TwoWindingsTransformer twt6 = createTwoWindingsTransformer(s3, TWT_ID_6, TWT_ID_6, 55, 65, 75, 85, + 35, 45, 102, 102, + "v5", "v6", + "trf1", 38, ConnectablePosition.Direction.TOP, + "trf1", 49, ConnectablePosition.Direction.BOTTOM); + twt6.setRatedS(20); + addPhaseTapChangerSteps(twt6.newPhaseTapChanger().setRegulationValue(47).setLowTapPosition(1).setTapPosition(1).setTargetDeadband(36)); + } + + @Override + protected List getTestFilters() { + IdentifierListFilter filter1 = IdentifierListFilter.builder().id(FILTER_ID_1).modificationDate(new Date()).equipmentType(EquipmentType.TWO_WINDINGS_TRANSFORMER) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(TWT_ID_1, 1.0), + new IdentifierListFilterEquipmentAttributes(TWT_ID_2, 2.0))) + .build(); + IdentifierListFilter filter2 = IdentifierListFilter.builder().id(FILTER_ID_2).modificationDate(new Date()).equipmentType(EquipmentType.TWO_WINDINGS_TRANSFORMER) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(TWT_ID_1, 1.0), + new IdentifierListFilterEquipmentAttributes(TWT_ID_3, 2.0))) + .build(); + IdentifierListFilter filter3 = IdentifierListFilter.builder().id(FILTER_ID_3).modificationDate(new Date()).equipmentType(EquipmentType.TWO_WINDINGS_TRANSFORMER) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(TWT_ID_4, 5.0), + new IdentifierListFilterEquipmentAttributes(TWT_ID_5, 6.0))) + .build(); + IdentifierListFilter filter4 = IdentifierListFilter.builder().id(FILTER_ID_4).modificationDate(new Date()).equipmentType(EquipmentType.TWO_WINDINGS_TRANSFORMER) + .filterEquipmentsAttributes(List.of(new IdentifierListFilterEquipmentAttributes(TWT_ID_4, 5.0), + new IdentifierListFilterEquipmentAttributes(TWT_ID_6, 7.0))) + .build(); + + return List.of(filter1, filter2, filter3, filter4); + } + + @Override + protected List> getSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter1)) + .editedField(TwoWindingsTransformerField.TARGET_V.name()) + .value(2.) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter2)) + .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) + .value(4.) + .build(); + + DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter2)) + .editedField(TwoWindingsTransformerField.RATIO_LOW_TAP_POSITION.name()) + .value(4.) + .build(); + + DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter1)) + .editedField(TwoWindingsTransformerField.RATIO_TARGET_DEADBAND.name()) + .value(5.) + .build(); + + DoubleModificationByFilterInfos simpleInfos5 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter4)) + .editedField(TwoWindingsTransformerField.REGULATION_VALUE.name()) + .value(2.) + .build(); + + DoubleModificationByFilterInfos simpleInfos6 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter3)) + .editedField(TwoWindingsTransformerField.PHASE_TAP_POSITION.name()) + .value(2.) + .build(); + + DoubleModificationByFilterInfos simpleInfos7 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter3)) + .editedField(TwoWindingsTransformerField.PHASE_LOW_TAP_POSITION.name()) + .value(2.) + .build(); + + DoubleModificationByFilterInfos simpleInfos8 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter4)) + .editedField(TwoWindingsTransformerField.PHASE_TARGET_DEADBAND.name()) + .value(10.) + .build(); + + DoubleModificationByFilterInfos simpleInfos9 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter1, filter4)) + .editedField(TwoWindingsTransformerField.X.name()) + .value(20.) + .build(); + + DoubleModificationByFilterInfos simpleInfos10 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter2, filter3)) + .editedField(TwoWindingsTransformerField.R.name()) + .value(2.) + .build(); + + DoubleModificationByFilterInfos simpleInfos11 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter4, filter2)) + .editedField(TwoWindingsTransformerField.G.name()) + .value(25.) + .build(); + + DoubleModificationByFilterInfos simpleInfos12 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter1, filter3)) + .editedField(TwoWindingsTransformerField.B.name()) + .value(2.5) + .build(); + + DoubleModificationByFilterInfos simpleInfos13 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter2)) + .editedField(TwoWindingsTransformerField.RATED_U1.name()) + .value(15.) + .build(); + + DoubleModificationByFilterInfos simpleInfos14 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter3, filter2)) + .editedField(TwoWindingsTransformerField.RATED_U2.name()) + .value(0.5) + .build(); + + DoubleModificationByFilterInfos simpleInfos15 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter1, filter2)) + .editedField(TwoWindingsTransformerField.RATED_S.name()) + .value(2.) + .build(); + + return List.of(simpleInfos1, + simpleInfos2, + simpleInfos3, + simpleInfos4, + simpleInfos5, + simpleInfos6, + simpleInfos7, + simpleInfos8, + simpleInfos9, + simpleInfos10, + simpleInfos11, + simpleInfos12, + simpleInfos13, + simpleInfos14, + simpleInfos15); + } + + @Override + protected List> getUpdatedSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter3)) + .editedField(TwoWindingsTransformerField.TARGET_V.name()) + .value(2.) + .build(); + + DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter2)) + .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) + .value(3.5) + .build(); + + DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + .filters(List.of(filter1)) + .editedField(TwoWindingsTransformerField.RATIO_LOW_TAP_POSITION.name()) + .value(3.) + .build(); + + return List.of(simpleInfos1, + simpleInfos2, + simpleInfos3); + } + + @Override + protected IdentifiableType getIdentifiableType() { + return IdentifiableType.TWO_WINDINGS_TRANSFORMER; + } + + @Override + protected EquipmentType getEquipmentType() { + return EquipmentType.TWO_WINDINGS_TRANSFORMER; + } + + @Override + protected void assertAfterNetworkModificationCreation() { + TwoWindingsTransformer twt1 = getNetwork().getTwoWindingsTransformer(TWT_ID_1); + RatioTapChanger ratioTapChanger1 = twt1.getRatioTapChanger(); + assertNotNull(ratioTapChanger1); + assertEquals(2, ratioTapChanger1.getTargetV(), 0); + assertEquals(4, ratioTapChanger1.getLowTapPosition()); + assertEquals(4, ratioTapChanger1.getTapPosition()); + assertEquals(5, ratioTapChanger1.getTargetDeadband(), 0); + assertEquals(20, twt1.getX(), 0); + assertEquals(2.5, twt1.getB(), 0); + assertEquals(2, twt1.getR(), 0); + assertEquals(25, twt1.getG(), 0); + assertEquals(15, twt1.getRatedU1(), 0); + assertEquals(0.5, twt1.getRatedU2(), 0); + assertEquals(2, twt1.getRatedS(), 0); + + TwoWindingsTransformer twt2 = getNetwork().getTwoWindingsTransformer(TWT_ID_2); + RatioTapChanger ratioTapChanger2 = twt2.getRatioTapChanger(); + assertNotNull(ratioTapChanger2); + assertEquals(2, ratioTapChanger2.getTargetV(), 0); + assertEquals(3, ratioTapChanger2.getLowTapPosition()); + assertEquals(4, ratioTapChanger2.getTapPosition()); + assertEquals(5, ratioTapChanger2.getTargetDeadband(), 0); + assertEquals(20, twt2.getX(), 0); + assertEquals(2.5, twt2.getB(), 0); + assertEquals(15, twt2.getRatedU1(), 0); + assertEquals(2, twt2.getRatedS(), 0); + + TwoWindingsTransformer twt3 = getNetwork().getTwoWindingsTransformer(TWT_ID_3); + RatioTapChanger ratioTapChanger3 = twt3.getRatioTapChanger(); + assertNotNull(ratioTapChanger3); + assertEquals(4, ratioTapChanger3.getLowTapPosition()); + assertEquals(4, ratioTapChanger3.getTapPosition()); + assertEquals(2, twt3.getR(), 0); + assertEquals(25, twt3.getG(), 0); + assertEquals(15, twt3.getRatedU1(), 0); + assertEquals(0.5, twt3.getRatedU2(), 0); + assertEquals(2, twt3.getRatedS(), 0); + + TwoWindingsTransformer twt4 = getNetwork().getTwoWindingsTransformer(TWT_ID_4); + PhaseTapChanger phaseTapChanger4 = twt4.getPhaseTapChanger(); + assertNotNull(phaseTapChanger4); + assertEquals(2, phaseTapChanger4.getRegulationValue(), 0); + assertEquals(2, phaseTapChanger4.getLowTapPosition()); + assertEquals(2, phaseTapChanger4.getTapPosition()); + assertEquals(10, phaseTapChanger4.getTargetDeadband(), 0); + assertEquals(2, twt4.getR(), 0); + assertEquals(20, twt4.getX(), 0); + assertEquals(25, twt4.getG(), 0); + assertEquals(2.5, twt4.getB(), 0); + assertEquals(25, twt4.getRatedU1(), 0); + assertEquals(0.5, twt4.getRatedU2(), 0); + assertEquals(15, twt4.getRatedS(), 0); + + TwoWindingsTransformer twt5 = getNetwork().getTwoWindingsTransformer(TWT_ID_5); + PhaseTapChanger phaseTapChanger5 = twt5.getPhaseTapChanger(); + assertNotNull(phaseTapChanger4); + assertEquals(2, phaseTapChanger5.getLowTapPosition()); + assertEquals(2, phaseTapChanger5.getTapPosition()); + assertEquals(2, twt5.getR(), 0); + assertEquals(2.5, twt5.getB(), 0); + assertEquals(0.5, twt5.getRatedU2(), 0); + + TwoWindingsTransformer twt6 = getNetwork().getTwoWindingsTransformer(TWT_ID_6); + PhaseTapChanger phaseTapChanger6 = twt6.getPhaseTapChanger(); + assertNotNull(phaseTapChanger4); + assertEquals(2, phaseTapChanger6.getRegulationValue(), 0); + assertEquals(10, phaseTapChanger6.getTargetDeadband(), 0); + assertEquals(20, twt6.getX(), 0); + assertEquals(25, twt6.getG(), 0); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + TwoWindingsTransformer twt1 = getNetwork().getTwoWindingsTransformer(TWT_ID_1); + RatioTapChanger ratioTapChanger1 = twt1.getRatioTapChanger(); + assertNotNull(ratioTapChanger1); + assertEquals(50, ratioTapChanger1.getTargetV(), 0); + assertEquals(0, ratioTapChanger1.getLowTapPosition()); + assertEquals(1, ratioTapChanger1.getTapPosition()); + assertEquals(55, ratioTapChanger1.getTargetDeadband(), 0); + assertEquals(40, twt1.getX(), 0); + assertEquals(60, twt1.getB(), 0); + assertEquals(30, twt1.getR(), 0); + assertEquals(50, twt1.getG(), 0); + assertEquals(10, twt1.getRatedU1(), 0); + assertEquals(20, twt1.getRatedU2(), 0); + assertEquals(11, twt1.getRatedS(), 0); + + TwoWindingsTransformer twt2 = getNetwork().getTwoWindingsTransformer(TWT_ID_2); + RatioTapChanger ratioTapChanger2 = twt2.getRatioTapChanger(); + assertNotNull(ratioTapChanger2); + assertEquals(53, ratioTapChanger2.getTargetV(), 0); + assertEquals(3, ratioTapChanger2.getLowTapPosition()); + assertEquals(4, ratioTapChanger2.getTapPosition()); + assertEquals(58, ratioTapChanger2.getTargetDeadband(), 0); + assertEquals(45, twt2.getX(), 0); + assertEquals(65, twt2.getB(), 0); + assertEquals(15, twt2.getRatedU1(), 0); + assertEquals(10, twt2.getRatedS(), 0); + + TwoWindingsTransformer twt3 = getNetwork().getTwoWindingsTransformer(TWT_ID_3); + RatioTapChanger ratioTapChanger3 = twt3.getRatioTapChanger(); + assertNotNull(ratioTapChanger3); + assertEquals(0, ratioTapChanger3.getLowTapPosition()); + assertEquals(1, ratioTapChanger3.getTapPosition()); + assertEquals(40, twt3.getR(), 0); + assertEquals(60, twt3.getG(), 0); + assertEquals(20, twt3.getRatedU1(), 0); + assertEquals(30, twt3.getRatedU2(), 0); + assertEquals(25, twt3.getRatedS(), 0); + + TwoWindingsTransformer twt4 = getNetwork().getTwoWindingsTransformer(TWT_ID_4); + PhaseTapChanger phaseTapChanger4 = twt4.getPhaseTapChanger(); + assertNotNull(phaseTapChanger4); + assertEquals(45, phaseTapChanger4.getRegulationValue(), 0); + assertEquals(1, phaseTapChanger4.getLowTapPosition()); + assertEquals(2, phaseTapChanger4.getTapPosition()); + assertEquals(34, phaseTapChanger4.getTargetDeadband(), 0); + assertEquals(45, twt4.getR(), 0); + assertEquals(55, twt4.getX(), 0); + assertEquals(65, twt4.getG(), 0); + assertEquals(75, twt4.getB(), 0); + assertEquals(25, twt4.getRatedU1(), 0); + assertEquals(35, twt4.getRatedU2(), 0); + assertEquals(15, twt4.getRatedS(), 0); + + TwoWindingsTransformer twt5 = getNetwork().getTwoWindingsTransformer(TWT_ID_5); + PhaseTapChanger phaseTapChanger5 = twt5.getPhaseTapChanger(); + assertNotNull(phaseTapChanger4); + assertEquals(2, phaseTapChanger5.getLowTapPosition()); + assertEquals(2, phaseTapChanger5.getTapPosition()); + assertEquals(50, twt5.getR(), 0); + assertEquals(80, twt5.getB(), 0); + assertEquals(40, twt5.getRatedU2(), 0); + + TwoWindingsTransformer twt6 = getNetwork().getTwoWindingsTransformer(TWT_ID_6); + PhaseTapChanger phaseTapChanger6 = twt6.getPhaseTapChanger(); + assertNotNull(phaseTapChanger4); + assertEquals(47, phaseTapChanger6.getRegulationValue(), 0); + assertEquals(36, phaseTapChanger6.getTargetDeadband(), 0); + assertEquals(65, twt6.getX(), 0); + assertEquals(75, twt6.getG(), 0); + } + + private void addRatioTapChangerSteps(RatioTapChangerAdder ratioTapChangerAdder) { + ratioTapChangerAdder.beginStep() + .setR(39.78473) + .setX(39.784725) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .endStep() + .beginStep() + .setR(39.78474) + .setX(39.784726) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .endStep() + .beginStep() + .setR(39.78473) + .setX(39.784725) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .endStep() + .beginStep() + .setR(39.78474) + .setX(39.784726) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .endStep() + .beginStep() + .setR(39.78473) + .setX(39.784725) + .setG(0.0) + .setB(0.0) + .setRho(5.0) + .endStep() + .beginStep() + .setR(39.78474) + .setX(39.784726) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .endStep() + .add(); + } + + private void addPhaseTapChangerSteps(PhaseTapChangerAdder phaseTapChangerAdder) { + phaseTapChangerAdder.beginStep() + .setR(39.78473) + .setX(39.784725) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .setAlpha(1.) + .endStep() + .beginStep() + .setR(39.78475) + .setX(39.784727) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .setAlpha(1.1) + .endStep() + .beginStep() + .setR(39.78473) + .setX(39.784725) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .setAlpha(1.) + .endStep() + .beginStep() + .setR(39.78475) + .setX(39.784727) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .setAlpha(1.1) + .endStep() + .beginStep() + .setR(39.78473) + .setX(39.784725) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .setAlpha(1.) + .endStep() + .beginStep() + .setR(39.78475) + .setX(39.784727) + .setG(0.0) + .setB(0.0) + .setRho(15.0) + .setAlpha(1.1) + .endStep() + .add(); + } +} From 7c53cf12b44c5008d1c8987a9c9038ab4520387e Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 10 Sep 2024 23:33:04 +0200 Subject: [PATCH 27/42] Test for property --- .../byfilter/AbstractByFilterModification.java | 3 +-- .../byfilter/BySimpleModification.java | 10 ++++++++++ .../simple/AbstractBySimpleModificationTest.java | 15 ++++++++++++++- .../simple/BatteryBySimpleModificationTest.java | 5 ++++- .../simple/GeneratorBySimpleModificationTest.java | 12 ++++++++++-- .../simple/LoadBySimpleModificationTest.java | 5 ++++- .../ShuntCompensatorBySimpleModificationTest.java | 5 ++++- ...ndingsTransformerBySimpleModificationTest.java | 8 +++++--- .../VoltageLevelBySimpleModificationTest.java | 5 ++++- 9 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java index 2b6bd50c0..0f8ebf16b 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java @@ -65,7 +65,6 @@ public abstract class AbstractByFilterModification extends AbstractModification public static final String REPORT_KEY_EQUIPMENT_MODIFIED_REPORT = "equipmentModifiedReport"; public static final String REPORT_KEY_EQUIPMENT_MODIFIED_REPORT_EXCEPTION = "equipmentModifiedReportException"; public static final String REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS = "appliedByFilterModifications"; - public static final String REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS_INFO = "appliedByFilterModificationsInfo"; public static final String REPORT_KEY_BY_FILTER_MODIFICATION = "byFilterModification"; public static final String REPORT_KEY_BY_FILTER_MODIFICATION_ALL = "byFilterModificationAll"; public static final String REPORT_KEY_BY_FILTER_MODIFICATION_NONE = "byFilterModificationNone"; @@ -188,7 +187,7 @@ public void apply(Network network, ReportNode subReportNode) { } } - private boolean isEquipmentEditable(Identifiable equipment, + protected boolean isEquipmentEditable(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List equipmentsReport) { if (modificationByFilterInfos.getEditedField() == null) { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java index 4fc837ac8..64c261aff 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java @@ -59,6 +59,16 @@ public NetworkModificationException.Type getExceptionType() { return BY_SIMPLE_MODIFICATION_ERROR; } + @Override + protected boolean isEquipmentEditable(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List equipmentsReport) { + AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; + if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { + return true; + } else { + return super.isEquipmentEditable(equipment, modificationByFilterInfos, equipmentsReport); + } + } + @Override protected boolean preCheckValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List reports, List notEditableEquipments) { return true; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java index 6219b8c86..fcbb29f63 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java @@ -19,8 +19,10 @@ import org.gridsuite.modification.server.dto.BySimpleModificationInfos; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; +import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.simple.PropertyModificationByFilterInfos; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.service.FilterService; @@ -38,6 +40,8 @@ import static org.gridsuite.modification.server.Impacts.TestImpactUtils.createCollectionElementImpact; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -254,7 +258,16 @@ String getPath(boolean isRegexPath) { protected abstract List getTestFilters(); - protected abstract List> getSimpleModificationInfos(); + protected List> getSimpleModificationInfos() { + PropertyModificationByFilterInfos spySimpleInfos = spy(PropertyModificationByFilterInfos.builder() + .editedField(DataType.PROPERTY.name()) + .propertyName("propertyName") + .value("propertyValue") + .filters(List.of(filter1)) + .build()); + doReturn(DataType.PROPERTY).when(spySimpleInfos).getDataType(); + return new ArrayList<>(List.of(spySimpleInfos)); + } protected abstract List> getUpdatedSimpleModificationInfos(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java index a37f94796..fcaabfca1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java @@ -127,7 +127,10 @@ protected List> getSimpleModification .value(2.) .build(); - return List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4, simpleInfos5); + List> infosList = super.getSimpleModificationInfos(); + infosList.addAll(List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4, simpleInfos5)); + + return infosList; } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java index 5a6580ce4..999c85da4 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java @@ -25,6 +25,7 @@ import java.util.Date; import java.util.List; +import static org.assertj.core.api.Assertions.assertThat; import static org.gridsuite.modification.server.utils.NetworkUtil.createGenerator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -169,6 +170,7 @@ protected List getTestFilters() { @Override protected List> getSimpleModificationInfos() { + DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() .editedField(GeneratorField.REACTIVE_POWER_SET_POINT.name()) .value(50.) @@ -253,7 +255,9 @@ protected List> getSimpleModification .filters(List.of(filter1)) .build(); - return List.of(simpleInfos1, + List> infosList = super.getSimpleModificationInfos(); + infosList.addAll(List.of( + simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4, @@ -267,7 +271,9 @@ protected List> getSimpleModification simpleInfos12, simpleInfos13, simpleInfos14 - ); + )); + + return infosList; } @Override @@ -292,6 +298,7 @@ protected void assertAfterNetworkModificationCreation() { Generator generator1 = getNetwork().getGenerator(GENERATOR_ID_1); GeneratorStartup generatorStartup1 = generator1.getExtension(GeneratorStartup.class); assertNotNull(generatorStartup1); + assertThat(generator1.getProperty("propertyName")).isEqualTo("propertyValue"); assertEquals(100, generator1.getTargetP(), 0); assertEquals(2, generatorStartup1.getMarginalCost(), 0); assertEquals(55, generatorStartup1.getPlannedOutageRate(), 0); @@ -304,6 +311,7 @@ protected void assertAfterNetworkModificationCreation() { Generator generator2 = getNetwork().getGenerator(GENERATOR_ID_2); GeneratorStartup generatorStartup2 = generator2.getExtension(GeneratorStartup.class); assertNotNull(generatorStartup2); + assertThat(generator2.getProperty("propertyName")).isEqualTo("propertyValue"); assertEquals(200, generator2.getTargetP(), 0); assertEquals(2, generatorStartup2.getMarginalCost(), 0); assertEquals(55, generatorStartup2.getPlannedOutageRate(), 0); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java index e9700c3c1..494116151 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java @@ -77,7 +77,10 @@ protected List> getSimpleModification .filters(List.of(filter1)) .build(); - return List.of(simpleInfos1, simpleInfos2, simpleInfos3); + List> infosList = super.getSimpleModificationInfos(); + infosList.addAll(List.of(simpleInfos1, simpleInfos2, simpleInfos3)); + + return infosList; } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java index 0604028c7..d55921859 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java @@ -106,7 +106,10 @@ protected List> getSimpleModification .filters(List.of(filter5)) .build(); - return List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4); + List> infosList = super.getSimpleModificationInfos(); + infosList.addAll(List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4)); + + return infosList; } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java index cb18f92f5..7b2a10eb9 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java @@ -274,8 +274,8 @@ protected List> getSimpleModification .editedField(TwoWindingsTransformerField.RATED_S.name()) .value(2.) .build(); - - return List.of(simpleInfos1, + List> infosList = super.getSimpleModificationInfos(); + infosList.addAll(List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4, @@ -289,7 +289,9 @@ protected List> getSimpleModification simpleInfos12, simpleInfos13, simpleInfos14, - simpleInfos15); + simpleInfos15)); + + return infosList; } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java index 2e2d00c81..29ec9b191 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java @@ -151,7 +151,10 @@ protected List> getUpdatedSimpleModif .filters(List.of(filter4)) .build(); - return List.of(simpleInfos1, simpleInfos2, simpleInfos3); + List> infosList = super.getSimpleModificationInfos(); + infosList.addAll(List.of(simpleInfos1, simpleInfos2, simpleInfos3)); + + return infosList; } @Override From cb666519503b304bd3c3ee1acf9a26cf7f94dfe6 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 12 Sep 2024 13:30:50 +0200 Subject: [PATCH 28/42] add @NotNull annotation --- .../server/dto/byfilter/equipmentfield/BatteryField.java | 3 ++- .../server/dto/byfilter/equipmentfield/GeneratorField.java | 3 ++- .../server/dto/byfilter/equipmentfield/LoadField.java | 5 +++-- .../dto/byfilter/equipmentfield/ShuntCompensatorField.java | 3 ++- .../byfilter/equipmentfield/TwoWindingsTransformerField.java | 3 ++- .../dto/byfilter/equipmentfield/VoltageLevelField.java | 3 ++- 6 files changed, 13 insertions(+), 7 deletions(-) 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 fc4302327..5de8a455a 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 @@ -10,6 +10,7 @@ import com.powsybl.iidm.network.Battery; import com.powsybl.iidm.network.extensions.ActivePowerControl; import com.powsybl.iidm.network.extensions.ActivePowerControlAdder; +import jakarta.validation.constraints.NotNull; /** * @author Seddik Yengui @@ -34,7 +35,7 @@ public static String getReferenceValue(Battery battery, String batteryField) { }; } - public static void setNewValue(Battery battery, String batteryField, String newValue) { + public static void setNewValue(Battery battery, String batteryField, @NotNull String newValue) { BatteryField field = BatteryField.valueOf(batteryField); switch (field) { case MINIMUM_ACTIVE_POWER -> battery.setMinP(Double.parseDouble(newValue)); 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 2cd1d37fb..606a7f145 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 @@ -9,6 +9,7 @@ import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.extensions.*; +import jakarta.validation.constraints.NotNull; /** * @author Seddik Yengui @@ -55,7 +56,7 @@ public static String getReferenceValue(Generator generator, String generatorFiel }; } - public static void setNewValue(Generator generator, String generatorField, String newValue) { + public static void setNewValue(Generator generator, String generatorField, @NotNull String newValue) { GeneratorStartup generatorStartup = generator.getExtension(GeneratorStartup.class); GeneratorShortCircuit generatorShortCircuit = generator.getExtension(GeneratorShortCircuit.class); GeneratorField field = GeneratorField.valueOf(generatorField); diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java index 4582df7d1..5660ce009 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/LoadField.java @@ -9,6 +9,7 @@ import com.powsybl.iidm.network.Load; import com.powsybl.iidm.network.LoadType; +import jakarta.validation.constraints.NotNull; /** * @author Seddik Yengui @@ -27,10 +28,10 @@ public static String getReferenceValue(Load load, String loadField) { }; } - public static void setNewValue(Load load, String loadField, String newValue) { + public static void setNewValue(Load load, String loadField, @NotNull String newValue) { LoadField field = LoadField.valueOf(loadField); switch (field) { - case LOAD_TYPE -> load.setLoadType(newValue != null ? LoadType.valueOf(newValue) : null); + case LOAD_TYPE -> load.setLoadType(LoadType.valueOf(newValue)); case ACTIVE_POWER -> load.setP0(Double.parseDouble(newValue)); case REACTIVE_POWER -> load.setQ0(Double.parseDouble(newValue)); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index 82ecc1a94..cb7894461 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -11,6 +11,7 @@ import com.powsybl.iidm.network.ShuntCompensatorLinearModel; import com.powsybl.iidm.network.ShuntCompensatorModelType; import com.powsybl.iidm.network.VoltageLevel; +import jakarta.validation.constraints.NotNull; import org.gridsuite.modification.server.NetworkModificationException; /** @@ -33,7 +34,7 @@ public static String getReferenceValue(ShuntCompensator shuntCompensator, String }; } - public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCompensatorField, String newValue) { + public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCompensatorField, @NotNull String newValue) { if (shuntCompensator.getModelType() != ShuntCompensatorModelType.LINEAR) { throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, String.format("Shunt compensator with %s model is not supported", shuntCompensator.getModelType())); diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index b60bfa937..5d3af2fbe 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -10,6 +10,7 @@ import com.powsybl.iidm.network.PhaseTapChanger; import com.powsybl.iidm.network.RatioTapChanger; import com.powsybl.iidm.network.TwoWindingsTransformer; +import jakarta.validation.constraints.NotNull; /** * @author Seddik Yengui @@ -54,7 +55,7 @@ public static String getReferenceValue(TwoWindingsTransformer transformer, Strin }; } - public static void setNewValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField, String newValue) { + public static void setNewValue(TwoWindingsTransformer transformer, String twoWindingsTransformerField, @NotNull String newValue) { TwoWindingsTransformerField field = TwoWindingsTransformerField.valueOf(twoWindingsTransformerField); final PhaseTapChanger phaseTapChanger = transformer.getPhaseTapChanger(); final RatioTapChanger ratioTapChanger = transformer.getRatioTapChanger(); diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java index 2303457c2..bbede673a 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java @@ -10,6 +10,7 @@ import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; +import jakarta.validation.constraints.NotNull; /** * @author Seddik Yengui @@ -33,7 +34,7 @@ public static String getReferenceValue(VoltageLevel voltageLevel, String voltage }; } - public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, String newValue) { + public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, @NotNull String newValue) { IdentifiableShortCircuit identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class); VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField); switch (field) { From 715f81a8f1bf8e484f1a58dc2c5d04d2747295e6 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 12 Sep 2024 16:53:39 +0200 Subject: [PATCH 29/42] Renaming to assignment --- .../modification/server/ModificationType.java | 2 +- .../server/NetworkModificationException.java | 2 +- .../dto/ByFormulaModificationInfos.java | 2 +- ...ava => ModificationByAssignmentInfos.java} | 26 ++--- .../server/dto/ModificationInfos.java | 2 +- ...nfos.java => AbstractAssignmentInfos.java} | 2 +- .../AssignmentInfos.java} | 26 +++-- .../BooleanAssignmentInfos.java} | 4 +- .../DoubleAssignmentInfos.java} | 4 +- .../EnumAssignmentInfos.java} | 4 +- .../IntegerAssignmentInfos.java} | 4 +- .../PropertyAssignmentInfos.java} | 14 +-- .../dto/byfilter/formula/FormulaInfos.java | 4 +- ...ity.java => AbstractAssignmentEntity.java} | 10 +- .../byfilter/BySimpleModificationEntity.java | 82 -------------- .../ModificationByAssignmentEntity.java | 82 ++++++++++++++ .../byfilter/formula/FormulaEntity.java | 4 +- ...ationEntity.java => AssignmentEntity.java} | 42 +++---- ... => AbstractModificationByAssignment.java} | 66 +++++------ .../byfilter/ByFormulaModification.java | 14 +-- .../byfilter/BySimpleModification.java | 104 ------------------ .../byfilter/ModificationByAssignment.java | 104 ++++++++++++++++++ .../changesets/changelog_20240912T130742Z.xml | 44 ++++++++ .../db/changelog/db.changelog-master.yaml | 2 +- ...AbstractModificationByAssignmentTest.java} | 68 ++++++------ .../BatteryModificationByAssignmentTest.java} | 38 +++---- ...eneratorModificationByAssignmentTest.java} | 84 +++++++------- .../LoadModificationByAssignmentTest.java} | 28 ++--- ...pensatorModificationByAssignmentTest.java} | 34 +++--- ...nsformerModificationByAssignmentTest.java} | 102 ++++++++--------- ...ageLevelModificationByAssignmentTest.java} | 34 +++--- ...VoltageLevelByFormulaModificationTest.java | 2 +- 32 files changed, 543 insertions(+), 497 deletions(-) rename src/main/java/org/gridsuite/modification/server/dto/{BySimpleModificationInfos.java => ModificationByAssignmentInfos.java} (64%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/{AbstractModificationByFilterInfos.java => AbstractAssignmentInfos.java} (94%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/{simple/AbstractSimpleModificationByFilterInfos.java => assignment/AssignmentInfos.java} (56%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/{simple/BooleanModificationByFilterInfos.java => assignment/BooleanAssignmentInfos.java} (80%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/{simple/DoubleModificationByFilterInfos.java => assignment/DoubleAssignmentInfos.java} (81%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/{simple/EnumModificationByFilterInfos.java => assignment/EnumAssignmentInfos.java} (81%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/{simple/IntegerModificationByFilterInfos.java => assignment/IntegerAssignmentInfos.java} (80%) rename src/main/java/org/gridsuite/modification/server/dto/byfilter/{simple/PropertyModificationByFilterInfos.java => assignment/PropertyAssignmentInfos.java} (71%) rename src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/{ModificationByFilterEntity.java => AbstractAssignmentEntity.java} (67%) delete mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java create mode 100644 src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java rename src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/{SimpleModificationEntity.java => AssignmentEntity.java} (55%) rename src/main/java/org/gridsuite/modification/server/modifications/byfilter/{AbstractByFilterModification.java => AbstractModificationByAssignment.java} (86%) delete mode 100644 src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java create mode 100644 src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java create mode 100644 src/main/resources/db/changelog/changesets/changelog_20240912T130742Z.xml rename src/test/java/org/gridsuite/modification/server/modifications/byfilter/{simple/AbstractBySimpleModificationTest.java => assignment/AbstractModificationByAssignmentTest.java} (75%) rename src/test/java/org/gridsuite/modification/server/modifications/byfilter/{simple/BatteryBySimpleModificationTest.java => assignment/BatteryModificationByAssignmentTest.java} (84%) rename src/test/java/org/gridsuite/modification/server/modifications/byfilter/{simple/GeneratorBySimpleModificationTest.java => assignment/GeneratorModificationByAssignmentTest.java} (87%) rename src/test/java/org/gridsuite/modification/server/modifications/byfilter/{simple/LoadBySimpleModificationTest.java => assignment/LoadModificationByAssignmentTest.java} (79%) rename src/test/java/org/gridsuite/modification/server/modifications/byfilter/{simple/ShuntCompensatorBySimpleModificationTest.java => assignment/ShuntCompensatorModificationByAssignmentTest.java} (84%) rename src/test/java/org/gridsuite/modification/server/modifications/byfilter/{simple/TwoWindingsTransformerBySimpleModificationTest.java => assignment/TwoWindingsTransformerModificationByAssignmentTest.java} (86%) rename src/test/java/org/gridsuite/modification/server/modifications/byfilter/{simple/VoltageLevelBySimpleModificationTest.java => assignment/VoltageLevelModificationByAssignmentTest.java} (87%) diff --git a/src/main/java/org/gridsuite/modification/server/ModificationType.java b/src/main/java/org/gridsuite/modification/server/ModificationType.java index fa08e104d..a95415d71 100644 --- a/src/main/java/org/gridsuite/modification/server/ModificationType.java +++ b/src/main/java/org/gridsuite/modification/server/ModificationType.java @@ -50,7 +50,7 @@ public enum ModificationType { TABULAR_MODIFICATION(PreloadingStrategy.COLLECTION), TABULAR_CREATION(PreloadingStrategy.COLLECTION), BY_FORMULA_MODIFICATION(PreloadingStrategy.COLLECTION), - BY_SIMPLE_MODIFICATION(PreloadingStrategy.COLLECTION), + MODIFICATION_BY_ASSIGNMENT(PreloadingStrategy.COLLECTION), COMPOSITE_MODIFICATION(PreloadingStrategy.COLLECTION); private final PreloadingStrategy strategy; diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java index bee4e4add..493c4f654 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java @@ -113,7 +113,7 @@ public enum Type { CREATE_CONVERTER_STATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), MODIFY_CONVERTER_STATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), BY_FORMULA_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), - BY_SIMPLE_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), + MODIFICATION_BY_ASSIGNMENT_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), HVDC_LINE_NOT_FOUND(HttpStatus.NOT_FOUND), COMPOSITE_MODIFICATION_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), WRONG_HVDC_ANGLE_DROOP_ACTIVE_POWER_CONTROL(HttpStatus.BAD_REQUEST); diff --git a/src/main/java/org/gridsuite/modification/server/dto/ByFormulaModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/ByFormulaModificationInfos.java index 8986be98f..91c5c3b70 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/ByFormulaModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/ByFormulaModificationInfos.java @@ -57,6 +57,6 @@ public ByFormulaModification toModification() { @Override public ReportNode createSubReportNode(ReportNode reportNode) { - return reportNode.newReportNode().withMessageTemplate(ModificationType.BY_FORMULA_MODIFICATION.name(), "By formula modification").add(); + return reportNode.newReportNode().withMessageTemplate(ModificationType.BY_FORMULA_MODIFICATION.name(), "Modification by formula").add(); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/ModificationByAssignmentInfos.java similarity index 64% rename from src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/ModificationByAssignmentInfos.java index 498c5305f..20863caee 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/BySimpleModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/ModificationByAssignmentInfos.java @@ -18,9 +18,9 @@ import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.ModificationType; import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.BySimpleModificationEntity; -import org.gridsuite.modification.server.modifications.byfilter.BySimpleModification; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ModificationByAssignmentEntity; +import org.gridsuite.modification.server.modifications.byfilter.ModificationByAssignment; import java.util.List; @@ -31,29 +31,29 @@ @NoArgsConstructor @Getter @Setter -@JsonTypeName("BY_SIMPLE_MODIFICATION") -@ModificationErrorTypeName("BY_SIMPLE_MODIFICATION_ERROR") +@JsonTypeName("MODIFICATION_BY_ASSIGNMENT") +@ModificationErrorTypeName("MODIFICATION_BY_ASSIGNMENT_ERROR") @ToString(callSuper = true) -@Schema(description = "Modification by simple assignment") -public class BySimpleModificationInfos extends ModificationInfos { +@Schema(description = "Modification by assignment") +public class ModificationByAssignmentInfos extends ModificationInfos { @Schema(description = "Equipment type") private IdentifiableType equipmentType; @Schema(description = "list of modifications") - private List> simpleModificationInfosList; + private List> assignmentInfosList; @Override - public BySimpleModificationEntity toEntity() { - return new BySimpleModificationEntity(this); + public ModificationByAssignmentEntity toEntity() { + return new ModificationByAssignmentEntity(this); } @Override - public BySimpleModification toModification() { - return new BySimpleModification(this); + public ModificationByAssignment toModification() { + return new ModificationByAssignment(this); } @Override public ReportNode createSubReportNode(ReportNode reportNode) { - return reportNode.newReportNode().withMessageTemplate(ModificationType.BY_SIMPLE_MODIFICATION.name(), "By filter modification").add(); + return reportNode.newReportNode().withMessageTemplate(ModificationType.MODIFICATION_BY_ASSIGNMENT.name(), "Modification by filter").add(); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java index 366af5193..66e9b8ae7 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java @@ -68,7 +68,7 @@ @JsonSubTypes.Type(value = ConverterStationCreationInfos.class), @JsonSubTypes.Type(value = TabularModificationInfos.class), @JsonSubTypes.Type(value = ByFormulaModificationInfos.class), - @JsonSubTypes.Type(value = BySimpleModificationInfos.class), + @JsonSubTypes.Type(value = ModificationByAssignmentInfos.class), @JsonSubTypes.Type(value = VscModificationInfos.class), @JsonSubTypes.Type(value = ConverterStationModificationInfos.class), @JsonSubTypes.Type(value = TabularCreationInfos.class), diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractAssignmentInfos.java similarity index 94% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractAssignmentInfos.java index c2b340d23..3257c6936 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/AbstractAssignmentInfos.java @@ -25,7 +25,7 @@ @NoArgsConstructor @Getter @Setter -public abstract class AbstractModificationByFilterInfos { +public abstract class AbstractAssignmentInfos { @Schema(description = "id") private UUID id; diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/AssignmentInfos.java similarity index 56% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/AssignmentInfos.java index ad19b1a38..78e5ef2d0 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/AbstractSimpleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/AssignmentInfos.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.byfilter.simple; +package org.gridsuite.modification.server.dto.byfilter.assignment; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; @@ -16,9 +16,9 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractAssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.AssignmentEntity; /** * @author Thang PHAM @@ -28,25 +28,27 @@ property = "dataType", include = JsonTypeInfo.As.EXISTING_PROPERTY) @JsonSubTypes({ - @JsonSubTypes.Type(value = BooleanModificationByFilterInfos.class, name = "BOOLEAN"), - @JsonSubTypes.Type(value = EnumModificationByFilterInfos.class, name = "ENUM"), - @JsonSubTypes.Type(value = DoubleModificationByFilterInfos.class, name = "DOUBLE"), - @JsonSubTypes.Type(value = IntegerModificationByFilterInfos.class, name = "INTEGER"), - @JsonSubTypes.Type(value = PropertyModificationByFilterInfos.class, name = "PROPERTY"), + @JsonSubTypes.Type(value = BooleanAssignmentInfos.class, name = "BOOLEAN"), + @JsonSubTypes.Type(value = EnumAssignmentInfos.class, name = "ENUM"), + @JsonSubTypes.Type(value = DoubleAssignmentInfos.class, name = "DOUBLE"), + @JsonSubTypes.Type(value = IntegerAssignmentInfos.class, name = "INTEGER"), + @JsonSubTypes.Type(value = PropertyAssignmentInfos.class, name = "PROPERTY"), }) @JsonInclude(JsonInclude.Include.NON_NULL) @SuperBuilder @NoArgsConstructor @Getter @Setter -public abstract class AbstractSimpleModificationByFilterInfos extends AbstractModificationByFilterInfos { +public class AssignmentInfos extends AbstractAssignmentInfos { @Schema(description = "Value") private T value; - public abstract DataType getDataType(); + public DataType getDataType() { + throw new UnsupportedOperationException("This method should not be called"); + } @JsonIgnore - public SimpleModificationEntity toEntity() { - return new SimpleModificationEntity(this); + public AssignmentEntity toEntity() { + return new AssignmentEntity(this); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/BooleanAssignmentInfos.java similarity index 80% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/BooleanAssignmentInfos.java index 9a187a764..d62bab7c1 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/BooleanModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/BooleanAssignmentInfos.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.byfilter.simple; +package org.gridsuite.modification.server.dto.byfilter.assignment; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.NoArgsConstructor; @@ -17,7 +17,7 @@ */ @SuperBuilder @NoArgsConstructor -public class BooleanModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { +public class BooleanAssignmentInfos extends AssignmentInfos { @Override @JsonProperty(access = JsonProperty.Access.READ_ONLY) public DataType getDataType() { diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/DoubleAssignmentInfos.java similarity index 81% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/DoubleAssignmentInfos.java index d5e3de0f0..a560ea9d4 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/DoubleModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/DoubleAssignmentInfos.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.byfilter.simple; +package org.gridsuite.modification.server.dto.byfilter.assignment; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.NoArgsConstructor; @@ -17,7 +17,7 @@ */ @SuperBuilder @NoArgsConstructor -public class DoubleModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { +public class DoubleAssignmentInfos extends AssignmentInfos { @Override @JsonProperty(access = JsonProperty.Access.READ_ONLY) public DataType getDataType() { diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/EnumAssignmentInfos.java similarity index 81% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/EnumAssignmentInfos.java index 5b86930a0..dc134c0da 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/EnumModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/EnumAssignmentInfos.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.byfilter.simple; +package org.gridsuite.modification.server.dto.byfilter.assignment; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.NoArgsConstructor; @@ -17,7 +17,7 @@ */ @SuperBuilder @NoArgsConstructor -public class EnumModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { +public class EnumAssignmentInfos extends AssignmentInfos { @Override @JsonProperty(access = JsonProperty.Access.READ_ONLY) public DataType getDataType() { diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/IntegerAssignmentInfos.java similarity index 80% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/IntegerAssignmentInfos.java index 5710ad4ae..ec17e0eb4 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/IntegerModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/IntegerAssignmentInfos.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.byfilter.simple; +package org.gridsuite.modification.server.dto.byfilter.assignment; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.NoArgsConstructor; @@ -17,7 +17,7 @@ */ @SuperBuilder @NoArgsConstructor -public class IntegerModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { +public class IntegerAssignmentInfos extends AssignmentInfos { @Override @JsonProperty(access = JsonProperty.Access.READ_ONLY) public DataType getDataType() { diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/PropertyAssignmentInfos.java similarity index 71% rename from src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java rename to src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/PropertyAssignmentInfos.java index fd66f0f0b..993e279fc 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/simple/PropertyModificationByFilterInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/PropertyAssignmentInfos.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.dto.byfilter.simple; +package org.gridsuite.modification.server.dto.byfilter.assignment; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; @@ -14,14 +14,14 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.AssignmentEntity; /** * @author Thang PHAM */ @SuperBuilder @NoArgsConstructor -public class PropertyModificationByFilterInfos extends AbstractSimpleModificationByFilterInfos { +public class PropertyAssignmentInfos extends AssignmentInfos { @Schema(description = "Property name") @Getter private String propertyName; @@ -39,9 +39,9 @@ public String getEditedFieldLabel() { } @Override - public SimpleModificationEntity toEntity() { - SimpleModificationEntity simpleModificationEntity = super.toEntity(); - simpleModificationEntity.setPropertyName(propertyName); - return simpleModificationEntity; + public AssignmentEntity toEntity() { + AssignmentEntity assignmentEntity = super.toEntity(); + assignmentEntity.setPropertyName(propertyName); + return assignmentEntity; } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java index dd51cb3e8..663191c4e 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/formula/FormulaInfos.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractAssignmentInfos; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.formula.FormulaEntity; /** @@ -23,7 +23,7 @@ @NoArgsConstructor @Getter @Setter -public class FormulaInfos extends AbstractModificationByFilterInfos { +public class FormulaInfos extends AbstractAssignmentInfos { @Schema(description = "First reference field or value") private ReferenceFieldOrValue fieldOrValue1; diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/AbstractAssignmentEntity.java similarity index 67% rename from src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java rename to src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/AbstractAssignmentEntity.java index 4acfb8aef..908298762 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByFilterEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/AbstractAssignmentEntity.java @@ -9,7 +9,7 @@ import jakarta.persistence.*; import lombok.NoArgsConstructor; -import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractAssignmentInfos; import java.util.UUID; @@ -18,7 +18,7 @@ */ @NoArgsConstructor @MappedSuperclass -public class ModificationByFilterEntity { +public abstract class AbstractAssignmentEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id") @@ -27,12 +27,12 @@ public class ModificationByFilterEntity { @Column private String editedField; - protected ModificationByFilterEntity(AbstractModificationByFilterInfos modificationByFilterInfos) { + protected AbstractAssignmentEntity(AbstractAssignmentInfos abstractAssignmentInfos) { this.id = null; - this.editedField = modificationByFilterInfos.getEditedField(); + this.editedField = abstractAssignmentInfos.getEditedField(); } - protected void assignAttributes(AbstractModificationByFilterInfos modificationByFilterInfos) { + protected void assignAttributes(AbstractAssignmentInfos modificationByFilterInfos) { modificationByFilterInfos.setId(id); modificationByFilterInfos.setEditedField(editedField); } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java deleted file mode 100644 index 84221d401..000000000 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/BySimpleModificationEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Copyright (c) 2024, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.entities.equipment.modification.byfilter; - -import com.powsybl.iidm.network.IdentifiableType; -import jakarta.persistence.*; -import lombok.NoArgsConstructor; -import lombok.NonNull; -import org.gridsuite.modification.server.dto.BySimpleModificationInfos; -import org.gridsuite.modification.server.dto.ModificationInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.entities.ModificationEntity; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.SimpleModificationEntity; - -import java.util.List; - -/** - * @author Thang PHAM - */ -@NoArgsConstructor -@Entity -@Table(name = "bySimpleModification") -@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "bySimpleModification_id_fk_constraint")) -public class BySimpleModificationEntity extends ModificationEntity { - @Enumerated(EnumType.STRING) - @Column - private IdentifiableType equipmentType; - - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) - @JoinColumn(name = "by_simple_modification_id", - foreignKey = @ForeignKey(name = "by_simple_modification_id_fk")) - private List simpleModificationEntities; - - public BySimpleModificationEntity(BySimpleModificationInfos bySimpleModificationInfos) { - super(bySimpleModificationInfos); - assignAttributes(bySimpleModificationInfos); - } - - @Override - public void update(@NonNull ModificationInfos modificationInfos) { - super.update(modificationInfos); - assignAttributes((BySimpleModificationInfos) modificationInfos); - } - - private void assignAttributes(BySimpleModificationInfos bySimpleModificationInfos) { - this.equipmentType = bySimpleModificationInfos.getEquipmentType(); - if (simpleModificationEntities == null) { - simpleModificationEntities = bySimpleModificationInfos.getSimpleModificationInfosList() - .stream() - .map(AbstractSimpleModificationByFilterInfos::toEntity) - .toList(); - } else { - simpleModificationEntities.clear(); - simpleModificationEntities.addAll(bySimpleModificationInfos.getSimpleModificationInfosList() - .stream() - .map(AbstractSimpleModificationByFilterInfos::toEntity) - .toList()); - } - } - - @Override - public BySimpleModificationInfos toModificationInfos() { - return toBySimpleModificationInfosBuilder().build(); - } - - private BySimpleModificationInfos.BySimpleModificationInfosBuilder toBySimpleModificationInfosBuilder() { - return BySimpleModificationInfos.builder() - .uuid(getId()) - .date(getDate()) - .stashed(getStashed()) - .equipmentType(equipmentType) - .simpleModificationInfosList(simpleModificationEntities.stream() - .map(SimpleModificationEntity::toSimpleModificationInfos) - .toList() - ); - } -} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java new file mode 100644 index 000000000..4447b1aa9 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java @@ -0,0 +1,82 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.entities.equipment.modification.byfilter; + +import com.powsybl.iidm.network.IdentifiableType; +import jakarta.persistence.*; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import org.gridsuite.modification.server.dto.ModificationByAssignmentInfos; +import org.gridsuite.modification.server.dto.ModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.entities.ModificationEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.AssignmentEntity; + +import java.util.List; + +/** + * @author Thang PHAM + */ +@NoArgsConstructor +@Entity +@Table(name = "modificationByAssignment") +@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "modificationByAssignment_id_fk_constraint")) +public class ModificationByAssignmentEntity extends ModificationEntity { + @Enumerated(EnumType.STRING) + @Column + private IdentifiableType equipmentType; + + @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + @JoinColumn(name = "modification_by_assignment_id", + foreignKey = @ForeignKey(name = "modification_by_assignment_id_fk")) + private List assignmentEntities; + + public ModificationByAssignmentEntity(ModificationByAssignmentInfos modificationByAssignmentInfos) { + super(modificationByAssignmentInfos); + assignAttributes(modificationByAssignmentInfos); + } + + @Override + public void update(@NonNull ModificationInfos modificationInfos) { + super.update(modificationInfos); + assignAttributes((ModificationByAssignmentInfos) modificationInfos); + } + + private void assignAttributes(ModificationByAssignmentInfos modificationByAssignmentInfos) { + this.equipmentType = modificationByAssignmentInfos.getEquipmentType(); + if (assignmentEntities == null) { + assignmentEntities = modificationByAssignmentInfos.getAssignmentInfosList() + .stream() + .map(AssignmentInfos::toEntity) + .toList(); + } else { + assignmentEntities.clear(); + assignmentEntities.addAll(modificationByAssignmentInfos.getAssignmentInfosList() + .stream() + .map(AssignmentInfos::toEntity) + .toList()); + } + } + + @Override + public ModificationByAssignmentInfos toModificationInfos() { + return toModificationByAssignmentInfosBuilder().build(); + } + + private ModificationByAssignmentInfos.ModificationByAssignmentInfosBuilder toModificationByAssignmentInfosBuilder() { + return ModificationByAssignmentInfos.builder() + .uuid(getId()) + .date(getDate()) + .stashed(getStashed()) + .equipmentType(equipmentType) + .assignmentInfosList(assignmentEntities.stream() + .map(AssignmentEntity::toSimpleModificationInfos) + .toList() + ); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java index 33ec33ae6..4c2b4cdd0 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/formula/FormulaEntity.java @@ -14,7 +14,7 @@ import org.gridsuite.modification.server.dto.byfilter.formula.Operator; import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ModificationByFilterEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.AbstractAssignmentEntity; import java.util.List; @@ -25,7 +25,7 @@ @NoArgsConstructor @Entity @Table(name = "formula", indexes = @Index(name = "by_formula_modification_id_idx", columnList = "by_formula_modification_id")) -public class FormulaEntity extends ModificationByFilterEntity { +public class FormulaEntity extends AbstractAssignmentEntity { @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) @JoinColumn(name = "formula_id", foreignKey = @ForeignKey(name = "formula_id_fk")) diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java similarity index 55% rename from src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java rename to src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java index 413114979..38ae195b0 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/SimpleModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java @@ -12,9 +12,9 @@ import lombok.Setter; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.dto.byfilter.simple.*; +import org.gridsuite.modification.server.dto.byfilter.assignment.*; import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.ModificationByFilterEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.AbstractAssignmentEntity; import java.util.List; import java.util.Optional; @@ -24,8 +24,8 @@ */ @NoArgsConstructor @Entity -@Table(name = "simpleModification", indexes = @Index(name = "by_simple_modification_id_idx", columnList = "by_simple_modification_id")) -public class SimpleModificationEntity extends ModificationByFilterEntity { +@Table(name = "assignment", indexes = @Index(name = "modification_by_assignment_id_idx", columnList = "modification_by_assignment_id")) +public class AssignmentEntity extends AbstractAssignmentEntity { @Column @Enumerated(EnumType.STRING) private DataType dataType; @@ -38,41 +38,41 @@ public class SimpleModificationEntity extends ModificationByFilterEntity { private String propertyName; // dedicated to an exceptional case, i.e. modify a property @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) - @JoinColumn(name = "simple_modification_id", - foreignKey = @ForeignKey(name = "simple_modification_id_fk")) + @JoinColumn(name = "assignment_id", + foreignKey = @ForeignKey(name = "assignment_id_fk")) private List filters; - public SimpleModificationEntity(AbstractSimpleModificationByFilterInfos simpleModificationInfos) { - super(simpleModificationInfos); - this.dataType = simpleModificationInfos.getDataType(); - this.value = Optional.ofNullable(simpleModificationInfos.getValue()).map(Object::toString).orElse(null); - this.filters = simpleModificationInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); + public AssignmentEntity(AssignmentInfos assignmentInfos) { + super(assignmentInfos); + this.dataType = assignmentInfos.getDataType(); + this.value = Optional.ofNullable(assignmentInfos.getValue()).map(Object::toString).orElse(null); + this.filters = assignmentInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); } - public AbstractSimpleModificationByFilterInfos toSimpleModificationInfos() { - AbstractSimpleModificationByFilterInfos simpleModificationByFilterInfos = switch (dataType) { - case BOOLEAN -> BooleanModificationByFilterInfos.builder() + public AssignmentInfos toSimpleModificationInfos() { + AssignmentInfos assignmentInfos = switch (dataType) { + case BOOLEAN -> BooleanAssignmentInfos.builder() .value(value != null ? Boolean.valueOf(value) : null) .build(); - case INTEGER -> IntegerModificationByFilterInfos.builder() + case INTEGER -> IntegerAssignmentInfos.builder() .value(value != null ? Integer.valueOf(value) : null) .build(); - case DOUBLE -> DoubleModificationByFilterInfos.builder() + case DOUBLE -> DoubleAssignmentInfos.builder() .value(value != null ? Double.valueOf(value) : null) .build(); - case ENUM -> EnumModificationByFilterInfos.builder() + case ENUM -> EnumAssignmentInfos.builder() .value(value) .build(); - case PROPERTY -> PropertyModificationByFilterInfos.builder() + case PROPERTY -> PropertyAssignmentInfos.builder() .value(value) .propertyName(propertyName) .build(); }; - assignAttributes(simpleModificationByFilterInfos); - simpleModificationByFilterInfos.setFilters(filters.stream() + assignAttributes(assignmentInfos); + assignmentInfos.setFilters(filters.stream() .map(filterEntity -> new FilterInfos(filterEntity.getFilterId(), filterEntity.getName())) .toList()); - return simpleModificationByFilterInfos; + return assignmentInfos; } } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java similarity index 86% rename from src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java rename to src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java index 0f8ebf16b..46015e502 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractByFilterModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java @@ -18,7 +18,7 @@ import org.gridsuite.modification.server.dto.FilterEquipments; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.ModificationInfos; -import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractAssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.ModificationUtils; @@ -39,7 +39,7 @@ /** * @author Thang PHAM */ -public abstract class AbstractByFilterModification extends AbstractModification { +public abstract class AbstractModificationByAssignment extends AbstractModification { public static final String VALUE_KEY_FILTER_NAME = "filterName"; public static final String VALUE_KEY_FIELD_NAME = "fieldName"; public static final String VALUE_KEY_EQUIPMENT_NAME = "equipmentName"; @@ -75,7 +75,7 @@ public abstract class AbstractByFilterModification extends AbstractModification protected long equipmentCount; protected long equipmentNotFoundCount; - protected AbstractByFilterModification() { + protected AbstractModificationByAssignment() { equipmentNotModifiedCount = 0; equipmentCount = 0; equipmentNotFoundCount = 0; @@ -83,7 +83,7 @@ protected AbstractByFilterModification() { public abstract String getModificationTypeLabel(); - private String getEditedFieldLabel(AbstractModificationByFilterInfos modificationByFilterInfos) { + private String getEditedFieldLabel(AbstractAssignmentInfos modificationByFilterInfos) { return modificationByFilterInfos.getEditedFieldLabel(); } @@ -93,24 +93,24 @@ private String getEditedFieldLabel(AbstractModificationByFilterInfos modificatio public abstract NetworkModificationException.Type getExceptionType(); - public abstract List getModificationByFilterInfosList(); + public abstract List getAssignmentInfosList(); protected abstract boolean preCheckValue(Identifiable equipment, - AbstractModificationByFilterInfos modificationByFilterInfos, + AbstractAssignmentInfos abstractAssignmentInfos, List reports, List notEditableEquipments); - protected abstract String getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos); + protected abstract String getNewValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos); - protected String getOldValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { - return getFieldValue(equipment, modificationByFilterInfos.getEditedField()); + protected String getOldValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos) { + return getFieldValue(equipment, abstractAssignmentInfos.getEditedField()); } - protected String applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { + protected String applyValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos) { // get new value - String newValue = getNewValue(equipment, modificationByFilterInfos); + String newValue = getNewValue(equipment, abstractAssignmentInfos); // set new value for the equipment - setFieldValue(equipment, modificationByFilterInfos.getEditedField(), newValue); + setFieldValue(equipment, abstractAssignmentInfos.getEditedField(), newValue); return newValue; } @@ -125,11 +125,11 @@ public void check(Network network) throws NetworkModificationException { throw new NetworkModificationException(getExceptionType(), "Missing required attributes to modify the equipment"); } - if (CollectionUtils.isEmpty(getModificationByFilterInfosList())) { + if (CollectionUtils.isEmpty(getAssignmentInfosList())) { throw new NetworkModificationException(getExceptionType(), String.format("At least one %s is required", getModificationTypeLabel())); } - if (getModificationByFilterInfosList().stream().anyMatch(modificationByFilterInfos -> CollectionUtils.isEmpty(modificationByFilterInfos.getFilters()))) { + if (getAssignmentInfosList().stream().anyMatch(modificationByFilterInfos -> CollectionUtils.isEmpty(modificationByFilterInfos.getFilters()))) { throw new NetworkModificationException(getExceptionType(), String.format("Every %s must have at least one filter", getModificationTypeLabel())); } } @@ -149,9 +149,9 @@ public void apply(Network network, ReportNode subReportNode) { .add(); List reports = new ArrayList<>(); // perform modifications - getModificationByFilterInfosList().forEach(modificationByFilterInfos -> - modificationByFilterInfos.getFilters().forEach(filterInfos -> - applyOnFilterEquipments(network, exportFilters, reports, modificationByFilterInfos, filterInfos))); + getAssignmentInfosList().forEach(abstractAssignmentInfos -> + abstractAssignmentInfos.getFilters().forEach(filterInfos -> + applyOnFilterEquipments(network, exportFilters, reports, abstractAssignmentInfos, filterInfos))); // reporting subReportNode.newReportNode() .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION, @@ -188,14 +188,14 @@ public void apply(Network network, ReportNode subReportNode) { } protected boolean isEquipmentEditable(Identifiable equipment, - AbstractModificationByFilterInfos modificationByFilterInfos, + AbstractAssignmentInfos abstractAssignmentInfos, List equipmentsReport) { - if (modificationByFilterInfos.getEditedField() == null) { + if (abstractAssignmentInfos.getEditedField() == null) { return false; } if (equipment.getType() == IdentifiableType.TWO_WINDINGS_TRANSFORMER) { - TwoWindingsTransformerField editedField = TwoWindingsTransformerField.valueOf(modificationByFilterInfos.getEditedField()); + TwoWindingsTransformerField editedField = TwoWindingsTransformerField.valueOf(abstractAssignmentInfos.getEditedField()); TwoWindingsTransformer twoWindingsTransformer = (TwoWindingsTransformer) equipment; return switch (editedField) { case TARGET_V, RATIO_LOW_TAP_POSITION, RATIO_TAP_POSITION, RATIO_TARGET_DEADBAND -> { @@ -230,8 +230,8 @@ protected boolean isEquipmentEditable(Identifiable equipment, return true; } - private void createByFilterModificationReports(List reports, AbstractModificationByFilterInfos modificationByFilterInfos, - FilterInfos filterInfos, FilterEquipments filterEquipments, List notEditableEquipments) { + private void createAssignmentReports(List reports, AbstractAssignmentInfos abstractAssignmentInfos, + FilterInfos filterInfos, FilterEquipments filterEquipments, List notEditableEquipments) { if (notEditableEquipments.size() == filterEquipments.getIdentifiableAttributes().size()) { reports.add(ReportNode.newRootReportNode() .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION_FAILED, @@ -266,7 +266,7 @@ private void createByFilterModificationReports(List reports, Abstrac reports.add(ReportNode.newRootReportNode() .withMessageTemplate(REPORT_KEY_EDITED_FIELD_FILTER, " Edited field : ${" + VALUE_KEY_FIELD_NAME + "}") - .withUntypedValue(VALUE_KEY_FIELD_NAME, getEditedFieldLabel(modificationByFilterInfos)) + .withUntypedValue(VALUE_KEY_FIELD_NAME, getEditedFieldLabel(abstractAssignmentInfos)) .withSeverity(TypedValue.INFO_SEVERITY) .build()); @@ -281,26 +281,26 @@ private void createByFilterModificationReports(List reports, Abstrac } private void applyModification(Identifiable equipment, - AbstractModificationByFilterInfos modificationByFilterInfos, + AbstractAssignmentInfos abstractAssignmentInfos, List reports, List notEditableEquipments) { // check pre-conditions - if (!preCheckValue(equipment, modificationByFilterInfos, reports, notEditableEquipments)) { + if (!preCheckValue(equipment, abstractAssignmentInfos, reports, notEditableEquipments)) { return; } // perform to apply new value try { - final String oldValue = getOldValue(equipment, modificationByFilterInfos); - final String newValue = applyValue(equipment, modificationByFilterInfos); + final String oldValue = getOldValue(equipment, abstractAssignmentInfos); + final String newValue = applyValue(equipment, abstractAssignmentInfos); reports.add(ReportNode.newRootReportNode() .withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_REPORT, " ${" + VALUE_KEY_EQUIPMENT_TYPE + "} id : ${" + VALUE_KEY_EQUIPMENT_NAME + "}, ${" + VALUE_KEY_FIELD_NAME + "} : ${" + VALUE_KEY_OLD_VALUE + "} → ${" + VALUE_KEY_NEW_VALUE + "}") .withUntypedValue(VALUE_KEY_EQUIPMENT_TYPE, equipment.getType().name()) .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) - .withUntypedValue(VALUE_KEY_FIELD_NAME, getEditedFieldLabel(modificationByFilterInfos)) + .withUntypedValue(VALUE_KEY_FIELD_NAME, getEditedFieldLabel(abstractAssignmentInfos)) .withUntypedValue(VALUE_KEY_OLD_VALUE, oldValue == null ? NO_VALUE : oldValue) .withUntypedValue(VALUE_KEY_NEW_VALUE, newValue) .withSeverity(TypedValue.TRACE_SEVERITY) @@ -320,7 +320,7 @@ private void applyModification(Identifiable equipment, } private Map getFilters() { - return getModificationByFilterInfosList().stream() + return getAssignmentInfosList().stream() .flatMap(v -> v.getFilters().stream()) .filter(distinctByKey(FilterInfos::getId)) .collect(Collectors.toMap(FilterInfos::getId, FilterInfos::getName)); @@ -329,7 +329,7 @@ private Map getFilters() { private void applyOnFilterEquipments(Network network, Map exportFilters, List reports, - AbstractModificationByFilterInfos modificationByFilterInfos, + AbstractAssignmentInfos abstractAssignmentInfos, FilterInfos filterInfos) { FilterEquipments filterEquipments = exportFilters.get(filterInfos.getId()); @@ -350,16 +350,16 @@ private void applyOnFilterEquipments(Network network, .stream() .map(attributes -> network.getIdentifiable(attributes.getId())) .filter(equipment -> { - boolean isEditableEquipment = isEquipmentEditable(equipment, modificationByFilterInfos, equipmentsReport); + boolean isEditableEquipment = isEquipmentEditable(equipment, abstractAssignmentInfos, equipmentsReport); if (!isEditableEquipment) { notEditableEquipments.add(equipment.getId()); equipmentNotModifiedCount += 1; } return isEditableEquipment; }) - .forEach(equipment -> applyModification(equipment, modificationByFilterInfos, equipmentsReport, notEditableEquipments)); + .forEach(equipment -> applyModification(equipment, abstractAssignmentInfos, equipmentsReport, notEditableEquipments)); - createByFilterModificationReports(reports, modificationByFilterInfos, filterInfos, filterEquipments, notEditableEquipments); + createAssignmentReports(reports, abstractAssignmentInfos, filterInfos, filterEquipments, notEditableEquipments); reports.addAll(equipmentsReport); } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java index 67c92c38f..c29225cdc 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java @@ -14,7 +14,7 @@ import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; -import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractAssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.dto.byfilter.formula.Operator; @@ -27,7 +27,7 @@ /** * @author Thang PHAM */ -public class ByFormulaModification extends AbstractByFilterModification { +public class ByFormulaModification extends AbstractModificationByAssignment { private final ByFormulaModificationInfos modificationInfos; public ByFormulaModification(ByFormulaModificationInfos modificationInfos) { @@ -51,7 +51,7 @@ public IdentifiableType getEquipmentType() { } @Override - public List getModificationByFilterInfosList() { + public List getAssignmentInfosList() { return Collections.unmodifiableList(modificationInfos.getFormulaInfosList()); } @@ -61,8 +61,8 @@ public NetworkModificationException.Type getExceptionType() { } @Override - protected boolean preCheckValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List reports, List notEditableEquipments) { - FormulaInfos formulaInfos = (FormulaInfos) modificationByFilterInfos; + protected boolean preCheckValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos, List reports, List notEditableEquipments) { + FormulaInfos formulaInfos = (FormulaInfos) abstractAssignmentInfos; Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(equipment); Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(equipment); if (value1 == null || Double.isNaN(value1) || value2 == null || Double.isNaN(value2)) { @@ -85,8 +85,8 @@ protected boolean preCheckValue(Identifiable equipment, AbstractModificationB } @Override - protected String getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { - FormulaInfos formulaInfos = (FormulaInfos) modificationByFilterInfos; + protected String getNewValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos) { + FormulaInfos formulaInfos = (FormulaInfos) abstractAssignmentInfos; Double value1 = formulaInfos.getFieldOrValue1().getRefOrValue(equipment); Double value2 = formulaInfos.getFieldOrValue2().getRefOrValue(equipment); return applyOperation(formulaInfos.getOperator(), value1, value2).toString(); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java deleted file mode 100644 index 64c261aff..000000000 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/BySimpleModification.java +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Copyright (c) 2024, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package org.gridsuite.modification.server.modifications.byfilter; - -import com.powsybl.commons.report.ReportNode; -import com.powsybl.iidm.network.Identifiable; -import com.powsybl.iidm.network.IdentifiableType; -import org.gridsuite.modification.server.NetworkModificationException; -import org.gridsuite.modification.server.dto.BySimpleModificationInfos; -import org.gridsuite.modification.server.dto.ModificationInfos; -import org.gridsuite.modification.server.dto.byfilter.AbstractModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.PropertyModificationByFilterInfos; - -import java.util.Collections; -import java.util.List; - -import static org.gridsuite.modification.server.NetworkModificationException.Type.BY_SIMPLE_MODIFICATION_ERROR; - -/** - * @author Thang PHAM - */ -public class BySimpleModification extends AbstractByFilterModification { - private final BySimpleModificationInfos modificationInfos; - - public BySimpleModification(BySimpleModificationInfos modificationInfos) { - super(); - this.modificationInfos = modificationInfos; - } - - @Override - public String getModificationTypeLabel() { - return "simple modification"; - } - - @Override - public ModificationInfos getModificationInfos() { - return modificationInfos; - } - - @Override - public IdentifiableType getEquipmentType() { - return modificationInfos.getEquipmentType(); - } - - @Override - public List getModificationByFilterInfosList() { - return Collections.unmodifiableList(modificationInfos.getSimpleModificationInfosList()); - } - - @Override - public NetworkModificationException.Type getExceptionType() { - return BY_SIMPLE_MODIFICATION_ERROR; - } - - @Override - protected boolean isEquipmentEditable(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List equipmentsReport) { - AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; - if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { - return true; - } else { - return super.isEquipmentEditable(equipment, modificationByFilterInfos, equipmentsReport); - } - } - - @Override - protected boolean preCheckValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos, List reports, List notEditableEquipments) { - return true; - } - - @Override - protected String getOldValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { - AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; - if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { - return equipment.getProperty(((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName()); - } else { - return super.getOldValue(equipment, modificationByFilterInfos); - } - } - - @Override - protected String getNewValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { - AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; - return simpleModificationInfos.getValue().toString(); - } - - @Override - protected String applyValue(Identifiable equipment, AbstractModificationByFilterInfos modificationByFilterInfos) { - AbstractSimpleModificationByFilterInfos simpleModificationInfos = (AbstractSimpleModificationByFilterInfos) modificationByFilterInfos; - if (simpleModificationInfos.getDataType() == DataType.PROPERTY) { - String newValue = getNewValue(equipment, modificationByFilterInfos); - equipment.setProperty(((PropertyModificationByFilterInfos) simpleModificationInfos).getPropertyName(), newValue); - return newValue; - } else { - return super.applyValue(equipment, modificationByFilterInfos); - } - } -} diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java new file mode 100644 index 000000000..7b9a94b13 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2024, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.byfilter; + +import com.powsybl.commons.report.ReportNode; +import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.IdentifiableType; +import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.ModificationByAssignmentInfos; +import org.gridsuite.modification.server.dto.ModificationInfos; +import org.gridsuite.modification.server.dto.byfilter.AbstractAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.DataType; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.PropertyAssignmentInfos; + +import java.util.Collections; +import java.util.List; + +import static org.gridsuite.modification.server.NetworkModificationException.Type.MODIFICATION_BY_ASSIGNMENT_ERROR; + +/** + * @author Thang PHAM + */ +public class ModificationByAssignment extends AbstractModificationByAssignment { + private final ModificationByAssignmentInfos modificationInfos; + + public ModificationByAssignment(ModificationByAssignmentInfos modificationInfos) { + super(); + this.modificationInfos = modificationInfos; + } + + @Override + public String getModificationTypeLabel() { + return "assignment"; + } + + @Override + public ModificationInfos getModificationInfos() { + return modificationInfos; + } + + @Override + public IdentifiableType getEquipmentType() { + return modificationInfos.getEquipmentType(); + } + + @Override + public List getAssignmentInfosList() { + return Collections.unmodifiableList(modificationInfos.getAssignmentInfosList()); + } + + @Override + public NetworkModificationException.Type getExceptionType() { + return MODIFICATION_BY_ASSIGNMENT_ERROR; + } + + @Override + protected boolean isEquipmentEditable(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos, List equipmentsReport) { + AssignmentInfos assignmentInfos = (AssignmentInfos) abstractAssignmentInfos; + if (assignmentInfos.getDataType() == DataType.PROPERTY) { + return true; + } else { + return super.isEquipmentEditable(equipment, abstractAssignmentInfos, equipmentsReport); + } + } + + @Override + protected boolean preCheckValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos, List reports, List notEditableEquipments) { + return true; + } + + @Override + protected String getOldValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos) { + AssignmentInfos assignmentInfos = (AssignmentInfos) abstractAssignmentInfos; + if (assignmentInfos.getDataType() == DataType.PROPERTY) { + return equipment.getProperty(((PropertyAssignmentInfos) assignmentInfos).getPropertyName()); + } else { + return super.getOldValue(equipment, abstractAssignmentInfos); + } + } + + @Override + protected String getNewValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos) { + AssignmentInfos simpleModificationInfos = (AssignmentInfos) abstractAssignmentInfos; + return simpleModificationInfos.getValue().toString(); + } + + @Override + protected String applyValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos) { + AssignmentInfos assignmentInfos = (AssignmentInfos) abstractAssignmentInfos; + if (assignmentInfos.getDataType() == DataType.PROPERTY) { + String newValue = getNewValue(equipment, abstractAssignmentInfos); + equipment.setProperty(((PropertyAssignmentInfos) assignmentInfos).getPropertyName(), newValue); + return newValue; + } else { + return super.applyValue(equipment, abstractAssignmentInfos); + } + } +} diff --git a/src/main/resources/db/changelog/changesets/changelog_20240912T130742Z.xml b/src/main/resources/db/changelog/changesets/changelog_20240912T130742Z.xml new file mode 100644 index 000000000..d7e93035e --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20240912T130742Z.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 99cbfa99d..3dc5734c9 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -304,5 +304,5 @@ databaseChangeLog: file: changesets/changelog_20240703T170634Z.xml relativeToChangelogFile: true - include: - file: changesets/changelog_20240902T071959Z.xml + file: changesets/changelog_20240912T130742Z.xml relativeToChangelogFile: true diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java similarity index 75% rename from src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java index fcbb29f63..eea2d37f9 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/AbstractBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications.byfilter.simple; +package org.gridsuite.modification.server.modifications.byfilter.assignment; import com.fasterxml.jackson.core.type.TypeReference; import com.github.tomakehurst.wiremock.client.WireMock; @@ -16,13 +16,13 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.BySimpleModificationInfos; +import org.gridsuite.modification.server.dto.ModificationByAssignmentInfos; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.PropertyModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.PropertyAssignmentInfos; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.service.FilterService; @@ -49,7 +49,7 @@ * @author Thang PHAM */ @Tag("IntegrationTest") -public abstract class AbstractBySimpleModificationTest extends AbstractNetworkModificationTest { +public abstract class AbstractModificationByAssignmentTest extends AbstractNetworkModificationTest { protected static final UUID FILTER_ID_1 = UUID.randomUUID(); protected static final UUID FILTER_ID_2 = UUID.randomUUID(); protected static final UUID FILTER_ID_3 = UUID.randomUUID(); @@ -88,24 +88,24 @@ public void testByModificationError() throws Exception { .andExpect(status().isBadRequest()); // Test with empty list of simple modification - checkCreationApplicationStatus(BySimpleModificationInfos.builder().equipmentType(getIdentifiableType()).simpleModificationInfosList(List.of()).build(), + checkCreationApplicationStatus(ModificationByAssignmentInfos.builder().equipmentType(getIdentifiableType()).assignmentInfosList(List.of()).build(), NetworkModificationResult.ApplicationStatus.WITH_ERRORS); // Test with empty list of filters in simple modification - List> simpleInfosWithNoFilters = getSimpleModificationInfos().stream().peek(simpleInfos -> simpleInfos.setFilters(List.of())).toList(); - checkCreationApplicationStatus(BySimpleModificationInfos.builder().equipmentType(getIdentifiableType()).simpleModificationInfosList(simpleInfosWithNoFilters).build(), + List> simpleInfosWithNoFilters = getAssignmentInfos().stream().peek(simpleInfos -> simpleInfos.setFilters(List.of())).toList(); + checkCreationApplicationStatus(ModificationByAssignmentInfos.builder().equipmentType(getIdentifiableType()).assignmentInfosList(simpleInfosWithNoFilters).build(), NetworkModificationResult.ApplicationStatus.WITH_ERRORS); // Test with editedField = null - AbstractSimpleModificationByFilterInfos simpleInfosWithNoEditedField = DoubleModificationByFilterInfos.builder() + AssignmentInfos simpleInfosWithNoEditedField = DoubleAssignmentInfos.builder() .value(50.) .filters(List.of()) .build(); - checkCreationApplicationStatus(BySimpleModificationInfos.builder().equipmentType(getIdentifiableType()).simpleModificationInfosList(List.of(simpleInfosWithNoEditedField)).build(), + checkCreationApplicationStatus(ModificationByAssignmentInfos.builder().equipmentType(getIdentifiableType()).assignmentInfosList(List.of(simpleInfosWithNoEditedField)).build(), NetworkModificationResult.ApplicationStatus.WITH_ERRORS); } - protected void checkCreateWithWarning(List> simpleInfos, List existingEquipmentList) throws Exception { + protected void checkCreateWithWarning(List> simpleInfos, List existingEquipmentList) throws Exception { AbstractFilter filter = getFilterEquipments(FILTER_WITH_ONE_WRONG_ID, existingEquipmentList); UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching("/v1/filters/metadata\\?ids=" + FILTER_WITH_ONE_WRONG_ID)) @@ -113,17 +113,17 @@ protected void checkCreateWithWarning(List> simpleInfos, List filterEquipments) throws Exception { + protected void checkCreateWithError(List> simpleInfos, List filterEquipments) throws Exception { String filterIds = filterEquipments.stream() .map(AbstractFilter::getId) .map(UUID::toString) @@ -134,12 +134,12 @@ protected void checkCreateWithError(List> simpleInfosList = getSimpleModificationInfos().stream() + List> simpleInfosList = getAssignmentInfos().stream() .peek(simpleInfos -> simpleInfos.setFilters(List.of(new FilterInfos(FILTER_WITH_ALL_WRONG_IDS, "filterWithWrongId")))) .toList(); @@ -160,12 +160,12 @@ public void testModificationWithAllWrongEquipmentIds() throws Exception { .withBody(mapper.writeValueAsString(List.of(filter))) .withHeader("Content-Type", "application/json"))).getId(); - BySimpleModificationInfos bySimpleModificationInfos = BySimpleModificationInfos.builder() - .simpleModificationInfosList(simpleInfosList) + ModificationByAssignmentInfos modificationByAssignmentInfos = ModificationByAssignmentInfos.builder() + .assignmentInfosList(simpleInfosList) .equipmentType(getIdentifiableType()) .build(); - checkCreationApplicationStatus(bySimpleModificationInfos, NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + checkCreationApplicationStatus(modificationByAssignmentInfos, NetworkModificationResult.ApplicationStatus.WITH_ERRORS); wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(List.of(FILTER_WITH_ALL_WRONG_IDS)), false); } @@ -198,9 +198,9 @@ public void testCopy() throws Exception { wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(filters.stream().map(AbstractFilter::getId).collect(Collectors.toList())), false); } - protected void checkCreationApplicationStatus(BySimpleModificationInfos bySimpleModificationInfos, + protected void checkCreationApplicationStatus(ModificationByAssignmentInfos modificationByAssignmentInfos, NetworkModificationResult.ApplicationStatus applicationStatus) throws Exception { - String modificationToCreateJson = mapper.writeValueAsString(bySimpleModificationInfos); + String modificationToCreateJson = mapper.writeValueAsString(modificationByAssignmentInfos); MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); @@ -216,19 +216,19 @@ protected Network createNetwork(UUID networkUuid) { } @Override - protected BySimpleModificationInfos buildModification() { - return BySimpleModificationInfos.builder() + protected ModificationByAssignmentInfos buildModification() { + return ModificationByAssignmentInfos.builder() .equipmentType(getIdentifiableType()) - .simpleModificationInfosList(getSimpleModificationInfos()) + .assignmentInfosList(getAssignmentInfos()) .stashed(false) .build(); } @Override - protected BySimpleModificationInfos buildModificationUpdate() { - return BySimpleModificationInfos.builder() + protected ModificationByAssignmentInfos buildModificationUpdate() { + return ModificationByAssignmentInfos.builder() .equipmentType(getIdentifiableType()) - .simpleModificationInfosList(getUpdatedSimpleModificationInfos()) + .assignmentInfosList(getUpdatedAssignmentInfos()) .stashed(false) .build(); } @@ -258,8 +258,8 @@ String getPath(boolean isRegexPath) { protected abstract List getTestFilters(); - protected List> getSimpleModificationInfos() { - PropertyModificationByFilterInfos spySimpleInfos = spy(PropertyModificationByFilterInfos.builder() + protected List> getAssignmentInfos() { + PropertyAssignmentInfos spySimpleInfos = spy(PropertyAssignmentInfos.builder() .editedField(DataType.PROPERTY.name()) .propertyName("propertyName") .value("propertyValue") @@ -269,7 +269,7 @@ protected List> getSimpleModification return new ArrayList<>(List.of(spySimpleInfos)); } - protected abstract List> getUpdatedSimpleModificationInfos(); + protected abstract List> getUpdatedAssignmentInfos(); protected abstract IdentifiableType getIdentifiableType(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java similarity index 84% rename from src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java index fcaabfca1..c097834f0 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/BatteryBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications.byfilter.simple; +package org.gridsuite.modification.server.modifications.byfilter.assignment; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.extensions.ActivePowerControl; @@ -15,8 +15,8 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.BatteryField; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.junit.Test; @@ -30,7 +30,7 @@ /** * @author Thang PHAM */ -public class BatteryBySimpleModificationTest extends AbstractBySimpleModificationTest { +public class BatteryModificationByAssignmentTest extends AbstractModificationByAssignmentTest { private static final String BATTERY_ID_1 = "v3Battery"; private static final String BATTERY_ID_2 = "battery2"; private static final String BATTERY_ID_3 = "battery3"; @@ -43,13 +43,13 @@ public void testCreateWithWarning() throws Exception { IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(BATTERY_ID_1, 1.0); IdentifierListFilterEquipmentAttributes wrongIdAttributes = getIdentifiableAttributes("wrongId", 1.0); - DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos = DoubleAssignmentInfos.builder() .filters(List.of(filterWithOneWrongId)) .editedField(BatteryField.ACTIVE_POWER_SET_POINT.name()) .value(55.) .build(); - checkCreateWithWarning(List.of(simpleInfos), List.of(identifiableAttributes, wrongIdAttributes)); + checkCreateWithWarning(List.of(assignmentInfos), List.of(identifiableAttributes, wrongIdAttributes)); assertEquals(55, getNetwork().getBattery(BATTERY_ID_1).getTargetP(), 0); } @@ -96,64 +96,64 @@ protected List getTestFilters() { } @Override - protected List> getSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .filters(List.of(filter1, filter2)) .editedField(BatteryField.MAXIMUM_ACTIVE_POWER.name()) .value(80.) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .filters(List.of(filter3)) .editedField(BatteryField.MINIMUM_ACTIVE_POWER.name()) .value(30.) .build(); - DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() .filters(List.of(filter5)) .editedField(BatteryField.ACTIVE_POWER_SET_POINT.name()) .value(30.) .build(); - DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos4 = DoubleAssignmentInfos.builder() .filters(List.of(filter4)) .editedField(BatteryField.REACTIVE_POWER_SET_POINT.name()) .value(2.) .build(); - DoubleModificationByFilterInfos simpleInfos5 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos5 = DoubleAssignmentInfos.builder() .filters(List.of(filter4)) .editedField(BatteryField.DROOP.name()) .value(2.) .build(); - List> infosList = super.getSimpleModificationInfos(); - infosList.addAll(List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4, simpleInfos5)); + List> infosList = super.getAssignmentInfos(); + infosList.addAll(List.of(assignmentInfos1, assignmentInfos2, assignmentInfos3, assignmentInfos4, assignmentInfos5)); return infosList; } @Override - protected List> getUpdatedSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getUpdatedAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .filters(List.of(filter1, filter2)) .editedField(BatteryField.MAXIMUM_ACTIVE_POWER.name()) .value(200.) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .filters(List.of(filter3)) .editedField(BatteryField.MINIMUM_ACTIVE_POWER.name()) .value(35.) .build(); - DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() .filters(List.of(filter3)) .editedField(BatteryField.ACTIVE_POWER_SET_POINT.name()) .value(10.) .build(); - return List.of(simpleInfos1, simpleInfos2, simpleInfos3); + return List.of(assignmentInfos1, assignmentInfos2, assignmentInfos3); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java similarity index 87% rename from src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java index 999c85da4..b92d11f05 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/GeneratorBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications.byfilter.simple; +package org.gridsuite.modification.server.modifications.byfilter.assignment; import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.IdentifiableType; @@ -16,9 +16,9 @@ import org.gridsuite.filter.utils.EquipmentType; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.GeneratorField; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.BooleanModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.BooleanAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; import org.junit.Test; import org.junit.jupiter.api.Tag; @@ -34,7 +34,7 @@ * @author Thang PHAM */ @Tag("IntegrationTest") -public class GeneratorBySimpleModificationTest extends AbstractBySimpleModificationTest { +public class GeneratorModificationByAssignmentTest extends AbstractModificationByAssignmentTest { private static final String GENERATOR_ID_1 = "idGenerator"; private static final String GENERATOR_ID_2 = "v5generator"; private static final String GENERATOR_ID_3 = "v6generator"; @@ -51,13 +51,13 @@ public void testCreateWithWarning() throws Exception { IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(GENERATOR_ID_1, 1.0); IdentifierListFilterEquipmentAttributes wrongIdAttributes = getIdentifiableAttributes("wrongId", 1.0); - DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos = DoubleAssignmentInfos.builder() .filters(List.of(filterWithOneWrongId)) .editedField(GeneratorField.ACTIVE_POWER_SET_POINT.name()) .value(55.) .build(); - checkCreateWithWarning(List.of(simpleInfos), List.of(identifiableAttributes, wrongIdAttributes)); + checkCreateWithWarning(List.of(assignmentInfos), List.of(identifiableAttributes, wrongIdAttributes)); assertEquals(55, getNetwork().getGenerator(GENERATOR_ID_1).getTargetP(), 0); } @@ -66,7 +66,7 @@ public void testWithNullValue() throws Exception { IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(GENERATOR_ID_1, 1.0); AbstractFilter filterEquipments = getFilterEquipments(FILTER_ID_1, List.of(identifiableAttributes)); - DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos simpleInfos = DoubleAssignmentInfos.builder() .filters(List.of(new FilterInfos(FILTER_ID_1, "filter1"))) .editedField(GeneratorField.ACTIVE_POWER_SET_POINT.name()) .value(null) @@ -169,128 +169,128 @@ protected List getTestFilters() { } @Override - protected List> getSimpleModificationInfos() { + protected List> getAssignmentInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.REACTIVE_POWER_SET_POINT.name()) .value(50.) .filters(List.of(filter1, filter2)) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.DROOP.name()) .value(2.) .filters(List.of(filter3)) .build(); - DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.RATED_NOMINAL_POWER.name()) .value(2.) .filters(List.of(filter5)) .build(); - DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos4 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.MARGINAL_COST.name()) .value(2.) .filters(List.of(filter1)) .build(); - DoubleModificationByFilterInfos simpleInfos5 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos5 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.VOLTAGE_SET_POINT.name()) .value(2.) .filters(List.of(filter4)) .build(); - DoubleModificationByFilterInfos simpleInfos6 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos6 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.PLANNED_ACTIVE_POWER_SET_POINT.name()) .value(10.) .filters(List.of(filter1)) .build(); - DoubleModificationByFilterInfos simpleInfos7 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos7 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.MINIMUM_ACTIVE_POWER.name()) .value(2.) .filters(List.of(filter1, filter2)) .build(); - DoubleModificationByFilterInfos simpleInfos8 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos8 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.PLANNED_OUTAGE_RATE.name()) .value(0.1) .filters(List.of(filter1)) .build(); - DoubleModificationByFilterInfos simpleInfos9 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos9 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.FORCED_OUTAGE_RATE.name()) .value(0.05) .filters(List.of(filter1)) .build(); - DoubleModificationByFilterInfos simpleInfos10 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos10 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.MAXIMUM_ACTIVE_POWER.name()) .value(50.) .filters(List.of(filter1, filter2, filter3, filter4, filter5)) .build(); - DoubleModificationByFilterInfos simpleInfos11 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos11 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.TRANSIENT_REACTANCE.name()) .value(0.2) .filters(List.of(filter2)) .build(); - DoubleModificationByFilterInfos simpleInfos12 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos12 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.STEP_UP_TRANSFORMER_REACTANCE.name()) .value(0.3) .filters(List.of(filter2)) .build(); - DoubleModificationByFilterInfos simpleInfos13 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos13 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.Q_PERCENT.name()) .value(0.25) .filters(List.of(filter4)) .build(); - BooleanModificationByFilterInfos simpleInfos14 = BooleanModificationByFilterInfos.builder() + BooleanAssignmentInfos assignmentInfos14 = BooleanAssignmentInfos.builder() .editedField(GeneratorField.VOLTAGE_REGULATOR_ON.name()) .value(true) .filters(List.of(filter1)) .build(); - List> infosList = super.getSimpleModificationInfos(); + List> infosList = super.getAssignmentInfos(); infosList.addAll(List.of( - simpleInfos1, - simpleInfos2, - simpleInfos3, - simpleInfos4, - simpleInfos5, - simpleInfos6, - simpleInfos7, - simpleInfos8, - simpleInfos9, - simpleInfos10, - simpleInfos11, - simpleInfos12, - simpleInfos13, - simpleInfos14 + assignmentInfos1, + assignmentInfos2, + assignmentInfos3, + assignmentInfos4, + assignmentInfos5, + assignmentInfos6, + assignmentInfos7, + assignmentInfos8, + assignmentInfos9, + assignmentInfos10, + assignmentInfos11, + assignmentInfos12, + assignmentInfos13, + assignmentInfos14 )); return infosList; } @Override - protected List> getUpdatedSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getUpdatedAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.REACTIVE_POWER_SET_POINT.name()) .value(2.) .filters(List.of(filter1, filter2)) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .editedField(GeneratorField.MINIMUM_ACTIVE_POWER.name()) .value(0.5) .filters(List.of(filter3)) .build(); - return List.of(simpleInfos1, simpleInfos2); + return List.of(assignmentInfos1, assignmentInfos2); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/LoadModificationByAssignmentTest.java similarity index 79% rename from src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/LoadModificationByAssignmentTest.java index 494116151..331c3d3ae 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/LoadBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/LoadModificationByAssignmentTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications.byfilter.simple; +package org.gridsuite.modification.server.modifications.byfilter.assignment; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.LoadType; @@ -14,9 +14,9 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.LoadField; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.EnumModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.EnumAssignmentInfos; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import java.util.Date; @@ -29,7 +29,7 @@ /** * @author Thang PHAM */ -public class LoadBySimpleModificationTest extends AbstractBySimpleModificationTest { +public class LoadModificationByAssignmentTest extends AbstractModificationByAssignmentTest { private static final String LOAD_ID_1 = "load1"; private static final String LOAD_ID_2 = "load2"; private static final String LOAD_ID_3 = "load3"; @@ -58,40 +58,40 @@ protected List getTestFilters() { } @Override - protected List> getSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .editedField(LoadField.ACTIVE_POWER.name()) .value(25.) .filters(List.of(filter1)) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .editedField(LoadField.REACTIVE_POWER.name()) .value(2.5) .filters(List.of(filter2)) .build(); - EnumModificationByFilterInfos simpleInfos3 = EnumModificationByFilterInfos.builder() + EnumAssignmentInfos assignmentInfos3 = EnumAssignmentInfos.builder() .editedField(LoadField.LOAD_TYPE.name()) .value(LoadType.AUXILIARY.name()) .filters(List.of(filter1)) .build(); - List> infosList = super.getSimpleModificationInfos(); - infosList.addAll(List.of(simpleInfos1, simpleInfos2, simpleInfos3)); + List> infosList = super.getAssignmentInfos(); + infosList.addAll(List.of(assignmentInfos1, assignmentInfos2, assignmentInfos3)); return infosList; } @Override - protected List> getUpdatedSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getUpdatedAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .editedField(LoadField.ACTIVE_POWER.name()) .value(200.) .filters(List.of(filter1)) .build(); - return List.of(simpleInfos1); + return List.of(assignmentInfos1); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java similarity index 84% rename from src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java index d55921859..9d279c594 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/ShuntCompensatorBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications.byfilter.simple; +package org.gridsuite.modification.server.modifications.byfilter.assignment; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.ShuntCompensator; @@ -16,8 +16,8 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.ShuntCompensatorField; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.junit.Test; @@ -30,7 +30,7 @@ /** * @author Thang PHAM */ -public class ShuntCompensatorBySimpleModificationTest extends AbstractBySimpleModificationTest { +public class ShuntCompensatorModificationByAssignmentTest extends AbstractModificationByAssignmentTest { private static final String SHUNT_COMPENSATOR_ID_1 = "v1shunt"; private static final String SHUNT_COMPENSATOR_ID_2 = "v2shunt"; private static final String SHUNT_COMPENSATOR_ID_3 = "v3shunt"; @@ -42,13 +42,13 @@ public void testCreateWithWarning() throws Exception { IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(SHUNT_COMPENSATOR_ID_1, 1.0); IdentifierListFilterEquipmentAttributes wrongIdAttributes = getIdentifiableAttributes("wrongId", 1.0); - DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos = DoubleAssignmentInfos.builder() .editedField(ShuntCompensatorField.MAXIMUM_SECTION_COUNT.name()) .value(2.) .filters(List.of(filterWithOneWrongId)) .build(); - checkCreateWithWarning(List.of(simpleInfos), List.of(identifiableAttributes, wrongIdAttributes)); + checkCreateWithWarning(List.of(assignmentInfos), List.of(identifiableAttributes, wrongIdAttributes)); assertEquals(2, getNetwork().getShuntCompensator(SHUNT_COMPENSATOR_ID_1).getMaximumSectionCount(), 0); } @@ -81,51 +81,51 @@ protected List getTestFilters() { } @Override - protected List> getSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .editedField(ShuntCompensatorField.MAXIMUM_SECTION_COUNT.name()) .value(8.) .filters(List.of(filter1, filter2)) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .editedField(ShuntCompensatorField.SECTION_COUNT.name()) .value(2.) .filters(List.of(filter3)) .build(); - DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() .editedField(ShuntCompensatorField.MAXIMUM_SUSCEPTANCE.name()) .value(5.) .filters(List.of(filter4)) .build(); - DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos4 = DoubleAssignmentInfos.builder() .editedField(ShuntCompensatorField.MAXIMUM_Q_AT_NOMINAL_VOLTAGE.name()) .value(10.) .filters(List.of(filter5)) .build(); - List> infosList = super.getSimpleModificationInfos(); - infosList.addAll(List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4)); + List> infosList = super.getAssignmentInfos(); + infosList.addAll(List.of(assignmentInfos1, assignmentInfos2, assignmentInfos3, assignmentInfos4)); return infosList; } @Override - protected List> getUpdatedSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getUpdatedAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .editedField(ShuntCompensatorField.MAXIMUM_SECTION_COUNT.name()) .value(150.) .filters(List.of(filter1, filter2)) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .editedField(ShuntCompensatorField.SECTION_COUNT.name()) .value(2.) .filters(List.of(filter3)) .build(); - return List.of(simpleInfos1, simpleInfos2); + return List.of(assignmentInfos1, assignmentInfos2); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java similarity index 86% rename from src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java index 7b2a10eb9..50096a941 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/TwoWindingsTransformerBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications.byfilter.simple; +package org.gridsuite.modification.server.modifications.byfilter.assignment; import com.github.tomakehurst.wiremock.client.WireMock; import com.powsybl.iidm.network.*; @@ -14,11 +14,11 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.BySimpleModificationInfos; +import org.gridsuite.modification.server.dto.ModificationByAssignmentInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; import org.junit.Test; import java.util.Date; @@ -31,7 +31,7 @@ /** * @author Thang PHAM */ -public class TwoWindingsTransformerBySimpleModificationTest extends AbstractBySimpleModificationTest { +public class TwoWindingsTransformerModificationByAssignmentTest extends AbstractModificationByAssignmentTest { private static final String TWT_ID_1 = "twt1"; private static final String TWT_ID_2 = "twt2"; private static final String TWT_ID_3 = "twt3"; @@ -45,13 +45,13 @@ public void testModifyTwtWithError() throws Exception { IdentifierListFilterEquipmentAttributes identifiableAttributes1 = getIdentifiableAttributes(TWT_ID_4, 1.); IdentifierListFilterEquipmentAttributes identifiableAttributes2 = getIdentifiableAttributes(TWT_ID_6, 1.); AbstractFilter filter = getFilterEquipments(FILTER_ID_4, List.of(identifiableAttributes1, identifiableAttributes2)); - DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos = DoubleAssignmentInfos.builder() .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) .value(1.) .filters(List.of(filter4)) .build(); - checkCreateWithError(List.of(simpleInfos), List.of(filter)); + checkCreateWithError(List.of(assignmentInfos), List.of(filter)); assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_4).getRatioTapChanger()); assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_6).getRatioTapChanger()); @@ -60,13 +60,13 @@ public void testModifyTwtWithError() throws Exception { IdentifierListFilterEquipmentAttributes identifiableAttributes3 = getIdentifiableAttributes(TWT_ID_1, 1.); IdentifierListFilterEquipmentAttributes identifiableAttributes4 = getIdentifiableAttributes(TWT_ID_2, 1.); AbstractFilter filter2 = getFilterEquipments(FILTER_ID_1, List.of(identifiableAttributes3, identifiableAttributes4)); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .editedField(TwoWindingsTransformerField.PHASE_TAP_POSITION.name()) .value(1.) .filters(List.of(filter1)) .build(); - checkCreateWithError(List.of(simpleInfos2), List.of(filter2)); + checkCreateWithError(List.of(assignmentInfos2), List.of(filter2)); assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_1).getPhaseTapChanger()); assertNull(getNetwork().getTwoWindingsTransformer(TWT_ID_2).getPhaseTapChanger()); @@ -86,15 +86,15 @@ public void testModifyTwtWithWarning() throws Exception { .withBody(mapper.writeValueAsString(List.of(filterTwt1, filterTwt2))) .withHeader("Content-Type", "application/json"))).getId(); - DoubleModificationByFilterInfos simpleInfos = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos = DoubleAssignmentInfos.builder() .filters(List.of(filter1, filter4)) .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) .value(4.) .build(); - checkCreationApplicationStatus(BySimpleModificationInfos.builder() + checkCreationApplicationStatus(ModificationByAssignmentInfos.builder() .equipmentType(getIdentifiableType()) - .simpleModificationInfosList(List.of(simpleInfos)) + .assignmentInfosList(List.of(assignmentInfos)) .build(), NetworkModificationResult.ApplicationStatus.WITH_WARNINGS); @@ -184,139 +184,139 @@ protected List getTestFilters() { } @Override - protected List> getSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .filters(List.of(filter1)) .editedField(TwoWindingsTransformerField.TARGET_V.name()) .value(2.) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .filters(List.of(filter2)) .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) .value(4.) .build(); - DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() .filters(List.of(filter2)) .editedField(TwoWindingsTransformerField.RATIO_LOW_TAP_POSITION.name()) .value(4.) .build(); - DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos4 = DoubleAssignmentInfos.builder() .filters(List.of(filter1)) .editedField(TwoWindingsTransformerField.RATIO_TARGET_DEADBAND.name()) .value(5.) .build(); - DoubleModificationByFilterInfos simpleInfos5 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos5 = DoubleAssignmentInfos.builder() .filters(List.of(filter4)) .editedField(TwoWindingsTransformerField.REGULATION_VALUE.name()) .value(2.) .build(); - DoubleModificationByFilterInfos simpleInfos6 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos6 = DoubleAssignmentInfos.builder() .filters(List.of(filter3)) .editedField(TwoWindingsTransformerField.PHASE_TAP_POSITION.name()) .value(2.) .build(); - DoubleModificationByFilterInfos simpleInfos7 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos7 = DoubleAssignmentInfos.builder() .filters(List.of(filter3)) .editedField(TwoWindingsTransformerField.PHASE_LOW_TAP_POSITION.name()) .value(2.) .build(); - DoubleModificationByFilterInfos simpleInfos8 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos8 = DoubleAssignmentInfos.builder() .filters(List.of(filter4)) .editedField(TwoWindingsTransformerField.PHASE_TARGET_DEADBAND.name()) .value(10.) .build(); - DoubleModificationByFilterInfos simpleInfos9 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos9 = DoubleAssignmentInfos.builder() .filters(List.of(filter1, filter4)) .editedField(TwoWindingsTransformerField.X.name()) .value(20.) .build(); - DoubleModificationByFilterInfos simpleInfos10 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos10 = DoubleAssignmentInfos.builder() .filters(List.of(filter2, filter3)) .editedField(TwoWindingsTransformerField.R.name()) .value(2.) .build(); - DoubleModificationByFilterInfos simpleInfos11 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos11 = DoubleAssignmentInfos.builder() .filters(List.of(filter4, filter2)) .editedField(TwoWindingsTransformerField.G.name()) .value(25.) .build(); - DoubleModificationByFilterInfos simpleInfos12 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos12 = DoubleAssignmentInfos.builder() .filters(List.of(filter1, filter3)) .editedField(TwoWindingsTransformerField.B.name()) .value(2.5) .build(); - DoubleModificationByFilterInfos simpleInfos13 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos13 = DoubleAssignmentInfos.builder() .filters(List.of(filter2)) .editedField(TwoWindingsTransformerField.RATED_U1.name()) .value(15.) .build(); - DoubleModificationByFilterInfos simpleInfos14 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos14 = DoubleAssignmentInfos.builder() .filters(List.of(filter3, filter2)) .editedField(TwoWindingsTransformerField.RATED_U2.name()) .value(0.5) .build(); - DoubleModificationByFilterInfos simpleInfos15 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos15 = DoubleAssignmentInfos.builder() .filters(List.of(filter1, filter2)) .editedField(TwoWindingsTransformerField.RATED_S.name()) .value(2.) .build(); - List> infosList = super.getSimpleModificationInfos(); - infosList.addAll(List.of(simpleInfos1, - simpleInfos2, - simpleInfos3, - simpleInfos4, - simpleInfos5, - simpleInfos6, - simpleInfos7, - simpleInfos8, - simpleInfos9, - simpleInfos10, - simpleInfos11, - simpleInfos12, - simpleInfos13, - simpleInfos14, - simpleInfos15)); + List> infosList = super.getAssignmentInfos(); + infosList.addAll(List.of(assignmentInfos1, + assignmentInfos2, + assignmentInfos3, + assignmentInfos4, + assignmentInfos5, + assignmentInfos6, + assignmentInfos7, + assignmentInfos8, + assignmentInfos9, + assignmentInfos10, + assignmentInfos11, + assignmentInfos12, + assignmentInfos13, + assignmentInfos14, + assignmentInfos15)); return infosList; } @Override - protected List> getUpdatedSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getUpdatedAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .filters(List.of(filter3)) .editedField(TwoWindingsTransformerField.TARGET_V.name()) .value(2.) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .filters(List.of(filter2)) .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) .value(3.5) .build(); - DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() .filters(List.of(filter1)) .editedField(TwoWindingsTransformerField.RATIO_LOW_TAP_POSITION.name()) .value(3.) .build(); - return List.of(simpleInfos1, - simpleInfos2, - simpleInfos3); + return List.of(assignmentInfos1, + assignmentInfos2, + assignmentInfos3); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/VoltageLevelModificationByAssignmentTest.java similarity index 87% rename from src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java rename to src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/VoltageLevelModificationByAssignmentTest.java index 29ec9b191..90a1f18a8 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/simple/VoltageLevelBySimpleModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/VoltageLevelModificationByAssignmentTest.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.modifications.byfilter.simple; +package org.gridsuite.modification.server.modifications.byfilter.assignment; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.VoltageLevel; @@ -16,8 +16,8 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.VoltageLevelField; -import org.gridsuite.modification.server.dto.byfilter.simple.AbstractSimpleModificationByFilterInfos; -import org.gridsuite.modification.server.dto.byfilter.simple.DoubleModificationByFilterInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import java.util.Date; @@ -29,7 +29,7 @@ /** * @author Thang PHAM */ -public class VoltageLevelBySimpleModificationTest extends AbstractBySimpleModificationTest { +public class VoltageLevelModificationByAssignmentTest extends AbstractModificationByAssignmentTest { private static final String VOLTAGE_LEVEL_ID_1 = "v1"; private static final String VOLTAGE_LEVEL_ID_2 = "v2"; private static final String VOLTAGE_LEVEL_ID_3 = "v3"; @@ -97,62 +97,62 @@ protected List getTestFilters() { } @Override - protected List> getSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .editedField(VoltageLevelField.LOW_VOLTAGE_LIMIT.name()) .value(10.) .filters(List.of(filter1, filter2)) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .editedField(VoltageLevelField.HIGH_VOLTAGE_LIMIT.name()) .value(120.) .filters(List.of(filter3)) .build(); - DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() .editedField(VoltageLevelField.NOMINAL_VOLTAGE.name()) .value(150.) .filters(List.of(filter4)) .build(); - DoubleModificationByFilterInfos simpleInfos4 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos4 = DoubleAssignmentInfos.builder() .editedField(VoltageLevelField.LOW_SHORT_CIRCUIT_CURRENT_LIMIT.name()) .value(2.) .filters(List.of(filter5)) .build(); - DoubleModificationByFilterInfos simpleInfos5 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos5 = DoubleAssignmentInfos.builder() .editedField(VoltageLevelField.HIGH_SHORT_CIRCUIT_CURRENT_LIMIT.name()) .value(5.) .filters(List.of(filter4, filter5)) .build(); - return List.of(simpleInfos1, simpleInfos2, simpleInfos3, simpleInfos4, simpleInfos5); + return List.of(assignmentInfos1, assignmentInfos2, assignmentInfos3, assignmentInfos4, assignmentInfos5); } @Override - protected List> getUpdatedSimpleModificationInfos() { - DoubleModificationByFilterInfos simpleInfos1 = DoubleModificationByFilterInfos.builder() + protected List> getUpdatedAssignmentInfos() { + DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() .editedField(VoltageLevelField.LOW_VOLTAGE_LIMIT.name()) .value(5.) .filters(List.of(filter1, filter2)) .build(); - DoubleModificationByFilterInfos simpleInfos2 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() .editedField(VoltageLevelField.HIGH_VOLTAGE_LIMIT.name()) .value(1.5) .filters(List.of(filter3)) .build(); - DoubleModificationByFilterInfos simpleInfos3 = DoubleModificationByFilterInfos.builder() + DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() .editedField(VoltageLevelField.NOMINAL_VOLTAGE.name()) .value(150.) .filters(List.of(filter4)) .build(); - List> infosList = super.getSimpleModificationInfos(); - infosList.addAll(List.of(simpleInfos1, simpleInfos2, simpleInfos3)); + List> infosList = super.getAssignmentInfos(); + infosList.addAll(List.of(assignmentInfos1, assignmentInfos2, assignmentInfos3)); return infosList; } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/VoltageLevelByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/VoltageLevelByFormulaModificationTest.java index e1f7ab3eb..fd73c32fd 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/VoltageLevelByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/VoltageLevelByFormulaModificationTest.java @@ -24,7 +24,7 @@ import java.util.Date; import java.util.List; -import static org.gridsuite.modification.server.modifications.byfilter.AbstractByFilterModification.REPORT_KEY_BY_FILTER_MODIFICATION_SOME; +import static org.gridsuite.modification.server.modifications.byfilter.AbstractModificationByAssignment.REPORT_KEY_BY_FILTER_MODIFICATION_SOME; import static org.gridsuite.modification.server.modifications.byfilter.ByFormulaModification.REPORT_KEY_EQUIPMENT_MODIFIED_ERROR; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessageWithoutRank; import static org.junit.Assert.*; From eba41e9545fe2a489396feab2d6510ac79ba3561 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 12 Sep 2024 23:32:05 +0200 Subject: [PATCH 30/42] correct remarks --- .../ModificationByAssignmentEntity.java | 2 +- .../byfilter/simple/AssignmentEntity.java | 13 ++++---- .../AbstractModificationByAssignment.java | 33 ++++++++++--------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java index 4447b1aa9..9c4dac376 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java @@ -75,7 +75,7 @@ public ModificationByAssignmentInfos toModificationInfos() { .stashed(getStashed()) .equipmentType(equipmentType) .assignmentInfosList(assignmentEntities.stream() - .map(AssignmentEntity::toSimpleModificationInfos) + .map(AssignmentEntity::toAssignmentInfos) .toList() ); } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java index 38ae195b0..6fd4abbb0 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java @@ -8,6 +8,7 @@ package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; import lombok.NoArgsConstructor; import lombok.Setter; import org.gridsuite.modification.server.dto.FilterInfos; @@ -17,7 +18,6 @@ import org.gridsuite.modification.server.entities.equipment.modification.byfilter.AbstractAssignmentEntity; import java.util.List; -import java.util.Optional; /** * @author Thang PHAM @@ -30,6 +30,7 @@ public class AssignmentEntity extends AbstractAssignmentEntity { @Enumerated(EnumType.STRING) private DataType dataType; + @NotNull @Column(name = "value_") // "value" is not supported in UT with H2 private String value; // all values of different data types will be serialized as a string, deserialization is based on dataType @@ -45,20 +46,20 @@ public class AssignmentEntity extends AbstractAssignmentEntity { public AssignmentEntity(AssignmentInfos assignmentInfos) { super(assignmentInfos); this.dataType = assignmentInfos.getDataType(); - this.value = Optional.ofNullable(assignmentInfos.getValue()).map(Object::toString).orElse(null); + this.value = assignmentInfos.getValue().toString(); this.filters = assignmentInfos.getFilters().stream().map(FilterInfos::toEntity).toList(); } - public AssignmentInfos toSimpleModificationInfos() { + public AssignmentInfos toAssignmentInfos() { AssignmentInfos assignmentInfos = switch (dataType) { case BOOLEAN -> BooleanAssignmentInfos.builder() - .value(value != null ? Boolean.valueOf(value) : null) + .value(Boolean.valueOf(value)) .build(); case INTEGER -> IntegerAssignmentInfos.builder() - .value(value != null ? Integer.valueOf(value) : null) + .value(Integer.valueOf(value)) .build(); case DOUBLE -> DoubleAssignmentInfos.builder() - .value(value != null ? Double.valueOf(value) : null) + .value(Double.valueOf(value)) .build(); case ENUM -> EnumAssignmentInfos.builder() .value(value) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java index 46015e502..9e2212051 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java @@ -51,6 +51,7 @@ public abstract class AbstractModificationByAssignment extends AbstractModificat public static final String VALUE_KEY_OLD_VALUE = "oldValue"; public static final String VALUE_KEY_NEW_VALUE = "newValue"; public static final String VALUE_KEY_MODIFICATION_TYPE_LABEL = "modificationTypeLabel"; + public static final String VALUE_KEY_FILTERS_EACH_ASSIGNMENT = "filtersEachAssignment"; public static final String VALUE_KEY_ERROR_MESSAGE = "errorMessage"; public static final String REPORT_KEY_RATIO_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR = "ratioTapChangerEquipmentModifiedError"; public static final String REPORT_KEY_PHASE_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR = "phaseTapChangerEquipmentModifiedError"; @@ -65,7 +66,7 @@ public abstract class AbstractModificationByAssignment extends AbstractModificat public static final String REPORT_KEY_EQUIPMENT_MODIFIED_REPORT = "equipmentModifiedReport"; public static final String REPORT_KEY_EQUIPMENT_MODIFIED_REPORT_EXCEPTION = "equipmentModifiedReportException"; public static final String REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS = "appliedByFilterModifications"; - public static final String REPORT_KEY_BY_FILTER_MODIFICATION = "byFilterModification"; + public static final String REPORT_KEY_APPLIED_ASSIGNMENT = "appliedAssignment"; public static final String REPORT_KEY_BY_FILTER_MODIFICATION_ALL = "byFilterModificationAll"; public static final String REPORT_KEY_BY_FILTER_MODIFICATION_NONE = "byFilterModificationNone"; public static final String REPORT_KEY_BY_FILTER_MODIFICATION_NOT_FOUND = "byFilterModificationNotFound"; @@ -144,30 +145,31 @@ public void apply(Network network, ReportNode subReportNode) { if (exportFilters != null) { ReportNode subReporter = subReportNode.newReportNode() - .withMessageTemplate(REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "}s") + .withMessageTemplate(REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "}s on ${" + VALUE_KEY_EQUIPMENT_TYPE + "} type") .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, StringUtils.capitalize(getModificationTypeLabel())) + .withUntypedValue(VALUE_KEY_EQUIPMENT_TYPE, getEquipmentType().name()) .add(); - List reports = new ArrayList<>(); // perform modifications - getAssignmentInfosList().forEach(abstractAssignmentInfos -> - abstractAssignmentInfos.getFilters().forEach(filterInfos -> - applyOnFilterEquipments(network, exportFilters, reports, abstractAssignmentInfos, filterInfos))); + getAssignmentInfosList().forEach(abstractAssignmentInfos -> { + List reports = new ArrayList<>(); + ReportNode eachAssignmentReporter = subReporter.newReportNode() + .withMessageTemplate(REPORT_KEY_APPLIED_ASSIGNMENT, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "} on filters : ${" + VALUE_KEY_FILTERS_EACH_ASSIGNMENT + "}") + .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, StringUtils.capitalize(getModificationTypeLabel())) + .withUntypedValue(VALUE_KEY_FILTERS_EACH_ASSIGNMENT, abstractAssignmentInfos.getFilters().stream().map(FilterInfos::getName) + .collect(Collectors.joining(", "))) + .add(); + abstractAssignmentInfos.getFilters().forEach(filterInfos -> applyOnFilterEquipments(network, exportFilters, reports, abstractAssignmentInfos, filterInfos)); + reports.forEach(report -> insertReportNode(eachAssignmentReporter, report)); + }); // reporting - subReportNode.newReportNode() - .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION, - "New ${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "} on ${" + VALUE_KEY_EQUIPMENT_TYPE + "}") - .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, getModificationTypeLabel()) - .withUntypedValue(VALUE_KEY_EQUIPMENT_TYPE, getEquipmentType().name()) - .withSeverity(TypedValue.INFO_SEVERITY) - .add(); if (equipmentNotModifiedCount == 0 && equipmentNotFoundCount == 0) { subReportNode.newReportNode() .withMessageTemplate(REPORT_KEY_BY_FILTER_MODIFICATION_ALL, - "All equipment have been modified : ${" + VALUE_KEY_EQUIPMENT_COUNT + "} equipment(s)") + "All equipments have been modified : ${" + VALUE_KEY_EQUIPMENT_COUNT + "} equipment(s)") .withUntypedValue(VALUE_KEY_EQUIPMENT_COUNT, equipmentCount) .withSeverity(TypedValue.INFO_SEVERITY) .add(); - reports.forEach(report -> insertReportNode(subReporter, report)); + } else { if (equipmentNotModifiedCount == equipmentCount) { createReport(subReportNode, REPORT_KEY_BY_FILTER_MODIFICATION_NONE, @@ -181,7 +183,6 @@ public void apply(Network network, ReportNode subReportNode) { .withUntypedValue(VALUE_KEY_NB_UNCHANGED, equipmentNotModifiedCount + equipmentNotFoundCount) .withSeverity(TypedValue.WARN_SEVERITY) .add(); - reports.forEach(report -> insertReportNode(subReporter, report)); } } } From 59682841865c29b09a509bfa62da4cd714a0547e Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Fri, 13 Sep 2024 00:03:28 +0200 Subject: [PATCH 31/42] Unit test fail --- .../byfilter/ModificationByAssignment.java | 3 +++ .../GeneratorModificationByAssignmentTest.java | 17 +---------------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java index 7b9a94b13..6fccbf7e5 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java @@ -87,6 +87,9 @@ protected String getOldValue(Identifiable equipment, AbstractAssignmentInfos @Override protected String getNewValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos) { AssignmentInfos simpleModificationInfos = (AssignmentInfos) abstractAssignmentInfos; + if (simpleModificationInfos.getValue() == null) { + throw new NetworkModificationException(MODIFICATION_BY_ASSIGNMENT_ERROR, "There is no value in assignment"); + } return simpleModificationInfos.getValue().toString(); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java index b92d11f05..5c166ccc2 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java @@ -14,11 +14,10 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.FilterInfos; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.GeneratorField; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.BooleanAssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.GeneratorField; import org.junit.Test; import org.junit.jupiter.api.Tag; @@ -61,20 +60,6 @@ public void testCreateWithWarning() throws Exception { assertEquals(55, getNetwork().getGenerator(GENERATOR_ID_1).getTargetP(), 0); } - @Test - public void testWithNullValue() throws Exception { - IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(GENERATOR_ID_1, 1.0); - AbstractFilter filterEquipments = getFilterEquipments(FILTER_ID_1, List.of(identifiableAttributes)); - - DoubleAssignmentInfos simpleInfos = DoubleAssignmentInfos.builder() - .filters(List.of(new FilterInfos(FILTER_ID_1, "filter1"))) - .editedField(GeneratorField.ACTIVE_POWER_SET_POINT.name()) - .value(null) - .build(); - - checkCreateWithError(List.of(simpleInfos), List.of(filterEquipments)); - } - protected void createEquipments() { getNetwork().getGenerator(GENERATOR_ID_1) .setTargetP(100) From 0177a47b3b62962723820a5b341da016038068c7 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 17 Sep 2024 18:12:22 +0200 Subject: [PATCH 32/42] correct for comments of Mathieu --- .../byfilter/assignment/AssignmentInfos.java | 2 +- .../assignment/PropertyAssignmentInfos.java | 2 +- .../ModificationByAssignmentEntity.java | 2 +- .../AssignmentEntity.java | 2 +- .../AbstractModificationByAssignment.java | 10 +-- .../byfilter/ByFormulaModification.java | 9 ++- .../byfilter/ModificationByAssignment.java | 8 +-- .../changesets/changelog_20240902T071959Z.xml | 42 ------------ .../AbstractModificationByAssignmentTest.java | 66 ++++++++----------- ...ansformerModificationByAssignmentTest.java | 9 +-- 10 files changed, 49 insertions(+), 103 deletions(-) rename src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/{simple => assignment}/AssignmentEntity.java (99%) delete mode 100644 src/main/resources/db/changelog/changesets/changelog_20240902T071959Z.xml diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/AssignmentInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/AssignmentInfos.java index 78e5ef2d0..2dd980a66 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/AssignmentInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/AssignmentInfos.java @@ -18,7 +18,7 @@ import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.byfilter.AbstractAssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.AssignmentEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.assignment.AssignmentEntity; /** * @author Thang PHAM diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/PropertyAssignmentInfos.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/PropertyAssignmentInfos.java index 993e279fc..383ed2368 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/PropertyAssignmentInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/assignment/PropertyAssignmentInfos.java @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.byfilter.DataType; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.AssignmentEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.assignment.AssignmentEntity; /** * @author Thang PHAM diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java index 9c4dac376..960197583 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java @@ -15,7 +15,7 @@ import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.entities.ModificationEntity; -import org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple.AssignmentEntity; +import org.gridsuite.modification.server.entities.equipment.modification.byfilter.assignment.AssignmentEntity; import java.util.List; diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/assignment/AssignmentEntity.java similarity index 99% rename from src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java rename to src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/assignment/AssignmentEntity.java index 6fd4abbb0..ae1f2ee8c 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/simple/AssignmentEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/assignment/AssignmentEntity.java @@ -5,7 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.modification.server.entities.equipment.modification.byfilter.simple; +package org.gridsuite.modification.server.entities.equipment.modification.byfilter.assignment; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java index 9e2212051..6c43d6bbf 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java @@ -140,10 +140,10 @@ public void apply(Network network, ReportNode subReportNode) { // collect all filters from all variations Map filters = getFilters(); - Map exportFilters = + Map filterUuidEquipmentsMap = ModificationUtils.getUuidFilterEquipmentsMap(filterService, network, subReportNode, filters, getModificationInfos().getErrorType()); - if (exportFilters != null) { + if (filterUuidEquipmentsMap != null) { ReportNode subReporter = subReportNode.newReportNode() .withMessageTemplate(REPORT_KEY_APPLIED_BY_FILTER_MODIFICATIONS, "${" + VALUE_KEY_MODIFICATION_TYPE_LABEL + "}s on ${" + VALUE_KEY_EQUIPMENT_TYPE + "} type") .withUntypedValue(VALUE_KEY_MODIFICATION_TYPE_LABEL, StringUtils.capitalize(getModificationTypeLabel())) @@ -158,7 +158,7 @@ public void apply(Network network, ReportNode subReportNode) { .withUntypedValue(VALUE_KEY_FILTERS_EACH_ASSIGNMENT, abstractAssignmentInfos.getFilters().stream().map(FilterInfos::getName) .collect(Collectors.joining(", "))) .add(); - abstractAssignmentInfos.getFilters().forEach(filterInfos -> applyOnFilterEquipments(network, exportFilters, reports, abstractAssignmentInfos, filterInfos)); + abstractAssignmentInfos.getFilters().forEach(filterInfos -> applyOnFilterEquipments(network, filterUuidEquipmentsMap, reports, abstractAssignmentInfos, filterInfos)); reports.forEach(report -> insertReportNode(eachAssignmentReporter, report)); }); // reporting @@ -328,11 +328,11 @@ private Map getFilters() { } private void applyOnFilterEquipments(Network network, - Map exportFilters, + Map filterUuidEquipmentsMap, List reports, AbstractAssignmentInfos abstractAssignmentInfos, FilterInfos filterInfos) { - FilterEquipments filterEquipments = exportFilters.get(filterInfos.getId()); + FilterEquipments filterEquipments = filterUuidEquipmentsMap.get(filterInfos.getId()); if (CollectionUtils.isEmpty(filterEquipments.getIdentifiableAttributes())) { reports.add(ReportNode.newRootReportNode() diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java index c29225cdc..d8071d983 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ByFormulaModification.java @@ -69,7 +69,8 @@ protected boolean preCheckValue(Identifiable equipment, AbstractAssignmentInf equipmentNotModifiedCount += 1; notEditableEquipments.add(equipment.getId()); reports.add(ReportNode.newRootReportNode() - .withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_ERROR, " Cannot modify equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : At least one of the value or referenced field is null") + .withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_ERROR, " Cannot modify equipment ${" + + VALUE_KEY_EQUIPMENT_NAME + "} : At least one of the value or referenced field is null") .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) .withSeverity(TypedValue.TRACE_SEVERITY) .build()); @@ -79,6 +80,12 @@ protected boolean preCheckValue(Identifiable equipment, AbstractAssignmentInf if (value2 == 0 && formulaInfos.getOperator() == Operator.DIVISION) { equipmentNotModifiedCount += 1; notEditableEquipments.add(equipment.getId()); + reports.add(ReportNode.newRootReportNode() + .withMessageTemplate(REPORT_KEY_EQUIPMENT_MODIFIED_ERROR, " Cannot modify equipment ${" + + VALUE_KEY_EQUIPMENT_NAME + "} : The value or referenced field of the second operand in the division operator is zero") + .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); return false; } return true; diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java index 6fccbf7e5..421e6656f 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java @@ -86,11 +86,11 @@ protected String getOldValue(Identifiable equipment, AbstractAssignmentInfos @Override protected String getNewValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos) { - AssignmentInfos simpleModificationInfos = (AssignmentInfos) abstractAssignmentInfos; - if (simpleModificationInfos.getValue() == null) { - throw new NetworkModificationException(MODIFICATION_BY_ASSIGNMENT_ERROR, "There is no value in assignment"); + AssignmentInfos assignmentInfos = (AssignmentInfos) abstractAssignmentInfos; + if (assignmentInfos.getValue() == null) { + throw new NetworkModificationException(MODIFICATION_BY_ASSIGNMENT_ERROR, "Missing a value in the assignment"); } - return simpleModificationInfos.getValue().toString(); + return assignmentInfos.getValue().toString(); } @Override diff --git a/src/main/resources/db/changelog/changesets/changelog_20240902T071959Z.xml b/src/main/resources/db/changelog/changesets/changelog_20240902T071959Z.xml deleted file mode 100644 index 81f00e3a7..000000000 --- a/src/main/resources/db/changelog/changesets/changelog_20240902T071959Z.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java index eea2d37f9..9bb0958e2 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java @@ -16,8 +16,8 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.ModificationByAssignmentInfos; import org.gridsuite.modification.server.dto.FilterInfos; +import org.gridsuite.modification.server.dto.ModificationByAssignmentInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.gridsuite.modification.server.dto.byfilter.DataType; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; @@ -87,25 +87,22 @@ public void testByModificationError() throws Exception { mockMvc.perform(post(getNetworkModificationUri()).content(mapper.writeValueAsString(null)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isBadRequest()); - // Test with empty list of simple modification - checkCreationApplicationStatus(ModificationByAssignmentInfos.builder().equipmentType(getIdentifiableType()).assignmentInfosList(List.of()).build(), - NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + // Test with empty list of assignment + checkCreationApplicationStatus(List.of(), NetworkModificationResult.ApplicationStatus.WITH_ERRORS); - // Test with empty list of filters in simple modification - List> simpleInfosWithNoFilters = getAssignmentInfos().stream().peek(simpleInfos -> simpleInfos.setFilters(List.of())).toList(); - checkCreationApplicationStatus(ModificationByAssignmentInfos.builder().equipmentType(getIdentifiableType()).assignmentInfosList(simpleInfosWithNoFilters).build(), - NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + // Test with empty list of filters in assignment + List> assignmentsWithNoFilters = getAssignmentInfos().stream().peek(assignmentInfos -> assignmentInfos.setFilters(List.of())).toList(); + checkCreationApplicationStatus(assignmentsWithNoFilters, NetworkModificationResult.ApplicationStatus.WITH_ERRORS); // Test with editedField = null - AssignmentInfos simpleInfosWithNoEditedField = DoubleAssignmentInfos.builder() + AssignmentInfos assignmentWithNoEditedField = DoubleAssignmentInfos.builder() .value(50.) .filters(List.of()) .build(); - checkCreationApplicationStatus(ModificationByAssignmentInfos.builder().equipmentType(getIdentifiableType()).assignmentInfosList(List.of(simpleInfosWithNoEditedField)).build(), - NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + checkCreationApplicationStatus(List.of(assignmentWithNoEditedField), NetworkModificationResult.ApplicationStatus.WITH_ERRORS); } - protected void checkCreateWithWarning(List> simpleInfos, List existingEquipmentList) throws Exception { + protected void checkCreateWithWarning(List> assignments, List existingEquipmentList) throws Exception { AbstractFilter filter = getFilterEquipments(FILTER_WITH_ONE_WRONG_ID, existingEquipmentList); UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching("/v1/filters/metadata\\?ids=" + FILTER_WITH_ONE_WRONG_ID)) @@ -113,17 +110,12 @@ protected void checkCreateWithWarning(List> simpleInfos, List .withBody(mapper.writeValueAsString(List.of(filter))) .withHeader("Content-Type", "application/json"))).getId(); - ModificationByAssignmentInfos modificationByAssignmentInfos = ModificationByAssignmentInfos.builder() - .assignmentInfosList(simpleInfos) - .equipmentType(getIdentifiableType()) - .build(); - - checkCreationApplicationStatus(modificationByAssignmentInfos, NetworkModificationResult.ApplicationStatus.WITH_WARNINGS); + checkCreationApplicationStatus(assignments, NetworkModificationResult.ApplicationStatus.WITH_WARNINGS); wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(List.of(FILTER_WITH_ONE_WRONG_ID)), false); } - protected void checkCreateWithError(List> simpleInfos, List filterEquipments) throws Exception { + protected void checkCreateWithError(List> assignments, List filterEquipments) throws Exception { String filterIds = filterEquipments.stream() .map(AbstractFilter::getId) .map(UUID::toString) @@ -134,16 +126,11 @@ protected void checkCreateWithError(List> simpleInfos, List> simpleInfos, List> simpleInfosList = getAssignmentInfos().stream() - .peek(simpleInfos -> simpleInfos.setFilters(List.of(new FilterInfos(FILTER_WITH_ALL_WRONG_IDS, "filterWithWrongId")))) + List> assignmentsWithWrongFilter = getAssignmentInfos().stream() + .peek(assignmentInfos -> assignmentInfos.setFilters(List.of(new FilterInfos(FILTER_WITH_ALL_WRONG_IDS, "filterWithWrongId")))) .toList(); UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching("/v1/filters/metadata\\?ids=" + FILTER_WITH_ALL_WRONG_IDS)) @@ -160,12 +147,7 @@ public void testModificationWithAllWrongEquipmentIds() throws Exception { .withBody(mapper.writeValueAsString(List.of(filter))) .withHeader("Content-Type", "application/json"))).getId(); - ModificationByAssignmentInfos modificationByAssignmentInfos = ModificationByAssignmentInfos.builder() - .assignmentInfosList(simpleInfosList) - .equipmentType(getIdentifiableType()) - .build(); - - checkCreationApplicationStatus(modificationByAssignmentInfos, NetworkModificationResult.ApplicationStatus.WITH_ERRORS); + checkCreationApplicationStatus(assignmentsWithWrongFilter, NetworkModificationResult.ApplicationStatus.WITH_ERRORS); wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(List.of(FILTER_WITH_ALL_WRONG_IDS)), false); } @@ -181,7 +163,7 @@ public void testCreate() throws Exception { super.testCreate(); - wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(filters.stream().map(AbstractFilter::getId).collect(Collectors.toList())), false); + wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(filters.stream().map(AbstractFilter::getId).toList()), false); } @Test @@ -195,11 +177,15 @@ public void testCopy() throws Exception { super.testCopy(); - wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(filters.stream().map(AbstractFilter::getId).collect(Collectors.toList())), false); + wireMockUtils.verifyGetRequest(stubId, PATH, handleQueryParams(filters.stream().map(AbstractFilter::getId).toList()), false); } - protected void checkCreationApplicationStatus(ModificationByAssignmentInfos modificationByAssignmentInfos, + protected void checkCreationApplicationStatus(List> assignmentInfos, NetworkModificationResult.ApplicationStatus applicationStatus) throws Exception { + ModificationByAssignmentInfos modificationByAssignmentInfos = ModificationByAssignmentInfos.builder() + .equipmentType(getIdentifiableType()) + .assignmentInfosList(assignmentInfos) + .build(); String modificationToCreateJson = mapper.writeValueAsString(modificationByAssignmentInfos); MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) @@ -259,14 +245,14 @@ String getPath(boolean isRegexPath) { protected abstract List getTestFilters(); protected List> getAssignmentInfos() { - PropertyAssignmentInfos spySimpleInfos = spy(PropertyAssignmentInfos.builder() + PropertyAssignmentInfos spyAssignmentInfos = spy(PropertyAssignmentInfos.builder() .editedField(DataType.PROPERTY.name()) .propertyName("propertyName") .value("propertyValue") .filters(List.of(filter1)) .build()); - doReturn(DataType.PROPERTY).when(spySimpleInfos).getDataType(); - return new ArrayList<>(List.of(spySimpleInfos)); + doReturn(DataType.PROPERTY).when(spyAssignmentInfos).getDataType(); + return new ArrayList<>(List.of(spyAssignmentInfos)); } protected abstract List> getUpdatedAssignmentInfos(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java index 50096a941..6bf3b9252 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java @@ -14,11 +14,10 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.ModificationByAssignmentInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.junit.Test; import java.util.Date; @@ -92,11 +91,7 @@ public void testModifyTwtWithWarning() throws Exception { .value(4.) .build(); - checkCreationApplicationStatus(ModificationByAssignmentInfos.builder() - .equipmentType(getIdentifiableType()) - .assignmentInfosList(List.of(assignmentInfos)) - .build(), - NetworkModificationResult.ApplicationStatus.WITH_WARNINGS); + checkCreationApplicationStatus(List.of(assignmentInfos), NetworkModificationResult.ApplicationStatus.WITH_WARNINGS); assertNotNull(getNetwork().getTwoWindingsTransformer(TWT_ID_1).getRatioTapChanger()); assertNotNull(getNetwork().getTwoWindingsTransformer(TWT_ID_2).getRatioTapChanger()); From 1823ef9a232ef8b2ed1257b07ea041cdf7542297 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Thu, 26 Sep 2024 17:26:56 +0200 Subject: [PATCH 33/42] fix unused report --- .../server/dto/byfilter/equipmentfield/VoltageLevelField.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java index 0a20700d4..ee01ff24c 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/VoltageLevelField.java @@ -9,12 +9,11 @@ import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; +import jakarta.validation.constraints.NotNull; import org.gridsuite.modification.server.dto.AttributeModification; import org.gridsuite.modification.server.dto.OperationType; import static org.gridsuite.modification.server.modifications.VoltageLevelModification.*; -import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; -import jakarta.validation.constraints.NotNull; /** * @author Seddik Yengui From bab677c5968c36cddcd7d3ad3be3118e5a37fba7 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Fri, 27 Sep 2024 17:59:28 +0200 Subject: [PATCH 34/42] fix test --- .../equipmentfield/GeneratorField.java | 44 +++++++++++-------- .../TwoWindingsTransformerField.java | 3 +- .../BatteryModificationByAssignmentTest.java | 8 ++-- ...GeneratorModificationByAssignmentTest.java | 4 +- ...ansformerModificationByAssignmentTest.java | 7 ++- 5 files changed, 39 insertions(+), 27 deletions(-) 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 e4560faa1..028c313f4 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 @@ -65,38 +65,46 @@ public static String getReferenceValue(Generator generator, String generatorFiel public static void setNewValue(Generator generator, String generatorField, @NotNull String newValue) { GeneratorField field = GeneratorField.valueOf(generatorField); - final AttributeModification attributeModification = new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET); switch (field) { case MAXIMUM_ACTIVE_POWER -> modifyGeneratorActiveLimitsAttributes( - attributeModification, null, null, generator, null); - case MINIMUM_ACTIVE_POWER -> modifyGeneratorActiveLimitsAttributes(null, attributeModification, null, generator, null); + new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), + null, null, generator, null); + case MINIMUM_ACTIVE_POWER -> modifyGeneratorActiveLimitsAttributes( + null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, generator, null); case ACTIVE_POWER_SET_POINT -> { ModificationUtils.getInstance().checkActivePowerZeroOrBetweenMinAndMaxActivePower( - attributeModification, null, null, - generator.getMinP(), generator.getMaxP(), generator.getTargetP(), - MODIFY_GENERATOR_ERROR, "Generator '" + generator.getId() + "' : " + new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), + null, null, generator.getMinP(), generator.getMaxP(), generator.getTargetP(), + MODIFY_GENERATOR_ERROR, "Generator '" + generator.getId() + "' : " ); generator.setTargetP(Double.parseDouble(newValue)); } - case RATED_NOMINAL_POWER -> modifyGeneratorActiveLimitsAttributes(null, null, attributeModification, generator, null); - case REACTIVE_POWER_SET_POINT -> modifyTargetQ(generator, attributeModification); - case VOLTAGE_SET_POINT -> modifyTargetV(generator, attributeModification); - case PLANNED_ACTIVE_POWER_SET_POINT -> - modifyGeneratorStartUpAttributes(attributeModification, null, null, null, generator, null, null); - case MARGINAL_COST -> - modifyGeneratorStartUpAttributes(null, attributeModification, null, null, generator, null, null); - case PLANNED_OUTAGE_RATE -> - modifyGeneratorStartUpAttributes(null, null, attributeModification, null, generator, null, null); + case RATED_NOMINAL_POWER -> modifyGeneratorActiveLimitsAttributes( + null, null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), generator, null); + case REACTIVE_POWER_SET_POINT -> modifyTargetQ(generator, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET)); + case VOLTAGE_SET_POINT -> modifyTargetV(generator, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET)); + case PLANNED_ACTIVE_POWER_SET_POINT -> modifyGeneratorStartUpAttributes( + new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), null, + null, null, generator, null, null); + case MARGINAL_COST -> modifyGeneratorStartUpAttributes( + null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), + null, null, generator, null, null); + case PLANNED_OUTAGE_RATE -> modifyGeneratorStartUpAttributes( + null, null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), + null, generator, null, null); case FORCED_OUTAGE_RATE -> - modifyGeneratorStartUpAttributes(null, null, null, attributeModification, generator, null, null); + modifyGeneratorStartUpAttributes(null, null, null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), generator, null, null); case DROOP -> { 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); } - case TRANSIENT_REACTANCE -> modifyGeneratorShortCircuitAttributes(attributeModification, null, generator, null); - case STEP_UP_TRANSFORMER_REACTANCE -> modifyGeneratorShortCircuitAttributes(null, attributeModification, generator, null); + case TRANSIENT_REACTANCE -> modifyGeneratorShortCircuitAttributes( + new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), + null, generator, null); + case STEP_UP_TRANSFORMER_REACTANCE -> modifyGeneratorShortCircuitAttributes( + null, new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), generator, null); case Q_PERCENT -> generator.newExtension(CoordinatedReactiveControlAdderImpl.class) .withQPercent(Double.parseDouble(newValue)) .add(); diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index 9c7655437..78d35d9bd 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -81,8 +81,7 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin null, new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null); case RATIO_TARGET_DEADBAND -> modifyTargets(ratioTapChanger, null, true, null, attributeModification, null); case REGULATION_VALUE -> processPhaseTapRegulation( - phaseTapChanger, null, regulationMode, true, attributeModification, null, null - ); + phaseTapChanger, null, regulationMode, true, attributeModification, null, null); case PHASE_LOW_TAP_POSITION -> processTapChangerPositionsAndSteps(phaseTapChanger, null, true, new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null, null); case PHASE_TAP_POSITION -> processTapChangerPositionsAndSteps(phaseTapChanger, null, true, diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java index c097834f0..8799177ef 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java @@ -14,9 +14,9 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.BatteryField; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.BatteryField; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.junit.Test; @@ -112,7 +112,7 @@ protected List> getAssignmentInfos() { DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() .filters(List.of(filter5)) .editedField(BatteryField.ACTIVE_POWER_SET_POINT.name()) - .value(30.) + .value(75.) .build(); DoubleAssignmentInfos assignmentInfos4 = DoubleAssignmentInfos.builder() @@ -165,9 +165,9 @@ protected void assertAfterNetworkModificationCreation() { assertEquals(2, activePowerControl1.getDroop(), 0); assertEquals(80, getNetwork().getBattery(BATTERY_ID_2).getMaxP(), 0); - assertEquals(30, getNetwork().getBattery(BATTERY_ID_2).getTargetP(), 0); + assertEquals(75, getNetwork().getBattery(BATTERY_ID_2).getTargetP(), 0); assertEquals(80, getNetwork().getBattery(BATTERY_ID_3).getMaxP(), 0); - assertEquals(30, getNetwork().getBattery(BATTERY_ID_3).getTargetP(), 0); + assertEquals(75, getNetwork().getBattery(BATTERY_ID_3).getTargetP(), 0); assertEquals(80, getNetwork().getBattery(BATTERY_ID_4).getMaxP(), 0); assertEquals(30, getNetwork().getBattery(BATTERY_ID_5).getMinP(), 0); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java index 5c166ccc2..f4c724173 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/GeneratorModificationByAssignmentTest.java @@ -286,7 +286,7 @@ protected void assertAfterNetworkModificationCreation() { assertThat(generator1.getProperty("propertyName")).isEqualTo("propertyValue"); assertEquals(100, generator1.getTargetP(), 0); assertEquals(2, generatorStartup1.getMarginalCost(), 0); - assertEquals(55, generatorStartup1.getPlannedOutageRate(), 0); + assertEquals(0.1, generatorStartup1.getPlannedOutageRate(), 0); assertEquals(0.05, generatorStartup1.getForcedOutageRate(), 0); assertEquals(10, generatorStartup1.getPlannedActivePowerSetpoint(), 0); assertEquals(50, generator1.getMaxP(), 0); @@ -299,7 +299,7 @@ protected void assertAfterNetworkModificationCreation() { assertThat(generator2.getProperty("propertyName")).isEqualTo("propertyValue"); assertEquals(200, generator2.getTargetP(), 0); assertEquals(2, generatorStartup2.getMarginalCost(), 0); - assertEquals(55, generatorStartup2.getPlannedOutageRate(), 0); + assertEquals(0.1, generatorStartup2.getPlannedOutageRate(), 0); assertEquals(0.05, generatorStartup2.getForcedOutageRate(), 0); assertEquals(10, generatorStartup2.getPlannedActivePowerSetpoint(), 0); assertEquals(50, generator2.getMaxP(), 0); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java index 6bf3b9252..f062b1e7d 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java @@ -137,7 +137,12 @@ protected void createEquipments() { "trf1", 30, ConnectablePosition.Direction.TOP, "trf1", 40, ConnectablePosition.Direction.BOTTOM); twt4.setRatedS(15); - addPhaseTapChangerSteps(twt4.newPhaseTapChanger().setRegulationValue(45).setLowTapPosition(1).setTapPosition(2).setTargetDeadband(34)); + addPhaseTapChangerSteps(twt4.newPhaseTapChanger() + .setRegulationValue(45) + .setLowTapPosition(1) + .setTapPosition(2) + .setTargetDeadband(34) + .setRegulationMode(PhaseTapChanger.RegulationMode.ACTIVE_POWER_CONTROL)); TwoWindingsTransformer twt5 = createTwoWindingsTransformer(s3, TWT_ID_5, TWT_ID_5, 50, 60, 70, 80, 30, 40, 101, 101, From 42be9a0395b4cd6925de07fcea8bba685643f51a Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Mon, 30 Sep 2024 11:25:52 +0200 Subject: [PATCH 35/42] fix failed test --- .../ModificationByAssignmentEntity.java | 1 + .../AbstractModificationByAssignment.java | 53 ------------------- .../byfilter/ModificationByAssignment.java | 10 ---- 3 files changed, 1 insertion(+), 63 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java index 960197583..de90005f1 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/byfilter/ModificationByAssignmentEntity.java @@ -73,6 +73,7 @@ public ModificationByAssignmentInfos toModificationInfos() { .uuid(getId()) .date(getDate()) .stashed(getStashed()) + .activated(getActivated()) .equipmentType(equipmentType) .assignmentInfosList(assignmentEntities.stream() .map(AssignmentEntity::toAssignmentInfos) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java index 6c43d6bbf..9d6e56926 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java @@ -12,14 +12,12 @@ import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.Network; -import com.powsybl.iidm.network.TwoWindingsTransformer; import org.apache.commons.lang3.StringUtils; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.FilterEquipments; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractAssignmentInfos; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.ModificationUtils; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; @@ -188,49 +186,6 @@ public void apply(Network network, ReportNode subReportNode) { } } - protected boolean isEquipmentEditable(Identifiable equipment, - AbstractAssignmentInfos abstractAssignmentInfos, - List equipmentsReport) { - if (abstractAssignmentInfos.getEditedField() == null) { - return false; - } - - if (equipment.getType() == IdentifiableType.TWO_WINDINGS_TRANSFORMER) { - TwoWindingsTransformerField editedField = TwoWindingsTransformerField.valueOf(abstractAssignmentInfos.getEditedField()); - TwoWindingsTransformer twoWindingsTransformer = (TwoWindingsTransformer) equipment; - return switch (editedField) { - case TARGET_V, RATIO_LOW_TAP_POSITION, RATIO_TAP_POSITION, RATIO_TARGET_DEADBAND -> { - boolean isEditable = twoWindingsTransformer.getRatioTapChanger() != null; - if (!isEditable) { - equipmentsReport.add(ReportNode.newRootReportNode() - .withMessageTemplate(REPORT_KEY_RATIO_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), - " Cannot modify field ${" + VALUE_KEY_FIELD_NAME + "} of equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : Ratio tab changer is null") - .withUntypedValue(VALUE_KEY_FIELD_NAME, editedField.name()) - .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); - } - yield isEditable; - } - case REGULATION_VALUE, PHASE_LOW_TAP_POSITION, PHASE_TAP_POSITION, PHASE_TARGET_DEADBAND -> { - boolean isEditable = twoWindingsTransformer.getPhaseTapChanger() != null; - if (!isEditable) { - equipmentsReport.add(ReportNode.newRootReportNode() - .withMessageTemplate(REPORT_KEY_PHASE_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), - " Cannot modify field ${" + VALUE_KEY_FIELD_NAME + "} of equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : Phase tab changer is null") - .withUntypedValue(VALUE_KEY_FIELD_NAME, editedField.name()) - .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) - .withSeverity(TypedValue.TRACE_SEVERITY) - .build()); - } - yield isEditable; - } - default -> true; - }; - } - return true; - } - private void createAssignmentReports(List reports, AbstractAssignmentInfos abstractAssignmentInfos, FilterInfos filterInfos, FilterEquipments filterEquipments, List notEditableEquipments) { if (notEditableEquipments.size() == filterEquipments.getIdentifiableAttributes().size()) { @@ -350,14 +305,6 @@ private void applyOnFilterEquipments(Network network, filterEquipments.getIdentifiableAttributes() .stream() .map(attributes -> network.getIdentifiable(attributes.getId())) - .filter(equipment -> { - boolean isEditableEquipment = isEquipmentEditable(equipment, abstractAssignmentInfos, equipmentsReport); - if (!isEditableEquipment) { - notEditableEquipments.add(equipment.getId()); - equipmentNotModifiedCount += 1; - } - return isEditableEquipment; - }) .forEach(equipment -> applyModification(equipment, abstractAssignmentInfos, equipmentsReport, notEditableEquipments)); createAssignmentReports(reports, abstractAssignmentInfos, filterInfos, filterEquipments, notEditableEquipments); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java index 421e6656f..92987f808 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java @@ -59,16 +59,6 @@ public NetworkModificationException.Type getExceptionType() { return MODIFICATION_BY_ASSIGNMENT_ERROR; } - @Override - protected boolean isEquipmentEditable(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos, List equipmentsReport) { - AssignmentInfos assignmentInfos = (AssignmentInfos) abstractAssignmentInfos; - if (assignmentInfos.getDataType() == DataType.PROPERTY) { - return true; - } else { - return super.isEquipmentEditable(equipment, abstractAssignmentInfos, equipmentsReport); - } - } - @Override protected boolean preCheckValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos, List reports, List notEditableEquipments) { return true; From 0bf48c38f367df012dcba1469b1b97776ca3b9e7 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Mon, 30 Sep 2024 12:47:06 +0200 Subject: [PATCH 36/42] keep editable check --- .../AbstractModificationByAssignment.java | 53 +++++++++++++++++++ .../byfilter/ModificationByAssignment.java | 10 ++++ 2 files changed, 63 insertions(+) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java index 9d6e56926..6c43d6bbf 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java @@ -12,12 +12,14 @@ import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.TwoWindingsTransformer; import org.apache.commons.lang3.StringUtils; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.FilterEquipments; import org.gridsuite.modification.server.dto.FilterInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.byfilter.AbstractAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.ModificationUtils; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; @@ -186,6 +188,49 @@ public void apply(Network network, ReportNode subReportNode) { } } + protected boolean isEquipmentEditable(Identifiable equipment, + AbstractAssignmentInfos abstractAssignmentInfos, + List equipmentsReport) { + if (abstractAssignmentInfos.getEditedField() == null) { + return false; + } + + if (equipment.getType() == IdentifiableType.TWO_WINDINGS_TRANSFORMER) { + TwoWindingsTransformerField editedField = TwoWindingsTransformerField.valueOf(abstractAssignmentInfos.getEditedField()); + TwoWindingsTransformer twoWindingsTransformer = (TwoWindingsTransformer) equipment; + return switch (editedField) { + case TARGET_V, RATIO_LOW_TAP_POSITION, RATIO_TAP_POSITION, RATIO_TARGET_DEADBAND -> { + boolean isEditable = twoWindingsTransformer.getRatioTapChanger() != null; + if (!isEditable) { + equipmentsReport.add(ReportNode.newRootReportNode() + .withMessageTemplate(REPORT_KEY_RATIO_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), + " Cannot modify field ${" + VALUE_KEY_FIELD_NAME + "} of equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : Ratio tab changer is null") + .withUntypedValue(VALUE_KEY_FIELD_NAME, editedField.name()) + .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); + } + yield isEditable; + } + case REGULATION_VALUE, PHASE_LOW_TAP_POSITION, PHASE_TAP_POSITION, PHASE_TARGET_DEADBAND -> { + boolean isEditable = twoWindingsTransformer.getPhaseTapChanger() != null; + if (!isEditable) { + equipmentsReport.add(ReportNode.newRootReportNode() + .withMessageTemplate(REPORT_KEY_PHASE_TAP_CHANGER_EQUIPMENT_MODIFIED_ERROR + equipmentsReport.size(), + " Cannot modify field ${" + VALUE_KEY_FIELD_NAME + "} of equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : Phase tab changer is null") + .withUntypedValue(VALUE_KEY_FIELD_NAME, editedField.name()) + .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) + .withSeverity(TypedValue.TRACE_SEVERITY) + .build()); + } + yield isEditable; + } + default -> true; + }; + } + return true; + } + private void createAssignmentReports(List reports, AbstractAssignmentInfos abstractAssignmentInfos, FilterInfos filterInfos, FilterEquipments filterEquipments, List notEditableEquipments) { if (notEditableEquipments.size() == filterEquipments.getIdentifiableAttributes().size()) { @@ -305,6 +350,14 @@ private void applyOnFilterEquipments(Network network, filterEquipments.getIdentifiableAttributes() .stream() .map(attributes -> network.getIdentifiable(attributes.getId())) + .filter(equipment -> { + boolean isEditableEquipment = isEquipmentEditable(equipment, abstractAssignmentInfos, equipmentsReport); + if (!isEditableEquipment) { + notEditableEquipments.add(equipment.getId()); + equipmentNotModifiedCount += 1; + } + return isEditableEquipment; + }) .forEach(equipment -> applyModification(equipment, abstractAssignmentInfos, equipmentsReport, notEditableEquipments)); createAssignmentReports(reports, abstractAssignmentInfos, filterInfos, filterEquipments, notEditableEquipments); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java index 92987f808..421e6656f 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/ModificationByAssignment.java @@ -59,6 +59,16 @@ public NetworkModificationException.Type getExceptionType() { return MODIFICATION_BY_ASSIGNMENT_ERROR; } + @Override + protected boolean isEquipmentEditable(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos, List equipmentsReport) { + AssignmentInfos assignmentInfos = (AssignmentInfos) abstractAssignmentInfos; + if (assignmentInfos.getDataType() == DataType.PROPERTY) { + return true; + } else { + return super.isEquipmentEditable(equipment, abstractAssignmentInfos, equipmentsReport); + } + } + @Override protected boolean preCheckValue(Identifiable equipment, AbstractAssignmentInfos abstractAssignmentInfos, List reports, List notEditableEquipments) { return true; From 62bd6de2976384a68efcbd7d9add8028cec2eef1 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Mon, 30 Sep 2024 18:29:09 +0200 Subject: [PATCH 37/42] keep test valid --- .../modifications/byfilter/AbstractModificationByAssignment.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java index 6c43d6bbf..c2575b71e 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java @@ -316,7 +316,6 @@ private void applyModification(Identifiable equipment, .withUntypedValue(VALUE_KEY_ERROR_MESSAGE, e.getMessage()) .withSeverity(TypedValue.TRACE_SEVERITY) .build()); - throw e; } } From 57a61f756e5be81bd3287afbe7b4b56c6fe6b1f7 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Mon, 30 Sep 2024 19:46:45 +0200 Subject: [PATCH 38/42] clean test --- .../assignment/BatteryModificationByAssignmentTest.java | 5 ----- .../ShuntCompensatorModificationByAssignmentTest.java | 7 +------ .../VoltageLevelModificationByAssignmentTest.java | 7 +------ 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java index 8799177ef..ed88c74f2 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/BatteryModificationByAssignmentTest.java @@ -17,7 +17,6 @@ import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.BatteryField; -import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.junit.Test; import java.util.Date; @@ -212,8 +211,4 @@ protected EquipmentType getEquipmentType() { return EquipmentType.BATTERY; } - @Override - protected void assertResultImpacts(List impacts) { - // TODO later - } } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java index 9d279c594..38f28cb57 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java @@ -15,10 +15,9 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.ShuntCompensatorField; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; -import org.gridsuite.modification.server.impacts.AbstractBaseImpact; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.ShuntCompensatorField; import org.junit.Test; import java.util.Date; @@ -181,8 +180,4 @@ protected EquipmentType getEquipmentType() { return EquipmentType.SHUNT_COMPENSATOR; } - @Override - protected void assertResultImpacts(List impacts) { - // TODO later - } } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/VoltageLevelModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/VoltageLevelModificationByAssignmentTest.java index 90a1f18a8..4e105be3c 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/VoltageLevelModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/VoltageLevelModificationByAssignmentTest.java @@ -15,10 +15,9 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.VoltageLevelField; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; -import org.gridsuite.modification.server.impacts.AbstractBaseImpact; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.VoltageLevelField; import java.util.Date; import java.util.List; @@ -223,8 +222,4 @@ protected void assertAfterNetworkModificationDeletion() { assertEquals(200, identifiableShortCircuit6.getIpMax(), 0); } - @Override - protected void assertResultImpacts(List impacts) { - // TODO later - } } From 93724890d98b7df3b0a962dec157e55c95e83f62 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Mon, 30 Sep 2024 23:37:07 +0200 Subject: [PATCH 39/42] clean test --- .../assignment/LoadModificationByAssignmentTest.java | 8 ++++++-- .../byfilter/formula/LoadByFormulaModificationTest.java | 9 +++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/LoadModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/LoadModificationByAssignmentTest.java index 331c3d3ae..e4fb3de38 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/LoadModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/LoadModificationByAssignmentTest.java @@ -13,16 +13,18 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.LoadField; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.EnumAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.LoadField; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import java.util.Date; import java.util.List; +import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; +import static org.gridsuite.modification.server.Impacts.TestImpactUtils.createSubstationImpacts; import static org.gridsuite.modification.server.utils.NetworkUtil.createLoad; import static org.junit.Assert.assertEquals; @@ -124,7 +126,9 @@ protected EquipmentType getEquipmentType() { @Override protected void assertResultImpacts(List impacts) { - // TODO later + // NOTE: this assert is based on the return of NetworkStoreListener#reduceNetworkImpacts() + // since the test network has only 4 loads which is less than the collectionThreshold 5 + assertThat(impacts).containsAll(createSubstationImpacts(Set.of("s1", "s2"))); } } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/LoadByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/LoadByFormulaModificationTest.java index c3c5f1aac..47e333d41 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/LoadByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/LoadByFormulaModificationTest.java @@ -12,15 +12,18 @@ import org.gridsuite.filter.identifierlistfilter.IdentifierListFilter; import org.gridsuite.filter.identifierlistfilter.IdentifierListFilterEquipmentAttributes; import org.gridsuite.filter.utils.EquipmentType; +import org.gridsuite.modification.server.dto.byfilter.equipmentfield.LoadField; import org.gridsuite.modification.server.dto.byfilter.formula.FormulaInfos; import org.gridsuite.modification.server.dto.byfilter.formula.Operator; import org.gridsuite.modification.server.dto.byfilter.formula.ReferenceFieldOrValue; -import org.gridsuite.modification.server.dto.byfilter.equipmentfield.LoadField; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import java.util.Date; import java.util.List; +import java.util.Set; +import static org.assertj.core.api.Assertions.assertThat; +import static org.gridsuite.modification.server.Impacts.TestImpactUtils.createSubstationImpacts; import static org.gridsuite.modification.server.utils.NetworkUtil.createLoad; import static org.junit.Assert.assertEquals; @@ -114,6 +117,8 @@ protected void assertAfterNetworkModificationDeletion() { @Override protected void assertResultImpacts(List impacts) { - // TODO later + // NOTE: this assert is based on the return of NetworkStoreListener#reduceNetworkImpacts() + // since the test network has only 4 loads which are less than the collectionThreshold 5 + assertThat(impacts).containsAll(createSubstationImpacts(Set.of("s1", "s2"))); } } From 76e78078644e5a693a6112d9c153defccf5fe9db Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 1 Oct 2024 13:21:53 +0200 Subject: [PATCH 40/42] Parse int --- .../byfilter/equipmentfield/ShuntCompensatorField.java | 4 ++-- .../equipmentfield/TwoWindingsTransformerField.java | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index 1f97de712..3953c83fc 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -52,9 +52,9 @@ public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCo shuntCompensatorType = ShuntCompensatorType.CAPACITOR; } switch (field) { - case MAXIMUM_SECTION_COUNT -> modifyMaximumSectionCount(new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), + case MAXIMUM_SECTION_COUNT -> modifyMaximumSectionCount(new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, null, null, shuntCompensator, model); - case SECTION_COUNT -> modifySectionCount(new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, shuntCompensator); + case SECTION_COUNT -> modifySectionCount(new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, shuntCompensator); case MAXIMUM_SUSCEPTANCE -> modifyMaxSusceptance(new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), shuntCompensator.getMaximumSectionCount(), null, model); case MAXIMUM_Q_AT_NOMINAL_VOLTAGE -> modifyMaximumQAtNominalVoltage(new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index 78d35d9bd..9e35a7a36 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -76,16 +76,16 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin case RATED_S -> modifyRatedS(transformer, attributeModification, null); case TARGET_V -> modifyTargets(ratioTapChanger, null, true, attributeModification, null, null); case RATIO_LOW_TAP_POSITION -> processTapChangerPositionsAndSteps(ratioTapChanger, null, true, - new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null, null); + new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, null, null); case RATIO_TAP_POSITION -> processTapChangerPositionsAndSteps(ratioTapChanger, null, true, - null, new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null); + null, new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, null); case RATIO_TARGET_DEADBAND -> modifyTargets(ratioTapChanger, null, true, null, attributeModification, null); case REGULATION_VALUE -> processPhaseTapRegulation( phaseTapChanger, null, regulationMode, true, attributeModification, null, null); case PHASE_LOW_TAP_POSITION -> processTapChangerPositionsAndSteps(phaseTapChanger, null, true, - new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null, null); + new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, null, null); case PHASE_TAP_POSITION -> processTapChangerPositionsAndSteps(phaseTapChanger, null, true, - null, new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null); + null, new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, null); case PHASE_TARGET_DEADBAND -> processPhaseTapRegulation( phaseTapChanger, null, null, true, null, attributeModification, null ); From ef1ba44b371037a9bb69425654e893c971572b2c Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 1 Oct 2024 14:27:08 +0200 Subject: [PATCH 41/42] revert to parseDouble --- .../equipmentfield/ShuntCompensatorField.java | 4 +-- .../TwoWindingsTransformerField.java | 8 ++--- ...mpensatorModificationByAssignmentTest.java | 21 +++++++------- ...ansformerModificationByAssignmentTest.java | 29 ++++++++++--------- 4 files changed, 32 insertions(+), 30 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java index 3953c83fc..1f97de712 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/ShuntCompensatorField.java @@ -52,9 +52,9 @@ public static void setNewValue(ShuntCompensator shuntCompensator, String shuntCo shuntCompensatorType = ShuntCompensatorType.CAPACITOR; } switch (field) { - case MAXIMUM_SECTION_COUNT -> modifyMaximumSectionCount(new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), + case MAXIMUM_SECTION_COUNT -> modifyMaximumSectionCount(new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null, null, shuntCompensator, model); - case SECTION_COUNT -> modifySectionCount(new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, shuntCompensator); + case SECTION_COUNT -> modifySectionCount(new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, shuntCompensator); case MAXIMUM_SUSCEPTANCE -> modifyMaxSusceptance(new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), shuntCompensator.getMaximumSectionCount(), null, model); case MAXIMUM_Q_AT_NOMINAL_VOLTAGE -> modifyMaximumQAtNominalVoltage(new AttributeModification<>(Double.parseDouble(newValue), OperationType.SET), diff --git a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java index 9e35a7a36..78d35d9bd 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java +++ b/src/main/java/org/gridsuite/modification/server/dto/byfilter/equipmentfield/TwoWindingsTransformerField.java @@ -76,16 +76,16 @@ public static void setNewValue(TwoWindingsTransformer transformer, String twoWin case RATED_S -> modifyRatedS(transformer, attributeModification, null); case TARGET_V -> modifyTargets(ratioTapChanger, null, true, attributeModification, null, null); case RATIO_LOW_TAP_POSITION -> processTapChangerPositionsAndSteps(ratioTapChanger, null, true, - new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, null, null); + new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null, null); case RATIO_TAP_POSITION -> processTapChangerPositionsAndSteps(ratioTapChanger, null, true, - null, new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, null); + null, new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null); case RATIO_TARGET_DEADBAND -> modifyTargets(ratioTapChanger, null, true, null, attributeModification, null); case REGULATION_VALUE -> processPhaseTapRegulation( phaseTapChanger, null, regulationMode, true, attributeModification, null, null); case PHASE_LOW_TAP_POSITION -> processTapChangerPositionsAndSteps(phaseTapChanger, null, true, - new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, null, null); + new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null, null); case PHASE_TAP_POSITION -> processTapChangerPositionsAndSteps(phaseTapChanger, null, true, - null, new AttributeModification<>(Integer.parseInt(newValue), OperationType.SET), null, null); + null, new AttributeModification<>((int) Double.parseDouble(newValue), OperationType.SET), null, null); case PHASE_TARGET_DEADBAND -> processPhaseTapRegulation( phaseTapChanger, null, null, true, null, attributeModification, null ); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java index 38f28cb57..727b1d4b2 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/ShuntCompensatorModificationByAssignmentTest.java @@ -17,6 +17,7 @@ import org.gridsuite.filter.utils.EquipmentType; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.IntegerAssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.ShuntCompensatorField; import org.junit.Test; @@ -41,9 +42,9 @@ public void testCreateWithWarning() throws Exception { IdentifierListFilterEquipmentAttributes identifiableAttributes = getIdentifiableAttributes(SHUNT_COMPENSATOR_ID_1, 1.0); IdentifierListFilterEquipmentAttributes wrongIdAttributes = getIdentifiableAttributes("wrongId", 1.0); - DoubleAssignmentInfos assignmentInfos = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos = IntegerAssignmentInfos.builder() .editedField(ShuntCompensatorField.MAXIMUM_SECTION_COUNT.name()) - .value(2.) + .value(2) .filters(List.of(filterWithOneWrongId)) .build(); @@ -81,15 +82,15 @@ protected List getTestFilters() { @Override protected List> getAssignmentInfos() { - DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos1 = IntegerAssignmentInfos.builder() .editedField(ShuntCompensatorField.MAXIMUM_SECTION_COUNT.name()) - .value(8.) + .value(8) .filters(List.of(filter1, filter2)) .build(); - DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos2 = IntegerAssignmentInfos.builder() .editedField(ShuntCompensatorField.SECTION_COUNT.name()) - .value(2.) + .value(2) .filters(List.of(filter3)) .build(); @@ -113,15 +114,15 @@ protected List> getAssignmentInfos() { @Override protected List> getUpdatedAssignmentInfos() { - DoubleAssignmentInfos assignmentInfos1 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos1 = IntegerAssignmentInfos.builder() .editedField(ShuntCompensatorField.MAXIMUM_SECTION_COUNT.name()) - .value(150.) + .value(150) .filters(List.of(filter1, filter2)) .build(); - DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos2 = IntegerAssignmentInfos.builder() .editedField(ShuntCompensatorField.SECTION_COUNT.name()) - .value(2.) + .value(2) .filters(List.of(filter3)) .build(); return List.of(assignmentInfos1, assignmentInfos2); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java index f062b1e7d..0b1cb2f14 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/TwoWindingsTransformerModificationByAssignmentTest.java @@ -17,6 +17,7 @@ import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.gridsuite.modification.server.dto.byfilter.assignment.AssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.assignment.DoubleAssignmentInfos; +import org.gridsuite.modification.server.dto.byfilter.assignment.IntegerAssignmentInfos; import org.gridsuite.modification.server.dto.byfilter.equipmentfield.TwoWindingsTransformerField; import org.junit.Test; @@ -85,10 +86,10 @@ public void testModifyTwtWithWarning() throws Exception { .withBody(mapper.writeValueAsString(List.of(filterTwt1, filterTwt2))) .withHeader("Content-Type", "application/json"))).getId(); - DoubleAssignmentInfos assignmentInfos = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos = IntegerAssignmentInfos.builder() .filters(List.of(filter1, filter4)) .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) - .value(4.) + .value(4) .build(); checkCreationApplicationStatus(List.of(assignmentInfos), NetworkModificationResult.ApplicationStatus.WITH_WARNINGS); @@ -191,16 +192,16 @@ protected List> getAssignmentInfos() { .value(2.) .build(); - DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos2 = IntegerAssignmentInfos.builder() .filters(List.of(filter2)) .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) - .value(4.) + .value(4) .build(); - DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos3 = IntegerAssignmentInfos.builder() .filters(List.of(filter2)) .editedField(TwoWindingsTransformerField.RATIO_LOW_TAP_POSITION.name()) - .value(4.) + .value(4) .build(); DoubleAssignmentInfos assignmentInfos4 = DoubleAssignmentInfos.builder() @@ -215,16 +216,16 @@ protected List> getAssignmentInfos() { .value(2.) .build(); - DoubleAssignmentInfos assignmentInfos6 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos6 = IntegerAssignmentInfos.builder() .filters(List.of(filter3)) .editedField(TwoWindingsTransformerField.PHASE_TAP_POSITION.name()) - .value(2.) + .value(2) .build(); - DoubleAssignmentInfos assignmentInfos7 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos7 = IntegerAssignmentInfos.builder() .filters(List.of(filter3)) .editedField(TwoWindingsTransformerField.PHASE_LOW_TAP_POSITION.name()) - .value(2.) + .value(2) .build(); DoubleAssignmentInfos assignmentInfos8 = DoubleAssignmentInfos.builder() @@ -302,16 +303,16 @@ protected List> getUpdatedAssignmentInfos() { .value(2.) .build(); - DoubleAssignmentInfos assignmentInfos2 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos2 = IntegerAssignmentInfos.builder() .filters(List.of(filter2)) .editedField(TwoWindingsTransformerField.RATIO_TAP_POSITION.name()) - .value(3.5) + .value(3) .build(); - DoubleAssignmentInfos assignmentInfos3 = DoubleAssignmentInfos.builder() + IntegerAssignmentInfos assignmentInfos3 = IntegerAssignmentInfos.builder() .filters(List.of(filter1)) .editedField(TwoWindingsTransformerField.RATIO_LOW_TAP_POSITION.name()) - .value(3.) + .value(3) .build(); return List.of(assignmentInfos1, From fa0a5faf5757cbef852da3fd342a30d82dd88da9 Mon Sep 17 00:00:00 2001 From: Thang PHAM Date: Tue, 1 Oct 2024 17:51:05 +0200 Subject: [PATCH 42/42] When exception show warning and not stop next application --- .../byfilter/AbstractModificationByAssignment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java index c2575b71e..33fe17929 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/byfilter/AbstractModificationByAssignment.java @@ -314,7 +314,7 @@ private void applyModification(Identifiable equipment, " Cannot modify equipment ${" + VALUE_KEY_EQUIPMENT_NAME + "} : ${" + VALUE_KEY_ERROR_MESSAGE + "}") .withUntypedValue(VALUE_KEY_EQUIPMENT_NAME, equipment.getId()) .withUntypedValue(VALUE_KEY_ERROR_MESSAGE, e.getMessage()) - .withSeverity(TypedValue.TRACE_SEVERITY) + .withSeverity(TypedValue.WARN_SEVERITY) .build()); } }