diff --git a/pom.xml b/pom.xml index 229d6770a..ec108e017 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ gridsuite org.gridsuite:network-modification-server - 0.28.0 + 0.29.0 2.14.1 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 6bc79aac0..9d8cf0b7e 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 @@ -71,16 +71,9 @@ public class BranchCreationEntity extends EquipmentCreationEntity { @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinTable( joinColumns = @JoinColumn(name = "branch_id"), foreignKey = @ForeignKey(name = "branch_id_fk"), - inverseJoinColumns = @JoinColumn(name = "operational_limits_groups_id"), inverseForeignKey = @ForeignKey(name = "operational_limits_groups_id1_fk")) + inverseJoinColumns = @JoinColumn(name = "operational_limits_groups_id"), inverseForeignKey = @ForeignKey(name = "operational_limits_groups_id_fk")) @OrderColumn(name = "pos_operationalLimitsGroups") - private List operationalLimitsGroups1; - - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) - @JoinTable( - joinColumns = @JoinColumn(name = "branch_id"), foreignKey = @ForeignKey(name = "branch_id_fk"), - inverseJoinColumns = @JoinColumn(name = "operational_limits_groups_id"), inverseForeignKey = @ForeignKey(name = "operational_limits_groups_id2_fk")) - @OrderColumn(name = "pos_operationalLimitsGroups") - private List operationalLimitsGroups2; + private List operationalLimitsGroups; @Column(name = "selectedOperationalLimitsGroupId1") private String selectedOperationalLimitsGroupId1; @@ -107,8 +100,7 @@ private void assignAttributes(BranchCreationInfos branchCreationInfos) { voltageLevelId2 = branchCreationInfos.getVoltageLevelId2(); busOrBusbarSectionId1 = branchCreationInfos.getBusOrBusbarSectionId1(); busOrBusbarSectionId2 = branchCreationInfos.getBusOrBusbarSectionId2(); - operationalLimitsGroups1 = assignOperationalLimitsGroups(branchCreationInfos.getOperationalLimitsGroups1(), operationalLimitsGroups1); - operationalLimitsGroups2 = assignOperationalLimitsGroups(branchCreationInfos.getOperationalLimitsGroups2(), operationalLimitsGroups2); + operationalLimitsGroups = assignOperationalLimitsGroups(branchCreationInfos.getOperationalLimitsGroups(), operationalLimitsGroups); connectionDirection1 = branchCreationInfos.getConnectionDirection1(); connectionName1 = branchCreationInfos.getConnectionName1(); connectionDirection2 = branchCreationInfos.getConnectionDirection2(); 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 c0abdf2be..122e7221b 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 @@ -97,8 +97,7 @@ public LineCreationInfos toModificationInfos() { getProperties().stream() .map(FreePropertyEntity::toInfos) .toList()) - .operationalLimitsGroups1(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups1())) - .operationalLimitsGroups2(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups2())); + .operationalLimitsGroups(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups())); return builder; } diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/OperationalLimitsGroupEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/OperationalLimitsGroupEntity.java index 8230165f7..90f9ea594 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/OperationalLimitsGroupEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/OperationalLimitsGroupEntity.java @@ -34,6 +34,10 @@ public class OperationalLimitsGroupEntity { @Column(name = "id") private String id; + @Column(name = "applicability") + @Enumerated(EnumType.STRING) + private OperationalLimitsGroupInfos.Applicability applicability; + @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) @JoinColumn(name = "current_limits_id", referencedColumnName = "id", @@ -49,6 +53,7 @@ public static List toOperationalLimitsGroupsEntiti new OperationalLimitsGroupEntity( null, limitsGroup.getId(), + limitsGroup.getApplicability(), new CurrentLimitsEntity(limitsGroup.getCurrentLimits()) ) ) @@ -61,6 +66,7 @@ public static List fromOperationalLimitsGroupsEntit .map(limitsGroupEntity -> OperationalLimitsGroupInfos.builder() .id(limitsGroupEntity.getId()) + .applicability(limitsGroupEntity.getApplicability()) .currentLimits(limitsGroupEntity.getCurrentLimits().toCurrentLimitsInfos()) .build() ) 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 d2d99bab8..8a50f88b9 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 @@ -211,8 +211,7 @@ public TwoWindingsTransformerCreationInfos toModificationInfos() { getProperties().stream() .map(FreePropertyEntity::toInfos) .toList()) - .operationalLimitsGroups1(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups1())) - .operationalLimitsGroups2(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups2())); + .operationalLimitsGroups(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups())); if (!ratioTapChangerSteps.isEmpty()) { List ratioTapChangerStepCreationInfos = ratioTapChangerSteps.stream().map(TapChangerStepCreationEmbeddable::toModificationInfos).collect(Collectors.toList()); diff --git a/src/main/java/org/gridsuite/modification/server/migration/MergeLimitSetsGroupsTables.java b/src/main/java/org/gridsuite/modification/server/migration/MergeLimitSetsGroupsTables.java new file mode 100644 index 000000000..dfa415070 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/migration/MergeLimitSetsGroupsTables.java @@ -0,0 +1,231 @@ +package org.gridsuite.modification.server.migration; + +import liquibase.change.custom.CustomSqlChange; +import liquibase.database.Database; +import liquibase.database.jvm.JdbcConnection; +import liquibase.exception.CustomChangeException; +import liquibase.exception.DatabaseException; +import liquibase.exception.SetupException; +import liquibase.exception.ValidationErrors; +import liquibase.resource.ResourceAccessor; +import liquibase.statement.SqlStatement; +import liquibase.statement.core.DeleteStatement; +import liquibase.statement.core.InsertStatement; +import liquibase.statement.core.UpdateStatement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class MergeLimitSetsGroupsTables implements CustomSqlChange { + + private static final Logger LOGGER = LoggerFactory.getLogger(MergeLimitSetsGroupsTables.class); + private static final String UUID_COL = "uuid"; + private static final String ID_COL = "id"; + private static final String OPERATIONAL_LG_ID_COL = "operational_limits_groups_id"; + private static final String CURRENT_LIMITS_ID_COL = "current_limits_id"; + private static final String POS_OP_LG_COL = "pos_operational_limits_groups"; + private static final String OPERATIONAL_LIMITS_GROUPS_TABLE = "operational_limits_group"; + private static final String BRANCH_ID_COL = "branch_id"; + + private String createQueryLineOpLimitsGroups(String id, String tableName) { + return "select * from " + tableName + " where branch_id = '" + id + "'"; + } + + private String createQueryLineOpLimitsGroupsWithPos(String tableName, String id, String pos) { + return "select * from " + tableName + " where branch_id = '" + id + "' and pos_operational_limits_groups = " + pos; + } + + private int getLength(ResultSet resultSet) throws SQLException { + resultSet.last(); + int length = resultSet.getRow(); + resultSet.beforeFirst(); + return length; + } + + private boolean compareOperationalLimitsInfos(JdbcConnection connection, String operationalLimitsIds1, String operationalLimitsIds2) throws DatabaseException, SQLException { + final String query = "select current_limits_id from operational_limits_group where uuid =''"; + ResultSet currentLimits1 = connection.createStatement().executeQuery(query.replace("", operationalLimitsIds1)); + ResultSet currentLimits2 = connection.createStatement().executeQuery(query.replace("", operationalLimitsIds2)); + + if (currentLimits1.next() && currentLimits2.next()) { + String currentLimitsQuery = "select permanent_limit from current_limits where id = ''"; + String currentLimitsId1 = currentLimits1.getString(CURRENT_LIMITS_ID_COL); + String currentLimitsId2 = currentLimits2.getString(CURRENT_LIMITS_ID_COL); + ResultSet permanentLimit = connection.createStatement().executeQuery(currentLimitsQuery.replace("", currentLimitsId1)); + ResultSet permanentLimit2 = connection.createStatement().executeQuery(currentLimitsQuery.replace("", currentLimitsId2)); + + boolean haspermanentLimit = permanentLimit.next(); + boolean haspermanentLimit2 = permanentLimit2.next(); + if (haspermanentLimit != haspermanentLimit2) { + return false; + } + if (haspermanentLimit && !Objects.equals(permanentLimit.getString("permanent_limit"), + permanentLimit2.getString("permanent_limit"))) { + return false; + } + + final String queryTemporary = "select * from current_temporary_limits where id =''"; + Statement statement1 = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + Statement statement2 = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); + ResultSet temporaryLimit = statement1.executeQuery(queryTemporary.replace("", currentLimitsId1)); + ResultSet temporaryLimit2 = statement2.executeQuery(queryTemporary.replace("", currentLimitsId2)); + if (getLength(temporaryLimit) != getLength(temporaryLimit2)) { + return false; + } + + while (temporaryLimit.next()) { + String name = temporaryLimit.getString("name"); + boolean found = false; + temporaryLimit2.beforeFirst(); + while (temporaryLimit2.next()) { + if (Objects.equals(temporaryLimit2.getString("name"), name)) { + if (!Objects.equals(temporaryLimit.getString("value_"), temporaryLimit2.getString("value_")) || + !Objects.equals(temporaryLimit.getString("acceptable_duration"), temporaryLimit2.getString("acceptable_duration"))) { + return false; + } + found = true; + break; + } + } + // temporary limit not found + if (!found) { + return false; + } + } + } + + return true; + } + + private void addOperationalLimitsGroupApplicability(Database database, ResultSet operationalLimitsGroups, + List statements, String applicability) throws SQLException { + + if (operationalLimitsGroups.next()) { + statements.add(new UpdateStatement(database.getDefaultCatalogName(), database.getDefaultSchemaName(), OPERATIONAL_LIMITS_GROUPS_TABLE) + .setWhereClause(UUID_COL + " = '" + operationalLimitsGroups.getString(UUID_COL) + "'") + .addNewColumnValue("applicability", applicability)); + } + } + + @Override + public SqlStatement[] generateStatements(Database database) throws CustomChangeException { + JdbcConnection connection = (JdbcConnection) database.getConnection(); + + List statements = new ArrayList<>(); + + try { + for (int i = 0; i < 2; i++) { + // Define tables names ( i= 0 => lines, i=1 => twoWindingsTransformers) + final String branchCreationTable = i == 0 ? "line_creation" : "two_windings_transformer_creation"; + final String branchCreationOpLimitsGroups1Table = i == 0 ? "line_creation_operational_limits_groups1" + : "two_windings_transformer_creation_operational_limits_groups1"; + final String branchCreationOpLimitsGroups2Table = i == 0 ? "line_creation_operational_limits_groups2" + : "two_windings_transformer_creation_operational_limits_groups2"; + final String branchCreationOpLimitsGroupsTable = i == 0 ? "line_creation_operational_limits_groups" + : "two_windings_transformer_creation_operational_limits_groups"; + + String branchesToProcess = "Select id, selected_operational_limits_group_id1, selected_operational_limits_group_id2 from "; + try (ResultSet branches = connection.createStatement().executeQuery(branchesToProcess.replace("
", branchCreationTable))) { + while (branches.next()) { + int position = 0; + //get operational limits groups1 + ResultSet branchCreationOpLimitsGroups1 = connection.createStatement() + .executeQuery(createQueryLineOpLimitsGroups(branches.getString(ID_COL), branchCreationOpLimitsGroups1Table)); + + while (branchCreationOpLimitsGroups1.next()) { + String branchCreationOpLimitsGroup1Id = branchCreationOpLimitsGroups1.getString(OPERATIONAL_LG_ID_COL); + String branchCreationOpLimitsGroup1Pos = branchCreationOpLimitsGroups1.getString(POS_OP_LG_COL); + + ResultSet branchCreationOpLimitsGroups2 = connection.createStatement() + .executeQuery(createQueryLineOpLimitsGroupsWithPos(branchCreationOpLimitsGroups2Table, branches.getString(ID_COL), + branchCreationOpLimitsGroup1Pos)); + + branchCreationOpLimitsGroups2.next(); + String branchCreationOpLimitsGroup2Id = branchCreationOpLimitsGroups2.getString(OPERATIONAL_LG_ID_COL); + + // Compare Both limitsGroups 1 and 2 limits + String query = "select * from operational_limits_group where uuid = ''"; + ResultSet operationalLimitsGroups1 = connection.createStatement().executeQuery(query.replace("", branchCreationOpLimitsGroup1Id)); + + if (compareOperationalLimitsInfos(connection, branchCreationOpLimitsGroup1Id, branchCreationOpLimitsGroup2Id)) { + String query2 = "select current_limits_id from operational_limits_group where uuid = ''"; + ResultSet operationalLimitsGroups2 = connection.createStatement().executeQuery(query2.replace("", branchCreationOpLimitsGroup2Id)); + + // - remove line from operational_limits_group + // - remove related permanent limit from current_limits + // - remove all other related limits from current_temporary_limits + if (operationalLimitsGroups2.next()) { + statements.add(new DeleteStatement(database.getDefaultCatalogName(), database.getDefaultSchemaName(), OPERATIONAL_LIMITS_GROUPS_TABLE) + .setWhere(UUID_COL + " = '" + branchCreationOpLimitsGroup2Id + "'")); + String currentLimitId = operationalLimitsGroups2.getString(CURRENT_LIMITS_ID_COL); + statements.add(new DeleteStatement(database.getDefaultCatalogName(), database.getDefaultSchemaName(), "current_temporary_limits") + .setWhere(ID_COL + " = '" + currentLimitId + "'")); + statements.add(new DeleteStatement(database.getDefaultCatalogName(), database.getDefaultSchemaName(), "current_limits") + .setWhere(ID_COL + " = '" + currentLimitId + "'")); + } + + addOperationalLimitsGroupApplicability(database, operationalLimitsGroups1, statements, "EQUIPMENT"); + + // if they are equal then add only one limitGroup in new Table with application side = equipment (both) + statements.add(new InsertStatement(database.getDefaultCatalogName(), database.getDefaultSchemaName(), branchCreationOpLimitsGroupsTable) + .addColumnValue(BRANCH_ID_COL, branches.getString(ID_COL)) + .addColumnValue(OPERATIONAL_LG_ID_COL, branchCreationOpLimitsGroup1Id) + .addColumnValue(POS_OP_LG_COL, position++)); + } else { + // change Applicability side 1 + addOperationalLimitsGroupApplicability(database, operationalLimitsGroups1, statements, "SIDE1"); + + // Add to merged table + statements.add(new InsertStatement(database.getDefaultCatalogName(), database.getDefaultSchemaName(), branchCreationOpLimitsGroupsTable) + .addColumnValue(BRANCH_ID_COL, branches.getString(ID_COL)) + .addColumnValue(OPERATIONAL_LG_ID_COL, branchCreationOpLimitsGroup1Id) + .addColumnValue(POS_OP_LG_COL, position++)); + + // Change Applicability side 2 + String query3 = "select * from operational_limits_group where uuid = ''"; + ResultSet operationalLimitsGroups2 = connection.createStatement().executeQuery(query3.replace("", branchCreationOpLimitsGroup2Id)); + addOperationalLimitsGroupApplicability(database, operationalLimitsGroups2, statements, "SIDE2"); + + // Add to merged table + statements.add(new InsertStatement(database.getDefaultCatalogName(), database.getDefaultSchemaName(), branchCreationOpLimitsGroupsTable) + .addColumnValue(BRANCH_ID_COL, branches.getString(ID_COL)) + .addColumnValue(OPERATIONAL_LG_ID_COL, branchCreationOpLimitsGroup2Id) + .addColumnValue(POS_OP_LG_COL, position++)); + } + } + } + } + } + } catch (Exception throwables) { + LOGGER.error(throwables.getMessage()); + return new SqlStatement[0]; // If any exception occurs don't do any migration + } + return statements.toArray(new SqlStatement[0]); + } + + @Override + public String getConfirmationMessage() { + return "tables line_creation_operational_limits_group1 and 2, merged successfully into line_creation_operational_limits_group"; + } + + @Override + public void setUp() throws SetupException { + + } + + @Override + public void setFileOpener(ResourceAccessor resourceAccessor) { + + } + + @Override + public ValidationErrors validate(Database database) { + return null; + } +} diff --git a/src/main/resources/db/changelog/changesets/changelog_20250710T153644Z.xml b/src/main/resources/db/changelog/changesets/changelog_20250710T153644Z.xml new file mode 100644 index 000000000..f1d3e198e --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20250710T153644Z.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index aa16b48ff..2487a931d 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -378,6 +378,9 @@ databaseChangeLog: - include: file: changesets/changelog_20250722T125427Z.xml relativeToChangelogFile: true + - include: + file: changesets/changelog_20250710T153644Z.xml + relativeToChangelogFile: true - include: file: changesets/changelog_20250723T155748Z.xml relativeToChangelogFile: true diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index b357ca3a3..7b5433b65 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -58,6 +58,7 @@ import static org.gridsuite.modification.ModificationType.EQUIPMENT_ATTRIBUTE_MODIFICATION; import static org.gridsuite.modification.NetworkModificationException.Type.*; +import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.NetworkModificationServerException.Type.DUPLICATION_ARGUMENT_INVALID; import static org.gridsuite.modification.server.elasticsearch.EquipmentInfosService.TYPES_FOR_INDEXING; import static org.gridsuite.modification.server.impacts.TestImpactUtils.*; @@ -1002,14 +1003,10 @@ void testDuplicateModificationGroup() throws Exception { .busOrBusbarSectionId1("bus1") .voltageLevelId2("v2") .busOrBusbarSectionId2("bus2") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( - OperationalLimitsGroupInfos.builder().currentLimits(c1).build() - ) - ) - .operationalLimitsGroups2( - List.of( - OperationalLimitsGroupInfos.builder().currentLimits(c2).build() + OperationalLimitsGroupInfos.builder().currentLimits(c1).applicability(SIDE1).build(), + OperationalLimitsGroupInfos.builder().currentLimits(c2).applicability(SIDE2).build() ) ) .build(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java index f59bf6bd3..49253cb29 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInBusBreakerTest.java @@ -21,6 +21,7 @@ import java.util.UUID; import static org.gridsuite.modification.NetworkModificationException.Type.BUS_NOT_FOUND; +import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; @@ -110,13 +111,13 @@ void testCreateLineOptionalParameters3() throws Exception { .busOrBusbarSectionId1("bus1") .voltageLevelId2("v2") .busOrBusbarSectionId2("bus2") - .operationalLimitsGroups2( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder() .currentLimits( CurrentLimitsInfos.builder().permanentLimit(1.0).temporaryLimits(Collections.emptyList()).build() ) - .id("limitSet1") + .id("limitSet1").applicability(SIDE2) .build() ) ) @@ -144,21 +145,19 @@ void testCreateLineOptionalParameters4() throws Exception { .busOrBusbarSectionId1("bus1") .voltageLevelId2("v2") .busOrBusbarSectionId2("bus2") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(5.0).temporaryLimits(Collections.emptyList()).build() - ).build() + ).applicability(SIDE1).build() ) ) - .operationalLimitsGroups2(null) .build(); String lineCreationInfosPermanentLimitOKJson = getJsonBody(lineCreationInfosPermanentLimitOK, null); mockMvc.perform(post(getNetworkModificationUri()).content(lineCreationInfosPermanentLimitOKJson).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()).andReturn(); - lineCreationInfosPermanentLimitOK.setOperationalLimitsGroups2(null); // if permanentLimit is null then no currentLimit created LineCreationInfos createdModification = (LineCreationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); assertThat(createdModification).recursivelyEquals(lineCreationInfosPermanentLimitOK); @@ -177,12 +176,12 @@ void testCreateLineOptionalParameters5() throws Exception { .busOrBusbarSectionId1("bus1") .voltageLevelId2("v2") .busOrBusbarSectionId2("bus2") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder() .currentLimits( CurrentLimitsInfos.builder().permanentLimit(-1.0).build()) - .build() + .applicability(SIDE1).build() ) ) .build(); @@ -204,11 +203,11 @@ void testCreateLineOptionalParameters6() throws Exception { .busOrBusbarSectionId1("bus1") .voltageLevelId2("v2") .busOrBusbarSectionId2("bus2") - .operationalLimitsGroups2( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(1.0).build()) - .build() + .applicability(SIDE2).build() ) ) .build(); @@ -240,18 +239,14 @@ protected ModificationInfos buildModification() { .b2(20.0) .voltageLevelId1("v1") .busOrBusbarSectionId1("bus1") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(5.).temporaryLimits(Collections.emptyList()).build()) - .build() - ) - ) - .operationalLimitsGroups2( - List.of( + .applicability(SIDE1).build(), OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(5.).temporaryLimits(Collections.emptyList()).build()) - .build() + .applicability(SIDE2).build() ) ) .voltageLevelId2("v2") 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 d4872349b..f6c645256 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java @@ -21,6 +21,7 @@ import java.util.*; import static org.gridsuite.modification.NetworkModificationException.Type.*; +import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -114,18 +115,14 @@ void testCreateLineWithOnlyPermanentCurrentLimits() throws Exception { .busOrBusbarSectionId1("1A") .voltageLevelId2("v1") .busOrBusbarSectionId2("1.1") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(5.).build() - ).build() - ) - ) - .operationalLimitsGroups2( - List.of( + ).applicability(SIDE1).build(), OperationalLimitsGroupInfos.builder().currentLimits( - CurrentLimitsInfos.builder().permanentLimit(6.).build() - ).build() + CurrentLimitsInfos.builder().permanentLimit(6.).build() + ).applicability(SIDE2).build() ) ) .connectionName1("cn1LineEdited") @@ -141,11 +138,10 @@ void testCreateLineWithOnlyPermanentCurrentLimits() throws Exception { .andExpect(status().isOk()).andReturn(); LineCreationInfos createdModification = (LineCreationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); - assertEquals(5., createdModification.getOperationalLimitsGroups1().get(0).getCurrentLimits().getPermanentLimit(), 0.); - assertEquals(6., createdModification.getOperationalLimitsGroups2().get(0).getCurrentLimits().getPermanentLimit(), 0.); - assertTrue(createdModification.getOperationalLimitsGroups1().get(0).getCurrentLimits().getTemporaryLimits().isEmpty()); - assertTrue(createdModification.getOperationalLimitsGroups2().get(0).getCurrentLimits().getTemporaryLimits().isEmpty()); - + assertEquals(5., createdModification.getOperationalLimitsGroups().get(0).getCurrentLimits().getPermanentLimit(), 0.); + assertEquals(6., createdModification.getOperationalLimitsGroups().get(1).getCurrentLimits().getPermanentLimit(), 0.); + assertTrue(createdModification.getOperationalLimitsGroups().get(0).getCurrentLimits().getTemporaryLimits().isEmpty()); + assertTrue(createdModification.getOperationalLimitsGroups().get(1).getCurrentLimits().getTemporaryLimits().isEmpty()); testNetworkModificationsCount(getGroupId(), 1); } @@ -164,25 +160,21 @@ void testCreateLineWithOnlyTemporaryCurrentLimits() throws Exception { .busOrBusbarSectionId1("1A") .voltageLevelId2("v1") .busOrBusbarSectionId2("1.1") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder() .temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").value(200.0).acceptableDuration(600).build())) .build() - ).build() - ) - ) - .operationalLimitsGroups2( - List.of( + ).applicability(SIDE1).build(), OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder() .temporaryLimits(List.of( CurrentTemporaryLimitCreationInfos.builder().name("IT10").value(200.0).acceptableDuration(600).build(), CurrentTemporaryLimitCreationInfos.builder().name("IT20").value(100.0).acceptableDuration(1200).build())) .build() - ).build() - ) + ).applicability(SIDE2).build() + ) ) .connectionName1("cn1LineEdited") .connectionDirection1(ConnectablePosition.Direction.BOTTOM) @@ -197,10 +189,10 @@ void testCreateLineWithOnlyTemporaryCurrentLimits() throws Exception { .andExpect(status().isOk()).andReturn(); LineCreationInfos createdModification = (LineCreationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); - assertNull(createdModification.getOperationalLimitsGroups1().get(0).getCurrentLimits().getPermanentLimit()); - assertNull(createdModification.getOperationalLimitsGroups2().get(0).getCurrentLimits().getPermanentLimit()); - assertEquals(1, createdModification.getOperationalLimitsGroups1().get(0).getCurrentLimits().getTemporaryLimits().size()); - assertEquals(2, createdModification.getOperationalLimitsGroups2().get(0).getCurrentLimits().getTemporaryLimits().size()); + assertNull(createdModification.getOperationalLimitsGroups().get(0).getCurrentLimits().getPermanentLimit()); + assertNull(createdModification.getOperationalLimitsGroups().get(1).getCurrentLimits().getPermanentLimit()); + assertEquals(1, createdModification.getOperationalLimitsGroups().get(0).getCurrentLimits().getTemporaryLimits().size()); + assertEquals(2, createdModification.getOperationalLimitsGroups().get(1).getCurrentLimits().getTemporaryLimits().size()); testNetworkModificationsCount(getGroupId(), 1); } @@ -220,24 +212,20 @@ void testCreateLineWithBothCurrentLimits() throws Exception { .busOrBusbarSectionId1("1A") .voltageLevelId2("v1") .busOrBusbarSectionId2("1.1") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder() .permanentLimit(200.) .temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").value(200.0).acceptableDuration(600).build())) .build() - ).build() - ) - ) - .operationalLimitsGroups2( - List.of( + ).applicability(SIDE1).build(), OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder() .permanentLimit(100.) .temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT20").value(600.0).acceptableDuration(1200).build())) - .build() - ).build() + .build() + ).applicability(SIDE2).build() ) ) .connectionName1("cn1LineEdited") @@ -256,15 +244,15 @@ void testCreateLineWithBothCurrentLimits() throws Exception { .andExpect(status().isOk()).andReturn(); LineCreationInfos createdModification = (LineCreationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); - assertEquals(200., createdModification.getOperationalLimitsGroups1().get(0).getCurrentLimits().getPermanentLimit(), 0.); - assertEquals(100., createdModification.getOperationalLimitsGroups2().get(0).getCurrentLimits().getPermanentLimit(), 0.); - assertEquals(1, createdModification.getOperationalLimitsGroups1().get(0).getCurrentLimits().getTemporaryLimits().size()); - assertEquals(1, createdModification.getOperationalLimitsGroups2().get(0).getCurrentLimits().getTemporaryLimits().size()); + assertEquals(200., createdModification.getOperationalLimitsGroups().get(0).getCurrentLimits().getPermanentLimit(), 0.); + assertEquals(100., createdModification.getOperationalLimitsGroups().get(1).getCurrentLimits().getPermanentLimit(), 0.); + assertEquals(1, createdModification.getOperationalLimitsGroups().get(0).getCurrentLimits().getTemporaryLimits().size()); + assertEquals(1, createdModification.getOperationalLimitsGroups().get(1).getCurrentLimits().getTemporaryLimits().size()); 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, activated=true), equipmentId=idLineEdited, properties=null), equipmentName=nameLineEdited), r=110.0, x=110.0, voltageLevelId1=v2, voltageLevelId2=v1, busOrBusbarSectionId1=1A, busOrBusbarSectionId2=1.1, operationalLimitsGroups1=[OperationalLimitsGroupInfos(id=null, currentLimits=CurrentLimitsInfos(permanentLimit=200.0, temporaryLimits=[CurrentTemporaryLimitCreationInfos(name=IT10, value=200.0, acceptableDuration=600)]))], operationalLimitsGroups2=[OperationalLimitsGroupInfos(id=null, currentLimits=CurrentLimitsInfos(permanentLimit=100.0, temporaryLimits=[CurrentTemporaryLimitCreationInfos(name=IT20, value=600.0, acceptableDuration=1200)]))], selectedOperationalLimitsGroup1=null, selectedOperationalLimitsGroup2=null, connectionName1=cn1LineEdited, connectionDirection1=BOTTOM, connectionName2=cn2LineEdited, connectionDirection2=TOP, connectionPosition1=0, connectionPosition2=0, connected1=true, connected2=false), g1=15.0, b1=15.0, g2=25.0, b2=25.0)", + "LineCreationInfos(super=BranchCreationInfos(super=EquipmentCreationInfos(super=EquipmentModificationInfos(super=ModificationInfos(uuid=null, type=LINE_CREATION, date=null, stashed=false, messageType=null, messageValues=null, activated=true), equipmentId=idLineEdited, properties=null), equipmentName=nameLineEdited), r=110.0, x=110.0, voltageLevelId1=v2, voltageLevelId2=v1, busOrBusbarSectionId1=1A, busOrBusbarSectionId2=1.1, operationalLimitsGroups=[OperationalLimitsGroupInfos(id=null, currentLimits=CurrentLimitsInfos(permanentLimit=200.0, temporaryLimits=[CurrentTemporaryLimitCreationInfos(name=IT10, value=200.0, acceptableDuration=600)]), applicability=SIDE1), OperationalLimitsGroupInfos(id=null, currentLimits=CurrentLimitsInfos(permanentLimit=100.0, temporaryLimits=[CurrentTemporaryLimitCreationInfos(name=IT20, value=600.0, acceptableDuration=1200)]), applicability=SIDE2)], selectedOperationalLimitsGroup1=null, selectedOperationalLimitsGroup2=null, connectionName1=cn1LineEdited, connectionDirection1=BOTTOM, connectionName2=cn2LineEdited, connectionDirection2=TOP, connectionPosition1=0, connectionPosition2=0, connected1=true, connected2=false), g1=15.0, b1=15.0, g2=25.0, b2=25.0)", lineCreation.toString() ); } @@ -316,18 +304,14 @@ protected ModificationInfos buildModificationUpdate() { .busOrBusbarSectionId1("1A") .voltageLevelId2("v1") .busOrBusbarSectionId2("1.1") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(5.).temporaryLimits(Collections.emptyList()).build() - ).build() - ) - ) - .operationalLimitsGroups2( - List.of( + ).applicability(SIDE1).build(), OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(5.).temporaryLimits(Collections.emptyList()).build() - ).build() + ).applicability(SIDE2).build() ) ) .connectionName1("cn1LineEdited") 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 1670f703b..b01a81c8d 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java @@ -24,6 +24,7 @@ import java.util.UUID; import static org.gridsuite.modification.NetworkModificationException.Type.BUS_NOT_FOUND; +import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.impacts.TestImpactUtils.testBranchCreationImpacts; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; @@ -60,18 +61,14 @@ protected ModificationInfos buildModification() { .voltageLevelId2("v12") .busOrBusbarSectionId2("bus12") .connected2(true) - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(3.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(98647).value(45.).build())).build() - ).build() - ) - ) - .operationalLimitsGroups2( - List.of( + ).applicability(SIDE1).build(), OperationalLimitsGroupInfos.builder().currentLimits( - CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build() - ).build() + CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build() + ).applicability(SIDE2).build() ) ) .connectionName1("cn201") @@ -180,18 +177,15 @@ protected ModificationInfos buildModificationUpdate() { .busOrBusbarSectionId1("bus1") .voltageLevelId2("v2") .busOrBusbarSectionId2("bus3") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( - OperationalLimitsGroupInfos.builder().currentLimits( - CurrentLimitsInfos.builder().permanentLimit(3.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(98647).value(45.).build())).build() - ).build() - ) - ) - .operationalLimitsGroups2( - List.of( - OperationalLimitsGroupInfos.builder().currentLimits( - CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build() - ).build() + OperationalLimitsGroupInfos.builder().currentLimits(CurrentLimitsInfos.builder() + .permanentLimit(3.) + .temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(98647).value(45.).build())).build() + ).applicability(SIDE1).build(), + OperationalLimitsGroupInfos.builder().currentLimits(CurrentLimitsInfos.builder() + .permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build() + ).applicability(SIDE2).build() ) ) .connectionName1("cn2012") 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 4f70286a7..ac619a863 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationMixedBreakerTest.java @@ -21,6 +21,7 @@ import java.util.Map; import java.util.UUID; +import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; @@ -162,22 +163,20 @@ protected ModificationInfos buildModificationUpdate() { .busOrBusbarSectionId1("bus1") .voltageLevelId2("v2") .busOrBusbarSectionId2("bus3") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder() .currentLimits(CurrentLimitsInfos.builder() .permanentLimit(3.) .temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(98647).value(45.).build())) .build() - ).build() - ) - ) - .operationalLimitsGroups2( - List.of( + ).applicability(SIDE1).build(), OperationalLimitsGroupInfos.builder() - .currentLimits( - CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build() - ).build() + .currentLimits(CurrentLimitsInfos.builder() + .permanentLimit(2.) + .temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())) + .build() + ).applicability(SIDE2).build() ) ) .connectionName1("cn2012") 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 a5aa87997..9750f636e 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java @@ -26,6 +26,7 @@ import java.util.UUID; import static org.gridsuite.modification.NetworkModificationException.Type.TWO_WINDINGS_TRANSFORMER_ALREADY_EXISTS; +import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.impacts.TestImpactUtils.testBranchCreationImpacts; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; @@ -62,21 +63,17 @@ protected ModificationInfos buildModification() { .voltageLevelId2("v2") .busOrBusbarSectionId2("1A") .connected2(true) - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(3.).temporaryLimits(List.of( CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(2147483647).value(671.).build() ) ).build() - ).build() - ) - ) - .operationalLimitsGroups2( - List.of( + ).applicability(SIDE1).build(), OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build() - ).build() + ).applicability(SIDE2).build() ) ) .connectionName1("cn201") @@ -187,18 +184,14 @@ protected ModificationInfos buildModificationUpdate() { .busOrBusbarSectionId1("1.1") .voltageLevelId2("v2") .busOrBusbarSectionId2("1A") - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(3.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT5").acceptableDuration(98647).value(45.).build())).build() - ).build() - ) - ) - .operationalLimitsGroups2( - List.of( + ).applicability(SIDE1).build(), OperationalLimitsGroupInfos.builder().currentLimits( - CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build() - ).build() + CurrentLimitsInfos.builder().permanentLimit(2.).temporaryLimits(List.of(CurrentTemporaryLimitCreationInfos.builder().name("IT10").acceptableDuration(683647).value(791.).build())).build() + ).applicability(SIDE2).build() ) ) .connectionName1("cn2012") @@ -371,7 +364,7 @@ void testCreateTwoWindingsTransformerWithRatioTapChangerInNodeBreaker() throws E 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, activated=true), equipmentId=id2wt1WithRatioTapChanger2, properties=null), equipmentName=2wtName), r=400.0, x=300.0, voltageLevelId1=v1, voltageLevelId2=v4, busOrBusbarSectionId1=1.1, busOrBusbarSectionId2=1.A, operationalLimitsGroups1=null, operationalLimitsGroups2=null, selectedOperationalLimitsGroup1=null, selectedOperationalLimitsGroup2=null, connectionName1=null, connectionDirection1=TOP, connectionName2=null, connectionDirection2=TOP, connectionPosition1=null, connectionPosition2=null, connected1=true, connected2=true), g=100.0, b=200.0, ratedU1=1000.0, ratedU2=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, activated=true), equipmentId=id2wt1WithRatioTapChanger2, properties=null), equipmentName=2wtName), r=400.0, x=300.0, voltageLevelId1=v1, voltageLevelId2=v4, busOrBusbarSectionId1=1.1, busOrBusbarSectionId2=1.A, operationalLimitsGroups=null, selectedOperationalLimitsGroup1=null, selectedOperationalLimitsGroup2=null, connectionName1=null, connectionDirection1=TOP, connectionName2=null, connectionDirection2=TOP, connectionPosition1=null, connectionPosition2=null, connected1=true, connected2=true), g=100.0, b=200.0, ratedU1=1000.0, ratedU2=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() ); 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 a71458102..3df4d22ff 100644 --- a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java @@ -66,6 +66,7 @@ import java.util.concurrent.*; import static com.powsybl.iidm.network.ReactiveLimitsKind.MIN_MAX; +import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.server.impacts.TestImpactUtils.*; import static org.gridsuite.modification.server.service.BuildWorkerService.CANCEL_MESSAGE; import static org.junit.jupiter.api.Assertions.*; @@ -537,7 +538,7 @@ void runBuildTest(final MockWebServer server) throws Exception { .connectionPosition(0) .terminalConnected(true) .build())); - entities2.add(ModificationEntity.fromDTO(LineCreationInfos.builder().equipmentId("newLine").equipmentName("newLine").r(1.0).x(2.0).g1(3.0).b1(4.0).g2(5.0).b2(6.0).voltageLevelId1("v1").busOrBusbarSectionId1("1.1").voltageLevelId2("v2").busOrBusbarSectionId2("1B").operationalLimitsGroups1(null).operationalLimitsGroups2(null).connectionName1("cn101").connectionDirection1(ConnectablePosition.Direction.TOP).connectionName2("cn102").connectionDirection2(ConnectablePosition.Direction.TOP).connected1(true).connected2(true).build())); + entities2.add(ModificationEntity.fromDTO(LineCreationInfos.builder().equipmentId("newLine").equipmentName("newLine").r(1.0).x(2.0).g1(3.0).b1(4.0).g2(5.0).b2(6.0).voltageLevelId1("v1").busOrBusbarSectionId1("1.1").voltageLevelId2("v2").busOrBusbarSectionId2("1B").operationalLimitsGroups(null).connectionName1("cn101").connectionDirection1(ConnectablePosition.Direction.TOP).connectionName2("cn102").connectionDirection2(ConnectablePosition.Direction.TOP).connected1(true).connected2(true).build())); List tapChangerStepCreationEmbeddables = new ArrayList<>(); tapChangerStepCreationEmbeddables.add(new TapChangerStepCreationEmbeddable(TapChangerType.PHASE, 1, 1, 0, 0, 0, 0, 0.)); @@ -593,18 +594,14 @@ void runBuildTest(final MockWebServer server) throws Exception { .voltageLevelId2("v2") .busOrBusbarSectionId2("1A") .connected2(true) - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( - CurrentLimitsInfos.builder().permanentLimit(3.).build()) - .build() - ) - ) - .operationalLimitsGroups2( - List.of( + CurrentLimitsInfos.builder().permanentLimit(3.).build()).applicability(SIDE1) + .build(), OperationalLimitsGroupInfos.builder().currentLimits( - CurrentLimitsInfos.builder().permanentLimit(2.).build()) - .build() + CurrentLimitsInfos.builder().permanentLimit(2.).build()).applicability(SIDE2) + .build() ) ) .connectionName1("cn201") 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 e8ba353d5..4a3ddb6be 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java @@ -34,6 +34,7 @@ import static com.powsybl.iidm.network.StaticVarCompensator.RegulationMode.VOLTAGE; import static org.gridsuite.modification.NetworkModificationException.Type.*; +import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; import static org.gridsuite.modification.dto.VoltageRegulationType.DISTANT; import static org.gridsuite.modification.server.utils.TestUtils.assertRequestsCount; import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; @@ -404,42 +405,46 @@ void testShuntCompensatorCreation() { void testLineCreation() { var createLineEntity1 = ModificationEntity.fromDTO(LineCreationInfos.builder().equipmentId("idLine1").equipmentName("nameLine1").r(1.0).x(1.1).g1(10.0).b1(11.0).g2(100.0).b2(100.1).voltageLevelId1("vlId11").busOrBusbarSectionId1("busId11").voltageLevelId2("vlId12").busOrBusbarSectionId2("busId12").connectionName1("cn11").connectionDirection1(ConnectablePosition.Direction.TOP).connectionName2("cn22").connectionDirection2(ConnectablePosition.Direction.TOP).build()); var createLineEntity2 = ModificationEntity.fromDTO(LineCreationInfos.builder().equipmentId("idLine2").equipmentName("nameLine2").r(2.0).x(2.2).g1(20.0).b1(22.0).g2(200.0).b2(200.2).voltageLevelId1("vlId21").busOrBusbarSectionId1("busId21").voltageLevelId2("vlId22").busOrBusbarSectionId2("busId22").connectionName1("cn33").connectionDirection1(ConnectablePosition.Direction.TOP).connectionName2("cn44").connectionDirection2(ConnectablePosition.Direction.BOTTOM) - .operationalLimitsGroups2( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(5.0).temporaryLimits(Collections.emptyList()).build()) + .applicability(SIDE2) .build() ) ) .build()); var createLineEntity3 = ModificationEntity.fromDTO(LineCreationInfos.builder().equipmentId("idLine3").equipmentName("nameLine3").r(3.0).x(3.3).g1(30.0).b1(33.0).g2(300.0).b2(300.3).voltageLevelId1("vlId31").busOrBusbarSectionId1("busId31").voltageLevelId2("vlId32").busOrBusbarSectionId2("busId32").connectionName1("cn55").connectionDirection1(ConnectablePosition.Direction.TOP).connectionName2("cn66").connectionDirection2(ConnectablePosition.Direction.TOP) - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(5.0).temporaryLimits(Collections.emptyList()).build()) + .applicability(SIDE1) .build() ) ) .build()); var createLineEntity4 = ModificationEntity.fromDTO(LineCreationInfos.builder().equipmentId("idLine4").equipmentName("nameLine4").r(3.0).x(3.3).g1(null).b1(null).g2(null).b2(null).voltageLevelId1("vlId41").busOrBusbarSectionId1("busId41").voltageLevelId2("vlId42").busOrBusbarSectionId2("busId42").connectionName1("cn77").connectionDirection1(ConnectablePosition.Direction.TOP).connectionName2("cn88").connectionDirection2(ConnectablePosition.Direction.BOTTOM) - .operationalLimitsGroups1( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(5.0).temporaryLimits(Collections.emptyList()).build()) + .applicability(SIDE1) .build() ) ) - .operationalLimitsGroups2( + .operationalLimitsGroups( List.of( OperationalLimitsGroupInfos.builder().currentLimits( CurrentLimitsInfos.builder().permanentLimit(4.0).temporaryLimits(Collections.emptyList()).build()) + .applicability(SIDE2) .build() ) ) .build()); networkModificationRepository.saveModifications(TEST_GROUP_ID, List.of(createLineEntity1, createLineEntity2, createLineEntity3, createLineEntity4)); - assertRequestsCount(2, 7, 0, 0); + assertRequestsCount(2, 6, 0, 0); List modificationInfos = networkModificationRepository.getModifications(TEST_GROUP_ID, true, true); assertEquals(4, modificationInfos.size()); @@ -460,17 +465,17 @@ void testLineCreation() { networkModificationRepository.deleteModifications(TEST_GROUP_ID, List.of(createLineEntity2.getId(), createLineEntity3.getId())); // TODO : Due to an issue the deletion counter is not deterministic // https://github.com/jdbc-observations/datasource-proxy/issues/123 - assertRequestsCount(12, 0, 0); + assertRequestsCount(10, 0, 0); SQLStatementCountValidator.reset(); assertEquals(2, networkModificationRepository.getModifications(TEST_GROUP_ID, false, true).size()); - assertRequestsCount(12, 0, 0, 0); + assertRequestsCount(8, 0, 0, 0); SQLStatementCountValidator.reset(); networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true); // TODO : Due to an issue the deletion counter is not deterministic // https://github.com/jdbc-observations/datasource-proxy/issues/123 - assertRequestsCount(12, 0, 0); + assertRequestsCount(9, 0, 0); assertThrows(NetworkModificationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, true, true), new NetworkModificationException(MODIFICATION_GROUP_NOT_FOUND, TEST_GROUP_ID.toString()).getMessage()); @@ -961,7 +966,7 @@ void testLineAttachToVoltageLevel() { SQLStatementCountValidator.reset(); networkModificationRepository.deleteModifications(TEST_GROUP_ID, List.of(lineAttachToEntity1.getId(), lineAttachToEntity2.getId())); - assertRequestsCount(12, 0, 0, 12); + assertRequestsCount(10, 0, 0, 12); SQLStatementCountValidator.reset(); networkModificationRepository.deleteModificationGroup(TEST_GROUP_ID, true);