diff --git a/pom.xml b/pom.xml
index e82f2161a..222be8f32 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,7 @@
1.16.2
org.gridsuite.modification.server
- 1.18.1
+ 1.18.2
diff --git a/src/main/java/org/gridsuite/modification/server/modifications/BusbarSectionFinderTraverser.java b/src/main/java/org/gridsuite/modification/server/modifications/BusbarSectionFinderTraverser.java
new file mode 100644
index 000000000..82efbedcc
--- /dev/null
+++ b/src/main/java/org/gridsuite/modification/server/modifications/BusbarSectionFinderTraverser.java
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2024, 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.Switch;
+import com.powsybl.iidm.network.Terminal;
+import com.powsybl.math.graph.TraverseResult;
+
+/**
+ * @author Slimane Amar
+ */
+// FIXME : to remove when this class is available in network-store
+public class BusbarSectionFinderTraverser implements Terminal.TopologyTraverser {
+
+ private final boolean onlyConnectedBbs;
+
+ private String firstTraversedBbsId;
+
+ public BusbarSectionFinderTraverser(boolean onlyConnectedBbs) {
+ this.onlyConnectedBbs = onlyConnectedBbs;
+ }
+
+ @Override
+ public TraverseResult traverse(Terminal terminal, boolean connected) {
+ if (terminal.getConnectable().getType() == IdentifiableType.BUSBAR_SECTION) {
+ firstTraversedBbsId = terminal.getConnectable().getId();
+ return TraverseResult.TERMINATE_TRAVERSER;
+ }
+ return TraverseResult.CONTINUE;
+ }
+
+ @Override
+ public TraverseResult traverse(Switch aSwitch) {
+ if (onlyConnectedBbs && aSwitch.isOpen()) {
+ return TraverseResult.TERMINATE_PATH;
+ }
+ return TraverseResult.CONTINUE;
+ }
+
+ public String getFirstTraversedBbsId() {
+ return firstTraversedBbsId;
+ }
+}
+
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 ac7840f37..62da864e3 100644
--- a/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java
+++ b/src/main/java/org/gridsuite/modification/server/modifications/ModificationUtils.java
@@ -13,6 +13,7 @@
import com.powsybl.iidm.modification.topology.*;
import com.powsybl.iidm.network.*;
import com.powsybl.iidm.network.extensions.*;
+import com.powsybl.math.graph.TraversalType;
import com.powsybl.network.store.iidm.impl.MinMaxReactiveLimitsImpl;
import org.gridsuite.modification.server.NetworkModificationException;
import org.gridsuite.modification.server.dto.*;
@@ -57,6 +58,12 @@ public final class ModificationUtils {
public static final String CONNECTION_POSITION_FIELD_NAME = "Connection position";
public static final String NOT_EXIST_IN_NETWORK = " does not exist in network";
+ public enum FeederSide {
+ INJECTION_SINGLE_SIDE,
+ BRANCH_SIDE_ONE,
+ BRANCH_SIDE_TWO
+ }
+
private ModificationUtils() {
}
@@ -615,10 +622,7 @@ public ReportNode modifyInjectionConnectivityAttributes(ConnectablePosition> c
InjectionModificationInfos modificationInfos,
ReportNode connectivityReports) {
List reports = new ArrayList<>();
- if (isVoltageOrBusbarIdMissing(modificationInfos.getVoltageLevelId(), modificationInfos.getBusOrBusbarSectionId(), modificationInfos.getEquipmentId(), reports)) {
- return reports.get(0);
- }
- processConnectivityPosition(connectablePosition, connectablePositionAdder, modificationInfos, injection.getNetwork(), reports, false);
+ processConnectivityPosition(connectablePosition, connectablePositionAdder, modificationInfos, injection.getNetwork(), reports);
modifyConnection(modificationInfos.getTerminalConnected(), injection, injection.getTerminal(), reports);
return reportModifications(connectivityReports, reports, "ConnectivityModified", CONNECTIVITY);
@@ -630,136 +634,122 @@ public ReportNode modifyBranchConnectivityAttributes(ConnectablePosition> conn
BranchModificationInfos modificationInfos,
ReportNode connectivityReports) {
List reports = new ArrayList<>();
- if (isVoltageOrBusbarIdMissing(modificationInfos.getVoltageLevelId1(), modificationInfos.getBusOrBusbarSectionId1(), modificationInfos.getEquipmentId(), reports) ||
- isVoltageOrBusbarIdMissing(modificationInfos.getVoltageLevelId2(), modificationInfos.getBusOrBusbarSectionId2(), modificationInfos.getEquipmentId(), reports)) {
- return reports.get(0);
- }
-
- processConnectivityPosition(connectablePosition, connectablePositionAdder, modificationInfos, branch.getNetwork(), reports, true);
+ processConnectivityPosition(connectablePosition, connectablePositionAdder, modificationInfos, branch.getNetwork(), reports);
modifyConnection(modificationInfos.getTerminal1Connected(), branch, branch.getTerminal1(), reports);
modifyConnection(modificationInfos.getTerminal2Connected(), branch, branch.getTerminal2(), reports);
return reportModifications(connectivityReports, reports, "ConnectivityModified", CONNECTIVITY);
}
- private boolean isVoltageOrBusbarIdMissing(AttributeModification voltageLevelId, AttributeModification busbarSectionId, String equipmentId, List reports) {
- if (voltageLevelId == null || busbarSectionId == null) {
- reports.add(ReportNode.newRootReportNode()
- .withMessageTemplate("VoltageLevelOrBusbarSectionNotFound",
- "Voltage level id or Bus bar section id of equipment id=${id} not found")
- .withUntypedValue("id", equipmentId)
- .withSeverity(TypedValue.WARN_SEVERITY)
- .build());
- return true;
- }
- return false;
- }
-
private void processConnectivityPosition(ConnectablePosition> connectablePosition,
ConnectablePositionAdder> connectablePositionAdder,
BasicEquipmentModificationInfos modificationInfos,
Network network,
- List reports,
- boolean isBranch) {
+ List reports) {
if (connectablePosition != null) {
- modifyExistingConnectivityPosition(connectablePosition, modificationInfos, reports, isBranch);
+ modifyExistingConnectivityPosition(connectablePosition, modificationInfos, reports);
} else {
- createNewConnectivityPosition(connectablePositionAdder, modificationInfos, network, reports, isBranch);
+ createNewConnectivityPosition(connectablePositionAdder, modificationInfos, network, reports);
}
}
private void modifyExistingConnectivityPosition(ConnectablePosition> connectablePosition,
BasicEquipmentModificationInfos modificationInfos,
- List reports,
- boolean isBranch) {
- if (isBranch) {
- modifyConnectablePosition(connectablePosition.getFeeder1(), modificationInfos, reports, 1);
- modifyConnectablePosition(connectablePosition.getFeeder2(), modificationInfos, reports, 2);
- } else {
- modifyConnectablePosition(connectablePosition.getFeeder(), modificationInfos, reports, 0);
+ List reports) {
+ if (modificationInfos instanceof BranchModificationInfos) {
+ modifyConnectablePosition(connectablePosition.getFeeder1(), modificationInfos, reports, FeederSide.BRANCH_SIDE_ONE);
+ modifyConnectablePosition(connectablePosition.getFeeder2(), modificationInfos, reports, FeederSide.BRANCH_SIDE_TWO);
+ } else if (modificationInfos instanceof InjectionModificationInfos) {
+ modifyConnectablePosition(connectablePosition.getFeeder(), modificationInfos, reports, FeederSide.INJECTION_SINGLE_SIDE);
}
}
private void createNewConnectivityPosition(ConnectablePositionAdder> adder,
BasicEquipmentModificationInfos modificationInfos,
Network network,
- List reports,
- boolean isBranch) {
- if (isBranch) {
- ConnectablePositionAdder.FeederAdder> feederAdder1 = adder.newFeeder1();
- ConnectablePositionAdder.FeederAdder> feederAdder2 = adder.newFeeder2();
- addConnectablePosition(adder, feederAdder1, modificationInfos, network, reports, 1);
- addConnectablePosition(adder, feederAdder2, modificationInfos, network, reports, 2);
- } else {
- ConnectablePositionAdder.FeederAdder> feederAdder = adder.newFeeder();
- addConnectablePosition(adder, feederAdder, modificationInfos, network, reports, 0);
+ List reports) {
+ if (modificationInfos instanceof BranchModificationInfos) {
+ addConnectablePosition(adder, modificationInfos, network, reports, FeederSide.BRANCH_SIDE_ONE);
+ addConnectablePosition(adder, modificationInfos, network, reports, FeederSide.BRANCH_SIDE_TWO);
+ } else if (modificationInfos instanceof InjectionModificationInfos) {
+ addConnectablePosition(adder, modificationInfos, network, reports, FeederSide.INJECTION_SINGLE_SIDE);
}
}
private void modifyConnectablePosition(ConnectablePosition.Feeder feeder,
BasicEquipmentModificationInfos modificationInfos,
List reports,
- int feederNumber) {
- applyModifications(feeder, modificationInfos, reports, feederNumber);
+ FeederSide feederSide) {
+ applyModifications(feeder, modificationInfos, reports, feederSide);
}
private void applyModifications(ConnectablePosition.Feeder feeder,
BasicEquipmentModificationInfos modificationInfos,
List reports,
- int feederNumber) {
+ FeederSide feederSide) {
ReportNode connectionNameReport = applyElementaryModificationsAndReturnReport(feeder::setName,
feeder.getName()::get,
- getConnectionName(modificationInfos, feederNumber),
- getConnectionNameField(feederNumber));
+ getConnectionName(modificationInfos, feederSide),
+ getConnectionNameField(feederSide));
if (connectionNameReport != null) {
reports.add(connectionNameReport);
}
ReportNode connectionDirectionReport = applyElementaryModificationsAndReturnReport(feeder::setDirection,
feeder::getDirection,
- getConnectionDirection(modificationInfos, feederNumber),
- getConnectionDirectionField(feederNumber));
+ getConnectionDirection(modificationInfos, feederSide),
+ getConnectionDirectionField(feederSide));
if (connectionDirectionReport != null) {
reports.add(connectionDirectionReport);
}
ReportNode connectionPositionReport = applyElementaryModificationsAndReturnReport(feeder::setOrder,
feeder.getOrder()::get,
- getConnectionPosition(modificationInfos, feederNumber),
- getConnectionPositionField(feederNumber));
+ getConnectionPosition(modificationInfos, feederSide),
+ getConnectionPositionField(feederSide));
if (connectionPositionReport != null) {
reports.add(connectionPositionReport);
}
}
private void addConnectablePosition(ConnectablePositionAdder> adder,
- ConnectablePositionAdder.FeederAdder> feeder,
BasicEquipmentModificationInfos modificationInfos,
Network network,
List reports,
- int feederNumber) {
- AttributeModification connectionName = getConnectionName(modificationInfos, feederNumber);
- AttributeModification connectionDirection = getConnectionDirection(modificationInfos, feederNumber);
- AttributeModification connectionPosition = getConnectionPosition(modificationInfos, feederNumber);
+ FeederSide feederSide) {
+ AttributeModification connectionName = getConnectionName(modificationInfos, feederSide);
+ AttributeModification connectionDirection = getConnectionDirection(modificationInfos, feederSide);
+ AttributeModification connectionPosition = getConnectionPosition(modificationInfos, feederSide);
+ if (Objects.isNull(connectionName) && Objects.isNull(connectionDirection) && Objects.isNull(connectionPosition)) {
+ return;
+ }
AttributeModification equipmentId = getEquipmentId(modificationInfos);
- AttributeModification voltageLevelId = getVoltageLevelId(modificationInfos, feederNumber);
- AttributeModification busOrBusbarSectionId = getBusOrBusbarSectionId(modificationInfos, feederNumber);
- int position = getPosition(connectionPosition, busOrBusbarSectionId, network, voltageLevelId);
-
+ AttributeModification voltageLevelId = getVoltageLevelId(modificationInfos, feederSide);
+ AttributeModification busOrBusbarSectionId = getBusOrBusbarSectionId(modificationInfos, feederSide);
+ int position = getPosition(connectionPosition, busOrBusbarSectionId, voltageLevelId, equipmentId, feederSide, network);
+ ConnectablePositionAdder.FeederAdder> feeder;
+ switch (feederSide) {
+ case INJECTION_SINGLE_SIDE -> feeder = adder.newFeeder();
+ case BRANCH_SIDE_ONE -> feeder = adder.newFeeder1();
+ case BRANCH_SIDE_TWO -> feeder = adder.newFeeder2();
+ default -> {
+ return;
+ }
+ }
ReportNode connectionNameReport = applyConnectablePositionAttribute(
feeder::withName, connectionName, equipmentId, reports,
- getConnectionNameField(feederNumber), connectionDirection, connectionPosition
+ getConnectionNameField(feederSide), connectionDirection, connectionPosition
);
ReportNode connectionDirectionReport = applyConnectablePositionAttribute(
feeder::withDirection, connectionDirection,
new AttributeModification<>(ConnectablePosition.Direction.UNDEFINED, OperationType.SET),
- reports, getConnectionDirectionField(feederNumber),
+ reports, getConnectionDirectionField(feederSide),
connectionName, connectionPosition
);
ReportNode connectionPositionReport = applyConnectablePositionAttribute(
feeder::withOrder, connectionPosition,
new AttributeModification<>(position, OperationType.SET),
- reports, getConnectionPositionField(feederNumber),
+ reports, getConnectionPositionField(feederSide),
connectionName, connectionDirection
);
@@ -791,35 +781,38 @@ private boolean isAnyAttributesNonNull(AttributeModification>... attributes) {
return Arrays.stream(attributes).anyMatch(Objects::nonNull);
}
- private T getConnectionDetail(BasicEquipmentModificationInfos modificationInfos, int feederNumber,
+ private T getConnectionDetail(BasicEquipmentModificationInfos modificationInfos, FeederSide feederSide,
Function branchFunc1,
Function branchFunc2,
Function injectionFunc) {
if (modificationInfos instanceof BranchModificationInfos branchInfo) {
- return feederNumber == 1 ? branchFunc1.apply(branchInfo) : branchFunc2.apply(branchInfo);
+ if (Objects.requireNonNull(feederSide) == FeederSide.BRANCH_SIDE_ONE) {
+ return branchFunc1.apply(branchInfo);
+ } else if (feederSide == FeederSide.BRANCH_SIDE_TWO) {
+ return branchFunc2.apply(branchInfo);
+ }
} else if (modificationInfos instanceof InjectionModificationInfos injectionInfo) {
return injectionFunc.apply(injectionInfo);
}
return null;
}
- private String getConnectionFieldName(int feederNumber, String baseFieldName) {
- return switch (feederNumber) {
- case 0 -> baseFieldName;
- case 1 -> baseFieldName + " 1";
- case 2 -> baseFieldName + " 2";
- default -> "";
+ private String getConnectionFieldName(FeederSide feederSide, String baseFieldName) {
+ return switch (feederSide) {
+ case INJECTION_SINGLE_SIDE -> baseFieldName;
+ case BRANCH_SIDE_ONE -> baseFieldName + " 1";
+ case BRANCH_SIDE_TWO -> baseFieldName + " 2";
};
}
- private AttributeModification getVoltageLevelId(BasicEquipmentModificationInfos modificationInfos, int feederNumber) {
- return getConnectionDetail(modificationInfos, feederNumber,
+ private AttributeModification getVoltageLevelId(BasicEquipmentModificationInfos modificationInfos, FeederSide feederSide) {
+ return getConnectionDetail(modificationInfos, feederSide,
BranchModificationInfos::getVoltageLevelId1, BranchModificationInfos::getVoltageLevelId2,
InjectionModificationInfos::getVoltageLevelId);
}
- private AttributeModification getBusOrBusbarSectionId(BasicEquipmentModificationInfos modificationInfos, int feederNumber) {
- return getConnectionDetail(modificationInfos, feederNumber,
+ private AttributeModification getBusOrBusbarSectionId(BasicEquipmentModificationInfos modificationInfos, FeederSide feederSide) {
+ return getConnectionDetail(modificationInfos, feederSide,
BranchModificationInfos::getBusOrBusbarSectionId1, BranchModificationInfos::getBusOrBusbarSectionId2,
InjectionModificationInfos::getBusOrBusbarSectionId);
}
@@ -828,46 +821,77 @@ private AttributeModification getEquipmentId(BasicEquipmentModificationI
return AttributeModification.toAttributeModification(modificationInfos.getEquipmentId(), OperationType.SET);
}
- private AttributeModification getConnectionName(BasicEquipmentModificationInfos modificationInfos, int feederNumber) {
- return getConnectionDetail(modificationInfos, feederNumber,
+ private AttributeModification getConnectionName(BasicEquipmentModificationInfos modificationInfos, FeederSide feederSide) {
+ return getConnectionDetail(modificationInfos, feederSide,
BranchModificationInfos::getConnectionName1, BranchModificationInfos::getConnectionName2,
InjectionModificationInfos::getConnectionName);
}
- private String getConnectionNameField(int feederNumber) {
- return getConnectionFieldName(feederNumber, CONNECTION_NAME_FIELD_NAME);
+ private String getConnectionNameField(FeederSide feederSide) {
+ return getConnectionFieldName(feederSide, CONNECTION_NAME_FIELD_NAME);
}
- private String getConnectionDirectionField(int feederNumber) {
- return getConnectionFieldName(feederNumber, CONNECTION_DIRECTION_FIELD_NAME);
+ private String getConnectionDirectionField(FeederSide feederSide) {
+ return getConnectionFieldName(feederSide, CONNECTION_DIRECTION_FIELD_NAME);
}
- private String getConnectionPositionField(int feederNumber) {
- return getConnectionFieldName(feederNumber, CONNECTION_POSITION_FIELD_NAME);
+ private String getConnectionPositionField(FeederSide feederSide) {
+ return getConnectionFieldName(feederSide, CONNECTION_POSITION_FIELD_NAME);
}
- private AttributeModification getConnectionDirection(BasicEquipmentModificationInfos modificationInfos, int feederNumber) {
- return getConnectionDetail(modificationInfos, feederNumber,
+ private AttributeModification getConnectionDirection(BasicEquipmentModificationInfos modificationInfos, FeederSide feederSide) {
+ return getConnectionDetail(modificationInfos, feederSide,
BranchModificationInfos::getConnectionDirection1, BranchModificationInfos::getConnectionDirection2,
InjectionModificationInfos::getConnectionDirection);
}
- private AttributeModification getConnectionPosition(BasicEquipmentModificationInfos modificationInfos, int feederNumber) {
- return getConnectionDetail(modificationInfos, feederNumber,
+ private AttributeModification getConnectionPosition(BasicEquipmentModificationInfos modificationInfos, FeederSide feederSide) {
+ return getConnectionDetail(modificationInfos, feederSide,
BranchModificationInfos::getConnectionPosition1, BranchModificationInfos::getConnectionPosition2,
InjectionModificationInfos::getConnectionPosition);
}
+ private String getBusOrBusbarSection(Terminal terminal) {
+ String busOrBusbarSectionId;
+ if (terminal.getVoltageLevel().getTopologyKind().equals(TopologyKind.BUS_BREAKER)) {
+ if (terminal.isConnected()) {
+ busOrBusbarSectionId = terminal.getBusBreakerView().getBus().getId();
+ } else {
+ busOrBusbarSectionId = terminal.getBusBreakerView().getConnectableBus().getId();
+ }
+ } else {
+ busOrBusbarSectionId = getBusbarSectionId(terminal);
+ }
+ return busOrBusbarSectionId;
+ }
+
+ private String getBusbarSectionId(Terminal terminal) {
+ BusbarSectionFinderTraverser connectedBusbarSectionFinder = new BusbarSectionFinderTraverser(terminal.isConnected());
+ terminal.traverse(connectedBusbarSectionFinder, TraversalType.BREADTH_FIRST);
+ return connectedBusbarSectionFinder.getFirstTraversedBbsId();
+ }
+
private int getPosition(AttributeModification connectionPosition,
AttributeModification busOrBusbarSectionId,
- Network network,
- AttributeModification voltageLevelId) {
- return getPosition(
- connectionPosition == null ? null : connectionPosition.getValue(),
- busOrBusbarSectionId == null ? null : busOrBusbarSectionId.getValue(),
- network,
- getVoltageLevel(network, voltageLevelId == null ? null : voltageLevelId.getValue())
- );
+ AttributeModification voltageLevelId,
+ AttributeModification equipmentId,
+ FeederSide feederSide,
+ Network network) {
+ String equipmentValue = equipmentId.getValue();
+ Terminal selectedTerminal = null;
+ switch (feederSide) {
+ case INJECTION_SINGLE_SIDE -> selectedTerminal = network.getIdentifiable(equipmentValue) instanceof Injection> injection ? injection.getTerminal() : null;
+ case BRANCH_SIDE_ONE -> selectedTerminal = network.getIdentifiable(equipmentValue) instanceof Branch> branch ? branch.getTerminal1() : null;
+ case BRANCH_SIDE_TWO -> selectedTerminal = network.getIdentifiable(equipmentValue) instanceof Branch> branch ? branch.getTerminal2() : null;
+ }
+ String voltageLevel = (voltageLevelId != null && voltageLevelId.getValue() != null)
+ ? voltageLevelId.getValue()
+ : Optional.ofNullable(selectedTerminal).map(terminal -> terminal.getVoltageLevel().getId()).orElse(null);
+ String busOrBusbarSection = (busOrBusbarSectionId != null && busOrBusbarSectionId.getValue() != null)
+ ? busOrBusbarSectionId.getValue()
+ : Optional.ofNullable(selectedTerminal).map(this::getBusOrBusbarSection).orElse(null);
+ Integer connectionPositionValue = (connectionPosition != null) ? connectionPosition.getValue() : null;
+ return getPosition(connectionPositionValue, busOrBusbarSection, network, getVoltageLevel(network, voltageLevel));
}
private void modifyConnection(AttributeModification terminalConnected, Identifiable> equipment, Terminal terminal, List reports) {
diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java
index b9841d3f3..b110a1070 100644
--- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java
+++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java
@@ -10,6 +10,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.powsybl.iidm.network.*;
import com.powsybl.iidm.network.extensions.ActivePowerControl;
+import com.powsybl.iidm.network.extensions.ConnectablePosition;
import com.powsybl.iidm.network.extensions.GeneratorShortCircuit;
import com.powsybl.iidm.network.extensions.GeneratorStartup;
import lombok.SneakyThrows;
@@ -24,6 +25,8 @@
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.IntStream;
+import static org.gridsuite.modification.server.utils.NetworkUtil.*;
+import static org.gridsuite.modification.server.utils.NetworkUtil.createGeneratorOnBus;
import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage;
import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat;
import static org.junit.Assert.assertNull;
@@ -50,6 +53,9 @@ protected ModificationInfos buildModification() {
.equipmentName(new AttributeModification<>("newV1Generator", OperationType.SET))
.voltageLevelId(new AttributeModification<>("v2", OperationType.SET))
.busOrBusbarSectionId(new AttributeModification<>("1B", OperationType.SET))
+ .connectionName(new AttributeModification<>("idGenerator", OperationType.SET))
+ .connectionPosition(new AttributeModification<>(1, OperationType.SET))
+ .connectionDirection(new AttributeModification<>(ConnectablePosition.Direction.TOP, OperationType.SET))
.targetP(new AttributeModification<>(80.0, OperationType.SET))
.targetQ(new AttributeModification<>(40.0, OperationType.SET))
.targetV(new AttributeModification<>(48.0, OperationType.SET))
@@ -445,6 +451,24 @@ public void testUnsetAttributes() throws Exception {
}
+ @Test
+ public void changeGeneratorOnBusBreakerWithoutBusBarSection() throws Exception {
+ VoltageLevel v1 = createVoltageLevel(getNetwork().getSubstation("s1"), "v11", "v32", TopologyKind.BUS_BREAKER, 380.0);
+ createBusBarSection(getNetwork().getVoltageLevel("v1"), "1.7", "1.7", 0);
+ createBus(v1, "bus111", "bus111");
+ createGeneratorOnBus(v1, "idGenerator1", "bus111", 42.1, 1.0);
+ GeneratorModificationInfos generatorModificationInfos = GeneratorModificationInfos.builder()
+ .stashed(false)
+ .equipmentId("idGenerator1")
+ .connectionPosition(new AttributeModification<>(1, OperationType.SET))
+ .build();
+ String generatorModificationInfosJson = mapper.writeValueAsString(generatorModificationInfos);
+ mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk());
+ generatorModificationInfos = (GeneratorModificationInfos) modificationRepository.getModifications(getGroupId(), false, true).get(0);
+ assertEquals(1, generatorModificationInfos.getConnectionPosition().getValue());
+ }
+
@Override
@SneakyThrows
protected void testCreationModificationMessage(ModificationInfos modificationInfos) {
diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java
index 109581464..e5288c4f4 100644
--- a/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java
+++ b/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java
@@ -445,4 +445,22 @@ public void changeLineConnectablePosition() throws Exception {
assertEquals(1, createdModification.getConnectionPosition2().getValue());
}
+
+ @Test
+ public void changeLineConnectablePositionWithoutBusBarSection() throws Exception {
+ LineModificationInfos lineModificationInfos = LineModificationInfos.builder()
+ .stashed(false)
+ .equipmentId("line3")
+ .equipmentName(new AttributeModification<>("LineModified", OperationType.SET))
+ .connectionName1(new AttributeModification<>("line3", OperationType.SET))
+ .connectionName2(new AttributeModification<>("line3", OperationType.SET))
+ .build();
+ String modificationInfosJson = mapper.writeValueAsString(lineModificationInfos);
+ mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk());
+ LineModificationInfos createdModification = (LineModificationInfos) modificationRepository.getModifications(getGroupId(), false, true).get(0);
+ assertEquals("line3", createdModification.getConnectionName1().getValue());
+ assertEquals("line3", createdModification.getConnectionName2().getValue());
+
+ }
}
diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java
index f82133cb6..6e4343b46 100644
--- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java
+++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java
@@ -696,7 +696,7 @@ public void testChangeConnectionStatus() {
changeConnectionState(getNetwork().getTwoWindingsTransformer("trf2"), TwoSides.ONE, true, true, null);
changeConnectionState(getNetwork().getTwoWindingsTransformer("trf2"), TwoSides.ONE, true, false, null);
changeConnectionState(getNetwork().getTwoWindingsTransformer("trf2"), TwoSides.TWO, true, true, null);
- changeConnectionState(getNetwork().getTwoWindingsTransformer("trf2"), TwoSides.TWO, true, false, "Could not disconnect equipment 'trf2' on side TWO");
+ changeConnectionState(getNetwork().getTwoWindingsTransformer("trf2"), TwoSides.TWO, true, false, "Could not disconnect equipment 'trf2'");
}
@SneakyThrows