AbstractNodeTopologyTest.java
/**
* Copyright (c) 2019-2020, 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 com.powsybl.sld.cgmes.layout;
import com.powsybl.sld.cgmes.dl.iidm.extensions.*;
import com.powsybl.iidm.network.*;
import com.powsybl.sld.model.graphs.VoltageLevelGraph;
import com.powsybl.sld.model.nodes.Node;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import static com.powsybl.sld.library.ComponentTypeName.BREAKER;
import static com.powsybl.sld.library.ComponentTypeName.BUSBAR_SECTION;
import static com.powsybl.sld.library.ComponentTypeName.DISCONNECTOR;
import static com.powsybl.sld.library.ComponentTypeName.GENERATOR;
import static com.powsybl.sld.library.ComponentTypeName.LINE;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
*
* @author Massimo Ferraro {@literal <massimo.ferraro@techrain.eu>}
*/
abstract class AbstractNodeTopologyTest extends AbstractCgmesVoltageLevelLayoutTest {
protected VoltageLevel voltageLevel;
protected VoltageLevel voltageLevelWithInternalConnections;
@BeforeEach
public void setUp() {
createNetwork();
createNetworkWithInternalConnections();
}
protected void createNetwork() {
Network network = Network.create("testCase1", "test");
voltageLevel = createFirstVoltageLevel(network, 0, 4, 0, 1, 1, 2, 2, 3);
voltageLevel.getNodeBreakerView().newInternalConnection()
.setNode1(4)
.setNode2(0)
.add();
createSecondVoltageLevel(network);
createLine(network, 3);
addDiagramData(network);
NetworkDiagramData.addDiagramName(network, DIAGRAM_NAME, "Substation");
NetworkDiagramData.addDiagramName(network, DIAGRAM_NAME, "Substation2");
}
protected void createNetworkWithInternalConnections() {
Network network = Network.create("testCase1", "test");
voltageLevelWithInternalConnections = createFirstVoltageLevel(network, 4, 12, 7, 8, 5, 6, 9, 10);
voltageLevelWithInternalConnections.getNodeBreakerView().newInternalConnection()
.setNode1(4)
.setNode2(0)
.add();
voltageLevelWithInternalConnections.getNodeBreakerView().newInternalConnection()
.setNode1(5)
.setNode2(2)
.add();
voltageLevelWithInternalConnections.getNodeBreakerView().newInternalConnection()
.setNode1(6)
.setNode2(1)
.add();
voltageLevelWithInternalConnections.getNodeBreakerView().newInternalConnection()
.setNode1(7)
.setNode2(1)
.add();
voltageLevelWithInternalConnections.getNodeBreakerView().newInternalConnection()
.setNode1(8)
.setNode2(0)
.add();
voltageLevelWithInternalConnections.getNodeBreakerView().newInternalConnection()
.setNode1(9)
.setNode2(3)
.add();
voltageLevelWithInternalConnections.getNodeBreakerView().newInternalConnection()
.setNode1(10)
.setNode2(2)
.add();
voltageLevelWithInternalConnections.getNodeBreakerView().newInternalConnection()
.setNode1(11)
.setNode2(3)
.add();
voltageLevelWithInternalConnections.getNodeBreakerView().newInternalConnection()
.setNode1(12)
.setNode2(0)
.add();
createSecondVoltageLevel(network);
createLine(network, 11);
addDiagramData(network);
NetworkDiagramData.addDiagramName(network, DIAGRAM_NAME, "Substation");
NetworkDiagramData.addDiagramName(network, DIAGRAM_NAME, "Substation2");
}
protected VoltageLevel createFirstVoltageLevel(Network network, int busbarNode, int generatorNode, int disconnector1Node1, int disconnector1Node2,
int breaker1Node1, int breaker1Node2, int disconnector2Node1, int disconnector2Node2) {
Substation substation1 = network.newSubstation()
.setId("Substation")
.setCountry(Country.FR)
.add();
VoltageLevel voltageLevel1 = substation1.newVoltageLevel()
.setId("VoltageLevel1")
.setTopologyKind(TopologyKind.NODE_BREAKER)
.setNominalV(400)
.add();
voltageLevel1.getNodeBreakerView().newBusbarSection()
.setId("BusbarSection")
.setNode(busbarNode)
.add();
voltageLevel1.newGenerator()
.setId("Generator")
.setNode(generatorNode)
.setTargetP(100)
.setTargetV(380)
.setVoltageRegulatorOn(true)
.setMaxP(100)
.setMinP(0)
.add();
voltageLevel1.getNodeBreakerView().newDisconnector()
.setId("Disconnector1")
.setNode1(disconnector1Node1)
.setNode2(disconnector1Node2)
.add();
voltageLevel1.getNodeBreakerView().newBreaker()
.setId("Breaker1")
.setNode1(breaker1Node1)
.setNode2(breaker1Node2)
.add();
voltageLevel1.getNodeBreakerView().newDisconnector()
.setId("Disconnector2")
.setNode1(disconnector2Node1)
.setNode2(disconnector2Node2)
.add();
return voltageLevel1;
}
protected void createSecondVoltageLevel(Network network) {
Substation substation2 = network.newSubstation()
.setId("Substation2")
.setCountry(Country.FR)
.add();
VoltageLevel voltageLevel2 = substation2.newVoltageLevel()
.setId("VoltageLevel2")
.setTopologyKind(TopologyKind.NODE_BREAKER)
.setNominalV(400)
.add();
}
protected void createLine(Network network, int lineNode) {
network.newLine()
.setId("Line")
.setVoltageLevel1("VoltageLevel1")
.setNode1(lineNode)
.setVoltageLevel2("VoltageLevel2")
.setNode2(0)
.setR(3.0)
.setX(33.0)
.setG1(0.0)
.setB1(386E-6 / 2)
.setG2(0.0)
.setB2(386E-6 / 2)
.add();
}
protected abstract void addDiagramData(Network network);
protected void addBusbarSectionDiagramData(BusbarSection busbarSection, DiagramPoint point1, DiagramPoint point2) {
NodeDiagramData<BusbarSection> busbarDiagramData = new NodeDiagramData<>(busbarSection);
NodeDiagramData.NodeDiagramDataDetails diagramDetails = busbarDiagramData.new NodeDiagramDataDetails();
diagramDetails.setPoint1(point1);
diagramDetails.setPoint2(point2);
busbarDiagramData.addData(DIAGRAM_NAME, diagramDetails);
busbarSection.addExtension(NodeDiagramData.class, busbarDiagramData);
}
protected void addGeneratorDiagramData(Generator generator, DiagramPoint generatorPoint, DiagramPoint terminalPoint1, DiagramPoint terminalPoint2) {
InjectionDiagramData<Generator> generatorDiagramData = new InjectionDiagramData<>(generator);
InjectionDiagramData.InjectionDiagramDetails diagramDetails = generatorDiagramData.new InjectionDiagramDetails(generatorPoint, 0);
diagramDetails.addTerminalPoint(terminalPoint1);
diagramDetails.addTerminalPoint(terminalPoint2);
generatorDiagramData.addData(DIAGRAM_NAME, diagramDetails);
generator.addExtension(InjectionDiagramData.class, generatorDiagramData);
}
protected void addSwitchDiagramData(Switch sw, DiagramPoint switchPoint, int rotation, DiagramPoint terminal1Point1, DiagramPoint terminal1Point2,
DiagramPoint terminal2Point1, DiagramPoint terminal2Point2) {
CouplingDeviceDiagramData<Switch> switchDiagramData = new CouplingDeviceDiagramData<>(sw);
CouplingDeviceDiagramData.CouplingDeviceDiagramDetails diagramDetails = switchDiagramData.new CouplingDeviceDiagramDetails(switchPoint, rotation);
diagramDetails.addTerminalPoint(DiagramTerminal.TERMINAL1, terminal1Point1);
diagramDetails.addTerminalPoint(DiagramTerminal.TERMINAL1, terminal1Point2);
diagramDetails.addTerminalPoint(DiagramTerminal.TERMINAL2, terminal2Point1);
diagramDetails.addTerminalPoint(DiagramTerminal.TERMINAL2, terminal2Point2);
switchDiagramData.addData(DIAGRAM_NAME, diagramDetails);
sw.addExtension(CouplingDeviceDiagramData.class, switchDiagramData);
}
protected void addLineDiagramData(Line line, DiagramPoint point1, DiagramPoint point2) {
LineDiagramData<Line> lineDiagramData = new LineDiagramData<>(line);
lineDiagramData.addPoint(DIAGRAM_NAME, point1);
lineDiagramData.addPoint(DIAGRAM_NAME, point2);
line.addExtension(LineDiagramData.class, lineDiagramData);
}
@Override
protected void checkGraph(VoltageLevelGraph graph) {
assertEquals(6, graph.getNodes().size());
assertEquals(Node.NodeType.BUS, graph.getNodes().get(0).getType());
assertEquals(Node.NodeType.FEEDER, graph.getNodes().get(1).getType());
assertEquals(Node.NodeType.FEEDER, graph.getNodes().get(2).getType());
assertEquals(Node.NodeType.SWITCH, graph.getNodes().get(3).getType());
assertEquals(Node.NodeType.SWITCH, graph.getNodes().get(4).getType());
assertEquals(Node.NodeType.SWITCH, graph.getNodes().get(5).getType());
assertEquals("BusbarSection", graph.getNodes().get(0).getId());
assertEquals("Line_ONE", graph.getNodes().get(1).getId());
assertEquals("Generator", graph.getNodes().get(2).getId());
assertEquals("Disconnector1", graph.getNodes().get(3).getId());
assertEquals("Breaker1", graph.getNodes().get(4).getId());
assertEquals("Disconnector2", graph.getNodes().get(5).getId());
assertEquals(BUSBAR_SECTION, graph.getNodes().get(0).getComponentType());
assertEquals(LINE, graph.getNodes().get(1).getComponentType());
assertEquals(GENERATOR, graph.getNodes().get(2).getComponentType());
assertEquals(DISCONNECTOR, graph.getNodes().get(3).getComponentType());
assertEquals(BREAKER, graph.getNodes().get(4).getComponentType());
assertEquals(DISCONNECTOR, graph.getNodes().get(5).getComponentType());
assertEquals(2, graph.getNodes().get(0).getAdjacentNodes().size());
checkAdjacentNodes(graph.getNodes().get(0), Arrays.asList("Disconnector1", "Generator"));
assertEquals(1, graph.getNodes().get(1).getAdjacentNodes().size());
assertEquals("Disconnector2", graph.getNodes().get(1).getAdjacentNodes().get(0).getId());
assertEquals(1, graph.getNodes().get(2).getAdjacentNodes().size());
assertEquals("BusbarSection", graph.getNodes().get(2).getAdjacentNodes().get(0).getId());
assertEquals(2, graph.getNodes().get(3).getAdjacentNodes().size());
checkAdjacentNodes(graph.getNodes().get(3), Arrays.asList("BusbarSection", "Breaker1"));
assertEquals(2, graph.getNodes().get(4).getAdjacentNodes().size());
checkAdjacentNodes(graph.getNodes().get(4), Arrays.asList("Disconnector1", "Disconnector2"));
assertEquals(2, graph.getNodes().get(5).getAdjacentNodes().size());
checkAdjacentNodes(graph.getNodes().get(5), Arrays.asList("Breaker1", "Line_ONE"));
assertEquals(5, graph.getEdges().size());
}
@Test
void test() {
test(voltageLevel);
}
@Test
void testWithInternalConnections() {
test(voltageLevelWithInternalConnections);
}
}