From f8a16eedb7ae98f9c6685339b8b4c2318f7f87d1 Mon Sep 17 00:00:00 2001 From: FranckLecuyer <47824306+FranckLecuyer@users.noreply.github.com> Date: Wed, 12 Jul 2023 10:22:02 +0200 Subject: [PATCH] Adapt network preloading strategy when applying modifications (#288) * Associate a network preloading strategy to each modification * Compute the network preloading strategy when bulding a node, in incremental mode (add/copy/move modifications on a built node). * Do not allow preloading strategy all_collections_needed_for_bus_view Signed-off-by: Franck LECUYER --- .../modification/server/ModificationType.java | 73 ++++++++++++------- .../server/NetworkModificationController.java | 6 +- .../server/NetworkModificationException.java | 4 +- .../dto/BranchStatusModificationInfos.java | 12 ++- .../server/dto/DeleteAttachingLineInfos.java | 13 ++-- .../dto/DeleteVoltageLevelOnLineInfos.java | 13 ++-- .../EquipmentAttributeModificationInfos.java | 12 ++- .../server/dto/EquipmentDeletionInfos.java | 13 ++-- .../server/dto/GenerationDispatchInfos.java | 13 ++-- .../server/dto/GeneratorCreationInfos.java | 13 ++-- .../dto/GeneratorModificationInfos.java | 13 ++-- .../server/dto/GeneratorScalingInfos.java | 13 ++-- .../server/dto/GroovyScriptInfos.java | 13 ++-- .../dto/LineAttachToVoltageLevelInfos.java | 13 ++-- .../server/dto/LineCreationInfos.java | 13 ++-- .../server/dto/LineModificationInfos.java | 13 ++-- .../dto/LineSplitWithVoltageLevelInfos.java | 13 ++-- .../dto/LinesAttachToSplitLinesInfos.java | 13 ++-- .../server/dto/LoadCreationInfos.java | 13 ++-- .../server/dto/LoadModificationInfos.java | 13 ++-- .../server/dto/LoadScalingInfos.java | 13 ++-- .../server/dto/ModificationInfos.java | 33 ++++++--- .../dto/ShuntCompensatorCreationInfos.java | 13 ++-- .../ShuntCompensatorModificationInfos.java | 13 ++-- .../server/dto/SubstationCreationInfos.java | 13 ++-- .../dto/SubstationModificationInfos.java | 13 ++-- .../TwoWindingsTransformerCreationInfos.java | 13 ++-- ...oWindingsTransformerModificationInfos.java | 14 ++-- .../server/dto/VoltageLevelCreationInfos.java | 18 ++--- .../dto/VoltageLevelModificationInfos.java | 13 ++-- .../annotation/ModificationErrorTypeName.java | 21 ++++++ .../server/service/BuildWorkerService.java | 5 +- .../service/NetworkModificationService.java | 56 +++++++++++--- .../server/ModificationControllerTest.java | 25 ++++--- .../AbstractNetworkModificationTest.java | 7 +- .../server/service/BuildTest.java | 13 ++-- 36 files changed, 299 insertions(+), 286 deletions(-) create mode 100644 src/main/java/org/gridsuite/modification/server/dto/annotation/ModificationErrorTypeName.java diff --git a/src/main/java/org/gridsuite/modification/server/ModificationType.java b/src/main/java/org/gridsuite/modification/server/ModificationType.java index a61d7f9cd..3f787f8b9 100644 --- a/src/main/java/org/gridsuite/modification/server/ModificationType.java +++ b/src/main/java/org/gridsuite/modification/server/ModificationType.java @@ -6,35 +6,56 @@ */ package org.gridsuite.modification.server; +import com.powsybl.network.store.client.PreloadingStrategy; + +import static org.gridsuite.modification.server.NetworkModificationException.Type.PRELOADING_STRATEGY_NOT_ALLOWED; + /** * @author Slimane Amar * @author Franck Lecuyer */ public enum ModificationType { - EQUIPMENT_ATTRIBUTE_MODIFICATION, - LOAD_CREATION, - LOAD_MODIFICATION, - GENERATOR_CREATION, - GENERATOR_MODIFICATION, - EQUIPMENT_DELETION, - LINE_CREATION, - LINE_MODIFICATION, - TWO_WINDINGS_TRANSFORMER_CREATION, - TWO_WINDINGS_TRANSFORMER_MODIFICATION, - GROOVY_SCRIPT, - SUBSTATION_CREATION, - SUBSTATION_MODIFICATION, - SHUNT_COMPENSATOR_CREATION, - SHUNT_COMPENSATOR_MODIFICATION, - VOLTAGE_LEVEL_CREATION, - VOLTAGE_LEVEL_MODIFICATION, - LINE_SPLIT_WITH_VOLTAGE_LEVEL, - LINE_ATTACH_TO_VOLTAGE_LEVEL, - LINES_ATTACH_TO_SPLIT_LINES, - GENERATOR_SCALING, - LOAD_SCALING, - BRANCH_STATUS_MODIFICATION, - DELETE_VOLTAGE_LEVEL_ON_LINE, - DELETE_ATTACHING_LINE, - GENERATION_DISPATCH + EQUIPMENT_ATTRIBUTE_MODIFICATION(PreloadingStrategy.NONE), + LOAD_CREATION(PreloadingStrategy.NONE), + LOAD_MODIFICATION(PreloadingStrategy.NONE), + GENERATOR_CREATION(PreloadingStrategy.NONE), + GENERATOR_MODIFICATION(PreloadingStrategy.NONE), + EQUIPMENT_DELETION(PreloadingStrategy.NONE), + LINE_CREATION(PreloadingStrategy.NONE), + LINE_MODIFICATION(PreloadingStrategy.NONE), + TWO_WINDINGS_TRANSFORMER_CREATION(PreloadingStrategy.NONE), + TWO_WINDINGS_TRANSFORMER_MODIFICATION(PreloadingStrategy.NONE), + GROOVY_SCRIPT(PreloadingStrategy.COLLECTION), + SUBSTATION_CREATION(PreloadingStrategy.NONE), + SUBSTATION_MODIFICATION(PreloadingStrategy.NONE), + SHUNT_COMPENSATOR_CREATION(PreloadingStrategy.NONE), + SHUNT_COMPENSATOR_MODIFICATION(PreloadingStrategy.NONE), + VOLTAGE_LEVEL_CREATION(PreloadingStrategy.NONE), + VOLTAGE_LEVEL_MODIFICATION(PreloadingStrategy.NONE), + LINE_SPLIT_WITH_VOLTAGE_LEVEL(PreloadingStrategy.NONE), + LINE_ATTACH_TO_VOLTAGE_LEVEL(PreloadingStrategy.NONE), + LINES_ATTACH_TO_SPLIT_LINES(PreloadingStrategy.NONE), + GENERATOR_SCALING(PreloadingStrategy.COLLECTION), + LOAD_SCALING(PreloadingStrategy.COLLECTION), + BRANCH_STATUS_MODIFICATION(PreloadingStrategy.NONE), + DELETE_VOLTAGE_LEVEL_ON_LINE(PreloadingStrategy.NONE), + DELETE_ATTACHING_LINE(PreloadingStrategy.NONE), + GENERATION_DISPATCH(PreloadingStrategy.COLLECTION); + + private final PreloadingStrategy strategy; + + ModificationType(PreloadingStrategy strategy) { + this.strategy = strategy; + } + + public PreloadingStrategy getStrategy() { + return strategy; + } + + public ModificationType maxStrategy(ModificationType other) { + if (strategy == PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW || other.strategy == PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW) { + throw new NetworkModificationException(PRELOADING_STRATEGY_NOT_ALLOWED, "Preloading strategy ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW not allowed"); + } + return strategy != PreloadingStrategy.NONE ? this : other; + } } diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index 73d32d3e1..a26fe99e4 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -83,14 +83,14 @@ public ResponseEntity> copyOrMoveNetworkModi @RequestBody List modificationsUuidList) { switch (action) { case COPY: - return ResponseEntity.ok().body(networkModificationService.duplicateModifications(targetGroupUuid, networkModificationService.getNetworkInfos(networkUuid, variantId), new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList)); + return ResponseEntity.ok().body(networkModificationService.duplicateModifications(targetGroupUuid, networkUuid, variantId, new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList)); case MOVE: UUID sourceGroupUuid = originGroupUuid == null ? targetGroupUuid : originGroupUuid; boolean canBuildNode = build; if (sourceGroupUuid.equals(targetGroupUuid)) { canBuildNode = false; } - return ResponseEntity.ok().body(networkModificationService.moveModifications(targetGroupUuid, sourceGroupUuid, before, networkModificationService.getNetworkInfos(networkUuid, variantId), new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList, canBuildNode)); + return ResponseEntity.ok().body(networkModificationService.moveModifications(targetGroupUuid, sourceGroupUuid, before, networkUuid, variantId, new ReportInfos(reportUuid, reporterId.toString()), modificationsUuidList, canBuildNode)); default: throw new NetworkModificationException(TYPE_MISMATCH); } @@ -125,7 +125,7 @@ public ResponseEntity> createNetworkModifica @Parameter(description = "Reporter ID") @RequestParam("reporterId") String reporterId, @RequestBody ModificationInfos modificationInfos) { modificationInfos.check(); - return ResponseEntity.ok().body(networkModificationService.createNetworkModification(networkModificationService.getNetworkInfos(networkUuid, variantId), groupUuid, new ReportInfos(reportUuid, reporterId), modificationInfos)); + return ResponseEntity.ok().body(networkModificationService.createNetworkModification(networkUuid, variantId, groupUuid, new ReportInfos(reportUuid, reporterId), modificationInfos)); } @PutMapping(value = "/network-modifications/{uuid}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java index f5f9d58ce..ec578ea0d 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationException.java @@ -92,8 +92,8 @@ public enum Type { DELETE_ATTACHING_LINE_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), DELETE_ATTACHING_LINE_NOT_FOUND(HttpStatus.NOT_FOUND), FILTERS_NOT_FOUND(HttpStatus.NOT_FOUND), - GENERATION_DISPATCH_ERROR(HttpStatus.INTERNAL_SERVER_ERROR); - + GENERATION_DISPATCH_ERROR(HttpStatus.INTERNAL_SERVER_ERROR), + PRELOADING_STRATEGY_NOT_ALLOWED(HttpStatus.INTERNAL_SERVER_ERROR); public final HttpStatus status; private final String message; diff --git a/src/main/java/org/gridsuite/modification/server/dto/BranchStatusModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/BranchStatusModificationInfos.java index 525545031..25040ad59 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/BranchStatusModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/BranchStatusModificationInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,8 +15,8 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.BranchStatusModificationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.BranchStatusModification; @@ -30,6 +31,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Branch status modification") +@JsonTypeName("BRANCH_STATUS_MODIFICATION") +@ModificationErrorTypeName("BRANCH_ACTION_ERROR") public class BranchStatusModificationInfos extends EquipmentModificationInfos { @Schema(description = "Action type") @@ -56,11 +59,6 @@ public AbstractModification toModification() { return new BranchStatusModification(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.BRANCH_ACTION_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { String defaultName; @@ -81,7 +79,7 @@ public Reporter createSubReporter(ReporterModel reporter) { default: defaultName = ""; } - return reporter.createSubReporter(ModificationType.BRANCH_STATUS_MODIFICATION.name() + "_" + action, defaultName, "branchId", this.getEquipmentId()); + return reporter.createSubReporter(getType().name() + "_" + action, defaultName, "branchId", this.getEquipmentId()); } @Override diff --git a/src/main/java/org/gridsuite/modification/server/dto/DeleteAttachingLineInfos.java b/src/main/java/org/gridsuite/modification/server/dto/DeleteAttachingLineInfos.java index ff12a36eb..ea076baf2 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/DeleteAttachingLineInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/DeleteAttachingLineInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -15,8 +16,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.DeleteAttachingLineEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.DeleteAttachingLine; @@ -31,6 +31,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Delete attaching line infos") +@JsonTypeName("DELETE_ATTACHING_LINE") +@ModificationErrorTypeName("DELETE_ATTACHING_LINE_ERROR") public class DeleteAttachingLineInfos extends ModificationInfos { @Schema(description = "line 1 id") @@ -58,13 +60,8 @@ public AbstractModification toModification() { return new DeleteAttachingLine(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.DELETE_ATTACHING_LINE_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.DELETE_ATTACHING_LINE.name(), "Delete attaching line"); + return reporter.createSubReporter(getType().name(), "Delete attaching line"); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/DeleteVoltageLevelOnLineInfos.java b/src/main/java/org/gridsuite/modification/server/dto/DeleteVoltageLevelOnLineInfos.java index 16ff0cf72..8d2fad146 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/DeleteVoltageLevelOnLineInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/DeleteVoltageLevelOnLineInfos.java @@ -6,13 +6,13 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; 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.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.DeleteVoltageLevelOnLineEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.DeleteVoltageLevelOnLine; @@ -28,6 +28,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Delete voltage level on line infos") +@JsonTypeName("DELETE_VOLTAGE_LEVEL_ON_LINE") +@ModificationErrorTypeName("DELETE_VOLTAGE_LEVEL_ON_LINE_ERROR") public class DeleteVoltageLevelOnLineInfos extends ModificationInfos { @Schema(description = "line 1 id") @@ -52,13 +54,8 @@ public AbstractModification toModification() { return new DeleteVoltageLevelOnLine(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.DELETE_VOLTAGE_LEVEL_ON_LINE_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.DELETE_VOLTAGE_LEVEL_ON_LINE.name(), "Delete voltage level on line"); + return reporter.createSubReporter(getType().name(), "Delete voltage level on line"); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/EquipmentAttributeModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/EquipmentAttributeModificationInfos.java index 3e7ebd487..2c8b33a69 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/EquipmentAttributeModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/EquipmentAttributeModificationInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.PowsyblException; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; @@ -18,8 +19,8 @@ import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.attribute.*; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.EquipmentAttributeModification; @@ -39,6 +40,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Equipment attribute modification") +@JsonTypeName("EQUIPMENT_ATTRIBUTE_MODIFICATION") +@ModificationErrorTypeName("MODIFICATION_ERROR") public class EquipmentAttributeModificationInfos extends EquipmentModificationInfos { @Schema(description = "Equipment attribute name") private String equipmentAttributeName; @@ -55,14 +58,9 @@ public AbstractModification toModification() { return new EquipmentAttributeModification(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.MODIFICATION_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.EQUIPMENT_ATTRIBUTE_MODIFICATION.name(), "${EquipmentType} '${EquipmentId}' change", + return reporter.createSubReporter(getType().name(), "${EquipmentType} '${EquipmentId}' change", Map.of("EquipmentType", new TypedValue(equipmentType.name(), TypedValue.UNTYPED), "EquipmentId", new TypedValue(getEquipmentId(), TypedValue.UNTYPED))); } diff --git a/src/main/java/org/gridsuite/modification/server/dto/EquipmentDeletionInfos.java b/src/main/java/org/gridsuite/modification/server/dto/EquipmentDeletionInfos.java index 5e6bf1121..f6fdec72d 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/EquipmentDeletionInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/EquipmentDeletionInfos.java @@ -6,8 +6,8 @@ */ package org.gridsuite.modification.server.dto; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.deletion.EquipmentDeletionEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.EquipmentDeletion; @@ -29,6 +29,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Equipment deletion") +@JsonTypeName("EQUIPMENT_DELETION") +@ModificationErrorTypeName("DELETE_EQUIPMENT_ERROR") public class EquipmentDeletionInfos extends EquipmentModificationInfos { @Schema(description = "Equipment type") private String equipmentType; @@ -43,13 +45,8 @@ public AbstractModification toModification() { return new EquipmentDeletion(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.DELETE_EQUIPMENT_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.EQUIPMENT_DELETION.name(), "Equipment deletion ${equipmentId}", "equipmentId", this.getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Equipment deletion ${equipmentId}", "equipmentId", this.getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/GenerationDispatchInfos.java b/src/main/java/org/gridsuite/modification/server/dto/GenerationDispatchInfos.java index cdffbb572..f7a9c97be 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/GenerationDispatchInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/GenerationDispatchInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,8 +15,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.GenerationDispatchEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.GenerationDispatch; @@ -30,6 +30,8 @@ @Getter @Setter @Schema(description = "Generation dispatch creation") +@JsonTypeName("GENERATION_DISPATCH") +@ModificationErrorTypeName("GENERATION_DISPATCH_ERROR") public class GenerationDispatchInfos extends ModificationInfos { @Schema(description = "loss coefficient") @@ -57,13 +59,8 @@ public AbstractModification toModification() { return new GenerationDispatch(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.GENERATION_DISPATCH_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.GENERATION_DISPATCH.name(), "Generation dispatch"); + return reporter.createSubReporter(getType().name(), "Generation dispatch"); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/GeneratorCreationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/GeneratorCreationInfos.java index 129eec61f..713022e92 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/GeneratorCreationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/GeneratorCreationInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import com.powsybl.iidm.network.EnergySource; @@ -20,8 +21,7 @@ import java.util.List; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.creation.GeneratorCreationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.GeneratorCreation; @@ -36,6 +36,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Generator creation") +@JsonTypeName("GENERATOR_CREATION") +@ModificationErrorTypeName("CREATE_GENERATOR_ERROR") public class GeneratorCreationInfos extends InjectionCreationInfos { @Schema(description = "Energy source") private EnergySource energySource; @@ -131,13 +133,8 @@ public AbstractModification toModification() { return new GeneratorCreation(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.CREATE_GENERATOR_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.GENERATOR_CREATION.name(), "Generator creation ${generatorId}", "generatorId", this.getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Generator creation ${generatorId}", "generatorId", this.getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/GeneratorModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/GeneratorModificationInfos.java index 5c1fec264..fda157cf2 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/GeneratorModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/GeneratorModificationInfos.java @@ -8,8 +8,8 @@ import java.util.List; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.GeneratorModificationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.GeneratorModification; @@ -33,6 +33,8 @@ @Data @ToString(callSuper = true) @Schema(description = "generator modification") +@JsonTypeName("GENERATOR_MODIFICATION") +@ModificationErrorTypeName("MODIFY_GENERATOR_ERROR") public class GeneratorModificationInfos extends InjectionModificationInfos { @Schema(description = "Energy source") private AttributeModification energySource; @@ -122,13 +124,8 @@ public AbstractModification toModification() { return new GeneratorModification(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.MODIFY_GENERATOR_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.GENERATOR_MODIFICATION.name(), "Generator modification ${generatorId}", "generatorId", this.getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Generator modification ${generatorId}", "generatorId", this.getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/GeneratorScalingInfos.java b/src/main/java/org/gridsuite/modification/server/dto/GeneratorScalingInfos.java index ab337e6c2..b43178186 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/GeneratorScalingInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/GeneratorScalingInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,8 +15,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.GeneratorScalingEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.GeneratorScaling; @@ -28,6 +28,8 @@ @NoArgsConstructor @Getter @Setter +@JsonTypeName("GENERATOR_SCALING") +@ModificationErrorTypeName("GENERATOR_SCALING_ERROR") @Schema(description = "Generator scaling creation") public class GeneratorScalingInfos extends ScalingInfos { @@ -41,13 +43,8 @@ public AbstractModification toModification() { return new GeneratorScaling(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.GENERATOR_SCALING_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.GENERATOR_SCALING.name(), "Generator scaling"); + return reporter.createSubReporter(getType().name(), "Generator scaling"); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/GroovyScriptInfos.java b/src/main/java/org/gridsuite/modification/server/dto/GroovyScriptInfos.java index 6e09ae977..234e731c0 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/GroovyScriptInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/GroovyScriptInfos.java @@ -6,8 +6,8 @@ */ package org.gridsuite.modification.server.dto; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.GroovyScriptEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.GroovyScript; @@ -29,6 +29,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Groovy script modification") +@JsonTypeName("GROOVY_SCRIPT") +@ModificationErrorTypeName("GROOVY_SCRIPT_ERROR") public class GroovyScriptInfos extends ModificationInfos { @Schema(description = "Groovy script") private String script; @@ -43,13 +45,8 @@ public AbstractModification toModification() { return new GroovyScript(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.GROOVY_SCRIPT_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.GROOVY_SCRIPT.name(), "Apply groovy script"); + return reporter.createSubReporter(getType().name(), "Apply groovy script"); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/LineAttachToVoltageLevelInfos.java b/src/main/java/org/gridsuite/modification/server/dto/LineAttachToVoltageLevelInfos.java index 99011e695..53301c50a 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/LineAttachToVoltageLevelInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/LineAttachToVoltageLevelInfos.java @@ -6,13 +6,13 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; 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.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.LineAttachToVoltageLevelEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.LineAttachToVoltageLevel; @@ -27,6 +27,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Line attach to voltage level") +@JsonTypeName("LINE_ATTACH_TO_VOLTAGE_LEVEL") +@ModificationErrorTypeName("LINE_ATTACH_ERROR") public class LineAttachToVoltageLevelInfos extends ModificationInfos { @Schema(description = "line to attach to ID") @@ -75,13 +77,8 @@ public AbstractModification toModification() { return new LineAttachToVoltageLevel(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.LINE_ATTACH_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.LINE_ATTACH_TO_VOLTAGE_LEVEL.name(), "Line attach to voltage level"); + return reporter.createSubReporter(getType().name(), "Line attach to voltage level"); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/LineCreationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/LineCreationInfos.java index aeaebbc9d..28307c5cb 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/LineCreationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/LineCreationInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,8 +15,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.creation.LineCreationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.LineCreation; @@ -30,6 +30,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Line creation") +@JsonTypeName("LINE_CREATION") +@ModificationErrorTypeName("CREATE_LINE_ERROR") public class LineCreationInfos extends BranchCreationInfos { @Schema(description = "Shunt conductance Side 1") @@ -54,13 +56,8 @@ public AbstractModification toModification() { return new LineCreation(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.CREATE_LINE_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.LINE_CREATION.name(), "Creation of line " + getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Creation of line " + getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/LineModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/LineModificationInfos.java index 8ec3e0cc7..7fb079f82 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/LineModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/LineModificationInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,8 +15,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.LineModificationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.LineModification; @@ -30,6 +30,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Line modification") +@JsonTypeName("LINE_MODIFICATION") +@ModificationErrorTypeName("MODIFY_LINE_ERROR") public class LineModificationInfos extends BranchModificationInfos { @Schema(description = "Shunt conductance Side 1") @@ -54,13 +56,8 @@ public AbstractModification toModification() { return new LineModification(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.MODIFY_LINE_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.LINE_MODIFICATION.name(), "Line modification ${lineId}", "lineId", this.getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Line modification ${lineId}", "lineId", this.getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/LineSplitWithVoltageLevelInfos.java b/src/main/java/org/gridsuite/modification/server/dto/LineSplitWithVoltageLevelInfos.java index c0e4893b0..cf2775c0d 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/LineSplitWithVoltageLevelInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/LineSplitWithVoltageLevelInfos.java @@ -6,14 +6,14 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; 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.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.LineSplitWithVoltageLevelEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.LineSplitWithVoltageLevel; @@ -28,6 +28,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Line split with voltage level") +@JsonTypeName("LINE_SPLIT_WITH_VOLTAGE_LEVEL") +@ModificationErrorTypeName("LINE_SPLIT_ERROR") public class LineSplitWithVoltageLevelInfos extends ModificationInfos { @Schema(description = "line to split ID") @@ -67,13 +69,8 @@ public AbstractModification toModification() { return new LineSplitWithVoltageLevel(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.LINE_SPLIT_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.LINE_SPLIT_WITH_VOLTAGE_LEVEL.name(), "Line split with voltage level"); + return reporter.createSubReporter(getType().name(), "Line split with voltage level"); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/LinesAttachToSplitLinesInfos.java b/src/main/java/org/gridsuite/modification/server/dto/LinesAttachToSplitLinesInfos.java index 0aaa16dd4..d7efe0dd1 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/LinesAttachToSplitLinesInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/LinesAttachToSplitLinesInfos.java @@ -6,13 +6,13 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; 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.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.LinesAttachToSplitLinesEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.LinesAttachToSplitLines; @@ -28,6 +28,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Line attach to split line") +@JsonTypeName("LINES_ATTACH_TO_SPLIT_LINES") +@ModificationErrorTypeName("LINE_ATTACH_ERROR") public class LinesAttachToSplitLinesInfos extends ModificationInfos { @Schema(description = "line 1 id") @@ -67,13 +69,8 @@ public AbstractModification toModification() { return new LinesAttachToSplitLines(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.LINE_ATTACH_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.LINES_ATTACH_TO_SPLIT_LINES.name(), "Lines attach to split lines"); + return reporter.createSubReporter(getType().name(), "Lines attach to split lines"); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/LoadCreationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/LoadCreationInfos.java index 9c781551d..23091450a 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/LoadCreationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/LoadCreationInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import com.powsybl.iidm.network.LoadType; @@ -16,8 +17,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.creation.LoadCreationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.LoadCreation; @@ -32,6 +32,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Load creation") +@JsonTypeName("LOAD_CREATION") +@ModificationErrorTypeName("CREATE_LOAD_ERROR") public class LoadCreationInfos extends InjectionCreationInfos { @Schema(description = "Load type") private LoadType loadType; @@ -61,13 +63,8 @@ public AbstractModification toModification() { return new LoadCreation(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.CREATE_LOAD_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.LOAD_CREATION.name(), "Load creation ${loadId}", "loadId", getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Load creation ${loadId}", "loadId", getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/LoadModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/LoadModificationInfos.java index a4fc9153a..f1b5b3e89 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/LoadModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/LoadModificationInfos.java @@ -6,8 +6,8 @@ */ package org.gridsuite.modification.server.dto; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import com.fasterxml.jackson.annotation.JsonTypeName; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.LoadModificationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.LoadModification; @@ -29,6 +29,8 @@ @ToString(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) @Schema(description = "Load modification") +@JsonTypeName("LOAD_MODIFICATION") +@ModificationErrorTypeName("MODIFY_LOAD_ERROR") public class LoadModificationInfos extends InjectionModificationInfos { @Schema(description = "Load type modification") private AttributeModification loadType; @@ -49,13 +51,8 @@ public AbstractModification toModification() { return new LoadModification(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.MODIFY_LOAD_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.LOAD_MODIFICATION.name(), "Load modification ${loadId}", "loadId", this.getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Load modification ${loadId}", "loadId", this.getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/LoadScalingInfos.java b/src/main/java/org/gridsuite/modification/server/dto/LoadScalingInfos.java index 927f4e610..32cbb858e 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/LoadScalingInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/LoadScalingInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,8 +15,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.LoadScalingEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.LoadScaling; @@ -29,6 +29,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Load scaling creation") +@JsonTypeName("LOAD_SCALING") +@ModificationErrorTypeName("LOAD_SCALING_ERROR") public class LoadScalingInfos extends ScalingInfos { @Override @@ -41,13 +43,8 @@ public AbstractModification toModification() { return new LoadScaling(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.LOAD_SCALING_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.LOAD_SCALING.name(), "Load Scaling"); + return reporter.createSubReporter(getType().name(), "Load Scaling"); } } 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 30161be05..1d6f9b4bb 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/ModificationInfos.java @@ -9,6 +9,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -17,7 +18,9 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.ModificationType; import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.ModificationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; @@ -32,17 +35,18 @@ property = "type" ) @JsonSubTypes({ - @JsonSubTypes.Type(value = GroovyScriptInfos.class, name = "GROOVY_SCRIPT"), - @JsonSubTypes.Type(value = LoadCreationInfos.class, name = "LOAD_CREATION"), - @JsonSubTypes.Type(value = LoadModificationInfos.class, name = "LOAD_MODIFICATION"), - @JsonSubTypes.Type(value = GeneratorCreationInfos.class, name = "GENERATOR_CREATION"), - @JsonSubTypes.Type(value = GeneratorModificationInfos.class, name = "GENERATOR_MODIFICATION"), - @JsonSubTypes.Type(value = LineCreationInfos.class, name = "LINE_CREATION"), - @JsonSubTypes.Type(value = LineModificationInfos.class, name = "LINE_MODIFICATION"), - @JsonSubTypes.Type(value = SubstationCreationInfos.class, name = "SUBSTATION_CREATION"), - @JsonSubTypes.Type(value = SubstationModificationInfos.class, name = "SUBSTATION_MODIFICATION"), - @JsonSubTypes.Type(value = VoltageLevelCreationInfos.class, name = "VOLTAGE_LEVEL_CREATION"), - @JsonSubTypes.Type(value = VoltageLevelModificationInfos.class, name = "VOLTAGE_LEVEL_MODIFICATION"), + @JsonSubTypes.Type(value = GroovyScriptInfos.class), + @JsonSubTypes.Type(value = LoadCreationInfos.class), + @JsonSubTypes.Type(value = LoadModificationInfos.class), + @JsonSubTypes.Type(value = GeneratorCreationInfos.class), + @JsonSubTypes.Type(value = GeneratorModificationInfos.class), + @JsonSubTypes.Type(value = LineCreationInfos.class), + @JsonSubTypes.Type(value = LineModificationInfos.class), + @JsonSubTypes.Type(value = SubstationCreationInfos.class), + @JsonSubTypes.Type(value = SubstationModificationInfos.class), + @JsonSubTypes.Type(value = VoltageLevelCreationInfos.class), + @JsonSubTypes.Type(value = VoltageLevelModificationInfos.class), + @JsonSubTypes.Type(value = ShuntCompensatorCreationInfos.class, name = "SHUNT_COMPENSATOR_CREATION"), @JsonSubTypes.Type(value = ShuntCompensatorModificationInfos.class, name = "SHUNT_COMPENSATOR_MODIFICATION"), @JsonSubTypes.Type(value = TwoWindingsTransformerCreationInfos.class, name = "TWO_WINDINGS_TRANSFORMER_CREATION"), @@ -89,7 +93,12 @@ public Reporter createSubReporter(ReporterModel reporter) { @JsonIgnore public NetworkModificationException.Type getErrorType() { - throw new UnsupportedOperationException("TODO"); + return NetworkModificationException.Type.valueOf(this.getClass().getAnnotation(ModificationErrorTypeName.class).value()); + } + + @JsonIgnore + public ModificationType getType() { + return ModificationType.valueOf(this.getClass().getAnnotation(JsonTypeName.class).value()); } @JsonIgnore diff --git a/src/main/java/org/gridsuite/modification/server/dto/ShuntCompensatorCreationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/ShuntCompensatorCreationInfos.java index 7bbc15c51..701d53686 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/ShuntCompensatorCreationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/ShuntCompensatorCreationInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import com.powsybl.iidm.network.extensions.ConnectablePosition; @@ -16,8 +17,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.creation.ShuntCompensatorCreationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.ShuntCompensatorCreation; @@ -32,6 +32,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Shunt compensator creation") +@JsonTypeName("SHUNT_COMPENSATOR_CREATION") +@ModificationErrorTypeName("CREATE_SHUNT_COMPENSATOR_ERROR") public class ShuntCompensatorCreationInfos extends InjectionCreationInfos { @Schema(description = "Maximum number of sections") private Integer maximumNumberOfSections; @@ -71,13 +73,8 @@ public AbstractModification toModification() { return new ShuntCompensatorCreation(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.CREATE_SHUNT_COMPENSATOR_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.SHUNT_COMPENSATOR_CREATION.name(), "Creation of shunt compensator " + getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Creation of shunt compensator " + getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/ShuntCompensatorModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/ShuntCompensatorModificationInfos.java index 75a473f14..85d5ba588 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/ShuntCompensatorModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/ShuntCompensatorModificationInfos.java @@ -8,6 +8,7 @@ package org.gridsuite.modification.server.dto; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -16,8 +17,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.ShuntCompensatorModificationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.ShuntCompensatorModification; @@ -32,6 +32,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Shunt compensator modification") +@JsonTypeName("SHUNT_COMPENSATOR_MODIFICATION") +@ModificationErrorTypeName("MODIFY_SHUNT_COMPENSATOR_ERROR") public class ShuntCompensatorModificationInfos extends BasicEquipmentModificationInfos { @Schema(description = "voltage level id") @@ -57,13 +59,8 @@ public AbstractModification toModification() { return new ShuntCompensatorModification(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.MODIFY_SHUNT_COMPENSATOR_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.SHUNT_COMPENSATOR_MODIFICATION.name(), "Modification of shunt compensator " + getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Modification of shunt compensator " + getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/SubstationCreationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/SubstationCreationInfos.java index 71a96be83..f84efc4df 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/SubstationCreationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/SubstationCreationInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import com.powsybl.iidm.network.Country; @@ -16,8 +17,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.creation.SubstationCreationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.SubstationCreation; @@ -34,6 +34,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Substation creation") +@JsonTypeName("SUBSTATION_CREATION") +@ModificationErrorTypeName("CREATE_SUBSTATION_ERROR") public class SubstationCreationInfos extends EquipmentCreationInfos { @Schema(description = "Substation country") @@ -53,13 +55,8 @@ public AbstractModification toModification() { return new SubstationCreation(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.CREATE_SUBSTATION_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.SUBSTATION_CREATION.name(), "Substation creation ${substationId}", "substationId", getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Substation creation ${substationId}", "substationId", getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/SubstationModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/SubstationModificationInfos.java index b3f688ba7..e1333ca8a 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/SubstationModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/SubstationModificationInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import com.powsybl.iidm.network.Country; @@ -16,8 +17,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.SubstationModificationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.SubstationModification; @@ -34,6 +34,8 @@ @ToString(callSuper = true) @JsonInclude(JsonInclude.Include.NON_NULL) @Schema(description = "Substation modification") +@JsonTypeName("SUBSTATION_MODIFICATION") +@ModificationErrorTypeName("MODIFY_SUBSTATION_ERROR") public class SubstationModificationInfos extends BasicEquipmentModificationInfos { @Schema(description = "country modification") private AttributeModification substationCountry; @@ -52,13 +54,8 @@ public AbstractModification toModification() { return new SubstationModification(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.MODIFY_SUBSTATION_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.SUBSTATION_MODIFICATION.name(), "Substation modification ${substationId}", "substationId", this.getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Substation modification ${substationId}", "substationId", this.getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerCreationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerCreationInfos.java index d473e3dbb..d5e9eebaa 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerCreationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerCreationInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,8 +15,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.creation.TwoWindingsTransformerCreationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.TwoWindingsTransformerCreation; @@ -30,6 +30,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Two windings transformer creation") +@JsonTypeName("TWO_WINDINGS_TRANSFORMER_CREATION") +@ModificationErrorTypeName("CREATE_TWO_WINDINGS_TRANSFORMER_ERROR") public class TwoWindingsTransformerCreationInfos extends BranchCreationInfos { @Schema(description = "Magnetizing conductance") @@ -63,14 +65,9 @@ public AbstractModification toModification() { return new TwoWindingsTransformerCreation(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.CREATE_TWO_WINDINGS_TRANSFORMER_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.TWO_WINDINGS_TRANSFORMER_CREATION.name(), "Two windings transformer creation ${twoWindingsTransformerId}", "twoWindingsTransformerId", getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Two windings transformer creation ${twoWindingsTransformerId}", "twoWindingsTransformerId", getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerModificationInfos.java index d8bd2737e..d88120b27 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerModificationInfos.java @@ -6,6 +6,7 @@ */ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,8 +15,7 @@ import lombok.Setter; import lombok.ToString; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.TwoWindingsTransformerModificationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.TwoWindingsTransformerModification; @@ -29,6 +29,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Two windings transformer modification") +@JsonTypeName("TWO_WINDINGS_TRANSFORMER_MODIFICATION") +@ModificationErrorTypeName("MODIFY_TWO_WINDINGS_TRANSFORMER_ERROR") public class TwoWindingsTransformerModificationInfos extends BranchModificationInfos { @Schema(description = "Magnetizing conductance") @@ -56,14 +58,8 @@ public AbstractModification toModification() { return new TwoWindingsTransformerModification(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.MODIFY_TWO_WINDINGS_TRANSFORMER_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.TWO_WINDINGS_TRANSFORMER_MODIFICATION.name(), "Two windings transformer modification ${twoWindingsTransformerId}", "twoWindingsTransformerId", getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Two windings transformer modification ${twoWindingsTransformerId}", "twoWindingsTransformerId", getEquipmentId()); } - } diff --git a/src/main/java/org/gridsuite/modification/server/dto/VoltageLevelCreationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/VoltageLevelCreationInfos.java index 96e175593..5bc85711b 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/VoltageLevelCreationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/VoltageLevelCreationInfos.java @@ -6,24 +6,23 @@ */ package org.gridsuite.modification.server.dto; -import java.util.List; - +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import com.powsybl.iidm.network.SwitchKind; - import io.swagger.v3.oas.annotations.media.Schema; 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.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.creation.VoltageLevelCreationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.VoltageLevelCreation; +import java.util.List; + /** * @author Laurent GARNIER */ @@ -33,6 +32,8 @@ @Setter @ToString(callSuper = true) @Schema(description = "Voltage level creation") +@JsonTypeName("VOLTAGE_LEVEL_CREATION") +@ModificationErrorTypeName("CREATE_VOLTAGE_LEVEL_ERROR") public class VoltageLevelCreationInfos extends EquipmentCreationInfos { @Schema(description = "substation id") @@ -75,13 +76,8 @@ public AbstractModification toModification() { return new VoltageLevelCreation(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.CREATE_VOLTAGE_LEVEL_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.VOLTAGE_LEVEL_CREATION.name(), "VoltageLevel creation ${voltageLevelId}", "voltageLevelId", this.getEquipmentId()); + return reporter.createSubReporter(getType().name(), "VoltageLevel creation ${voltageLevelId}", "voltageLevelId", this.getEquipmentId()); } } diff --git a/src/main/java/org/gridsuite/modification/server/dto/VoltageLevelModificationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/VoltageLevelModificationInfos.java index 1c547f4f5..d4ce0cc14 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/VoltageLevelModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/VoltageLevelModificationInfos.java @@ -7,6 +7,7 @@ package org.gridsuite.modification.server.dto; +import com.fasterxml.jackson.annotation.JsonTypeName; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; @@ -14,8 +15,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.server.ModificationType; -import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.VoltageLevelModificationEntity; import org.gridsuite.modification.server.modifications.AbstractModification; import org.gridsuite.modification.server.modifications.VoltageLevelModification; @@ -29,6 +29,8 @@ @Getter @Setter @Schema(description = "Voltage level modification") +@JsonTypeName("VOLTAGE_LEVEL_MODIFICATION") +@ModificationErrorTypeName("MODIFY_VOLTAGE_LEVEL_ERROR") public class VoltageLevelModificationInfos extends BasicEquipmentModificationInfos { @Schema(description = "nominal voltage in kV") private AttributeModification nominalVoltage; @@ -50,14 +52,9 @@ public AbstractModification toModification() { return new VoltageLevelModification(this); } - @Override - public NetworkModificationException.Type getErrorType() { - return NetworkModificationException.Type.MODIFY_VOLTAGE_LEVEL_ERROR; - } - @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(ModificationType.VOLTAGE_LEVEL_MODIFICATION.name(), "VoltageLevel modification ${voltageLevelId}", "voltageLevelId", this.getEquipmentId()); + return reporter.createSubReporter(getType().name(), "VoltageLevel modification ${voltageLevelId}", "voltageLevelId", this.getEquipmentId()); } @Override diff --git a/src/main/java/org/gridsuite/modification/server/dto/annotation/ModificationErrorTypeName.java b/src/main/java/org/gridsuite/modification/server/dto/annotation/ModificationErrorTypeName.java new file mode 100644 index 000000000..3a70d5366 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/annotation/ModificationErrorTypeName.java @@ -0,0 +1,21 @@ +/** + * 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.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author Slimane Amar + */ +@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ModificationErrorTypeName { + public String value() default ""; +} diff --git a/src/main/java/org/gridsuite/modification/server/service/BuildWorkerService.java b/src/main/java/org/gridsuite/modification/server/service/BuildWorkerService.java index cf9062646..157e06616 100644 --- a/src/main/java/org/gridsuite/modification/server/service/BuildWorkerService.java +++ b/src/main/java/org/gridsuite/modification/server/service/BuildWorkerService.java @@ -8,10 +8,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Sets; -import com.powsybl.iidm.network.Network; import lombok.NonNull; import org.gridsuite.modification.server.dto.BuildInfos; -import org.gridsuite.modification.server.dto.NetworkInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -84,9 +82,8 @@ private CompletableFuture execBuildVariant(BuildExecC buildRequests.add(execContext.getReceiver()); // receiver is the node uuid to build CompletableFuture future = CompletableFuture.supplyAsync(() -> { - Network network = networkModificationService.cloneNetworkVariant(networkUuid, buildInfos.getOriginVariantId(), buildInfos.getDestinationVariantId()); LOGGER.info("Starting build on variant : {}", buildInfos.getDestinationVariantId()); - return networkModificationService.buildVariant(new NetworkInfos(network, networkUuid, true), buildInfos); + return networkModificationService.buildVariant(networkUuid, buildInfos); } ); diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index b4a5ed06a..dc716418e 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -12,9 +12,11 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.VariantManagerConstants; import com.powsybl.network.store.client.NetworkStoreService; +import com.powsybl.network.store.client.PreloadingStrategy; import lombok.NonNull; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; +import org.gridsuite.modification.server.ModificationType; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.*; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; @@ -77,10 +79,10 @@ public void deleteModificationGroup(UUID groupUuid, boolean errorOnGroupNotFound networkModificationRepository.deleteModificationGroup(groupUuid, errorOnGroupNotFound); } - public NetworkInfos getNetworkInfos(UUID networkUuid, String variantId) { + public NetworkInfos getNetworkInfos(UUID networkUuid, String variantId, PreloadingStrategy preloadingStrategy) { Network network; try { - network = networkStoreService.getNetwork(networkUuid); + network = networkStoreService.getNetwork(networkUuid, preloadingStrategy); } catch (PowsyblException e) { throw new NetworkModificationException(NETWORK_NOT_FOUND, networkUuid.toString()); } @@ -103,9 +105,11 @@ public void updateNetworkModification(@NonNull UUID modificationUuid, @NonNull M // No transactional because we need to save modification in DB also in case of error // Transaction made in 'saveModifications' method // TODO Add transaction when errors will no longer be sent to the front - public Optional createNetworkModification(@NonNull NetworkInfos networkInfos, @NonNull UUID groupUuid, + public Optional createNetworkModification(@NonNull UUID networkUuid, String variantId, @NonNull UUID groupUuid, @NonNull ReportInfos reportInfos, @NonNull ModificationInfos modificationInfos) { + NetworkInfos networkInfos = getNetworkInfos(networkUuid, variantId, modificationInfos.getType().getStrategy()); + networkModificationRepository.saveModifications(groupUuid, List.of(modificationInfos.toEntity())); return networkInfos.isVariantPresent() ? @@ -113,10 +117,13 @@ public Optional createNetworkModification(@NonNull Ne Optional.empty(); } - public Network cloneNetworkVariant(UUID networkUuid, String originVariantId, String destinationVariantId) { + public Network cloneNetworkVariant(UUID networkUuid, + String originVariantId, + String destinationVariantId, + PreloadingStrategy preloadingStrategy) { Network network; try { - network = networkStoreService.getNetwork(networkUuid); + network = networkStoreService.getNetwork(networkUuid, preloadingStrategy); network.addListener(new NetworkVariantsListener(network, networkUuid, equipmentInfosService)); } catch (PowsyblException e) { throw new NetworkModificationException(NETWORK_NOT_FOUND, networkUuid.toString()); @@ -132,7 +139,7 @@ public Network cloneNetworkVariant(UUID networkUuid, String originVariantId, Str } @Transactional(readOnly = true) - public NetworkModificationResult buildVariant(@NonNull NetworkInfos networkInfos, @NonNull BuildInfos buildInfos) { + public NetworkModificationResult buildVariant(@NonNull UUID networkUuid, @NonNull BuildInfos buildInfos) { // Apply all modifications belonging to the modification groups uuids in buildInfos List>> modificationInfos = new ArrayList<>(); @@ -156,6 +163,14 @@ public NetworkModificationResult buildVariant(@NonNull NetworkInfos networkInfos } ); + PreloadingStrategy preloadingStrategy = modificationInfos.stream().map(Pair::getRight) + .flatMap(Collection::stream) + .map(ModificationInfos::getType) + .reduce(ModificationType::maxStrategy).map(ModificationType::getStrategy).orElse(PreloadingStrategy.NONE); + + Network network = cloneNetworkVariant(networkUuid, buildInfos.getOriginVariantId(), buildInfos.getDestinationVariantId(), preloadingStrategy); + NetworkInfos networkInfos = new NetworkInfos(network, networkUuid, true); + return modificationApplicator.applyModifications(modificationInfos, networkInfos, buildInfos.getReportUuid()); } @@ -174,11 +189,20 @@ public void deleteNetworkModifications(UUID groupUuid, List modificationsU } @Transactional - public Optional moveModifications(UUID groupUuid, UUID originGroupUuid, UUID before, NetworkInfos networkInfos, ReportInfos reportInfos, List modificationsToMove, boolean canBuildNode) { + public Optional moveModifications(UUID groupUuid, UUID originGroupUuid, + UUID before, UUID networkUuid, String variantId, + ReportInfos reportInfos, List modificationsToMove, + boolean canBuildNode) { List movedModifications = networkModificationRepository.moveModifications(groupUuid, originGroupUuid, modificationsToMove, before) .stream() .map(ModificationEntity::toModificationInfos) .collect(Collectors.toList()); + + PreloadingStrategy preloadingStrategy = movedModifications.stream() + .map(ModificationInfos::getType) + .reduce(ModificationType::maxStrategy).map(ModificationType::getStrategy).orElse(PreloadingStrategy.NONE); + NetworkInfos networkInfos = getNetworkInfos(networkUuid, variantId, preloadingStrategy); + if (canBuildNode && !movedModifications.isEmpty() && networkInfos.isVariantPresent()) { // TODO remove canBuildNode and return NetworkDamages() ? // try to apply the moved modifications (incremental mode) return Optional.of(modificationApplicator.applyModifications( @@ -201,17 +225,27 @@ public void createModificationGroup(UUID sourceGroupUuid, UUID groupUuid) { } @Transactional - public Optional duplicateModifications(UUID targetGroupUuid, NetworkInfos networkInfos, ReportInfos reportInfos, List modificationsUuids) { + public Optional duplicateModifications(UUID targetGroupUuid, + UUID networkUuid, String variantId, + ReportInfos reportInfos, List modificationsUuids) { List modificationsEntities = networkModificationRepository.getModificationsEntities(modificationsUuids); List duplicatedModificationsEntities = modificationsEntities.stream().map(ModificationEntity::copy).collect(Collectors.toList()); if (!duplicatedModificationsEntities.isEmpty()) { networkModificationRepository.saveModifications(targetGroupUuid, duplicatedModificationsEntities); + + List modificationInfos = duplicatedModificationsEntities.stream().map(ModificationEntity::toModificationInfos).collect(Collectors.toList()); + + PreloadingStrategy preloadingStrategy = modificationInfos.stream() + .map(ModificationInfos::getType) + .reduce(ModificationType::maxStrategy).map(ModificationType::getStrategy).orElse(PreloadingStrategy.NONE); + NetworkInfos networkInfos = getNetworkInfos(networkUuid, variantId, preloadingStrategy); + // try to apply the duplicated modifications (incremental mode) if (networkInfos.isVariantPresent()) { return Optional.of(modificationApplicator.applyModifications( - duplicatedModificationsEntities.stream().map(ModificationEntity::toModificationInfos).collect(Collectors.toList()), - networkInfos, - reportInfos + modificationInfos, + networkInfos, + reportInfos )); } } diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 04cd57ab2..88b45cc68 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -17,6 +17,7 @@ import com.powsybl.iidm.network.extensions.ConnectablePositionAdder; import com.powsybl.iidm.network.extensions.GeneratorStartup; import com.powsybl.network.store.client.NetworkStoreService; +import com.powsybl.network.store.client.PreloadingStrategy; import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl; import nl.jqno.equalsverifier.EqualsVerifier; import org.apache.commons.lang3.tuple.Pair; @@ -62,6 +63,8 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; @@ -140,20 +143,20 @@ public class ModificationControllerTest { public void setUp() { objectWriter = mapper.writer().withDefaultPrettyPrinter(); network = NetworkCreation.create(TEST_NETWORK_ID, true); - when(networkStoreService.getNetwork(TEST_NETWORK_ID)).then((Answer) invocation -> network); + when(networkStoreService.getNetwork(eq(TEST_NETWORK_ID), nullable(PreloadingStrategy.class))).then((Answer) invocation -> network); network2 = NetworkCreation.create(TEST_NETWORK_ID_2, false); - when(networkStoreService.getNetwork(TEST_NETWORK_ID_2)).then((Answer) invocation -> network2); + when(networkStoreService.getNetwork(eq(TEST_NETWORK_ID_2), nullable(PreloadingStrategy.class))).then((Answer) invocation -> network2); networkWithTeePoint = NetworkWithTeePoint.create(TEST_NETWORK_WITH_TEE_POINT_ID); - when(networkStoreService.getNetwork(TEST_NETWORK_WITH_TEE_POINT_ID)).then((Answer) invocation -> networkWithTeePoint); + when(networkStoreService.getNetwork(eq(TEST_NETWORK_WITH_TEE_POINT_ID), nullable(PreloadingStrategy.class))).then((Answer) invocation -> networkWithTeePoint); - when(networkStoreService.getNetwork(NOT_FOUND_NETWORK_ID)).thenThrow(new PowsyblException()); - when(networkStoreService.getNetwork(TEST_NETWORK_WITH_FLUSH_ERROR_ID)).then((Answer) invocation -> NetworkCreation.create(TEST_NETWORK_WITH_FLUSH_ERROR_ID, true)); + when(networkStoreService.getNetwork(eq(NOT_FOUND_NETWORK_ID), nullable(PreloadingStrategy.class))).thenThrow(new PowsyblException()); + when(networkStoreService.getNetwork(eq(TEST_NETWORK_WITH_FLUSH_ERROR_ID), nullable(PreloadingStrategy.class))).then((Answer) invocation -> NetworkCreation.create(TEST_NETWORK_WITH_FLUSH_ERROR_ID, true)); networkBusBreaker = NetworkCreation.createBusBreaker(TEST_NETWORK_BUS_BREAKER_ID); - when(networkStoreService.getNetwork(TEST_NETWORK_BUS_BREAKER_ID)).then((Answer) invocation -> networkBusBreaker); + when(networkStoreService.getNetwork(eq(TEST_NETWORK_BUS_BREAKER_ID), nullable(PreloadingStrategy.class))).then((Answer) invocation -> networkBusBreaker); - when(networkStoreService.getNetwork(TEST_NETWORK_MIXED_TOPOLOGY_ID)).then((Answer) invocation -> NetworkCreation.createMixedTopology(TEST_NETWORK_MIXED_TOPOLOGY_ID)); + when(networkStoreService.getNetwork(eq(TEST_NETWORK_MIXED_TOPOLOGY_ID), nullable(PreloadingStrategy.class))).then((Answer) invocation -> NetworkCreation.createMixedTopology(TEST_NETWORK_MIXED_TOPOLOGY_ID)); doThrow(new PowsyblException()).when(networkStoreService).flush(argThat(n -> TEST_NETWORK_WITH_FLUSH_ERROR_ID.toString().equals(n.getId()))); @@ -514,7 +517,7 @@ public void createGeneratorWithStartup() throws Exception { mockMvc.perform(post(URI_NETWORK_MODIF_BUS_BREAKER).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - generatorStartup = networkStoreService.getNetwork(TEST_NETWORK_BUS_BREAKER_ID).getGenerator("idGenerator2").getExtension(GeneratorStartup.class); + generatorStartup = networkStoreService.getNetwork(TEST_NETWORK_BUS_BREAKER_ID, null).getGenerator("idGenerator2").getExtension(GeneratorStartup.class); assertNull(generatorStartup); // create and build generator with startup @@ -540,7 +543,7 @@ public void createGeneratorWithStartup() throws Exception { mockMvc.perform(post(URI_NETWORK_MODIF_BUS_BREAKER).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - generatorStartup = networkStoreService.getNetwork(TEST_NETWORK_BUS_BREAKER_ID).getGenerator("idGenerator3").getExtension(GeneratorStartup.class); + generatorStartup = networkStoreService.getNetwork(TEST_NETWORK_BUS_BREAKER_ID, null).getGenerator("idGenerator3").getExtension(GeneratorStartup.class); assertNotNull(generatorStartup); assertEquals(Double.NaN, generatorStartup.getPlannedActivePowerSetpoint(), 0); assertEquals(Double.NaN, generatorStartup.getMarginalCost(), 0); @@ -999,8 +1002,8 @@ private void testNetworkModificationsCount(UUID groupUuid, int actualSize) throw @Test public void shouldGetPosition() { - var network = networkStoreService.getNetwork(TEST_NETWORK_ID); - var network2 = networkStoreService.getNetwork(TEST_NETWORK_MIXED_TOPOLOGY_ID); + var network = networkStoreService.getNetwork(TEST_NETWORK_ID, null); + var network2 = networkStoreService.getNetwork(TEST_NETWORK_MIXED_TOPOLOGY_ID, null); var vl = network.getVoltageLevel("v2"); var vl2 = network2.getVoltageLevel("v2"); assertEquals(9, vl.getConnectableCount()); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java index 024848ca5..1c65b62e2 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java @@ -14,6 +14,7 @@ import com.powsybl.commons.exceptions.UncheckedInterruptedException; import com.powsybl.iidm.network.Network; import com.powsybl.network.store.client.NetworkStoreService; +import com.powsybl.network.store.client.PreloadingStrategy; import com.powsybl.network.store.iidm.impl.NetworkImpl; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.repositories.NetworkModificationRepository; @@ -46,6 +47,8 @@ import static org.gridsuite.modification.server.utils.assertions.Assertions.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -109,8 +112,8 @@ public void setUp() { } private void initMocks() { - when(networkStoreService.getNetwork(NOT_FOUND_NETWORK_ID)).thenThrow(new PowsyblException()); - when(networkStoreService.getNetwork(TEST_NETWORK_ID)).then((Answer) invocation -> network); + when(networkStoreService.getNetwork(eq(NOT_FOUND_NETWORK_ID), any(PreloadingStrategy.class))).thenThrow(new PowsyblException()); + when(networkStoreService.getNetwork(eq(TEST_NETWORK_ID), any(PreloadingStrategy.class))).then((Answer) invocation -> network); } @After diff --git a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java index 62179fcd2..d52a4d871 100644 --- a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java @@ -13,6 +13,7 @@ import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.*; import com.powsybl.network.store.client.NetworkStoreService; +import com.powsybl.network.store.client.PreloadingStrategy; import okhttp3.HttpUrl; import okhttp3.mockwebserver.Dispatcher; import okhttp3.mockwebserver.MockResponse; @@ -71,6 +72,8 @@ import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.*; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; @@ -166,14 +169,14 @@ public class BuildTest { public void setUp() throws IOException { objectWriter = mapper.writer().withDefaultPrettyPrinter(); // create a new network for each invocation (answer) - when(networkStoreService.getNetwork(TEST_NETWORK_ID)).then((Answer) invocation -> { + when(networkStoreService.getNetwork(eq(TEST_NETWORK_ID), any(PreloadingStrategy.class))).then((Answer) invocation -> { network = NetworkCreation.create(TEST_NETWORK_ID, true); return network; }); waitStartBuild = new CountDownLatch(1); blockBuild = new CountDownLatch(1); - when(networkStoreService.getNetwork(TEST_NETWORK_STOP_BUILD_ID)).then((Answer) invocation -> { + when(networkStoreService.getNetwork(eq(TEST_NETWORK_STOP_BUILD_ID), any(PreloadingStrategy.class))).then((Answer) invocation -> { // Needed so the stop call doesn't arrive too late waitStartBuild.countDown(); blockBuild.await(); @@ -336,7 +339,7 @@ public void runBuildWithEmptyGroupTest() throws Exception { // Group is empty modificationGroupRepository.save(new ModificationGroupEntity(TEST_GROUP_ID)); - networkModificationService.buildVariant(new NetworkInfos(network, TEST_NETWORK_ID, true), buildInfos); + networkModificationService.buildVariant(TEST_NETWORK_ID, buildInfos); request = server.takeRequest(TIMEOUT, TimeUnit.MILLISECONDS); assertNotNull(request); assertEquals(expectedBody, request.getBody().readUtf8()); @@ -816,14 +819,14 @@ public void testApplyModificationWithErrors() { assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches(String.format("/v1/reports/%s", reportUuid)))); // Incremental mode : No error send with exception - Optional networkModificationResult2 = networkModificationService.createNetworkModification(networkModificationService.getNetworkInfos(TEST_NETWORK_ID, variantId), groupUuid, new ReportInfos(reportUuid, reporterId), loadCreationInfos); + Optional networkModificationResult2 = networkModificationService.createNetworkModification(TEST_NETWORK_ID, variantId, groupUuid, new ReportInfos(reportUuid, reporterId), loadCreationInfos); assertTrue(networkModificationResult2.isPresent()); testEmptyImpactsWithErrors(mapper, networkModificationResult); assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches(String.format("/v1/reports/%s", reportUuid)))); testNetworkModificationsCount(groupUuid, 1); // Save mode only (variant does not exist) : No log and no error send with exception - assertTrue(networkModificationService.createNetworkModification(networkModificationService.getNetworkInfos(TEST_NETWORK_ID, UUID.randomUUID().toString()), groupUuid, new ReportInfos(reportUuid, reporterId), loadCreationInfos).isEmpty()); + assertTrue(networkModificationService.createNetworkModification(TEST_NETWORK_ID, UUID.randomUUID().toString(), groupUuid, new ReportInfos(reportUuid, reporterId), loadCreationInfos).isEmpty()); testNetworkModificationsCount(groupUuid, 2); }