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 926b893f7..5c87d7c93 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerModificationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/TwoWindingsTransformerModificationInfos.java @@ -10,10 +10,7 @@ import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; +import lombok.*; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.annotation.ModificationErrorTypeName; import org.gridsuite.modification.server.entities.equipment.modification.TwoWindingsTransformerModificationEntity; @@ -49,10 +46,12 @@ public class TwoWindingsTransformerModificationInfos extends BranchModificationI private AttributeModification ratedS; @Schema(description = "Ratio tap changer") - private RatioTapChangerModificationInfos ratioTapChanger; + @Builder.Default + private RatioTapChangerModificationInfos ratioTapChanger = new RatioTapChangerModificationInfos(); @Schema(description = "Phase tap changer") - private PhaseTapChangerModificationInfos phaseTapChanger; + @Builder.Default + private PhaseTapChangerModificationInfos phaseTapChanger = new PhaseTapChangerModificationInfos(); @Override public TwoWindingsTransformerModificationEntity toEntity() { diff --git a/src/main/java/org/gridsuite/modification/server/entities/TabularModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/TabularModificationEntity.java index 54ca38b8a..891c8f1ba 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/TabularModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/TabularModificationEntity.java @@ -19,6 +19,7 @@ import org.gridsuite.modification.server.entities.equipment.modification.BatteryModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.GeneratorModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.LoadModificationEntity; +import org.gridsuite.modification.server.entities.equipment.modification.TwoWindingsTransformerModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.VoltageLevelModificationEntity; /** @@ -48,6 +49,9 @@ public TabularModificationEntity(TabularModificationInfos tabularModificationInf case "LOAD_MODIFICATION": modifications = tabularModificationInfos.getModifications().stream().map(loadModificationInfos -> new LoadModificationEntity((LoadModificationInfos) loadModificationInfos)).collect(Collectors.toList()); break; + case "TWO_WINDINGS_TRANSFORMER_MODIFICATION": + modifications = tabularModificationInfos.getModifications().stream().map(twtModificationInfos -> new TwoWindingsTransformerModificationEntity((TwoWindingsTransformerModificationInfos) twtModificationInfos)).collect(Collectors.toList()); + break; case "BATTERY_MODIFICATION": modifications = tabularModificationInfos.getModifications().stream().map(batteryModificationInfos -> new BatteryModificationEntity((BatteryModificationInfos) batteryModificationInfos)).collect(Collectors.toList()); break; @@ -87,6 +91,9 @@ public void update(@NonNull ModificationInfos modificationInfos) { case "LOAD_MODIFICATION": modifications.addAll(tabularModificationInfos.getModifications().stream().map(loadModificationInfos -> new LoadModificationEntity((LoadModificationInfos) loadModificationInfos)).collect(Collectors.toList())); break; + case "TWO_WINDINGS_TRANSFORMER_MODIFICATION": + modifications.addAll(tabularModificationInfos.getModifications().stream().map(twtModificationInfos -> new TwoWindingsTransformerModificationEntity((TwoWindingsTransformerModificationInfos) twtModificationInfos)).collect(Collectors.toList())); + break; case "VOLTAGE_LEVEL_MODIFICATION": modifications.addAll(tabularModificationInfos.getModifications().stream().map(voltageLevelModificationInfos -> new VoltageLevelModificationEntity((VoltageLevelModificationInfos) voltageLevelModificationInfos)).collect(Collectors.toList())); break; diff --git a/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java b/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java index 973ad3558..a60e35514 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java @@ -68,6 +68,9 @@ public void apply(Network network, Reporter subReporter) { case "LOAD_MODIFICATION": defaultMessage = "loads" + defaultMessage; break; + case "TWO_WINDINGS_TRANSFORMER_MODIFICATION": + defaultMessage = "two windings transformers" + defaultMessage; + break; case "BATTERY_MODIFICATION": defaultMessage = "batteries" + defaultMessage; break; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularTwoWindingsTransformerModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularTwoWindingsTransformerModificationsTest.java new file mode 100644 index 000000000..2a8a7c41f --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularTwoWindingsTransformerModificationsTest.java @@ -0,0 +1,98 @@ +/** + * 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.tabularmodifications; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.powsybl.iidm.network.Network; +import lombok.SneakyThrows; +import org.gridsuite.modification.server.ModificationType; +import org.gridsuite.modification.server.dto.*; +import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; +import org.gridsuite.modification.server.utils.NetworkCreation; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Tag; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; +import static org.junit.Assert.assertEquals; + +/** + * @author Florent MILLOT + */ +@Tag("IntegrationTest") +public class TabularTwoWindingsTransformerModificationsTest extends AbstractNetworkModificationTest { + @Override + protected Network createNetwork(UUID networkUuid) { + return NetworkCreation.create(networkUuid, true); + } + + @Override + protected ModificationInfos buildModification() { + List modifications = List.of( + buildOneModification("trf1", 0.0), + buildOneModification("trf2", 1.0), + buildOneModification("unknownTwt", 1.0) + ); + return TabularModificationInfos.builder() + .modificationType("TWO_WINDINGS_TRANSFORMER_MODIFICATION") + .modifications(modifications) + .stashed(false) + .build(); + } + + @Override + protected ModificationInfos buildModificationUpdate() { + List modifications = List.of( + buildOneModification("trf1", 3.0), + buildOneModification("trf2", 4.0) + ); + return TabularModificationInfos.builder() + .modificationType("TWO_WINDINGS_TRANSFORMER_MODIFICATION") + .modifications(modifications) + .stashed(false) + .build(); + } + + protected TwoWindingsTransformerModificationInfos buildOneModification(String equipmentId, Double seriesResistance) { + return TwoWindingsTransformerModificationInfos.builder().equipmentId(equipmentId) + .seriesResistance(new AttributeModification<>(seriesResistance, OperationType.SET)) + .build(); + } + + @Override + protected void assertAfterNetworkModificationCreation() { + assertEquals(0.0, getNetwork().getTwoWindingsTransformer("trf1").getR(), 0.001); + assertEquals(1.0, getNetwork().getTwoWindingsTransformer("trf2").getR(), 0.001); + assertLogMessage("TWO_WINDINGS_TRANSFORMER_NOT_FOUND : Two windings transformer with ID 'unknownTwt' does not exist in the network", ModificationType.TWO_WINDINGS_TRANSFORMER_MODIFICATION.name() + "1", reportService); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + assertEquals(2.0, getNetwork().getTwoWindingsTransformer("trf1").getR(), 0.001); + assertEquals(2.0, getNetwork().getTwoWindingsTransformer("trf2").getR(), 0.001); + } + + @Override + @SneakyThrows + protected void testCreationModificationMessage(ModificationInfos modificationInfos) { + assertEquals("TABULAR_MODIFICATION", modificationInfos.getMessageType()); + Map createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + Assertions.assertEquals("TWO_WINDINGS_TRANSFORMER_MODIFICATION", createdValues.get("tabularModificationType")); + } + + @Override + @SneakyThrows + protected void testUpdateModificationMessage(ModificationInfos modificationInfos) { + assertEquals("TABULAR_MODIFICATION", modificationInfos.getMessageType()); + Map updatedValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + Assertions.assertEquals("TWO_WINDINGS_TRANSFORMER_MODIFICATION", updatedValues.get("tabularModificationType")); + } +}