TestNodeDecoratorsNodeBreaker.java
/**
* Copyright (c) 2021, 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/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.sld.iidm;
import com.powsybl.diagram.test.Networks;
import com.powsybl.iidm.network.Network;
import com.powsybl.sld.builders.NetworkGraphBuilder;
import com.powsybl.sld.layout.HorizontalSubstationLayoutFactory;
import com.powsybl.sld.layout.SmartVoltageLevelLayoutFactory;
import com.powsybl.sld.library.ComponentSize;
import com.powsybl.sld.model.coordinate.Direction;
import com.powsybl.sld.model.graphs.SubstationGraph;
import com.powsybl.sld.model.graphs.VoltageLevelGraph;
import com.powsybl.sld.model.nodes.Node;
import com.powsybl.sld.model.nodes.SwitchNode;
import com.powsybl.sld.svg.DefaultLabelProvider;
import com.powsybl.sld.svg.LabelPosition;
import com.powsybl.sld.svg.LabelProvider;
import com.powsybl.sld.svg.styles.StyleProvidersList;
import com.powsybl.sld.svg.styles.iidm.HighlightLineStateStyleProvider;
import com.powsybl.sld.svg.styles.iidm.TopologicalStyleProvider;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author Florian Dupuy {@literal <florian.dupuy at rte-france.com>}
* @author Slimane Amar {@literal <slimane.amar at rte-france.com>}
*/
class TestNodeDecoratorsNodeBreaker extends AbstractTestCaseIidm {
@BeforeEach
public void setUp() {
network = Networks.createNodeBreakerNetworkWithBranchStatus("TestNodeDecorators", "test");
graphBuilder = new NetworkGraphBuilder(network);
}
@Test
void testBranchStatusDecorators() {
// build substation graph
SubstationGraph g = graphBuilder.buildSubstationGraph("S1");
// Run horizontal substation layout
substationGraphLayout(g);
assertEquals(toString("/NodeDecoratorsBranchStatusNodeBreaker.svg"),
toSVG(g, "/NodeDecoratorsBranchStatusNodeBreaker.svg", componentLibrary, layoutParameters, svgParameters, getDefaultDiagramLabelProvider(), getDefaultDiagramStyleProvider()));
}
@Test
void testBranchStatusForVerticalInternalPst() {
Network networkInternalPst = Networks.createNetworkWithInternalPstAndBranchStatus();
SubstationGraph g = new NetworkGraphBuilder(networkInternalPst).buildSubstationGraph("s");
// Run horizontal substation layout
new HorizontalSubstationLayoutFactory().create(g, new SmartVoltageLevelLayoutFactory(networkInternalPst)).run(layoutParameters);
assertEquals(toString("/VerticalInternalPstBranchStatusNodeBreaker.svg"),
toSVG(g, "/VerticalInternalPstBranchStatusNodeBreaker.svg", componentLibrary, layoutParameters, svgParameters, new DefaultLabelProvider(networkInternalPst, componentLibrary, layoutParameters, svgParameters), new StyleProvidersList(new TopologicalStyleProvider(networkInternalPst), new HighlightLineStateStyleProvider(networkInternalPst))));
}
@Test
void testSwitchDecorators() {
LabelProvider labelTestProvider = new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters) {
private static final double SWITCH_DECORATOR_OFFSET = 1d;
@Override
public List<NodeDecorator> getNodeDecorators(Node node, Direction direction) {
Objects.requireNonNull(node);
if (node instanceof SwitchNode) {
return Collections.singletonList(new NodeDecorator("LOCK", getSwitchDecoratorPosition((SwitchNode) node)));
}
return Collections.emptyList();
}
private LabelPosition getSwitchDecoratorPosition(SwitchNode node) {
ComponentSize size = componentLibrary.getSize(node.getComponentType());
double yShift = -size.getHeight() / 2;
double xShift = size.getWidth() / 2 + SWITCH_DECORATOR_OFFSET;
return new LabelPosition("DECORATOR", xShift, yShift, false, 0);
}
};
// build graph
VoltageLevelGraph g = graphBuilder.buildVoltageLevelGraph(network.getVoltageLevel("VL1").getId());
// Run layout
voltageLevelGraphLayout(g);
// write SVG and compare to reference
assertEquals(toString("/NodeDecoratorsSwitches.svg"),
toSVG(g, "/NodeDecoratorsSwitches.svg", componentLibrary, layoutParameters, svgParameters, labelTestProvider, getDefaultDiagramStyleProvider()));
}
}