From 841b4b3b4e9a807c3ab6ea99fc46e59495321baa Mon Sep 17 00:00:00 2001 From: Hugo Marcellin Date: Thu, 23 Nov 2023 15:38:30 +0100 Subject: [PATCH 1/5] Add endpoint to retrieve modification count for a given group (#370) Signed-of-by: Hugo Marcellin --- .../server/NetworkModificationController.java | 8 +++++++ .../repositories/ModificationRepository.java | 2 ++ .../NetworkModificationRepository.java | 5 +++++ .../service/NetworkModificationService.java | 4 ++++ .../server/ModificationControllerTest.java | 21 +++++++++++++++++++ .../service/ModificationRepositoryTest.java | 16 ++++++++++++++ 6 files changed, 56 insertions(+) diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index bbf86ddb1..ca6482a8f 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -57,6 +57,14 @@ public ResponseEntity> getNetworkModifications(@Paramete return ResponseEntity.ok().body(networkModificationService.getNetworkModifications(groupUuid, onlyMetadata, errorOnGroupNotFound, onlyStashed)); } + @GetMapping(value = "/groups/{groupUuid}/network-modifications-count", produces = MediaType.APPLICATION_JSON_VALUE) + @Operation(summary = "Get a groups's modification count") + @ApiResponse(responseCode = "200", description = "Count of group's modifications") + public ResponseEntity getNetworkModificationsCount(@Parameter(description = "Group UUID") @PathVariable("groupUuid") UUID groupUuid, + @Parameter(description = "Stashed modifications") @RequestParam(name = "stashed", required = false, defaultValue = "false") Boolean stashed) { + return ResponseEntity.ok().body(networkModificationService.getNetworkModificationsCount(groupUuid, stashed)); + } + @PostMapping(value = "/groups") @Operation(summary = "Create a modification group based on another group") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The group and its modifications have been duplicated")}) diff --git a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java index 944833ffd..43a0aba48 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java @@ -37,4 +37,6 @@ public interface ModificationRepository extends JpaRepository findAllReactiveCapabilityCurvePointsByIdIn(List ids); + + Integer countByGroupIdAndStashed(UUID groupId, boolean stashed); } diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 50324cb2c..7af00158e 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -255,6 +255,11 @@ private List getModificationsEntities(UUID groupUuid) { return getModificationEntityStream(groupUuid).collect(Collectors.toList()); } + @Transactional(readOnly = true) + public Integer getModificationsCount(@NonNull UUID groupUuid, boolean stashed) { + return modificationRepository.countByGroupIdAndStashed(groupUuid, stashed); + } + @Transactional(readOnly = true) public List getModificationsEntities(@NonNull List uuids) { // Spring-data findAllById doc says: the order of elements in the result is not guaranteed 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 3ec5c1b17..a8995755d 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -81,6 +81,10 @@ public ModificationInfos getNetworkModification(UUID networkModificationUuid) { return networkModificationRepository.getModificationInfo(networkModificationUuid); } + public Integer getNetworkModificationsCount(UUID groupUuid, boolean stashed) { + return networkModificationRepository.getModificationsCount(groupUuid, stashed); + } + public void deleteModificationGroup(UUID groupUuid, boolean errorOnGroupNotFound) { networkModificationRepository.deleteModificationGroup(groupUuid, errorOnGroupNotFound); } diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 350ef1fd1..7cf6083ea 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -1351,4 +1351,25 @@ public void testDeleteStashedNetworkModifications() throws Exception { assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, true, true, true).size()); mockMvc.perform(delete("/v1/groups/" + UUID.randomUUID() + "/stashed-modifications").queryParam("errorOnGroupNotFound", "false")).andExpect(status().isOk()); } + + @Test + public void testGetModificationsCount() throws Exception { + MvcResult mvcResult; + createSomeSwitchModifications(TEST_GROUP_ID, 3); + mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications-count", TEST_GROUP_ID) + .queryParam("stashed", "false")) + .andExpect(status().isOk()).andReturn(); + assertEquals(3, Integer.valueOf(mvcResult.getResponse().getContentAsString()).intValue()); + + mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications-count", TEST_GROUP_ID) + .queryParam("stashed", "true")) + .andExpect(status().isOk()).andReturn(); + assertEquals(0, Integer.valueOf(mvcResult.getResponse().getContentAsString()).intValue()); + + //Test for stashed parameter default value + mvcResult = mockMvc.perform(get("/v1/groups/{groupUuid}/network-modifications-count", TEST_GROUP_ID)) + .andExpect(status().isOk()).andReturn(); + assertEquals(3, Integer.valueOf(mvcResult.getResponse().getContentAsString()).intValue()); + + } } 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 47765bf55..eacbe75be 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java @@ -1176,4 +1176,20 @@ public void testVoltageInitModification() { assertEquals(0, networkModificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); assertRequestsCount(2, 0, 0, 0); } + + @Test + public void testGetModificationCount() { + var modifEntity1 = EquipmentAttributeModificationInfos.builder().equipmentId("id2").equipmentAttributeName("attribute").equipmentAttributeValue("foo").equipmentType(IdentifiableType.VOLTAGE_LEVEL).build().toEntity(); + var modifEntity2 = EquipmentAttributeModificationInfos.builder().equipmentId("id2").equipmentAttributeName("attribute").equipmentAttributeValue("foo").equipmentType(IdentifiableType.VOLTAGE_LEVEL).build().toEntity(); + networkModificationRepository.saveModifications(TEST_GROUP_ID, List.of(modifEntity1, modifEntity2)); + SQLStatementCountValidator.reset(); + assertEquals(2, networkModificationRepository.getModificationsCount(TEST_GROUP_ID, false).intValue()); + assertRequestsCount(1, 0, 0, 0); + + SQLStatementCountValidator.reset(); + assertEquals(0, networkModificationRepository.getModificationsCount(TEST_GROUP_ID, true).intValue()); + assertRequestsCount(1, 0, 0, 0); + + assertThrows(NullPointerException.class, () -> networkModificationRepository.getModificationsCount(null, true)); + } } From 7e376dffb845e61a1898dba3ed63f2984ddbd72d Mon Sep 17 00:00:00 2001 From: dbraquart <107846716+dbraquart@users.noreply.github.com> Date: Thu, 23 Nov 2023 16:03:47 +0100 Subject: [PATCH 2/5] Add connectivity option for line and 2wt creation modifications (#376) Signed-off-by: David BRAQUART --- .../server/dto/BranchCreationInfos.java | 6 +++++ .../creation/BranchCreationEntity.java | 8 +++++++ .../creation/LineCreationEntity.java | 18 +++++++++------ .../TwoWindingsTransformerCreationEntity.java | 20 +++++++++------- .../server/modifications/LineCreation.java | 2 ++ .../modifications/ModificationUtils.java | 22 ++++++++++++++++++ .../TwoWindingsTransformerCreation.java | 1 + .../changesets/changelog_20231117T175127Z.xml | 23 +++++++++++++++++++ .../db/changelog/db.changelog-master.yaml | 3 +++ .../LineCreationInNodeBreakerTest.java | 4 +++- ...ingsTransformerCreationBusBreakerTest.java | 8 +++++++ ...gsTransformerCreationMixedBreakerTest.java | 2 ++ ...ngsTransformerCreationNodeBreakerTest.java | 18 ++++++++++++++- .../server/service/BuildTest.java | 4 +++- 14 files changed, 121 insertions(+), 18 deletions(-) create mode 100644 src/main/resources/db/changelog/changesets/changelog_20231117T175127Z.xml diff --git a/src/main/java/org/gridsuite/modification/server/dto/BranchCreationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/BranchCreationInfos.java index c9d66f46e..adc9f6b0d 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/BranchCreationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/BranchCreationInfos.java @@ -66,4 +66,10 @@ public class BranchCreationInfos extends EquipmentCreationInfos { @Schema(description = "Connection position 2") private Integer connectionPosition2; + + @Schema(description = "Connected 1") + private boolean connected1; + + @Schema(description = "Connected 2") + private boolean connected2; } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/BranchCreationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/BranchCreationEntity.java index cfd134c08..006a36467 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/BranchCreationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/BranchCreationEntity.java @@ -58,6 +58,12 @@ public class BranchCreationEntity extends EquipmentCreationEntity { @Column(name = "connectionPosition2") private Integer connectionPosition2; + @Column(name = "connected1", columnDefinition = "boolean default true") + private boolean connected1; + + @Column(name = "connected2", columnDefinition = "boolean default true") + private boolean connected2; + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) @JoinColumn(name = "current_limits_id1", referencedColumnName = "id", @@ -109,5 +115,7 @@ private void assignAttributes(BranchCreationInfos branchCreationInfos) { connectionName2 = branchCreationInfos.getConnectionName2(); connectionPosition1 = branchCreationInfos.getConnectionPosition1(); connectionPosition2 = branchCreationInfos.getConnectionPosition2(); + connected1 = branchCreationInfos.isConnected1(); + connected2 = branchCreationInfos.isConnected2(); } } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineCreationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineCreationEntity.java index 9d38e1d52..e6f412b77 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineCreationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineCreationEntity.java @@ -67,22 +67,26 @@ public LineCreationInfos toModificationInfos() { .stashed(getStashed()) .equipmentId(getEquipmentId()) .equipmentName(getEquipmentName()) + // branch .seriesResistance(getSeriesResistance()) .seriesReactance(getSeriesReactance()) - .shuntConductance1(getShuntConductance1()) - .shuntSusceptance1(getShuntSusceptance1()) - .shuntConductance2(getShuntConductance2()) - .shuntSusceptance2(getShuntSusceptance2()) .voltageLevelId1(getVoltageLevelId1()) - .busOrBusbarSectionId1(getBusOrBusbarSectionId1()) .voltageLevelId2(getVoltageLevelId2()) + .busOrBusbarSectionId1(getBusOrBusbarSectionId1()) .busOrBusbarSectionId2(getBusOrBusbarSectionId2()) .connectionName1(getConnectionName1()) - .connectionDirection1(getConnectionDirection1()) .connectionName2(getConnectionName2()) + .connectionDirection1(getConnectionDirection1()) .connectionDirection2(getConnectionDirection2()) .connectionPosition1(getConnectionPosition1()) - .connectionPosition2(getConnectionPosition2()); + .connectionPosition2(getConnectionPosition2()) + .connected1(isConnected1()) + .connected2(isConnected2()) + // line + .shuntConductance1(getShuntConductance1()) + .shuntSusceptance1(getShuntSusceptance1()) + .shuntConductance2(getShuntConductance2()) + .shuntSusceptance2(getShuntSusceptance2()); if (getCurrentLimits1() != null) { builder.currentLimits1(getCurrentLimits1().toCurrentLimitsInfos()); diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/TwoWindingsTransformerCreationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/TwoWindingsTransformerCreationEntity.java index 1c37d200d..6163bb0c4 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/TwoWindingsTransformerCreationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/TwoWindingsTransformerCreationEntity.java @@ -180,23 +180,27 @@ public TwoWindingsTransformerCreationInfos toModificationInfos() { .stashed(getStashed()) .equipmentId(getEquipmentId()) .equipmentName(getEquipmentName()) + // branch .seriesResistance(getSeriesResistance()) .seriesReactance(getSeriesReactance()) - .magnetizingConductance(getMagnetizingConductance()) - .magnetizingSusceptance(getMagnetizingSusceptance()) - .ratedVoltage1(getRatedVoltage1()) - .ratedVoltage2(getRatedVoltage2()) - .ratedS(getRatedS()) .voltageLevelId1(getVoltageLevelId1()) - .busOrBusbarSectionId1(getBusOrBusbarSectionId1()) .voltageLevelId2(getVoltageLevelId2()) + .busOrBusbarSectionId1(getBusOrBusbarSectionId1()) .busOrBusbarSectionId2(getBusOrBusbarSectionId2()) .connectionName1(getConnectionName1()) - .connectionDirection1(getConnectionDirection1()) .connectionName2(getConnectionName2()) + .connectionDirection1(getConnectionDirection1()) .connectionDirection2(getConnectionDirection2()) .connectionPosition1(getConnectionPosition1()) - .connectionPosition2(getConnectionPosition2()); + .connectionPosition2(getConnectionPosition2()) + .connected1(isConnected1()) + .connected2(isConnected2()) + // 2WT + .magnetizingConductance(getMagnetizingConductance()) + .magnetizingSusceptance(getMagnetizingSusceptance()) + .ratedVoltage1(getRatedVoltage1()) + .ratedVoltage2(getRatedVoltage2()) + .ratedS(getRatedS()); if (getCurrentLimits1() != null) { builder.currentLimits1(getCurrentLimits1().toCurrentLimitsInfos()); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/LineCreation.java b/src/main/java/org/gridsuite/modification/server/modifications/LineCreation.java index 6e178177c..79c81b032 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/LineCreation.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/LineCreation.java @@ -73,6 +73,8 @@ public void apply(Network network, Reporter subReporter) { ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos1, line.newCurrentLimits1()); ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos2, line.newCurrentLimits2()); } + + ModificationUtils.getInstance().disconnectBranch(modificationInfos, network.getLine(modificationInfos.getEquipmentId()), subReporter); } private void addLine(Network network, VoltageLevel voltageLevel1, VoltageLevel voltageLevel2, LineCreationInfos lineCreationInfos, boolean withSwitch1, boolean withSwitch2, Reporter subReporter) { diff --git a/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java b/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java index 9f5a967e8..bbc4f1f0b 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java @@ -527,6 +527,28 @@ public void disconnectInjection(InjectionCreationInfos modificationInfos, Inject } } + public void disconnectBranch(BranchCreationInfos modificationInfos, Branch branch, Reporter subReporter) { + // A newly created branch is connected by default on both sides, unless we choose not to do + if (!modificationInfos.isConnected1()) { + branch.getTerminal1().disconnect(); + subReporter.report(Report.builder() + .withKey("terminal1Disconnected") + .withDefaultMessage("Equipment with id=${id} disconnected on side 1") + .withValue("id", modificationInfos.getEquipmentId()) + .withSeverity(TypedValue.INFO_SEVERITY) + .build()); + } + if (!modificationInfos.isConnected2()) { + branch.getTerminal2().disconnect(); + subReporter.report(Report.builder() + .withKey("terminal2Disconnected") + .withDefaultMessage("Equipment with id=${id} disconnected on side 2") + .withValue("id", modificationInfos.getEquipmentId()) + .withSeverity(TypedValue.INFO_SEVERITY) + .build()); + } + } + public Identifiable getEquipmentByIdentifiableType(Network network, String type, String equipmentId) { if (type == null || equipmentId == null) { return null; diff --git a/src/main/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreation.java b/src/main/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreation.java index 3241f3a9f..fa1368bbd 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreation.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreation.java @@ -59,6 +59,7 @@ public void apply(Network network, Reporter subReporter) { ModificationUtils.getInstance().setCurrentLimits(currentLimitsInfos2, twoWindingsTransformer.newCurrentLimits2()); } + ModificationUtils.getInstance().disconnectBranch(modificationInfos, network.getTwoWindingsTransformer(modificationInfos.getEquipmentId()), subReporter); } private TwoWindingsTransformer create2WTInNodeBreaker(Network network, VoltageLevel voltageLevel1, VoltageLevel voltageLevel2, Reporter subReporter) { diff --git a/src/main/resources/db/changelog/changesets/changelog_20231117T175127Z.xml b/src/main/resources/db/changelog/changesets/changelog_20231117T175127Z.xml new file mode 100644 index 000000000..8c4e8657b --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20231117T175127Z.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 95fdd5b1a..c4edf5f4f 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -221,4 +221,7 @@ databaseChangeLog: relativeToChangelogFile: true - include: file: changesets/changelog_20231611T132720Z.xml + relativeToChangelogFile: true + - include: + file: changesets/changelog_20231117T175127Z.xml relativeToChangelogFile: true \ No newline at end of file diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java index b6e833455..7369cc651 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java @@ -208,6 +208,8 @@ public void testCreateLineWithBothCurrentLimits() throws Exception { .connectionDirection2(ConnectablePosition.Direction.TOP) .connectionPosition1(0) .connectionPosition2(0) + .connected1(true) + .connected2(false) .build(); String lineCreationJson = mapper.writeValueAsString(lineCreation); @@ -223,7 +225,7 @@ public void testCreateLineWithBothCurrentLimits() throws Exception { testNetworkModificationsCount(getGroupId(), 1); assertEquals( - "LineCreationInfos(super=BranchCreationInfos(super=EquipmentCreationInfos(super=EquipmentModificationInfos(super=ModificationInfos(uuid=null, type=LINE_CREATION, date=null, stashed=false, messageType=null, messageValues=null), equipmentId=idLineEdited), equipmentName=nameLineEdited), seriesResistance=110.0, seriesReactance=110.0, voltageLevelId1=v2, voltageLevelId2=v1, busOrBusbarSectionId1=1A, busOrBusbarSectionId2=1.1, currentLimits1=CurrentLimitsInfos(permanentLimit=200.0, temporaryLimits=[CurrentTemporaryLimitCreationInfos(name=IT10, value=200.0, acceptableDuration=600)]), currentLimits2=CurrentLimitsInfos(permanentLimit=100.0, temporaryLimits=[CurrentTemporaryLimitCreationInfos(name=IT20, value=600.0, acceptableDuration=1200)]), connectionName1=cn1LineEdited, connectionDirection1=BOTTOM, connectionName2=cn2LineEdited, connectionDirection2=TOP, connectionPosition1=0, connectionPosition2=0), shuntConductance1=15.0, shuntSusceptance1=15.0, shuntConductance2=25.0, shuntSusceptance2=25.0)", + "LineCreationInfos(super=BranchCreationInfos(super=EquipmentCreationInfos(super=EquipmentModificationInfos(super=ModificationInfos(uuid=null, type=LINE_CREATION, date=null, stashed=false, messageType=null, messageValues=null), equipmentId=idLineEdited), equipmentName=nameLineEdited), seriesResistance=110.0, seriesReactance=110.0, voltageLevelId1=v2, voltageLevelId2=v1, busOrBusbarSectionId1=1A, busOrBusbarSectionId2=1.1, currentLimits1=CurrentLimitsInfos(permanentLimit=200.0, temporaryLimits=[CurrentTemporaryLimitCreationInfos(name=IT10, value=200.0, acceptableDuration=600)]), currentLimits2=CurrentLimitsInfos(permanentLimit=100.0, temporaryLimits=[CurrentTemporaryLimitCreationInfos(name=IT20, value=600.0, acceptableDuration=1200)]), connectionName1=cn1LineEdited, connectionDirection1=BOTTOM, connectionName2=cn2LineEdited, connectionDirection2=TOP, connectionPosition1=0, connectionPosition2=0, connected1=true, connected2=false), shuntConductance1=15.0, shuntSusceptance1=15.0, shuntConductance2=25.0, shuntSusceptance2=25.0)", lineCreation.toString() ); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java index 55dd52417..2704144c1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java @@ -57,8 +57,10 @@ protected ModificationInfos buildModification() { .ratedS(1.) .voltageLevelId1("v1") .busOrBusbarSectionId1("bus1") + .connected1(true) .voltageLevelId2("v12") .busOrBusbarSectionId2("bus12") + .connected2(true) .currentLimits1(CurrentLimitsInfos.builder().permanentLimit(3.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(98647).value(45.).build())).build()) .currentLimits2(CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build()) .connectionName1("cn201") @@ -315,8 +317,10 @@ public void testCreateTwoWindingsTransformerWithRatioTapChangerInBusBreaker() th .equipmentName("2wtName") .voltageLevelId1("v1") .busOrBusbarSectionId1("bus1") + .connected1(true) .voltageLevelId2("v12") .busOrBusbarSectionId2("bus12") + .connected2(true) .magnetizingConductance(100.0) .magnetizingSusceptance(200.0) .ratedVoltage1(1000) @@ -333,8 +337,10 @@ public void testCreateTwoWindingsTransformerWithRatioTapChangerInBusBreaker() th .equipmentName("2wtName") .voltageLevelId1("v1") .busOrBusbarSectionId1("bus1") + .connected1(true) .voltageLevelId2("v12") .busOrBusbarSectionId2("bus12") + .connected2(true) .magnetizingConductance(100.0) .magnetizingSusceptance(200.0) .ratedVoltage1(1000) @@ -379,8 +385,10 @@ public void testCreateTwoWindingsTransformerWithPhaseTapChangerInBusBreaker() th .seriesResistance(400) .connectionName1("cnid2wt1") .connectionDirection1(ConnectablePosition.Direction.TOP) + .connected1(true) .connectionName2("cnid2wt2") .connectionDirection2(ConnectablePosition.Direction.TOP) + .connected2(true) .phaseTapChanger(phaseTapChangerCreationInfos) .build(); testCreateTwoWindingsTransformerInBusBreaker(twoWindingsTransformerCreationInfos, 1); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java index 667377865..9655319d4 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java @@ -45,8 +45,10 @@ protected ModificationInfos buildModification() { .equipmentName("2wtName") .voltageLevelId1("v1") .busOrBusbarSectionId1("1.1") + .connected1(true) .voltageLevelId2("v3") .busOrBusbarSectionId2("bus3") + .connected2(true) .magnetizingConductance(100.0) .magnetizingSusceptance(200.0) .ratedVoltage1(1000) diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java index 119b5e5bd..398faa8a9 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java @@ -57,14 +57,18 @@ protected ModificationInfos buildModification() { .ratedS(1.) .voltageLevelId1("v1") .busOrBusbarSectionId1("1.1") + .connected1(true) .voltageLevelId2("v2") .busOrBusbarSectionId2("1A") + .connected2(true) .currentLimits1(CurrentLimitsInfos.builder().permanentLimit(3.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(2147483647).value(671.).build())).build()) .currentLimits2(CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build()) .connectionName1("cn201") .connectionDirection1(ConnectablePosition.Direction.TOP) + .connected1(true) .connectionName2("cn202") .connectionDirection2(ConnectablePosition.Direction.TOP) + .connected2(true) .phaseTapChanger(PhaseTapChangerCreationInfos.builder() .lowTapPosition(1) .tapPosition(2) @@ -306,8 +310,10 @@ public void testCreateTwoWindingsTransformerWithRatioTapChangerInNodeBreaker() t .seriesResistance(400) .connectionName1("cnid2wt1") .connectionDirection1(ConnectablePosition.Direction.TOP) + .connected1(true) .connectionName2("cnid2wt2") .connectionDirection2(ConnectablePosition.Direction.TOP) + .connected2(true) .ratioTapChanger(ratioTapChangerCreationInfos) .build(); testCreateTwoWindingsTransformerInNodeBreaker(twoWindingsTransformerCreationInfos, 1); @@ -316,8 +322,10 @@ public void testCreateTwoWindingsTransformerWithRatioTapChangerInNodeBreaker() t .equipmentName("2wtName") .voltageLevelId1("v1") .busOrBusbarSectionId1("1.1") + .connected1(true) .voltageLevelId2("v4") .busOrBusbarSectionId2("1.A") + .connected2(true) .magnetizingConductance(100.0) .magnetizingSusceptance(200.0) .ratedVoltage1(1000) @@ -331,7 +339,7 @@ public void testCreateTwoWindingsTransformerWithRatioTapChangerInNodeBreaker() t testCreateTwoWindingsTransformerInNodeBreaker(twoWindingsTransformerCreationInfos2, 2); assertEquals( - "TwoWindingsTransformerCreationInfos(super=BranchCreationInfos(super=EquipmentCreationInfos(super=EquipmentModificationInfos(super=ModificationInfos(uuid=null, type=TWO_WINDINGS_TRANSFORMER_CREATION, date=null, stashed=false, messageType=null, messageValues=null), equipmentId=id2wt1WithRatioTapChanger2), equipmentName=2wtName), seriesResistance=400.0, seriesReactance=300.0, voltageLevelId1=v1, voltageLevelId2=v4, busOrBusbarSectionId1=1.1, busOrBusbarSectionId2=1.A, currentLimits1=null, currentLimits2=null, connectionName1=null, connectionDirection1=TOP, connectionName2=null, connectionDirection2=TOP, connectionPosition1=null, connectionPosition2=null), magnetizingConductance=100.0, magnetizingSusceptance=200.0, ratedVoltage1=1000.0, ratedVoltage2=1010.0, ratedS=null, ratioTapChanger=RatioTapChangerCreationInfos(super=TapChangerCreationInfos(lowTapPosition=0, tapPosition=1, regulating=true, targetDeadband=null, regulatingTerminalId=v1load, regulatingTerminalType=LOAD, regulatingTerminalVlId=v1, steps=[TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78473, x=39.784725, g=0.0, b=0.0, alpha=0.0), TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78474, x=39.784726, g=0.0, b=0.0, alpha=0.0), TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78475, x=39.784727, g=0.0, b=0.0, alpha=0.0)]), loadTapChangingCapabilities=true, targetV=220.0), phaseTapChanger=null)", + "TwoWindingsTransformerCreationInfos(super=BranchCreationInfos(super=EquipmentCreationInfos(super=EquipmentModificationInfos(super=ModificationInfos(uuid=null, type=TWO_WINDINGS_TRANSFORMER_CREATION, date=null, stashed=false, messageType=null, messageValues=null), equipmentId=id2wt1WithRatioTapChanger2), equipmentName=2wtName), seriesResistance=400.0, seriesReactance=300.0, voltageLevelId1=v1, voltageLevelId2=v4, busOrBusbarSectionId1=1.1, busOrBusbarSectionId2=1.A, currentLimits1=null, currentLimits2=null, connectionName1=null, connectionDirection1=TOP, connectionName2=null, connectionDirection2=TOP, connectionPosition1=null, connectionPosition2=null, connected1=true, connected2=true), magnetizingConductance=100.0, magnetizingSusceptance=200.0, ratedVoltage1=1000.0, ratedVoltage2=1010.0, ratedS=null, ratioTapChanger=RatioTapChangerCreationInfos(super=TapChangerCreationInfos(lowTapPosition=0, tapPosition=1, regulating=true, targetDeadband=null, regulatingTerminalId=v1load, regulatingTerminalType=LOAD, regulatingTerminalVlId=v1, steps=[TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78473, x=39.784725, g=0.0, b=0.0, alpha=0.0), TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78474, x=39.784726, g=0.0, b=0.0, alpha=0.0), TapChangerStepCreationInfos(index=0, rho=1.0, r=39.78475, x=39.784727, g=0.0, b=0.0, alpha=0.0)]), loadTapChangingCapabilities=true, targetV=220.0), phaseTapChanger=null)", twoWindingsTransformerCreationInfos2.toString() ); @@ -341,8 +349,10 @@ public void testCreateTwoWindingsTransformerWithRatioTapChangerInNodeBreaker() t .equipmentName("2wtName") .voltageLevelId1("v1") .busOrBusbarSectionId1("1.1") + .connected1(true) .voltageLevelId2("v4") .busOrBusbarSectionId2("1.A") + .connected2(true) .magnetizingConductance(100.0) .magnetizingSusceptance(200.0) .ratedVoltage1(1000) @@ -400,8 +410,10 @@ public void testCreateTwoWindingsTransformerWithPhaseTapChangerInNodeBreaker() t .seriesResistance(400) .connectionName1("cnid2wt1") .connectionDirection1(ConnectablePosition.Direction.TOP) + .connected1(true) .connectionName2("cnid2wt2") .connectionDirection2(ConnectablePosition.Direction.TOP) + .connected2(true) .phaseTapChanger(phaseTapChangerLoadRegulatingCreationInfos) .build(); testCreateTwoWindingsTransformerInNodeBreaker(twoWindingsTransformerCreationInfos, 1); @@ -424,8 +436,10 @@ public void testCreateTwoWindingsTransformerWithPhaseTapChangerInNodeBreaker() t .equipmentName("2wtName") .voltageLevelId1("v1") .busOrBusbarSectionId1("1.1") + .connected1(true) .voltageLevelId2("v4") .busOrBusbarSectionId2("1.A") + .connected2(true) .magnetizingConductance(100.0) .magnetizingSusceptance(200.0) .ratedVoltage1(1000) @@ -458,8 +472,10 @@ public void testCreateTwoWindingsTransformerWithPhaseTapChangerInNodeBreaker() t .equipmentName("2wtName") .voltageLevelId1("v1") .busOrBusbarSectionId1("1.1") + .connected1(true) .voltageLevelId2("v4") .busOrBusbarSectionId2("1.A") + .connected2(true) .magnetizingConductance(100.0) .magnetizingSusceptance(200.0) .ratedVoltage1(1000) 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 07f677d7c..5101801b2 100644 --- a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java @@ -545,7 +545,7 @@ public void runBuildTest() throws Exception { .connectionPosition(0) .connected(true) .build().toEntity()); - entities2.add(LineCreationInfos.builder().equipmentId("newLine").equipmentName("newLine").seriesResistance(1.0).seriesReactance(2.0).shuntConductance1(3.0).shuntSusceptance1(4.0).shuntConductance2(5.0).shuntSusceptance2(6.0).voltageLevelId1("v1").busOrBusbarSectionId1("1.1").voltageLevelId2("v2").busOrBusbarSectionId2("1B").currentLimits1(null).currentLimits2(null).connectionName1("cn101").connectionDirection1(ConnectablePosition.Direction.TOP).connectionName2("cn102").connectionDirection2(ConnectablePosition.Direction.TOP).build().toEntity()); + entities2.add(LineCreationInfos.builder().equipmentId("newLine").equipmentName("newLine").seriesResistance(1.0).seriesReactance(2.0).shuntConductance1(3.0).shuntSusceptance1(4.0).shuntConductance2(5.0).shuntSusceptance2(6.0).voltageLevelId1("v1").busOrBusbarSectionId1("1.1").voltageLevelId2("v2").busOrBusbarSectionId2("1B").currentLimits1(null).currentLimits2(null).connectionName1("cn101").connectionDirection1(ConnectablePosition.Direction.TOP).connectionName2("cn102").connectionDirection2(ConnectablePosition.Direction.TOP).connected1(true).connected2(true).build().toEntity()); List tapChangerStepCreationEmbeddables = new ArrayList<>(); tapChangerStepCreationEmbeddables.add(new TapChangerStepCreationEmbeddable(TapChangerType.PHASE, 1, 1, 0, 0, 0, 0, 0.)); @@ -597,8 +597,10 @@ public void runBuildTest() throws Exception { .ratedS(1.) .voltageLevelId1("v1") .busOrBusbarSectionId1("1.1") + .connected1(true) .voltageLevelId2("v2") .busOrBusbarSectionId2("1A") + .connected2(true) .currentLimits1(CurrentLimitsInfos.builder().permanentLimit(3.).build()) .currentLimits2(CurrentLimitsInfos.builder().permanentLimit(2.).build()) .connectionName1("cn201") From 1abce8b73f6683356d46313f47ef16efc5d74c0f Mon Sep 17 00:00:00 2001 From: YenguiSeddik <101111441+YenguiSeddik@users.noreply.github.com> Date: Fri, 24 Nov 2023 11:16:47 +0100 Subject: [PATCH 3/5] Add equipments to modif by formula (#379) Signed-off-by: Seddik Yengui --- .../dto/formula/ReferenceFieldOrValue.java | 7 + .../dto/formula/equipmentfield/LoadField.java | 35 +++ .../equipmentfield/VoltageLevelField.java | 60 +++++ .../modifications/ByFormulaModification.java | 6 + .../AbstractByFormulaModificationTest.java | 4 +- .../LoadByFormulaModificationTest.java | 104 +++++++++ ...VoltageLevelByFormulaModificationTest.java | 215 ++++++++++++++++++ 7 files changed, 429 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/LoadField.java create mode 100644 src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/VoltageLevelField.java create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/ReferenceFieldOrValue.java b/src/main/java/org/gridsuite/modification/server/dto/formula/ReferenceFieldOrValue.java index 2b67b40d1..a7d2ea60e 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/formula/ReferenceFieldOrValue.java +++ b/src/main/java/org/gridsuite/modification/server/dto/formula/ReferenceFieldOrValue.java @@ -11,7 +11,9 @@ import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.Identifiable; import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.Load; import com.powsybl.iidm.network.ShuntCompensator; +import com.powsybl.iidm.network.VoltageLevel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -20,7 +22,10 @@ import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.formula.equipmentfield.BatteryField; import org.gridsuite.modification.server.dto.formula.equipmentfield.GeneratorField; +import org.gridsuite.modification.server.dto.formula.equipmentfield.LoadField; import org.gridsuite.modification.server.dto.formula.equipmentfield.ShuntCompensatorField; +import org.gridsuite.modification.server.dto.formula.equipmentfield.VoltageLevelField; + /** * @author Seddik Yengui @@ -51,6 +56,8 @@ public Double getRefOrValue(Identifiable identifiable) { case GENERATOR -> GeneratorField.getReferenceValue((Generator) identifiable, equipmentField); case BATTERY -> BatteryField.getReferenceValue((Battery) identifiable, equipmentField); case SHUNT_COMPENSATOR -> ShuntCompensatorField.getReferenceValue((ShuntCompensator) identifiable, equipmentField); + case VOLTAGE_LEVEL -> VoltageLevelField.getReferenceValue((VoltageLevel) identifiable, equipmentField); + case LOAD -> LoadField.getReferenceValue((Load) identifiable, equipmentField); default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, String.format("Unsupported equipment type : %s", identifiableType.name())); }; diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/LoadField.java b/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/LoadField.java new file mode 100644 index 000000000..2743186a6 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/LoadField.java @@ -0,0 +1,35 @@ +/** + * 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.formula.equipmentfield; + +import com.powsybl.iidm.network.Load; + +/** + * @author Seddik Yengui + */ + +public enum LoadField { + ACTIVE_POWER, + REACTIVE_POWER; + + public static Double getReferenceValue(Load load, String loadField) { + LoadField field = LoadField.valueOf(loadField); + return switch (field) { + case ACTIVE_POWER -> load.getP0(); + case REACTIVE_POWER -> load.getQ0(); + }; + } + + public static void setNewValue(Load load, String loadField, Double newValue) { + LoadField field = LoadField.valueOf(loadField); + switch (field) { + case ACTIVE_POWER -> load.setP0(newValue); + case REACTIVE_POWER -> load.setQ0(newValue); + } + } +} diff --git a/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/VoltageLevelField.java b/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/VoltageLevelField.java new file mode 100644 index 000000000..a1fc1d644 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/formula/equipmentfield/VoltageLevelField.java @@ -0,0 +1,60 @@ +/** + * 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.formula.equipmentfield; + +import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; +import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; + +/** + * @author Seddik Yengui + */ + +public enum VoltageLevelField { + NOMINAL_VOLTAGE, + LOW_VOLTAGE_LIMIT, + HIGH_VOLTAGE_LIMIT, + LOW_SHORT_CIRCUIT_CURRENT_LIMIT, + HIGH_SHORT_CIRCUIT_CURRENT_LIMIT; + + public static Double getReferenceValue(VoltageLevel voltageLevel, String voltageLevelField) { + IdentifiableShortCircuit identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class); + VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField); + return switch (field) { + case NOMINAL_VOLTAGE -> voltageLevel.getNominalV(); + case LOW_VOLTAGE_LIMIT -> voltageLevel.getLowVoltageLimit(); + case HIGH_VOLTAGE_LIMIT -> voltageLevel.getHighVoltageLimit(); + case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> identifiableShortCircuit == null ? null : identifiableShortCircuit.getIpMin(); + case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> identifiableShortCircuit == null ? null : identifiableShortCircuit.getIpMax(); + }; + } + + public static void setNewValue(VoltageLevel voltageLevel, String voltageLevelField, Double newValue) { + IdentifiableShortCircuit identifiableShortCircuit = voltageLevel.getExtension(IdentifiableShortCircuit.class); + VoltageLevelField field = VoltageLevelField.valueOf(voltageLevelField); + switch (field) { + case NOMINAL_VOLTAGE -> voltageLevel.setNominalV(newValue); + case LOW_VOLTAGE_LIMIT -> voltageLevel.setLowVoltageLimit(newValue); + case HIGH_VOLTAGE_LIMIT -> voltageLevel.setHighVoltageLimit(newValue); + case LOW_SHORT_CIRCUIT_CURRENT_LIMIT -> { + IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMin(newValue); + if (identifiableShortCircuit != null) { + adder.withIpMax(identifiableShortCircuit.getIpMax()); + } + adder.add(); + } + case HIGH_SHORT_CIRCUIT_CURRENT_LIMIT -> { + IdentifiableShortCircuitAdder adder = voltageLevel.newExtension(IdentifiableShortCircuitAdder.class).withIpMax(newValue); + if (identifiableShortCircuit != null) { + adder.withIpMin(identifiableShortCircuit.getIpMin()); + } + adder.add(); + } + } + } +} diff --git a/src/main/java/org/gridsuite/modification/server/modifications/ByFormulaModification.java b/src/main/java/org/gridsuite/modification/server/modifications/ByFormulaModification.java index 94bbde685..6e8a62a61 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/ByFormulaModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/ByFormulaModification.java @@ -13,8 +13,10 @@ import com.powsybl.iidm.network.Battery; import com.powsybl.iidm.network.Generator; import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.Load; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.ShuntCompensator; +import com.powsybl.iidm.network.VoltageLevel; import org.gridsuite.modification.server.NetworkModificationException; import org.gridsuite.modification.server.dto.ByFormulaModificationInfos; import org.gridsuite.modification.server.dto.FilterEquipments; @@ -23,7 +25,9 @@ import org.gridsuite.modification.server.dto.formula.Operator; import org.gridsuite.modification.server.dto.formula.equipmentfield.BatteryField; import org.gridsuite.modification.server.dto.formula.equipmentfield.GeneratorField; +import org.gridsuite.modification.server.dto.formula.equipmentfield.LoadField; import org.gridsuite.modification.server.dto.formula.equipmentfield.ShuntCompensatorField; +import org.gridsuite.modification.server.dto.formula.equipmentfield.VoltageLevelField; import org.gridsuite.modification.server.service.FilterService; import org.jetbrains.annotations.Nullable; import org.springframework.util.CollectionUtils; @@ -155,6 +159,8 @@ private void applyFormula(Network network, case GENERATOR -> GeneratorField.setNewValue((Generator) identifiable, formulaInfos.getEditedField(), newValue); case BATTERY -> BatteryField.setNewValue((Battery) identifiable, formulaInfos.getEditedField(), newValue); case SHUNT_COMPENSATOR -> ShuntCompensatorField.setNewValue((ShuntCompensator) identifiable, formulaInfos.getEditedField(), newValue); + case VOLTAGE_LEVEL -> VoltageLevelField.setNewValue((VoltageLevel) identifiable, formulaInfos.getEditedField(), newValue); + case LOAD -> LoadField.setNewValue((Load) identifiable, formulaInfos.getEditedField(), newValue); default -> throw new NetworkModificationException(NetworkModificationException.Type.BY_FORMULA_MODIFICATION_ERROR, "Unsupported equipment"); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java index 5bb167667..81c010149 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/AbstractByFormulaModificationTest.java @@ -110,7 +110,7 @@ protected void checkCreateWithError(List formulaInfos) throws Exce @Override public void testCreate() throws Exception { List filters = getTestFilters(); - UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching(getPath(getNetworkUuid(), true) + "(.+,){4}.*")) + UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching(getPath(getNetworkUuid(), true) + ".{2,}")) .willReturn(WireMock.ok() .withBody(mapper.writeValueAsString(filters)) .withHeader("Content-Type", "application/json"))).getId(); @@ -125,7 +125,7 @@ public void testCreate() throws Exception { public void testCopy() throws Exception { List filters = getTestFilters(); - UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching(getPath(getNetworkUuid(), true) + "(.+,){4}.*")) + UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlMatching(getPath(getNetworkUuid(), true) + ".{2,}")) .willReturn(WireMock.ok() .withBody(mapper.writeValueAsString(filters)) .withHeader("Content-Type", "application/json"))).getId(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java new file mode 100644 index 000000000..1ee9a4170 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadByFormulaModificationTest.java @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications; + +import com.powsybl.iidm.network.IdentifiableType; +import org.gridsuite.modification.server.dto.FilterEquipments; +import org.gridsuite.modification.server.dto.IdentifiableAttributes; +import org.gridsuite.modification.server.dto.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.formula.Operator; +import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.formula.equipmentfield.LoadField; + +import java.util.List; + +import static org.gridsuite.modification.server.utils.NetworkUtil.createLoad; +import static org.junit.Assert.assertEquals; + +/** + * @author Seddik Yengui + */ + +public class LoadByFormulaModificationTest extends AbstractByFormulaModificationTest { + private static final String LOAD_ID_1 = "load1"; + private static final String LOAD_ID_2 = "load2"; + private static final String LOAD_ID_3 = "load3"; + private static final String LOAD_ID_4 = "load4"; + + @Override + protected void createEquipments() { + createLoad(getNetwork().getVoltageLevel("v1"), LOAD_ID_1, "load1", 100, 100, 120, null, 5, null); + createLoad(getNetwork().getVoltageLevel("v2"), LOAD_ID_2, "load2", 200, 80, 90, null, 5, null); + createLoad(getNetwork().getVoltageLevel("v3"), LOAD_ID_3, "load3", 300, 100, 70, null, 5, null); + createLoad(getNetwork().getVoltageLevel("v4"), LOAD_ID_4, "load4", 400, 50, 150, null, 5, null); + } + + @Override + protected List getTestFilters() { + IdentifiableAttributes load1 = getIdentifiableAttributes(LOAD_ID_1, 1.0); + IdentifiableAttributes load2 = getIdentifiableAttributes(LOAD_ID_2, 2.0); + IdentifiableAttributes load3 = getIdentifiableAttributes(LOAD_ID_3, 2.0); + IdentifiableAttributes load4 = getIdentifiableAttributes(LOAD_ID_4, 5.0); + + FilterEquipments filter1 = getFilterEquipments(FILTER_ID_1, "filter1", List.of(load1, load2), List.of()); + FilterEquipments filter2 = getFilterEquipments(FILTER_ID_2, "filter2", List.of(load3, load4), List.of()); + + return List.of(filter1, filter2); + } + + @Override + protected List getFormulaInfos() { + FormulaInfos formulaInfos1 = getFormulaInfo(LoadField.ACTIVE_POWER.name(), + List.of(filter1), + Operator.ADDITION, + ReferenceFieldOrValue.builder().equipmentField(LoadField.ACTIVE_POWER.name()).build(), + ReferenceFieldOrValue.builder().value(25.).build() + ); + + FormulaInfos formulaInfos2 = getFormulaInfo(LoadField.REACTIVE_POWER.name(), + List.of(filter2), + Operator.MULTIPLICATION, + ReferenceFieldOrValue.builder().equipmentField(LoadField.REACTIVE_POWER.name()).build(), + ReferenceFieldOrValue.builder().value(2.5).build() + ); + return List.of(formulaInfos1, formulaInfos2); + } + + @Override + protected List getUpdatedFormulaInfos() { + FormulaInfos formulaInfos1 = getFormulaInfo(LoadField.ACTIVE_POWER.name(), + List.of(filter1), + Operator.PERCENTAGE, + ReferenceFieldOrValue.builder().value(200.).build(), + ReferenceFieldOrValue.builder().equipmentField(LoadField.ACTIVE_POWER.name()).build() + ); + + return List.of(formulaInfos1); + } + + @Override + protected IdentifiableType getIdentifiableType() { + return IdentifiableType.LOAD; + } + + @Override + protected void assertAfterNetworkModificationCreation() { + assertEquals(125, getNetwork().getLoad(LOAD_ID_1).getP0(), 0); + assertEquals(105, getNetwork().getLoad(LOAD_ID_2).getP0(), 0); + assertEquals(175, getNetwork().getLoad(LOAD_ID_3).getQ0(), 0); + assertEquals(375, getNetwork().getLoad(LOAD_ID_4).getQ0(), 0); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + assertEquals(100, getNetwork().getLoad(LOAD_ID_1).getP0(), 0); + assertEquals(80, getNetwork().getLoad(LOAD_ID_2).getP0(), 0); + assertEquals(70, getNetwork().getLoad(LOAD_ID_3).getQ0(), 0); + assertEquals(150, getNetwork().getLoad(LOAD_ID_4).getQ0(), 0); + } +} diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java new file mode 100644 index 000000000..22ddabe86 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelByFormulaModificationTest.java @@ -0,0 +1,215 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications; + +import com.powsybl.iidm.network.IdentifiableType; +import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.iidm.network.extensions.IdentifiableShortCircuit; +import com.powsybl.iidm.network.extensions.IdentifiableShortCircuitAdder; +import org.gridsuite.modification.server.dto.FilterEquipments; +import org.gridsuite.modification.server.dto.IdentifiableAttributes; +import org.gridsuite.modification.server.dto.formula.FormulaInfos; +import org.gridsuite.modification.server.dto.formula.Operator; +import org.gridsuite.modification.server.dto.formula.ReferenceFieldOrValue; +import org.gridsuite.modification.server.dto.formula.equipmentfield.VoltageLevelField; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +/** + * @author Seddik Yengui + */ + +public class VoltageLevelByFormulaModificationTest extends AbstractByFormulaModificationTest { + private static final String VOLTAGE_LEVEL_ID_1 = "v1"; + private static final String VOLTAGE_LEVEL_ID_2 = "v2"; + private static final String VOLTAGE_LEVEL_ID_3 = "v3"; + private static final String VOLTAGE_LEVEL_ID_4 = "v4"; + private static final String VOLTAGE_LEVEL_ID_5 = "v5"; + private static final String VOLTAGE_LEVEL_ID_6 = "v6"; + + @Override + protected void createEquipments() { + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_1).setNominalV(400) + .setHighVoltageLimit(200) + .setLowVoltageLimit(100) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(10).withIpMax(120).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_2).setNominalV(150) + .setLowVoltageLimit(100) + .setHighVoltageLimit(1000) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(10).withIpMax(120).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_3).setNominalV(70) + .setLowVoltageLimit(50) + .setHighVoltageLimit(250) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(50).withIpMax(150).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_4).setNominalV(100) + .setLowVoltageLimit(70) + .setHighVoltageLimit(300) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(10).withIpMax(100).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_5).setNominalV(210) + .setLowVoltageLimit(10) + .setHighVoltageLimit(500) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(25).withIpMax(75).add(); + + getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_6).setNominalV(750) + .setHighVoltageLimit(1000) + .setLowVoltageLimit(90) + .newExtension(IdentifiableShortCircuitAdder.class).withIpMin(100).withIpMax(200).add(); + } + + @Override + protected List getTestFilters() { + IdentifiableAttributes voltageLevel1 = getIdentifiableAttributes(VOLTAGE_LEVEL_ID_1, 1.0); + IdentifiableAttributes voltageLevel2 = getIdentifiableAttributes(VOLTAGE_LEVEL_ID_2, 2.0); + IdentifiableAttributes voltageLevel3 = getIdentifiableAttributes(VOLTAGE_LEVEL_ID_3, 2.0); + IdentifiableAttributes voltageLevel4 = getIdentifiableAttributes(VOLTAGE_LEVEL_ID_4, 5.0); + IdentifiableAttributes voltageLevel5 = getIdentifiableAttributes(VOLTAGE_LEVEL_ID_5, 6.0); + IdentifiableAttributes voltageLevel6 = getIdentifiableAttributes(VOLTAGE_LEVEL_ID_6, 7.0); + + FilterEquipments filter1 = getFilterEquipments(FILTER_ID_1, "filter1", List.of(voltageLevel1, voltageLevel2), List.of()); + FilterEquipments filter2 = getFilterEquipments(FILTER_ID_2, "filter2", List.of(voltageLevel3, voltageLevel4), List.of()); + FilterEquipments filter3 = getFilterEquipments(FILTER_ID_3, "filter3", List.of(voltageLevel5, voltageLevel6), List.of()); + FilterEquipments filter4 = getFilterEquipments(FILTER_ID_4, "filter4", List.of(voltageLevel2, voltageLevel5), List.of()); + FilterEquipments filter5 = getFilterEquipments(FILTER_ID_5, "filter5", List.of(voltageLevel4, voltageLevel6), List.of()); + + return List.of(filter1, filter2, filter3, filter4, filter5); + } + + @Override + protected List getFormulaInfos() { + FormulaInfos formulaInfos1 = getFormulaInfo(VoltageLevelField.LOW_VOLTAGE_LIMIT.name(), + List.of(filter1, filter2), + Operator.ADDITION, + ReferenceFieldOrValue.builder().equipmentField(VoltageLevelField.LOW_VOLTAGE_LIMIT.name()).build(), + ReferenceFieldOrValue.builder().value(10.).build() + ); + + FormulaInfos formulaInfos2 = getFormulaInfo(VoltageLevelField.HIGH_VOLTAGE_LIMIT.name(), + List.of(filter3), + Operator.MULTIPLICATION, + ReferenceFieldOrValue.builder().equipmentField(VoltageLevelField.HIGH_VOLTAGE_LIMIT.name()).build(), + ReferenceFieldOrValue.builder().value(2.).build() + ); + + FormulaInfos formulaInfos3 = getFormulaInfo(VoltageLevelField.NOMINAL_VOLTAGE.name(), + List.of(filter4), + Operator.PERCENTAGE, + ReferenceFieldOrValue.builder().value(150.).build(), + ReferenceFieldOrValue.builder().equipmentField(VoltageLevelField.LOW_VOLTAGE_LIMIT.name()).build() + ); + + FormulaInfos formulaInfos4 = getFormulaInfo(VoltageLevelField.LOW_SHORT_CIRCUIT_CURRENT_LIMIT.name(), + List.of(filter5), + Operator.DIVISION, + ReferenceFieldOrValue.builder().equipmentField(VoltageLevelField.LOW_SHORT_CIRCUIT_CURRENT_LIMIT.name()).build(), + ReferenceFieldOrValue.builder().value(2.).build() + ); + + FormulaInfos formulaInfos5 = getFormulaInfo(VoltageLevelField.HIGH_SHORT_CIRCUIT_CURRENT_LIMIT.name(), + List.of(filter4, filter5), + Operator.SUBTRACTION, + ReferenceFieldOrValue.builder().equipmentField(VoltageLevelField.HIGH_SHORT_CIRCUIT_CURRENT_LIMIT.name()).build(), + ReferenceFieldOrValue.builder().value(5.).build() + ); + + return List.of(formulaInfos1, formulaInfos2, formulaInfos3, formulaInfos4, formulaInfos5); + } + + @Override + protected List getUpdatedFormulaInfos() { + FormulaInfos formulaInfos1 = getFormulaInfo(VoltageLevelField.LOW_VOLTAGE_LIMIT.name(), + List.of(filter1, filter2), + Operator.ADDITION, + ReferenceFieldOrValue.builder().equipmentField(VoltageLevelField.LOW_VOLTAGE_LIMIT.name()).build(), + ReferenceFieldOrValue.builder().value(5.).build() + ); + + FormulaInfos formulaInfos2 = getFormulaInfo(VoltageLevelField.HIGH_VOLTAGE_LIMIT.name(), + List.of(filter3), + Operator.MULTIPLICATION, + ReferenceFieldOrValue.builder().equipmentField(VoltageLevelField.HIGH_VOLTAGE_LIMIT.name()).build(), + ReferenceFieldOrValue.builder().value(1.5).build() + ); + + FormulaInfos formulaInfos3 = getFormulaInfo(VoltageLevelField.NOMINAL_VOLTAGE.name(), + List.of(filter4), + Operator.PERCENTAGE, + ReferenceFieldOrValue.builder().value(150.).build(), + ReferenceFieldOrValue.builder().equipmentField(VoltageLevelField.LOW_VOLTAGE_LIMIT.name()).build() + ); + + return List.of(formulaInfos1, formulaInfos2, formulaInfos3); + } + + @Override + protected IdentifiableType getIdentifiableType() { + return IdentifiableType.VOLTAGE_LEVEL; + } + + @Override + protected void assertAfterNetworkModificationCreation() { + assertEquals(110, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_1).getLowVoltageLimit(), 0); + assertEquals(110, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_2).getLowVoltageLimit(), 0); + assertEquals(60, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_3).getLowVoltageLimit(), 0); + + VoltageLevel voltageLevel4 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_4); + IdentifiableShortCircuit identifiableShortCircuit4 = voltageLevel4.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit4); + assertEquals(80, voltageLevel4.getLowVoltageLimit(), 0); + assertEquals(5, identifiableShortCircuit4.getIpMin(), 0); + assertEquals(95, identifiableShortCircuit4.getIpMax(), 0); + + VoltageLevel voltageLevel5 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_5); + IdentifiableShortCircuit identifiableShortCircuit5 = voltageLevel5.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit5); + assertEquals(1000, voltageLevel5.getHighVoltageLimit(), 0); + assertEquals(15, voltageLevel5.getNominalV(), 0); + assertEquals(70, identifiableShortCircuit5.getIpMax(), 0); + + VoltageLevel voltageLevel6 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_6); + IdentifiableShortCircuit identifiableShortCircuit6 = voltageLevel6.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit6); + assertEquals(2000, voltageLevel6.getHighVoltageLimit(), 0); + assertEquals(50, identifiableShortCircuit6.getIpMin(), 0); + assertEquals(195, identifiableShortCircuit6.getIpMax(), 0); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + assertEquals(100, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_1).getLowVoltageLimit(), 0); + assertEquals(100, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_2).getLowVoltageLimit(), 0); + assertEquals(250, getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_3).getHighVoltageLimit(), 0); + + VoltageLevel voltageLevel4 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_4); + IdentifiableShortCircuit identifiableShortCircuit4 = voltageLevel4.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit4); + assertEquals(300, voltageLevel4.getHighVoltageLimit(), 0); + assertEquals(10, identifiableShortCircuit4.getIpMin(), 0); + assertEquals(100, identifiableShortCircuit4.getIpMax(), 0); + + VoltageLevel voltageLevel5 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_5); + IdentifiableShortCircuit identifiableShortCircuit5 = voltageLevel5.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit5); + assertEquals(500, voltageLevel5.getHighVoltageLimit(), 0); + assertEquals(210, voltageLevel5.getNominalV(), 0); + assertEquals(75, identifiableShortCircuit5.getIpMax(), 0); + + VoltageLevel voltageLevel6 = getNetwork().getVoltageLevel(VOLTAGE_LEVEL_ID_6); + IdentifiableShortCircuit identifiableShortCircuit6 = voltageLevel6.getExtension(IdentifiableShortCircuit.class); + assertNotNull(identifiableShortCircuit6); + assertEquals(1000, voltageLevel6.getHighVoltageLimit(), 0); + assertEquals(100, identifiableShortCircuit6.getIpMin(), 0); + assertEquals(200, identifiableShortCircuit6.getIpMax(), 0); + } +} From b19f5d2fa6815f1484cf45b1291809d41fdc271c Mon Sep 17 00:00:00 2001 From: Slimane Amar <63394973+SlimaneAmar@users.noreply.github.com> Date: Fri, 24 Nov 2023 13:01:20 +0100 Subject: [PATCH 4/5] Remove the id automatically generated to have a unique index for ELS (#382) Signed-off-by: Slimane AMAR --- .../elasticsearch/BasicEquipmentInfos.java | 12 +++++++++- .../elasticsearch/EquipmentInfosService.java | 2 -- .../service/EquipmentInfosServiceTests.java | 22 +++++++++++++++++-- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/BasicEquipmentInfos.java b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/BasicEquipmentInfos.java index e1d46a85f..f2a289a5c 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/BasicEquipmentInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/BasicEquipmentInfos.java @@ -8,6 +8,7 @@ import lombok.*; import lombok.experimental.SuperBuilder; +import org.springframework.data.annotation.AccessType; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.data.elasticsearch.annotations.FieldType; @@ -27,7 +28,16 @@ @EqualsAndHashCode public class BasicEquipmentInfos { @Id - private String uniqueId; + @AccessType(AccessType.Type.PROPERTY) + @SuppressWarnings("unused") + public String getUniqueId() { + return networkUuid + "_" + variantId + "_" + id; + } + + @SuppressWarnings("unused") + public void setUniqueId(String uniqueId) { + // No setter because it a composite value + } @MultiField( mainField = @Field(name = "equipmentId", type = FieldType.Text), diff --git a/src/main/java/org/gridsuite/modification/server/elasticsearch/EquipmentInfosService.java b/src/main/java/org/gridsuite/modification/server/elasticsearch/EquipmentInfosService.java index 8809e4df7..d883a74dc 100644 --- a/src/main/java/org/gridsuite/modification/server/elasticsearch/EquipmentInfosService.java +++ b/src/main/java/org/gridsuite/modification/server/elasticsearch/EquipmentInfosService.java @@ -65,7 +65,6 @@ public void cloneVariantModifications(@NonNull UUID networkUuid, @NonNull String addAllEquipmentInfos( equipmentInfosRepository.findAllByNetworkUuidAndVariantId(networkUuid, variantToCloneId).stream() .map(equipmentInfos -> { - equipmentInfos.setUniqueId(null); equipmentInfos.setVariantId(variantId); return equipmentInfos; }) @@ -74,7 +73,6 @@ public void cloneVariantModifications(@NonNull UUID networkUuid, @NonNull String addAllTombstonedEquipmentInfos( tombstonedEquipmentInfosRepository.findAllByNetworkUuidAndVariantId(networkUuid, variantToCloneId).stream() .map(tombstonedEquipmentInfos -> { - tombstonedEquipmentInfos.setUniqueId(null); tombstonedEquipmentInfos.setVariantId(variantId); return tombstonedEquipmentInfos; }) diff --git a/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java b/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java index 1d180073c..9ea8e4e7e 100644 --- a/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java +++ b/src/test/java/org/gridsuite/modification/server/service/EquipmentInfosServiceTests.java @@ -74,8 +74,26 @@ public void testAddDeleteEquipmentInfos() { .substations(Set.of(SubstationInfos.builder().id("s1").name("s1").build())) .build(); equipmentInfosService.addAllEquipmentInfos(List.of(equipmentInfos)); - assertNotNull(equipmentInfosRepository.findAllByNetworkUuidAndVariantId(NETWORK_UUID, VARIANT_NAME_1).get(0)); - assertEquals(equipmentInfos, equipmentInfosRepository.findAllByNetworkUuidAndVariantId(NETWORK_UUID, VARIANT_NAME_1).get(0)); + List infosDB = equipmentInfosRepository.findAllByNetworkUuidAndVariantId(NETWORK_UUID, VARIANT_NAME_1); + assertEquals(1, infosDB.size()); + assertEquals(equipmentInfos, infosDB.get(0)); + assertEquals(equipmentInfos.getNetworkUuid() + "_" + equipmentInfos.getVariantId() + "_" + equipmentInfos.getId(), infosDB.get(0).getUniqueId()); + + // Change name but uniqueIds are same + equipmentInfos = EquipmentInfos.builder() + .networkUuid(NETWORK_UUID) + .id("id1") + .variantId(VARIANT_NAME_1) + .name("newName") + .type(IdentifiableType.LOAD.name()) + .voltageLevels(Set.of(VoltageLevelInfos.builder().id("vl1").name("vl1").build())) + .substations(Set.of(SubstationInfos.builder().id("s1").name("s1").build())) + .build(); + equipmentInfosService.addAllEquipmentInfos(List.of(equipmentInfos)); + infosDB = equipmentInfosRepository.findAllByNetworkUuidAndVariantId(NETWORK_UUID, VARIANT_NAME_1); + assertEquals(1, infosDB.size()); + assertEquals(equipmentInfos, infosDB.get(0)); + assertEquals(equipmentInfos.getNetworkUuid() + "_" + equipmentInfos.getVariantId() + "_" + equipmentInfos.getId(), infosDB.get(0).getUniqueId()); equipmentInfosRepository.deleteByIdInAndNetworkUuidAndVariantId(List.of(equipmentInfos.getId()), NETWORK_UUID, VARIANT_NAME_1); assertEquals(0, equipmentInfosRepository.findAllByNetworkUuidAndVariantId(NETWORK_UUID, VARIANT_NAME_1).size()); From 0777d9c6a92d28bd5aadb16c7c302ff4222a8b56 Mon Sep 17 00:00:00 2001 From: dbraquart <107846716+dbraquart@users.noreply.github.com> Date: Tue, 28 Nov 2023 09:43:25 +0100 Subject: [PATCH 5/5] fix issue about subreporter uniqueness (#384) Signed-off-by: David BRAQUART --- .../gridsuite/modification/server/dto/LineCreationInfos.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 28307c5cb..704495c99 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/LineCreationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/LineCreationInfos.java @@ -58,6 +58,6 @@ public AbstractModification toModification() { @Override public Reporter createSubReporter(ReporterModel reporter) { - return reporter.createSubReporter(getType().name(), "Creation of line " + getEquipmentId()); + return reporter.createSubReporter(getType().name(), "Creation of line ${lineId}", "lineId", getEquipmentId()); } }