diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LoadCreationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LoadCreationEntity.java index 27709f740..f755dea85 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LoadCreationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LoadCreationEntity.java @@ -14,6 +14,8 @@ import org.gridsuite.modification.server.dto.ModificationInfos; import jakarta.persistence.*; +import org.gridsuite.modification.server.entities.equipment.modification.FreePropertyEntity; +import org.springframework.util.CollectionUtils; /** * @author Franck Lecuyer @@ -73,6 +75,11 @@ public LoadCreationInfos toModificationInfos() { // load .loadType(getLoadType()) .activePower(getActivePower()) - .reactivePower(getReactivePower()); + .reactivePower(getReactivePower()) + // properties + .properties(CollectionUtils.isEmpty(getProperties()) ? null : + getProperties().stream() + .map(FreePropertyEntity::toInfos) + .toList()); } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LoadModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LoadModificationEntity.java index 74a1ee81e..16bad1ba1 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LoadModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/LoadModificationEntity.java @@ -16,6 +16,7 @@ import org.gridsuite.modification.server.dto.OperationType; import jakarta.persistence.*; +import org.springframework.util.CollectionUtils; /** * @author Nicolas Noir @@ -84,6 +85,11 @@ public LoadModificationInfos toModificationInfos() { .busOrBusbarSectionId(AttributeModification.toAttributeModification(getBusOrBusbarSectionIdValue(), getBusOrBusbarSectionIdOp())) .loadType(AttributeModification.toAttributeModification(getLoadTypeValue(), getLoadTypeOp())) .constantActivePower(AttributeModification.toAttributeModification(getActivePowerValue(), getActivePowerOp())) - .constantReactivePower(AttributeModification.toAttributeModification(getReactivePowerValue(), getReactivePowerOp())); + .constantReactivePower(AttributeModification.toAttributeModification(getReactivePowerValue(), getReactivePowerOp())) + // properties + .properties(CollectionUtils.isEmpty(getProperties()) ? null : + getProperties().stream() + .map(FreePropertyEntity::toInfos) + .toList()); } } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/LoadCreation.java b/src/main/java/org/gridsuite/modification/server/modifications/LoadCreation.java index fb8dbf1a4..0958c10ad 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/LoadCreation.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/LoadCreation.java @@ -64,6 +64,10 @@ public void apply(Network network, Reporter subReporter) { } reportElementaryCreations(subReporter); ModificationUtils.getInstance().disconnectInjection(modificationInfos, network.getLoad(modificationInfos.getEquipmentId()), subReporter); + + // properties + Load load = network.getLoad(modificationInfos.getEquipmentId()); + PropertiesUtils.applyProperties(load, subReporter, modificationInfos.getProperties()); } private void reportElementaryCreations(Reporter subReporter) { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/LoadModification.java b/src/main/java/org/gridsuite/modification/server/modifications/LoadModification.java index b486e3d09..d7323856d 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/LoadModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/LoadModification.java @@ -40,21 +40,24 @@ public void check(Network network) throws NetworkModificationException { public void apply(Network network, Reporter subReporter) { Load load = network.getLoad(modificationInfos.getEquipmentId()); // modify the load in the network - modifyLoad(load, modificationInfos, subReporter); + modifyLoad(load, subReporter); } - private void modifyLoad(Load load, LoadModificationInfos loadModificationInfos, Reporter subReporter) { + private void modifyLoad(Load load, Reporter subReporter) { subReporter.report(Report.builder() .withKey("loadModification") .withDefaultMessage("Load with id=${id} modified :") - .withValue("id", loadModificationInfos.getEquipmentId()) + .withValue("id", modificationInfos.getEquipmentId()) .withSeverity(TypedValue.INFO_SEVERITY) .build()); - ModificationUtils.getInstance().applyElementaryModifications(load::setName, () -> load.getOptionalName().orElse("No value"), loadModificationInfos.getEquipmentName(), subReporter, "Name"); - ModificationUtils.getInstance().applyElementaryModifications(load::setLoadType, load::getLoadType, loadModificationInfos.getLoadType(), subReporter, "Type"); - ModificationUtils.getInstance().applyElementaryModifications(load::setP0, load::getP0, loadModificationInfos.getConstantActivePower(), subReporter, "Constant active power"); - ModificationUtils.getInstance().applyElementaryModifications(load::setQ0, load::getQ0, loadModificationInfos.getConstantReactivePower(), subReporter, "Constant reactive power"); + ModificationUtils.getInstance().applyElementaryModifications(load::setName, () -> load.getOptionalName().orElse("No value"), modificationInfos.getEquipmentName(), subReporter, "Name"); + ModificationUtils.getInstance().applyElementaryModifications(load::setLoadType, load::getLoadType, modificationInfos.getLoadType(), subReporter, "Type"); + ModificationUtils.getInstance().applyElementaryModifications(load::setP0, load::getP0, modificationInfos.getConstantActivePower(), subReporter, "Constant active power"); + ModificationUtils.getInstance().applyElementaryModifications(load::setQ0, load::getQ0, modificationInfos.getConstantReactivePower(), subReporter, "Constant reactive power"); + + // properties + PropertiesUtils.applyProperties(load, subReporter, modificationInfos.getProperties()); // TODO connectivity modification } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInBusBreakerTest.java index 312b6a911..c1343fb65 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInBusBreakerTest.java @@ -12,11 +12,13 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; import lombok.SneakyThrows; +import org.gridsuite.modification.server.dto.FreePropertyInfos; import org.gridsuite.modification.server.dto.LoadCreationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; +import java.util.List; import java.util.Map; import java.util.UUID; @@ -26,6 +28,9 @@ @Tag("IntegrationTest") public class LoadCreationInBusBreakerTest extends AbstractNetworkModificationTest { + private static String PROPERTY_NAME = "property-name"; + private static String PROPERTY_VALUE = "property-value"; + @Override protected Network createNetwork(UUID networkUuid) { return NetworkCreation.createBusBreaker(networkUuid); @@ -44,6 +49,7 @@ protected ModificationInfos buildModification() { .reactivePower(30.0) .connectionName("top") .connectionDirection(ConnectablePosition.Direction.TOP) + .properties(List.of(FreePropertyInfos.builder().name(PROPERTY_NAME).value(PROPERTY_VALUE).build())) .build(); } @@ -66,6 +72,7 @@ protected ModificationInfos buildModificationUpdate() { @Override protected void assertAfterNetworkModificationCreation() { assertNotNull(getNetwork().getLoad("idLoad1")); + assertEquals(PROPERTY_VALUE, getNetwork().getLoad("idLoad1").getProperty(PROPERTY_NAME)); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java index 4be54da58..ce65ccefa 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java @@ -13,6 +13,7 @@ import com.powsybl.iidm.network.extensions.ConnectablePosition; import lombok.SneakyThrows; import org.gridsuite.modification.server.NetworkModificationException; +import org.gridsuite.modification.server.dto.FreePropertyInfos; import org.gridsuite.modification.server.dto.LoadCreationInfos; import org.gridsuite.modification.server.dto.ModificationInfos; import org.gridsuite.modification.server.dto.NetworkModificationResult; @@ -22,6 +23,7 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; @@ -36,6 +38,8 @@ @Tag("IntegrationTest") public class LoadCreationInNodeBreakerTest extends AbstractNetworkModificationTest { + private static String PROPERTY_NAME = "property-name"; + private static String PROPERTY_VALUE = "property-value"; @Test public void testCreateWithErrors() throws Exception { @@ -113,6 +117,7 @@ protected ModificationInfos buildModification() { .reactivePower(60.0) .connectionDirection(ConnectablePosition.Direction.TOP) .connectionName("top") + .properties(List.of(FreePropertyInfos.builder().name(PROPERTY_NAME).value(PROPERTY_VALUE).build())) .build(); } @@ -135,6 +140,7 @@ protected ModificationInfos buildModificationUpdate() { @Override protected void assertAfterNetworkModificationCreation() { assertNotNull(getNetwork().getLoad("idLoad1")); + assertEquals(PROPERTY_VALUE, getNetwork().getLoad("idLoad1").getProperty(PROPERTY_NAME)); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadModificationTest.java index c23b37581..ece174850 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadModificationTest.java @@ -12,26 +12,27 @@ import com.powsybl.iidm.network.LoadType; import com.powsybl.iidm.network.Network; import lombok.SneakyThrows; -import org.gridsuite.modification.server.dto.AttributeModification; -import org.gridsuite.modification.server.dto.LoadModificationInfos; -import org.gridsuite.modification.server.dto.ModificationInfos; -import org.gridsuite.modification.server.dto.OperationType; +import org.gridsuite.modification.server.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.Test; import org.junit.jupiter.api.Tag; import org.springframework.http.MediaType; +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.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") public class LoadModificationTest extends AbstractNetworkModificationTest { + private static String PROPERTY_NAME = "property-name"; + private static String PROPERTY_VALUE = "property-value"; @Override protected Network createNetwork(UUID networkUuid) { @@ -47,6 +48,7 @@ protected ModificationInfos buildModification() { .loadType(new AttributeModification<>(LoadType.FICTITIOUS, OperationType.SET)) .constantActivePower(new AttributeModification<>(200.0, OperationType.SET)) .constantReactivePower(new AttributeModification<>(30.0, OperationType.SET)) + .properties(List.of(FreePropertyInfos.builder().name(PROPERTY_NAME).value(PROPERTY_VALUE).build())) .build(); } @@ -70,6 +72,7 @@ protected void assertAfterNetworkModificationCreation() { assertEquals(200.0, modifiedLoad.getP0(), 0.0); assertEquals(30.0, modifiedLoad.getQ0(), 0.0); assertEquals("nameLoad1", modifiedLoad.getNameOrId()); + assertEquals(PROPERTY_VALUE, modifiedLoad.getProperty(PROPERTY_NAME)); } @Override @@ -80,6 +83,7 @@ protected void assertAfterNetworkModificationDeletion() { assertEquals(0.0, modifiedLoad.getP0(), 0.0); assertEquals(0.0, modifiedLoad.getQ0(), 0.0); assertEquals("v1load", modifiedLoad.getNameOrId()); + assertNull(modifiedLoad.getProperty(PROPERTY_NAME)); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java index 33978b9df..caaa4fa1f 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java @@ -89,10 +89,6 @@ private SubstationCreationInfos getSubstationCreationModification(UUID modificat return (SubstationCreationInfos) networkModificationRepository.getModificationInfo(modificationUuid); } - private SubstationModificationInfos getSubstationModificationInfos(UUID modificationUuid) { - return (SubstationModificationInfos) networkModificationRepository.getModificationInfo(modificationUuid); - } - private VoltageLevelCreationInfos getVoltageLevelCreationModification(UUID modificationUuid) { return (VoltageLevelCreationInfos) networkModificationRepository.getModificationInfo(modificationUuid); }