diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/Config.java b/network-area-diagram/src/main/java/com/powsybl/nad/Config.java new file mode 100644 index 000000000..b1457e836 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/Config.java @@ -0,0 +1,63 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad; + +import com.powsybl.iidm.network.Network; +import com.powsybl.nad.build.iidm.IdProvider; +import com.powsybl.nad.layout.LayoutFactory; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.LabelProvider; +import com.powsybl.nad.svg.StyleProvider; +import com.powsybl.nad.svg.SvgParameters; + +/** + * + * @author Sophie Frasnedo + */ +public class Config { + + SvgParameters svgParameters; + LayoutParameters layoutParameters; + ConfigBuilder.StyleProviderFactory styleProviderFactory; + ConfigBuilder.LabelProviderFactory labelProviderFactory; + LayoutFactory layoutFactory; + ConfigBuilder.IdProviderFactory idProviderFactory; + + public Config(SvgParameters svgParameters, LayoutParameters layoutParameters, ConfigBuilder.StyleProviderFactory styleProviderFactory, ConfigBuilder.LabelProviderFactory labelProviderFactory, LayoutFactory layoutFactory, ConfigBuilder.IdProviderFactory idProviderFactory) { + this.svgParameters = svgParameters; + this.layoutParameters = layoutParameters; + this.styleProviderFactory = styleProviderFactory; + this.labelProviderFactory = labelProviderFactory; + this.layoutFactory = layoutFactory; + this.idProviderFactory = idProviderFactory; + } + + public SvgParameters getSvgParameters() { + return svgParameters; + } + + public LayoutParameters getLayoutParameters() { + return layoutParameters; + } + + public StyleProvider createStyleProvider(Network network) { + return styleProviderFactory.create(network); + } + + public LabelProvider createLabelProvider(Network network) { + return labelProviderFactory.create(network, svgParameters); + } + + public LayoutFactory getLayoutFactory() { + return layoutFactory; + } + + public IdProvider createIdProvider() { + return idProviderFactory.create(); + } + +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/ConfigBuilder.java b/network-area-diagram/src/main/java/com/powsybl/nad/ConfigBuilder.java new file mode 100644 index 000000000..fdfd69b88 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/ConfigBuilder.java @@ -0,0 +1,85 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad; + +import com.powsybl.iidm.network.Network; +import com.powsybl.nad.build.iidm.IdProvider; +import com.powsybl.nad.build.iidm.IntIdProvider; +import com.powsybl.nad.layout.BasicForceLayoutFactory; +import com.powsybl.nad.layout.LayoutFactory; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.LabelProvider; +import com.powsybl.nad.svg.StyleProvider; +import com.powsybl.nad.svg.SvgParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.TopologicalStyleProvider; + +/** + * + * @author Sophie Frasnedo + */ +public class ConfigBuilder { + SvgParameters svgParameters = new SvgParameters(); + LayoutParameters layoutParameters = new LayoutParameters(); + StyleProviderFactory styleProviderFactory = TopologicalStyleProvider::new; + LabelProviderFactory labelProviderFactory = DefaultLabelProvider::new; + LayoutFactory layoutFactory = new BasicForceLayoutFactory(); + IdProviderFactory idProviderFactory = IntIdProvider::new; + + @FunctionalInterface + public interface LabelProviderFactory { + LabelProvider create(Network network, SvgParameters svgParameters); + } + + @FunctionalInterface + public interface IdProviderFactory { + IdProvider create(); + } + + @FunctionalInterface + public interface StyleProviderFactory { + StyleProvider create(Network network); + } + + public ConfigBuilder() { + } + + public ConfigBuilder withSvgParameters(SvgParameters svgParameters) { + this.svgParameters = svgParameters; + return this; + } + + public ConfigBuilder withLayoutParameters(LayoutParameters layoutParameters) { + this.layoutParameters = layoutParameters; + return this; + } + + public ConfigBuilder withStyleProviderFactory(StyleProviderFactory styleProviderFactory) { + this.styleProviderFactory = styleProviderFactory; + return this; + } + + public ConfigBuilder withLabelProviderFactory(LabelProviderFactory labelProviderFactory) { + this.labelProviderFactory = labelProviderFactory; + return this; + } + + public ConfigBuilder withLayoutFactory(LayoutFactory layoutFactory) { + this.layoutFactory = layoutFactory; + return this; + } + + public ConfigBuilder withIdProviderFactory(IdProviderFactory idProviderFactory) { + this.idProviderFactory = idProviderFactory; + return this; + } + + public Config build() { + return new Config(svgParameters, layoutParameters, styleProviderFactory, labelProviderFactory, layoutFactory, idProviderFactory); + } + +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/NetworkAreaDiagram.java b/network-area-diagram/src/main/java/com/powsybl/nad/NetworkAreaDiagram.java index 4785be058..d741ae9b5 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/NetworkAreaDiagram.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/NetworkAreaDiagram.java @@ -9,10 +9,8 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.nad.build.iidm.IdProvider; -import com.powsybl.nad.build.iidm.IntIdProvider; import com.powsybl.nad.build.iidm.NetworkGraphBuilder; import com.powsybl.nad.build.iidm.VoltageLevelFilter; -import com.powsybl.nad.layout.BasicForceLayoutFactory; import com.powsybl.nad.layout.LayoutFactory; import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.model.Graph; @@ -20,8 +18,6 @@ import com.powsybl.nad.svg.StyleProvider; import com.powsybl.nad.svg.SvgParameters; import com.powsybl.nad.svg.SvgWriter; -import com.powsybl.nad.svg.iidm.DefaultLabelProvider; -import com.powsybl.nad.svg.iidm.TopologicalStyleProvider; import java.io.IOException; import java.io.StringWriter; @@ -35,116 +31,91 @@ /** * @author Florian Dupuy */ -public class NetworkAreaDiagram { +public final class NetworkAreaDiagram { - private final Network network; - private final Predicate voltageLevelFilter; - - public NetworkAreaDiagram(Network network) { - this(network, VoltageLevelFilter.NO_FILTER); - } - - public NetworkAreaDiagram(Network network, String voltageLevelId, int depth) { - this(network, VoltageLevelFilter.createVoltageLevelDepthFilter(network, voltageLevelId, depth)); - } - - public NetworkAreaDiagram(Network network, List voltageLevelIds) { - this(network, VoltageLevelFilter.createVoltageLevelsFilter(network, voltageLevelIds)); - } - - public NetworkAreaDiagram(Network network, List voltageLevelIds, int depth) { - this(network, VoltageLevelFilter.createVoltageLevelsDepthFilter(network, voltageLevelIds, depth)); - } - - public NetworkAreaDiagram(Network network, Predicate voltageLevelFilter) { - this.network = Objects.requireNonNull(network); - this.voltageLevelFilter = Objects.requireNonNull(voltageLevelFilter); + private NetworkAreaDiagram() { } - public Network getNetwork() { - return network; - } + /* ------------------------------------------------------------------------------------------------ */ + // Network, Path and different options of filtering + /* ------------------------------------------------------------------------------------------------ */ - public void draw(Path svgFile) { - draw(svgFile, new SvgParameters()); + public static void draw(Network network, Path svgFile) { + draw(network, svgFile, new ConfigBuilder().build(), VoltageLevelFilter.NO_FILTER); } - public void draw(Path svgFile, SvgParameters svgParameters) { - draw(svgFile, svgParameters, new LayoutParameters()); + public static void draw(Network network, Path svgFile, String voltageLevelId, int depth) { + draw(network, svgFile, new ConfigBuilder().build(), VoltageLevelFilter.createVoltageLevelDepthFilter(network, voltageLevelId, depth)); } - public void draw(Path svgFile, SvgParameters svgParameters, LayoutParameters layoutParameters) { - draw(svgFile, svgParameters, layoutParameters, new TopologicalStyleProvider(network)); + public static void draw(Network network, Path svgFile, List voltageLevelIds) { + draw(network, svgFile, new ConfigBuilder().build(), VoltageLevelFilter.createVoltageLevelsFilter(network, voltageLevelIds)); } - public void draw(Path svgFile, SvgParameters svgParameters, LayoutParameters layoutParameters, - StyleProvider styleProvider) { - draw(svgFile, svgParameters, layoutParameters, styleProvider, new DefaultLabelProvider(network, svgParameters)); + public static void draw(Network network, Path svgFile, List voltageLevelIds, int depth) { + draw(network, svgFile, new ConfigBuilder().build(), VoltageLevelFilter.createVoltageLevelsDepthFilter(network, voltageLevelIds, depth)); } - public void draw(Path svgFile, SvgParameters svgParameters, LayoutParameters layoutParameters, - StyleProvider styleProvider, LabelProvider labelProvider) { - draw(svgFile, svgParameters, layoutParameters, styleProvider, labelProvider, new BasicForceLayoutFactory()); - } + /* ---------------------------------------------------------------- */ + // Network, Path, Configuration, Predicate + /* ---------------------------------------------------------------- */ - public void draw(Path svgFile, SvgParameters svgParameters, LayoutParameters layoutParameters, - StyleProvider styleProvider, LabelProvider labelProvider, LayoutFactory layoutFactory) { - draw(svgFile, svgParameters, layoutParameters, styleProvider, labelProvider, layoutFactory, new IntIdProvider()); - } + public static void draw(Network network, Path svgFile, Config config, Predicate voltageLevelFilter) { - public void draw(Path svgFile, SvgParameters svgParameters, LayoutParameters layoutParameters, - StyleProvider styleProvider, LabelProvider labelProvider, LayoutFactory layoutFactory, - IdProvider idProvider) { + Objects.requireNonNull(network); Objects.requireNonNull(svgFile); + LayoutParameters layoutParameters = config.getLayoutParameters(); + SvgParameters svgParameters = config.getSvgParameters(); + StyleProvider styleProvider = config.createStyleProvider(network); + LayoutFactory layoutFactory = config.getLayoutFactory(); + IdProvider idProvider = config.createIdProvider(); + LabelProvider labelProvider = config.createLabelProvider(network); Objects.requireNonNull(layoutParameters); Objects.requireNonNull(svgParameters); Objects.requireNonNull(styleProvider); Objects.requireNonNull(layoutFactory); Objects.requireNonNull(idProvider); + Objects.requireNonNull(voltageLevelFilter); Graph graph = new NetworkGraphBuilder(network, voltageLevelFilter, idProvider).buildGraph(); layoutFactory.create().run(graph, layoutParameters); new SvgWriter(svgParameters, styleProvider, labelProvider).writeSvg(graph, svgFile); } - public void draw(Writer writer) { - draw(writer, new SvgParameters()); - } + /* ------------------------------------------------------------------------------------------------ */ + // Network, Writer and different options of filtering + /* ------------------------------------------------------------------------------------------------ */ - public void draw(Writer writer, SvgParameters svgParameters) { - draw(writer, svgParameters, new LayoutParameters()); + public static void draw(Network network, Writer writer) { + draw(network, writer, new ConfigBuilder().build(), VoltageLevelFilter.NO_FILTER); } - public void draw(Writer writer, SvgParameters svgParameters, LayoutParameters layoutParameters) { - draw(writer, svgParameters, layoutParameters, new TopologicalStyleProvider(network)); + public static void draw(Network network, Writer writer, String voltageLevelId, int depth) { + draw(network, writer, new ConfigBuilder().build(), VoltageLevelFilter.createVoltageLevelDepthFilter(network, voltageLevelId, depth)); } - public void draw(Writer writer, SvgParameters svgParameters, LayoutParameters layoutParameters, - StyleProvider styleProvider) { - draw(writer, svgParameters, layoutParameters, styleProvider, new DefaultLabelProvider(network, svgParameters)); + public static void draw(Network network, Writer writer, List voltageLevelIds) { + draw(network, writer, new ConfigBuilder().build(), VoltageLevelFilter.createVoltageLevelsFilter(network, voltageLevelIds)); } - public void draw(Writer writer, SvgParameters svgParameters, LayoutParameters layoutParameters, - StyleProvider styleProvider, LabelProvider labelProvider) { - draw(writer, svgParameters, layoutParameters, styleProvider, labelProvider, new BasicForceLayoutFactory()); + public void draw(Network network, Writer writer, Predicate voltageLevelFilter) { + draw(network, writer, new ConfigBuilder().build(), voltageLevelFilter); } - public void draw(Writer writer, SvgParameters svgParameters, LayoutParameters layoutParameters, - StyleProvider styleProvider, LabelProvider labelProvider, LayoutFactory layoutFactory) { - draw(writer, svgParameters, layoutParameters, styleProvider, labelProvider, layoutFactory, new IntIdProvider()); - } + /* ----------------------------------------------------------------------------------------------- */ + // Network, Writer, Configuration, Predicate + /* ----------------------------------------------------------------------------------------------- */ - public void draw(Writer writer, SvgParameters svgParameters, LayoutParameters layoutParameters, - StyleProvider styleProvider, LabelProvider labelProvider, LayoutFactory layoutFactory, - IdProvider idProvider) { - Graph graph = new NetworkGraphBuilder(network, voltageLevelFilter, idProvider).buildGraph(); - layoutFactory.create().run(graph, layoutParameters); - new SvgWriter(svgParameters, styleProvider, labelProvider).writeSvg(graph, writer); + public static void draw(Network network, Writer writer, Config config, Predicate voltageLevelFilter) { + Graph graph = new NetworkGraphBuilder(network, voltageLevelFilter, config.createIdProvider()).buildGraph(); + config.getLayoutFactory().create().run(graph, config.getLayoutParameters()); + new SvgWriter(config.getSvgParameters(), config.createStyleProvider(network), config.createLabelProvider(network)).writeSvg(graph, writer); } - public String drawToString(SvgParameters svgParameters) { + public String drawToString(Network network, SvgParameters svgParameters) { try (StringWriter writer = new StringWriter()) { - draw(writer, svgParameters); + Config config = new ConfigBuilder().withSvgParameters(svgParameters).build(); + draw(network, writer, config, VoltageLevelFilter.NO_FILTER); return writer.toString(); } catch (IOException e) { throw new UncheckedIOException(e); diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java b/network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java index fb158241e..18ae3ec49 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java @@ -1,3 +1,9 @@ +/** + * Copyright (c) 2022, 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.nad.layout; import com.powsybl.nad.model.*; @@ -6,6 +12,10 @@ import java.util.*; import java.util.stream.Stream; +/** + * + * @author Florian Dupuy + */ public abstract class AbstractLayout implements Layout { private Map initialNodePositions = Collections.emptyMap(); diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/BusNodeMetadata.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/BusNodeMetadata.java index 9c828352f..584873b48 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/BusNodeMetadata.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/metadata/BusNodeMetadata.java @@ -1,7 +1,17 @@ +/** + * Copyright (c) 2022, 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.nad.svg.metadata; import javax.xml.stream.XMLStreamReader; +/** + * + * @author Florian Dupuy + */ public class BusNodeMetadata extends AbstractMetadataItem { private static final String ELEMENT_NAME = "busNode"; diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/utils/iidm/IidmUtils.java b/network-area-diagram/src/main/java/com/powsybl/nad/utils/iidm/IidmUtils.java index bdc8bbed2..94a7490f6 100644 --- a/network-area-diagram/src/main/java/com/powsybl/nad/utils/iidm/IidmUtils.java +++ b/network-area-diagram/src/main/java/com/powsybl/nad/utils/iidm/IidmUtils.java @@ -1,3 +1,9 @@ +/** + * Copyright (c) 2022, 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.nad.utils.iidm; import com.powsybl.iidm.network.*; @@ -7,6 +13,11 @@ import java.util.Objects; +/** + * + * @author Florian Dupuy + * @author Luma Zamarreño + */ public final class IidmUtils { private IidmUtils() { diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/NetworkAreaDiagramTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/NetworkAreaDiagramTest.java index de56a7c7d..dd4fb4cf3 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/NetworkAreaDiagramTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/NetworkAreaDiagramTest.java @@ -10,11 +10,7 @@ import com.google.common.jimfs.Configuration; import com.google.common.jimfs.Jimfs; import com.powsybl.iidm.network.Network; -import com.powsybl.nad.build.iidm.IdProvider; -import com.powsybl.nad.build.iidm.IntIdProvider; import com.powsybl.nad.build.iidm.VoltageLevelFilter; -import com.powsybl.nad.layout.BasicForceLayoutFactory; -import com.powsybl.nad.layout.LayoutFactory; import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.LabelProvider; import com.powsybl.nad.svg.NetworkTestFactory; @@ -54,20 +50,16 @@ protected StyleProvider getStyleProvider(Network network) { return new NominalVoltageStyleProvider(network); } + private ConfigBuilder.StyleProviderFactory getStyleProviderFactory() { + return network -> getStyleProvider(network); + } + @Override protected LabelProvider getLabelProvider(Network network) { return new DefaultLabelProvider(network, getSvgParameters()) { }; } - private LayoutFactory getLayoutFactory() { - return new BasicForceLayoutFactory(); - } - - private IdProvider getIdProvider() { - return new IntIdProvider(); - } - private String getContentFile(Path svgFile) { try (Stream lines = Files.lines(svgFile)) { return lines.collect(Collectors.joining("\n")) + "\n"; @@ -79,14 +71,12 @@ private String getContentFile(Path svgFile) { @Test public void testDrawSvg() { Network network = NetworkTestFactory.createThreeVoltageLevelsFiveBuses(); - NetworkAreaDiagram nad = new NetworkAreaDiagram(network, VoltageLevelFilter.NO_FILTER); - Path svgFile = fileSystem.getPath("nad-test.svg"); - nad.draw(svgFile, - getSvgParameters(), - getLayoutParameters(), - getStyleProvider(network)); - + Config config = new ConfigBuilder() + .withSvgParameters(getSvgParameters()) + .withStyleProviderFactory(getStyleProviderFactory()) + .build(); + NetworkAreaDiagram.draw(network, svgFile, config, VoltageLevelFilter.NO_FILTER); assertEquals(toString("/dangling_line_connected.svg"), getContentFile(svgFile)); } } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutWithInitialPositionsTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutWithInitialPositionsTest.java index d76d89530..cdb596ba9 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutWithInitialPositionsTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutWithInitialPositionsTest.java @@ -11,6 +11,7 @@ import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.nad.AbstractTest; import com.powsybl.nad.NetworkAreaDiagram; +import com.powsybl.nad.ConfigBuilder; import com.powsybl.nad.build.iidm.VoltageLevelFilter; import com.powsybl.nad.model.Graph; import com.powsybl.nad.model.Point; @@ -49,6 +50,10 @@ protected StyleProvider getStyleProvider(Network network) { return new NominalVoltageStyleProvider(network); } + private ConfigBuilder.StyleProviderFactory getStyleProviderFactory() { + return network -> getStyleProvider(network); + } + @Override protected LabelProvider getLabelProvider(Network network) { return new DefaultLabelProvider(network, getSvgParameters()); @@ -73,8 +78,7 @@ private void checkLayoutWithInitialPositions(Network network) { Predicate filter = vl -> vl.getNominalV() >= 100; // Perform an initial layout with only a few voltage levels of the network - NetworkAreaDiagram initialDiagram = new NetworkAreaDiagram(network, filter); - Map initialPositions = layoutResult(initialDiagram); + Map initialPositions = layoutResult(network, filter); // Check initial points contains an entry for all voltage levels filtered network.getVoltageLevelStream().filter(filter).forEach(vl -> assertTrue(initialPositions.containsKey(vl.getId()))); @@ -89,8 +93,7 @@ private void checkLayoutWithInitialPositions(Network network) { private void checkAllInitialPositionsFixed(Network network, Map initialPositions) { // Perform a global layout with all the voltage levels in the network, // giving fixed positions for some equipment - NetworkAreaDiagram completeNetworkDiagram = new NetworkAreaDiagram(network, VoltageLevelFilter.NO_FILTER); - Map allPositions = layoutResult(completeNetworkDiagram, initialPositions); + Map allPositions = layoutResult(network, initialPositions); // Check positions of initial layout have been preserved in global layout for (Map.Entry l : initialPositions.entrySet()) { @@ -107,10 +110,9 @@ private void checkOnlySomeInitialPositionsFixed(Network network, Map fixedNodes = Set.of(initialPositions.keySet().iterator().next()); - Map allPositions = layoutResult(completeNetworkDiagram, initialPositions, fixedNodes); + Map allPositions = layoutResult(network, initialPositions, fixedNodes); // Check positions of initial layout have been preserved in global layout for (Map.Entry l : initialPositions.entrySet()) { @@ -128,22 +130,23 @@ private void checkOnlySomeInitialPositionsFixed(Network network, Map layoutResult(NetworkAreaDiagram nad) { - return layoutResult(nad, Collections.emptyMap(), Collections.emptySet(), Collections.emptyMap()); + private Map layoutResult(Network network, Predicate voltageLevelFilter) { + return layoutResult(network, Collections.emptyMap(), Collections.emptySet(), Collections.emptyMap(), voltageLevelFilter); } - private Map layoutResult(NetworkAreaDiagram nad, Map initialNodePositions, Set nodesWithFixedPositions) { - return layoutResult(nad, initialNodePositions, nodesWithFixedPositions, Collections.emptyMap()); + private Map layoutResult(Network network, Map initialNodePositions, Set nodesWithFixedPositions) { + return layoutResult(network, initialNodePositions, nodesWithFixedPositions, Collections.emptyMap(), VoltageLevelFilter.NO_FILTER); } - private Map layoutResult(NetworkAreaDiagram nad, Map fixedNodePositions) { - return layoutResult(nad, Collections.emptyMap(), Collections.emptySet(), fixedNodePositions); + private Map layoutResult(Network network, Map fixedNodePositions) { + return layoutResult(network, Collections.emptyMap(), Collections.emptySet(), fixedNodePositions, VoltageLevelFilter.NO_FILTER); } - private Map layoutResult(NetworkAreaDiagram nad, + private Map layoutResult(Network network, Map initialNodePositions, Set nodesWithFixedPositions, - Map fixedNodePositions + Map fixedNodePositions, + Predicate voltageLevelFilter ) { LayoutFactory delegateLayoutFactory = new BasicForceLayoutFactory(); PositionsLayoutFactory positionsLayoutFactory = new PositionsLayoutFactory( @@ -152,12 +155,14 @@ private Map layoutResult(NetworkAreaDiagram nad, nodesWithFixedPositions, fixedNodePositions); StringWriter writer = new StringWriter(); - nad.draw(writer, - getSvgParameters(), - getLayoutParameters(), - getStyleProvider(nad.getNetwork()), - getLabelProvider(nad.getNetwork()), - positionsLayoutFactory); + NetworkAreaDiagram.draw(network, writer, + new ConfigBuilder() + .withSvgParameters(getSvgParameters()) + .withLayoutParameters(getLayoutParameters()) + .withStyleProviderFactory(getStyleProviderFactory()) + .withLayoutFactory(positionsLayoutFactory) + .build(), + voltageLevelFilter); return positionsLayoutFactory.getLayoutResult().positions; } diff --git a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayout.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayout.java index fca127b03..9a63cde7d 100644 --- a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayout.java +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayout.java @@ -42,21 +42,21 @@ public CgmesSubstationLayout(SubstationGraph graph, Network network) { @Override public void run(LayoutParameters layoutParam) { - String diagramName = layoutParam.getDiagramName(); + String diagramName = layoutParam.getCgmesDiagramName(); if (!checkDiagram(diagramName, "substation " + graph.getSubstationId())) { return; } LOG.info("Applying CGMES-DL layout to network {}, substation {}, diagram name {}", network.getId(), graph.getSubstationId(), diagramName); for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) { VoltageLevel vl = network.getVoltageLevel(vlGraph.getVoltageLevelInfos().getId()); - setNodeCoordinates(vl, vlGraph, diagramName, layoutParam.isUseName()); + setNodeCoordinates(vl, vlGraph, diagramName, layoutParam.isCgmesUseNames()); } for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) { - vlGraph.getNodes().forEach(node -> shiftNodeCoordinates(node, layoutParam.getScaleFactor())); + vlGraph.getNodes().forEach(node -> shiftNodeCoordinates(node, layoutParam.getCgmesScaleFactor())); } - if (layoutParam.getScaleFactor() != 1) { + if (layoutParam.getCgmesScaleFactor() != 1) { for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) { - vlGraph.getNodes().forEach(node -> scaleNodeCoordinates(node, layoutParam.getScaleFactor())); + vlGraph.getNodes().forEach(node -> scaleNodeCoordinates(node, layoutParam.getCgmesScaleFactor())); } } for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) { diff --git a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayout.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayout.java index 9116d645c..160124059 100644 --- a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayout.java +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayout.java @@ -34,15 +34,15 @@ public CgmesVoltageLevelLayout(VoltageLevelGraph graph, Network network) { @Override public void run(LayoutParameters layoutParam) { VoltageLevel vl = network.getVoltageLevel(graph.getVoltageLevelInfos().getId()); - String diagramName = layoutParam.getDiagramName(); + String diagramName = layoutParam.getCgmesDiagramName(); if (!checkDiagram(diagramName, "voltage level " + vl.getId())) { return; } LOG.info("Applying CGMES-DL layout to network {}, voltage level {}, diagram name {}", network.getId(), graph.getVoltageLevelInfos().getId(), diagramName); - setNodeCoordinates(vl, graph, diagramName, layoutParam.isUseName()); - graph.getNodes().forEach(node -> shiftNodeCoordinates(node, layoutParam.getScaleFactor())); - if (layoutParam.getScaleFactor() != 1) { - graph.getNodes().forEach(node -> scaleNodeCoordinates(node, layoutParam.getScaleFactor())); + setNodeCoordinates(vl, graph, diagramName, layoutParam.isCgmesUseNames()); + graph.getNodes().forEach(node -> shiftNodeCoordinates(node, layoutParam.getCgmesScaleFactor())); + if (layoutParam.getCgmesScaleFactor() != 1) { + graph.getNodes().forEach(node -> scaleNodeCoordinates(node, layoutParam.getCgmesScaleFactor())); } } } diff --git a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayout.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayout.java index 63ceb95f6..36def3cee 100644 --- a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayout.java +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayout.java @@ -50,14 +50,14 @@ public void run(LayoutParameters layoutParam) { LOG.warn("No substations in the zone: skipping coordinates assignment"); return; } - String diagramName = layoutParam.getDiagramName(); + String diagramName = layoutParam.getCgmesDiagramName(); if (!checkDiagram(diagramName, "")) { return; } // assign coordinates for (VoltageLevelGraph vlGraph : vlGraphs) { VoltageLevel vl = network.getVoltageLevel(vlGraph.getVoltageLevelInfos().getId()); - setNodeCoordinates(vl, vlGraph, diagramName, layoutParam.isUseName()); + setNodeCoordinates(vl, vlGraph, diagramName, layoutParam.isCgmesUseNames()); } for (BranchEdge edge : graph.getLineEdges()) { VoltageLevel vl = network.getVoltageLevel(graph.getVoltageLevelGraph(edge.getNode1()).getVoltageLevelInfos().getId()); @@ -65,18 +65,18 @@ public void run(LayoutParameters layoutParam) { } // shift coordinates for (VoltageLevelGraph vlGraph : vlGraphs) { - vlGraph.getNodes().forEach(node -> shiftNodeCoordinates(node, layoutParam.getScaleFactor())); + vlGraph.getNodes().forEach(node -> shiftNodeCoordinates(node, layoutParam.getCgmesScaleFactor())); } for (BranchEdge edge : graph.getLineEdges()) { - shiftLineCoordinates(edge, layoutParam.getScaleFactor()); + shiftLineCoordinates(edge, layoutParam.getCgmesScaleFactor()); } // scale coordinates - if (layoutParam.getScaleFactor() != 1) { + if (layoutParam.getCgmesScaleFactor() != 1) { for (VoltageLevelGraph vlGraph : vlGraphs) { - vlGraph.getNodes().forEach(node -> scaleNodeCoordinates(node, layoutParam.getScaleFactor())); + vlGraph.getNodes().forEach(node -> scaleNodeCoordinates(node, layoutParam.getCgmesScaleFactor())); } for (BranchEdge edge : graph.getLineEdges()) { - scaleLineCoordinates(edge, layoutParam.getScaleFactor()); + scaleLineCoordinates(edge, layoutParam.getCgmesScaleFactor()); } } } diff --git a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesDlExporterTool.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesDlExporterTool.java index d585c021f..9d5e94dcc 100644 --- a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesDlExporterTool.java +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesDlExporterTool.java @@ -118,7 +118,7 @@ public void run(CommandLine line, ToolRunningContext context) { Network network = Network.read(inputFile); context.getOutputStream().println("Generating layout for the network ..."); - LayoutToCgmesExtensionsConverter lTranslator = new LayoutToCgmesExtensionsConverter(sFactory, vFactory, new LayoutParameters().setUseName(true)); + LayoutToCgmesExtensionsConverter lTranslator = new LayoutToCgmesExtensionsConverter(sFactory, vFactory, new LayoutParameters().setCgmesUseNames(true)); String diagramName = toolOptions.getValue(DIAGRAM_NAME).orElse(null); lTranslator.convertLayout(network, diagramName); diff --git a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsConverter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsConverter.java index a211cad91..f05a921e0 100644 --- a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsConverter.java +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsConverter.java @@ -47,7 +47,7 @@ public LayoutToCgmesExtensionsConverter(SubstationLayoutFactory sFactory, Voltag } public LayoutToCgmesExtensionsConverter() { - this(new HorizontalSubstationLayoutFactory(), new PositionVoltageLevelLayoutFactory(new PositionByClustering()), new LayoutParameters().setUseName(true)); + this(new HorizontalSubstationLayoutFactory(), new PositionVoltageLevelLayoutFactory(new PositionByClustering()), new LayoutParameters().setCgmesUseNames(true)); } private int getMaxSeq(List diagramPoints) { diff --git a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractCgmesVoltageLevelLayoutTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractCgmesVoltageLevelLayoutTest.java index 6503a7167..8848ae62b 100644 --- a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractCgmesVoltageLevelLayoutTest.java +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractCgmesVoltageLevelLayoutTest.java @@ -27,8 +27,8 @@ public abstract class AbstractCgmesVoltageLevelLayoutTest { protected void test(VoltageLevel vl) { VoltageLevelGraph graph = new NetworkGraphBuilder(vl.getNetwork()).buildVoltageLevelGraph(vl.getId()); LayoutParameters layoutParameters = new LayoutParameters(); - layoutParameters.setScaleFactor(2); - layoutParameters.setDiagramName(DIAGRAM_NAME); + layoutParameters.setCgmesScaleFactor(2); + layoutParameters.setCgmesDiagramName(DIAGRAM_NAME); new CgmesVoltageLevelLayout(graph, vl.getNetwork()).run(layoutParameters); checkGraph(graph); checkCoordinates(graph); diff --git a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/BusTopologyTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/BusTopologyTest.java index ef3ab290d..a15bd173b 100644 --- a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/BusTopologyTest.java +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/BusTopologyTest.java @@ -312,8 +312,8 @@ public void testVoltageLevelLayout() { public void testSubstationLayout() { SubstationGraph graph = new NetworkGraphBuilder(network).buildSubstationGraph(substation.getId()); LayoutParameters layoutParameters = new LayoutParameters(); - layoutParameters.setScaleFactor(2); - layoutParameters.setDiagramName(DIAGRAM_NAME); + layoutParameters.setCgmesScaleFactor(2); + layoutParameters.setCgmesDiagramName(DIAGRAM_NAME); new CgmesSubstationLayout(graph, network).run(layoutParameters); checkGraph(graph.getVoltageLevel(voltageLevel.getId())); checkCoordinates(graph.getVoltageLevel(voltageLevel.getId())); @@ -466,8 +466,8 @@ private void checkSubstationTwt(SubstationGraph graph, int edgesNumber) { public void testSubstationLayout3WT() { SubstationGraph graph = new NetworkGraphBuilder(networkWith3WT).buildSubstationGraph(substation2.getId()); LayoutParameters layoutParameters = new LayoutParameters(); - layoutParameters.setScaleFactor(2); - layoutParameters.setDiagramName(DIAGRAM_NAME); + layoutParameters.setCgmesScaleFactor(2); + layoutParameters.setCgmesDiagramName(DIAGRAM_NAME); new CgmesSubstationLayout(graph, networkWith3WT).run(layoutParameters); checkGraph(graph.getVoltageLevel(voltageLevel21.getId())); checkCoordinates(graph.getVoltageLevel(voltageLevel21.getId())); diff --git a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutTest.java index 510dde4e2..73ce67d40 100644 --- a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutTest.java +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutTest.java @@ -204,8 +204,8 @@ public void test() { List zone = Arrays.asList(SUBSTATION_1_ID, SUBSTATION_2_ID); ZoneGraph graph = new NetworkGraphBuilder(network).buildZoneGraph(zone); LayoutParameters layoutParameters = new LayoutParameters(); - layoutParameters.setScaleFactor(2); - layoutParameters.setDiagramName(DIAGRAM_ID); + layoutParameters.setCgmesScaleFactor(2); + layoutParameters.setCgmesDiagramName(DIAGRAM_ID); new CgmesZoneLayout(graph, network).run(layoutParameters); assertEquals(2, graph.getSubstations().size()); diff --git a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/DoubleBusbarSectionTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/DoubleBusbarSectionTest.java index 297b37cb4..8948bd2a1 100644 --- a/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/DoubleBusbarSectionTest.java +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/DoubleBusbarSectionTest.java @@ -132,8 +132,8 @@ private VoltageLevelGraph processCgmesLayout() { NetworkGraphBuilder graphBuilder = new NetworkGraphBuilder(voltageLevel.getNetwork()); VoltageLevelGraph graph = graphBuilder.buildVoltageLevelGraph(voltageLevel.getId()); LayoutParameters layoutParameters = new LayoutParameters(); - layoutParameters.setScaleFactor(1); - layoutParameters.setDiagramName(DIAGRAM_NAME); + layoutParameters.setCgmesScaleFactor(1); + layoutParameters.setCgmesDiagramName(DIAGRAM_NAME); new CgmesVoltageLevelLayout(graph, voltageLevel.getNetwork()).run(layoutParameters); return graph; } diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/Config.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/Config.java new file mode 100644 index 000000000..939f44236 --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/Config.java @@ -0,0 +1,68 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.sld; + +import com.powsybl.sld.layout.LayoutParameters; +import com.powsybl.sld.layout.SubstationLayoutFactory; +import com.powsybl.sld.layout.VoltageLevelLayoutFactory; +import com.powsybl.sld.library.ComponentLibrary; +import com.powsybl.sld.svg.LabelProvider; +import com.powsybl.sld.svg.DiagramStyleProvider; +import com.powsybl.sld.svg.SvgParameters; + +/** + * + * @author Sophie Frasnedo + */ +public class Config { + + SvgParameters svgParameters; + LayoutParameters layoutParameters; + ComponentLibrary componentLibrary; + LabelProvider labelProvider; + DiagramStyleProvider diagramStyleProvider; + SubstationLayoutFactory substationLayoutFactory; + VoltageLevelLayoutFactory voltageLevelLayoutFactory; + + public Config(SvgParameters svgParameters, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, LabelProvider labelProvider, DiagramStyleProvider diagramStyleProvider, SubstationLayoutFactory substationLayoutFactory, VoltageLevelLayoutFactory voltageLevelLayoutFactory) { + this.svgParameters = svgParameters; + this.layoutParameters = layoutParameters; + this.componentLibrary = componentLibrary; + this.labelProvider = labelProvider; + this.diagramStyleProvider = diagramStyleProvider; + this.substationLayoutFactory = substationLayoutFactory; + this.voltageLevelLayoutFactory = voltageLevelLayoutFactory; + } + + public SvgParameters getSvgParameters() { + return svgParameters; + } + + public LayoutParameters getLayoutParameters() { + return layoutParameters; + } + + public ComponentLibrary getComponentLibrary() { + return componentLibrary; + } + + public LabelProvider getDiagramLabelProvider() { + return labelProvider; + } + + public DiagramStyleProvider getDiagramStyleProvider() { + return diagramStyleProvider; + } + + public SubstationLayoutFactory getSubstationLayoutFactory() { + return substationLayoutFactory; + } + + public VoltageLevelLayoutFactory getVoltageLevelLayoutFactory() { + return voltageLevelLayoutFactory; + } +} diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/ConfigBuilder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/ConfigBuilder.java new file mode 100644 index 000000000..0c7064929 --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/ConfigBuilder.java @@ -0,0 +1,82 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package com.powsybl.sld; + +import com.powsybl.iidm.network.Network; +import com.powsybl.sld.layout.*; +import com.powsybl.sld.library.ComponentLibrary; +import com.powsybl.sld.library.ConvergenceComponentLibrary; +import com.powsybl.sld.svg.*; +import com.powsybl.sld.util.TopologicalStyleProvider; + +/** + * + * @author Sophie Frasnedo + */ +public class ConfigBuilder { + + SvgParameters svgParameters = new SvgParameters(); + LayoutParameters layoutParameters = new LayoutParameters(); + ComponentLibrary componentLibrary = new ConvergenceComponentLibrary(); + LabelProvider labelProvider; + LabelProviderFactory labelProviderFactory; + DiagramStyleProvider diagramStyleProvider; + VoltageLevelLayoutFactory voltageLevelLayoutFactory; + SubstationLayoutFactory substationLayoutFactory = new HorizontalSubstationLayoutFactory(); + Network network; + + public ConfigBuilder(Network network) { + this.network = network; + voltageLevelLayoutFactory = network != null ? new SmartVoltageLevelLayoutFactory(network) : new PositionVoltageLevelLayoutFactory(); + labelProviderFactory = new DefaultLabelProviderFactory(); + labelProvider = network != null ? labelProviderFactory.create(network, componentLibrary, layoutParameters, svgParameters) : null; + diagramStyleProvider = new TopologicalStyleProvider(network); + } + + public ConfigBuilder withSvgParameters(SvgParameters svgParameters) { + this.svgParameters = svgParameters; + labelProvider = network != null ? labelProviderFactory.create(network, componentLibrary, layoutParameters, svgParameters) : null; + return this; + } + + public ConfigBuilder withLayoutParameters(LayoutParameters layoutParameters) { + this.layoutParameters = layoutParameters; + this.labelProvider = network != null ? labelProviderFactory.create(network, componentLibrary, layoutParameters, svgParameters) : null; + return this; + } + + public ConfigBuilder withComponentLibrary(ComponentLibrary componentLibrary) { + this.componentLibrary = componentLibrary; + this.labelProvider = network != null ? labelProviderFactory.create(network, componentLibrary, layoutParameters, svgParameters) : null; + return this; + } + + public ConfigBuilder withDiagramLabelProviderFactory(LabelProviderFactory labelProviderFactory) { + this.labelProvider = labelProviderFactory.create(network, componentLibrary, layoutParameters, svgParameters); + return this; + } + + public ConfigBuilder withDiagramStyleProvider(DiagramStyleProvider diagramStyleProvider) { + this.diagramStyleProvider = diagramStyleProvider; + return this; + } + + public ConfigBuilder withVoltageLevelLayoutFactory(VoltageLevelLayoutFactory voltageLevelLayoutFactory) { + this.voltageLevelLayoutFactory = voltageLevelLayoutFactory; + return this; + } + + public ConfigBuilder withSubstationLayoutFactory(SubstationLayoutFactory substationLayoutFactory) { + this.substationLayoutFactory = substationLayoutFactory; + return this; + } + + public Config build() { + return new Config(svgParameters, layoutParameters, componentLibrary, labelProvider, diagramStyleProvider, substationLayoutFactory, voltageLevelLayoutFactory); + } +} diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagram.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagram.java index 3355d34a3..397b7b4d3 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagram.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagram.java @@ -11,11 +11,8 @@ import com.powsybl.iidm.network.Network; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.layout.*; -import com.powsybl.sld.library.ComponentLibrary; -import com.powsybl.sld.library.ConvergenceComponentLibrary; import com.powsybl.sld.model.graphs.*; import com.powsybl.sld.svg.*; -import com.powsybl.sld.util.TopologicalStyleProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,32 +37,6 @@ public final class SingleLineDiagram { private SingleLineDiagram() { } - public static void draw(Network network, String id, String svgFile) { - draw(network, id, Path.of(svgFile)); - } - - public static void draw(Network network, String id, Path svgFile) { - draw(network, id, svgFile, new LayoutParameters()); - } - - public static void draw(Network network, String id, Path svgFile, LayoutParameters layoutParameters) { - draw(network, id, svgFile, layoutParameters, new ConvergenceComponentLibrary()); - } - - public static void draw(Network network, String id, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary) { - draw(network, id, svgFile, layoutParameters, componentLibrary, - new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters), - new TopologicalStyleProvider(network), - ""); - } - - public static void draw(Network network, String id, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - draw(network, id, svgFile, layoutParameters, componentLibrary, - new HorizontalSubstationLayoutFactory(), new SmartVoltageLevelLayoutFactory(network), - initProvider, styleProvider, prefixId); - } - private static Identifiable getIdentifiable(Network network, String id) { Identifiable identifiable = network.getIdentifiable(id); if (identifiable == null) { @@ -74,17 +45,26 @@ private static Identifiable getIdentifiable(Network network, String id) { return identifiable; } - public static void draw(Network network, String id, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - SubstationLayoutFactory sLayoutFactory, VoltageLevelLayoutFactory vLayoutFactory, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { + /* draw functions with file */ + + public static void draw(Network network, String id, String svgFile) { + draw(network, id, Path.of(svgFile)); + } + + public static void draw(Network network, String id, Path svgFile) { + draw(network, id, svgFile, new ConfigBuilder(network).build()); + } + + public static void draw(Network network, String id, Path svgFile, Config config) { Objects.requireNonNull(network); Objects.requireNonNull(id); Identifiable identifiable = getIdentifiable(network, id); + if (identifiable.getType() == VOLTAGE_LEVEL) { - drawVoltageLevel(network, id, svgFile, layoutParameters, componentLibrary, vLayoutFactory, initProvider, styleProvider, prefixId); + drawVoltageLevel(network, id, svgFile, config); } else if (identifiable.getType() == SUBSTATION) { - drawSubstation(network, id, svgFile, layoutParameters, componentLibrary, sLayoutFactory, vLayoutFactory, initProvider, styleProvider, prefixId); + drawSubstation(network, id, svgFile, config); } else { throw new PowsyblException("Given id '" + id + "' is not a substation or voltage level id in given network '" + network.getId() + "'"); } @@ -94,33 +74,19 @@ public static void drawVoltageLevel(Network network, String id, String svgFile) drawVoltageLevel(network, id, Path.of(svgFile)); } - public static void drawVoltageLevel(Network network, String id, Path svgFile) { - drawVoltageLevel(network, id, svgFile, new LayoutParameters()); + public static void drawVoltageLevel(Network network, String voltageLevelId, Path svgFile) { + drawVoltageLevel(network, voltageLevelId, svgFile, new ConfigBuilder(network).build()); } - public static void drawVoltageLevel(Network network, String id, Path svgFile, LayoutParameters layoutParameters) { - drawVoltageLevel(network, id, svgFile, layoutParameters, new ConvergenceComponentLibrary()); - } - - public static void drawVoltageLevel(Network network, String id, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary) { - drawVoltageLevel(network, id, svgFile, layoutParameters, componentLibrary, - new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters), - new TopologicalStyleProvider(network), - ""); - } + private static void drawVoltageLevel(Network network, String voltageLevelId, Path svgFile, Config config) { + LayoutParameters layoutParameters = config.getLayoutParameters(); + VoltageLevelLayoutFactory voltageLevelLayoutFactory = config.getVoltageLevelLayoutFactory(); - public static void drawVoltageLevel(Network network, String id, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - drawVoltageLevel(network, id, svgFile, layoutParameters, componentLibrary, new SmartVoltageLevelLayoutFactory(network), initProvider, styleProvider, prefixId); - } - - private static void drawVoltageLevel(Network network, String voltageLevelId, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - VoltageLevelLayoutFactory vLayoutFactory, DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - Objects.requireNonNull(vLayoutFactory); + Objects.requireNonNull(voltageLevelLayoutFactory); VoltageLevelGraph voltageLevelGraph = new NetworkGraphBuilder(network).buildVoltageLevelGraph(voltageLevelId); - vLayoutFactory.create(voltageLevelGraph).run(layoutParameters); - draw(voltageLevelGraph, svgFile, layoutParameters, componentLibrary, initProvider, styleProvider, prefixId); + voltageLevelLayoutFactory.create(voltageLevelGraph).run(layoutParameters); + draw(voltageLevelGraph, svgFile, config); } public static void drawSubstation(Network network, String id, String svgFile) { @@ -128,40 +94,24 @@ public static void drawSubstation(Network network, String id, String svgFile) { } public static void drawSubstation(Network network, String id, Path svgFile) { - drawSubstation(network, id, svgFile, new LayoutParameters()); + drawSubstation(network, id, svgFile, new ConfigBuilder(network).build()); } - public static void drawSubstation(Network network, String id, Path svgFile, LayoutParameters layoutParameters) { - drawSubstation(network, id, svgFile, layoutParameters, new ConvergenceComponentLibrary()); - } + private static void drawSubstation(Network network, String substationId, Path svgFile, Config config) { - public static void drawSubstation(Network network, String id, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary) { - drawSubstation(network, id, svgFile, layoutParameters, componentLibrary, - new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters), - new TopologicalStyleProvider(network), - ""); - } + LayoutParameters layoutParameters = config.getLayoutParameters(); + VoltageLevelLayoutFactory voltageLevelLayoutFactory = config.getVoltageLevelLayoutFactory(); + SubstationLayoutFactory substationLayoutFactory = config.getSubstationLayoutFactory(); - public static void drawSubstation(Network network, String id, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - drawSubstation(network, id, svgFile, layoutParameters, componentLibrary, - new HorizontalSubstationLayoutFactory(), new SmartVoltageLevelLayoutFactory(network), - initProvider, styleProvider, prefixId); - } - - private static void drawSubstation(Network network, String substationId, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - SubstationLayoutFactory sLayoutFactory, VoltageLevelLayoutFactory vLayoutFactory, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - Objects.requireNonNull(sLayoutFactory); - Objects.requireNonNull(vLayoutFactory); + Objects.requireNonNull(substationLayoutFactory); + Objects.requireNonNull(voltageLevelLayoutFactory); SubstationGraph substationGraph = new NetworkGraphBuilder(network).buildSubstationGraph(substationId); - sLayoutFactory.create(substationGraph, vLayoutFactory).run(layoutParameters); - draw(substationGraph, svgFile, layoutParameters, componentLibrary, initProvider, styleProvider, prefixId); + substationLayoutFactory.create(substationGraph, voltageLevelLayoutFactory).run(layoutParameters); + draw(substationGraph, svgFile, config); } - public static void draw(Graph graph, Path svgFile, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { + public static void draw(Graph graph, Path svgFile, Config config) { Objects.requireNonNull(svgFile); Path dir = svgFile.toAbsolutePath().getParent(); @@ -171,132 +121,76 @@ public static void draw(Graph graph, Path svgFile, LayoutParameters layoutParame } try (Writer writerForSvg = Files.newBufferedWriter(svgFile, StandardCharsets.UTF_8); Writer metadataWriter = Files.newBufferedWriter(dir.resolve(svgFileName.replace(".svg", "_metadata.json")), StandardCharsets.UTF_8)) { - draw(graph, writerForSvg, metadataWriter, layoutParameters, componentLibrary, initProvider, styleProvider, prefixId); + draw(graph, writerForSvg, metadataWriter, config); } catch (IOException e) { throw new UncheckedIOException(e); } } - public static void draw(Network network, String id, Writer writerForSvg, Writer metadataWriter) { - draw(network, id, writerForSvg, metadataWriter, new LayoutParameters()); - } - - public static void draw(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters) { - draw(network, id, writerForSvg, metadataWriter, layoutParameters, new ConvergenceComponentLibrary()); - } - - public static void draw(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary) { - draw(network, id, writerForSvg, metadataWriter, layoutParameters, componentLibrary, - new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters), - new TopologicalStyleProvider(network), - ""); - } + /* draw functions with writer */ - public static void draw(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - draw(network, id, writerForSvg, metadataWriter, layoutParameters, componentLibrary, - new HorizontalSubstationLayoutFactory(), new SmartVoltageLevelLayoutFactory(network), - initProvider, styleProvider, prefixId); + public static void draw(Network network, String id, Writer writerForSvg, Writer metadataWriter) { + draw(network, id, writerForSvg, metadataWriter, new ConfigBuilder(network).build()); } - public static void draw(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - SubstationLayoutFactory sLayoutFactory, VoltageLevelLayoutFactory vLayoutFactory, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { + public static void draw(Network network, String id, Writer writerForSvg, Writer metadataWriter, Config config) { Objects.requireNonNull(network); Objects.requireNonNull(id); Identifiable identifiable = getIdentifiable(network, id); if (identifiable.getType() == VOLTAGE_LEVEL) { - drawVoltageLevel(network, id, writerForSvg, metadataWriter, layoutParameters, componentLibrary, vLayoutFactory, initProvider, styleProvider, prefixId); + drawVoltageLevel(network, id, writerForSvg, metadataWriter, config); } else if (identifiable.getType() == SUBSTATION) { - drawSubstation(network, id, writerForSvg, metadataWriter, layoutParameters, componentLibrary, sLayoutFactory, vLayoutFactory, initProvider, styleProvider, prefixId); + drawSubstation(network, id, writerForSvg, metadataWriter, config); } else { throw new PowsyblException("Given id '" + id + "' is not a substation or voltage level id in given network '" + network.getId() + "'"); } } - public static void drawVoltageLevel(Network network, String id, Writer writerForSvg, Writer metadataWriter) { - drawVoltageLevel(network, id, writerForSvg, metadataWriter, new LayoutParameters()); - } - - public static void drawVoltageLevel(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters) { - drawVoltageLevel(network, id, writerForSvg, metadataWriter, layoutParameters, new ConvergenceComponentLibrary()); - } - - public static void drawVoltageLevel(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary) { - drawVoltageLevel(network, id, writerForSvg, metadataWriter, layoutParameters, componentLibrary, - new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters), - new TopologicalStyleProvider(network), - ""); - } - - public static void drawVoltageLevel(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - drawVoltageLevel(network, id, writerForSvg, metadataWriter, layoutParameters, componentLibrary, new SmartVoltageLevelLayoutFactory(network), initProvider, styleProvider, prefixId); - } + public static void drawVoltageLevel(Network network, String voltageLevelId, Writer writerForSvg, Writer metadataWriter, Config config) { + LayoutParameters layoutParameters = config.getLayoutParameters(); + VoltageLevelLayoutFactory voltageLevelLayoutFactory = config.getVoltageLevelLayoutFactory(); - private static void drawVoltageLevel(Network network, String voltageLevelId, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - VoltageLevelLayoutFactory vLayoutFactory, DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - Objects.requireNonNull(vLayoutFactory); + Objects.requireNonNull(voltageLevelLayoutFactory); VoltageLevelGraph voltageLevelGraph = new NetworkGraphBuilder(network).buildVoltageLevelGraph(voltageLevelId); - vLayoutFactory.create(voltageLevelGraph).run(layoutParameters); - draw(voltageLevelGraph, writerForSvg, metadataWriter, layoutParameters, componentLibrary, initProvider, styleProvider, prefixId); - } - - public static void drawSubstation(Network network, String id, Writer writerForSvg, Writer metadataWriter) { - drawSubstation(network, id, writerForSvg, metadataWriter, new LayoutParameters()); - } - - public static void drawSubstation(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters) { - drawSubstation(network, id, writerForSvg, metadataWriter, layoutParameters, new ConvergenceComponentLibrary()); - } - - public static void drawSubstation(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary) { - drawSubstation(network, id, writerForSvg, metadataWriter, layoutParameters, componentLibrary, - new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters), - new TopologicalStyleProvider(network), - ""); + voltageLevelLayoutFactory.create(voltageLevelGraph).run(layoutParameters); + draw(voltageLevelGraph, writerForSvg, metadataWriter, config); } - public static void drawSubstation(Network network, String id, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - drawSubstation(network, id, writerForSvg, metadataWriter, layoutParameters, componentLibrary, - new HorizontalSubstationLayoutFactory(), new SmartVoltageLevelLayoutFactory(network), - initProvider, styleProvider, prefixId); - } + public static void drawSubstation(Network network, String substationId, Writer writerForSvg, Writer metadataWriter, Config config) { + LayoutParameters layoutParameters = config.getLayoutParameters(); + VoltageLevelLayoutFactory voltageLevelLayoutFactory = config.getVoltageLevelLayoutFactory(); + SubstationLayoutFactory substationLayoutFactory = config.getSubstationLayoutFactory(); - private static void drawSubstation(Network network, String substationId, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - SubstationLayoutFactory sLayoutFactory, VoltageLevelLayoutFactory vLayoutFactory, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - Objects.requireNonNull(sLayoutFactory); - Objects.requireNonNull(vLayoutFactory); + Objects.requireNonNull(substationLayoutFactory); + Objects.requireNonNull(voltageLevelLayoutFactory); SubstationGraph substationGraph = new NetworkGraphBuilder(network).buildSubstationGraph(substationId); - sLayoutFactory.create(substationGraph, vLayoutFactory).run(layoutParameters); - draw(substationGraph, writerForSvg, metadataWriter, layoutParameters, componentLibrary, initProvider, styleProvider, prefixId); - } - - public static void draw(Graph graph, Writer writerForSvg, Writer metadataWriter, LayoutParameters layoutParameters, ComponentLibrary componentLibrary, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { - draw(graph, writerForSvg, metadataWriter, new DefaultSVGWriter(componentLibrary, layoutParameters), - initProvider, styleProvider, prefixId); + substationLayoutFactory.create(substationGraph, voltageLevelLayoutFactory).run(layoutParameters); + draw(substationGraph, writerForSvg, metadataWriter, config); } - public static void draw(Graph graph, Writer writerForSvg, Writer metadataWriter, DefaultSVGWriter svgWriter, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, String prefixId) { + public static void draw(Graph graph, Writer writerForSvg, Writer metadataWriter, + Config config) { Objects.requireNonNull(graph); - Objects.requireNonNull(svgWriter); - Objects.requireNonNull(initProvider); - Objects.requireNonNull(styleProvider); - Objects.requireNonNull(prefixId); Objects.requireNonNull(writerForSvg); Objects.requireNonNull(metadataWriter); + LabelProvider labelProvider = config.getDiagramLabelProvider(); + DiagramStyleProvider diagramStyleProvider = config.getDiagramStyleProvider(); + SvgParameters svgParameters = config.getSvgParameters(); + + Objects.requireNonNull(labelProvider); + Objects.requireNonNull(diagramStyleProvider); + Objects.requireNonNull(svgParameters); + + DefaultSVGWriter svgWriter = new DefaultSVGWriter(config.getComponentLibrary(), config.getLayoutParameters(), config.getSvgParameters()); + LOGGER.info("Writing SVG and JSON metadata files..."); // write SVG file - GraphMetadata metadata = svgWriter.write(prefixId, graph, initProvider, styleProvider, writerForSvg); + GraphMetadata metadata = svgWriter.write(svgParameters.getPrefixId(), graph, labelProvider, diagramStyleProvider, writerForSvg); // write metadata JSON file metadata.writeJson(metadataWriter); diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagramTool.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagramTool.java index e62ae5d2b..569728bb8 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagramTool.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagramTool.java @@ -11,11 +11,6 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.Substation; import com.powsybl.iidm.network.VoltageLevel; -import com.powsybl.sld.layout.*; -import com.powsybl.sld.library.ComponentLibrary; -import com.powsybl.sld.library.ConvergenceComponentLibrary; -import com.powsybl.sld.svg.DefaultDiagramLabelProvider; -import com.powsybl.sld.util.TopologicalStyleProvider; import com.powsybl.tools.Command; import com.powsybl.tools.Tool; import com.powsybl.tools.ToolOptions; @@ -93,56 +88,36 @@ private Path getSvgFile(Path outputDir, String id) { } } - static class SvgGenerationConfig { - - ComponentLibrary componentLibrary = new ConvergenceComponentLibrary(); - - LayoutParameters layoutParameters = new LayoutParameters(); - - VoltageLevelLayoutFactory voltageLevelLayoutFactory; - - SubstationLayoutFactory substationLayoutFactory = new HorizontalSubstationLayoutFactory(); - - SvgGenerationConfig(Network network) { - voltageLevelLayoutFactory = new SmartVoltageLevelLayoutFactory(network); - } - } - - private void generateSvg(ToolRunningContext context, Path outputDir, SvgGenerationConfig generationConfig, - String vlOrSubstationId, Network network) { + private void generateSvg(ToolRunningContext context, Path outputDir, String vlOrSubstationId, Network network) { Path svgFile = getSvgFile(outputDir, vlOrSubstationId); context.getOutputStream().println("Generating '" + svgFile + "'"); try { - SingleLineDiagram.draw(network, vlOrSubstationId, svgFile, - generationConfig.layoutParameters, generationConfig.componentLibrary, - generationConfig.substationLayoutFactory, generationConfig.voltageLevelLayoutFactory, - new DefaultDiagramLabelProvider(network, generationConfig.componentLibrary, generationConfig.layoutParameters), - new TopologicalStyleProvider(network), ""); + SingleLineDiagram.draw(network, vlOrSubstationId, svgFile, new ConfigBuilder(network).build()); } catch (Exception e) { e.printStackTrace(context.getErrorStream()); } } - private void generateSome(ToolRunningContext context, Path outputDir, List ids, Network network, SvgGenerationConfig generationConfig) { + private void generateSome(ToolRunningContext context, Path outputDir, List ids, Network network) { for (String id : ids) { - generateSvg(context, outputDir, generationConfig, id, network); + generateSvg(context, outputDir, id, network); } } private void generateAll(ToolRunningContext context, boolean allVoltageLevels, boolean allSubstations, - Path outputDir, Network network, SvgGenerationConfig generationConfig) { + Path outputDir, Network network) { // by default, export all voltage levels if no id given and no // additional option (all-voltage-levels or all-substations) given if (allVoltageLevels || !allSubstations) { // export all voltage levels for (VoltageLevel vl : network.getVoltageLevels()) { - generateSvg(context, outputDir, generationConfig, vl.getId(), network); + generateSvg(context, outputDir, vl.getId(), network); } } if (allSubstations) { // export all substations for (Substation s : network.getSubstations()) { - generateSvg(context, outputDir, generationConfig, s.getId(), network); + generateSvg(context, outputDir, s.getId(), network); } } } @@ -158,13 +133,12 @@ public void run(CommandLine line, ToolRunningContext context) { if (network == null) { throw new PowsyblException("File '" + inputFile + "' is not importable"); } - SvgGenerationConfig generationConfig = new SvgGenerationConfig(network); if (ids.isEmpty()) { boolean allVoltageLevels = toolOptions.hasOption(ALL_VOLTAGE_LEVELS); boolean allSubstations = toolOptions.hasOption(ALL_SUBSTATIONS); - generateAll(context, allVoltageLevels, allSubstations, outputDir, network, generationConfig); + generateAll(context, allVoltageLevels, allSubstations, outputDir, network); } else { - generateSome(context, outputDir, ids, network, generationConfig); + generateSome(context, outputDir, ids, network); } } } diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java index 6d70a0477..e215cc330 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java @@ -1,3 +1,9 @@ +/** + * Copyright (c) 2022, 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.builders; import com.powsybl.sld.model.coordinate.Direction; @@ -12,6 +18,11 @@ import static com.powsybl.sld.model.nodes.NodeSide.*; +/** + * + * @author Florian Dupuy + * @author Benoit Jeanson + */ public class SubstationRawBuilder { SubstationGraph substationGraph; diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/VoltageLevelRawBuilder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/VoltageLevelRawBuilder.java index 5fdaaa53a..1917bd78c 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/VoltageLevelRawBuilder.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/VoltageLevelRawBuilder.java @@ -1,3 +1,9 @@ +/** + * Copyright (c) 2022, 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.builders; import com.powsybl.sld.model.coordinate.Direction; @@ -8,6 +14,11 @@ import java.util.function.Function; +/** + * + * @author Florian Dupuy + * @author Benoit Jeanson + */ public class VoltageLevelRawBuilder { private final VoltageLevelInfos voltageLevelInfos; diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutParameters.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutParameters.java index 6033f3c58..a94e4452c 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutParameters.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutParameters.java @@ -9,7 +9,6 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; -import com.powsybl.diagram.util.ValueFormatter; import com.powsybl.sld.library.ComponentSize; import com.powsybl.sld.library.ComponentTypeName; @@ -26,78 +25,26 @@ public class LayoutParameters { private double verticalSpaceBus = 25; private double horizontalBusPadding = 20; - private double cellWidth = 50; - private double externCellHeight = 250; private double internCellHeight = 40; - private double stackHeight = 30; - - private boolean showGrid = false; - - private boolean showInternalNodes = false; - - private double scaleFactor = 1; - - private String diagramName = null; - - private boolean drawStraightWires = false; - private double horizontalSnakeLinePadding = 20; private double verticalSnakeLinePadding = 25; - private double feederInfosOuterMargin = 20; private double spaceForFeederInfos = 50; - - private boolean avoidSVGComponentsDuplication = false; - private boolean adaptCellHeightToContent = true; private double maxComponentHeight = 12; private double minSpaceBetweenComponents = 15; private double minExternCellHeight = 80; - - private double angleLabelShift = 15.; - private boolean labelCentered = false; - private boolean labelDiagonal = false; - - private boolean highlightLineState = true; - private boolean tooltipEnabled = false; - - private boolean addNodesInfos = false; - - private boolean feederInfoSymmetry = false; - - private CssLocation cssLocation = CssLocation.INSERTED_IN_SVG; - private Padding voltageLevelPadding = new Padding(20, 60, 20, 60); - private Padding diagramPadding = new Padding(20); - - private boolean svgWidthAndHeightAdded = false; - - private boolean useName = false; - - private double feederInfosIntraMargin = 10; - private Alignment busbarsAlignment = Alignment.FIRST; - private boolean removeFictitiousSwitchNodes = false; + private List componentsOnBusbars = List.of(ComponentTypeName.DISCONNECTOR); // Components which are displayed on busbars - /** - * Can be used as horizontal shifting value for busInfo indicator. - * Could be negative value. - */ - private double busInfoMargin = 0.0; - - /** Components which are displayed on busbars */ - private List componentsOnBusbars = List.of(ComponentTypeName.DISCONNECTOR); - private String languageTag = "en"; - private int voltageValuePrecision = 1; - private int powerValuePrecision = 0; - private int angleValuePrecision = 1; - - /** em dash unicode for undefined value */ - private String undefinedValueSymbol = "\u2014"; + private double cgmesScaleFactor = 1; + private String cgmesDiagramName = null; + private boolean cgmesUseNames = true; @JsonIgnore private Map componentsSize; @@ -115,39 +62,18 @@ public LayoutParameters(@JsonProperty("voltageLevelPadding") Padding voltageLeve @JsonProperty("externCellHeight") double externCellHeight, @JsonProperty("internCellHeight") double internCellHeight, @JsonProperty("stackHeight") double stackHeight, - @JsonProperty("showGrid") boolean showGrid, - @JsonProperty("tooltipEnabled") boolean tooltipEnabled, - @JsonProperty("showInternalNodes") boolean showInternalNodes, - @JsonProperty("scaleFactor") double scaleFactor, - @JsonProperty("drawStraightWires") boolean drawStraightWires, + @JsonProperty("cgmesScaleFactor") double cgmesScaleFactor, + @JsonProperty("cgmesDiagramName") String cgmesDiagramName, + @JsonProperty("cgmesUseNames") boolean cgmesUseNames, @JsonProperty("horizontalSnakeLinePadding") double horizontalSnakeLinePadding, @JsonProperty("verticalSnakeLinePadding") double verticalSnakeLinePadding, - @JsonProperty("feederInfosOuterMargin") double feederInfosOuterMargin, @JsonProperty("spaceForFeederInfos") double spaceForFeederInfos, - @JsonProperty("diagramName") String diagramName, - @JsonProperty("avoidSVGComponentsDuplication") boolean avoidSVGComponentsDuplication, @JsonProperty("adaptCellHeightToContent") boolean adaptCellHeightToContent, @JsonProperty("maxComponentHeight") double maxComponentHeight, @JsonProperty("minSpaceBetweenComponents") double minSpaceBetweenComponents, @JsonProperty("minExternCellHeight") double minExternCellHeight, - @JsonProperty("labelCentered") boolean labelCentered, - @JsonProperty("labelDiagonal") boolean labelDiagonal, - @JsonProperty("angleLabelShift") double angleLabelShift, - @JsonProperty("highlightLineState") boolean highlightLineState, - @JsonProperty("addNodesInfos") boolean addNodesInfos, - @JsonProperty("feederInfoSymmetry") boolean feederInfoSymmetry, - @JsonProperty("cssLocation") CssLocation cssLocation, - @JsonProperty("svgWidthAndHeightAdded") boolean svgWidthAndHeightAdded, - @JsonProperty("useName") boolean useName, - @JsonProperty("feederInfosIntraMargin") double feederInfosIntraMargin, - @JsonProperty("busInfoMargin") double busInfoMargin, @JsonProperty("busbarsAlignment") Alignment busbarsAlignment, @JsonProperty("componentsOnBusbars") List componentsOnBusbars, - @JsonProperty("languageTag") String languageTag, - @JsonProperty("voltageValuePrecision") int voltageValuePrecision, - @JsonProperty("powerValuePrecision") int powerValuePrecision, - @JsonProperty("angleValuePrecision") int angleValuePrecision, - @JsonProperty("undefinedValueSymbol") String undefinedValueSymbol, @JsonProperty("removeFictitiousSwitchNodes") boolean removeFictitiousSwitchNodes) { this.diagramPadding = diagramPadding; this.voltageLevelPadding = voltageLevelPadding; @@ -157,40 +83,19 @@ public LayoutParameters(@JsonProperty("voltageLevelPadding") Padding voltageLeve this.externCellHeight = externCellHeight; this.internCellHeight = internCellHeight; this.stackHeight = stackHeight; - this.showGrid = showGrid; - this.tooltipEnabled = tooltipEnabled; - this.showInternalNodes = showInternalNodes; - this.scaleFactor = scaleFactor; - this.drawStraightWires = drawStraightWires; this.horizontalSnakeLinePadding = horizontalSnakeLinePadding; this.verticalSnakeLinePadding = verticalSnakeLinePadding; - this.feederInfosOuterMargin = feederInfosOuterMargin; this.spaceForFeederInfos = spaceForFeederInfos; - this.diagramName = diagramName; - this.avoidSVGComponentsDuplication = avoidSVGComponentsDuplication; this.adaptCellHeightToContent = adaptCellHeightToContent; this.maxComponentHeight = maxComponentHeight; this.minSpaceBetweenComponents = minSpaceBetweenComponents; this.minExternCellHeight = minExternCellHeight; - this.labelCentered = labelCentered; - this.labelDiagonal = labelDiagonal; - this.angleLabelShift = angleLabelShift; - this.highlightLineState = highlightLineState; - this.addNodesInfos = addNodesInfos; - this.feederInfoSymmetry = feederInfoSymmetry; - this.cssLocation = cssLocation; - this.svgWidthAndHeightAdded = svgWidthAndHeightAdded; - this.useName = useName; - this.feederInfosIntraMargin = feederInfosIntraMargin; - this.busInfoMargin = busInfoMargin; this.busbarsAlignment = busbarsAlignment; this.componentsOnBusbars = new ArrayList<>(componentsOnBusbars); - this.languageTag = languageTag; - this.voltageValuePrecision = voltageValuePrecision; - this.powerValuePrecision = powerValuePrecision; - this.angleValuePrecision = angleValuePrecision; - this.undefinedValueSymbol = undefinedValueSymbol; this.removeFictitiousSwitchNodes = removeFictitiousSwitchNodes; + this.cgmesScaleFactor = cgmesScaleFactor; + this.cgmesDiagramName = cgmesDiagramName; + this.cgmesUseNames = cgmesUseNames; } public LayoutParameters(LayoutParameters other) { @@ -203,41 +108,20 @@ public LayoutParameters(LayoutParameters other) { externCellHeight = other.externCellHeight; internCellHeight = other.internCellHeight; stackHeight = other.stackHeight; - showGrid = other.showGrid; - tooltipEnabled = other.tooltipEnabled; - showInternalNodes = other.showInternalNodes; - scaleFactor = other.scaleFactor; - drawStraightWires = other.drawStraightWires; horizontalSnakeLinePadding = other.horizontalSnakeLinePadding; verticalSnakeLinePadding = other.verticalSnakeLinePadding; - feederInfosOuterMargin = other.feederInfosOuterMargin; spaceForFeederInfos = other.spaceForFeederInfos; - diagramName = other.diagramName; - avoidSVGComponentsDuplication = other.avoidSVGComponentsDuplication; adaptCellHeightToContent = other.adaptCellHeightToContent; maxComponentHeight = other.maxComponentHeight; minSpaceBetweenComponents = other.minSpaceBetweenComponents; minExternCellHeight = other.minExternCellHeight; componentsSize = other.componentsSize; - angleLabelShift = other.angleLabelShift; - labelDiagonal = other.labelDiagonal; - labelCentered = other.labelCentered; - highlightLineState = other.highlightLineState; - addNodesInfos = other.addNodesInfos; - feederInfoSymmetry = other.feederInfoSymmetry; - cssLocation = other.cssLocation; - svgWidthAndHeightAdded = other.svgWidthAndHeightAdded; - useName = other.useName; - feederInfosIntraMargin = other.feederInfosIntraMargin; - busInfoMargin = other.busInfoMargin; busbarsAlignment = other.busbarsAlignment; componentsOnBusbars = new ArrayList<>(other.componentsOnBusbars); - languageTag = other.languageTag; - voltageValuePrecision = other.voltageValuePrecision; - powerValuePrecision = other.powerValuePrecision; - angleValuePrecision = other.angleValuePrecision; - undefinedValueSymbol = other.undefinedValueSymbol; removeFictitiousSwitchNodes = other.removeFictitiousSwitchNodes; + cgmesScaleFactor = other.cgmesScaleFactor; + cgmesDiagramName = other.cgmesDiagramName; + cgmesUseNames = other.cgmesUseNames; } public double getVerticalSpaceBus() { @@ -294,51 +178,6 @@ public LayoutParameters setStackHeight(double stackHeight) { return this; } - public boolean isShowGrid() { - return showGrid; - } - - public LayoutParameters setShowGrid(boolean showGrid) { - this.showGrid = showGrid; - return this; - } - - public boolean isShowInternalNodes() { - return showInternalNodes; - } - - public LayoutParameters setShowInternalNodes(boolean showInternalNodes) { - this.showInternalNodes = showInternalNodes; - return this; - } - - public double getScaleFactor() { - return scaleFactor; - } - - public LayoutParameters setScaleFactor(double scaleFactor) { - this.scaleFactor = scaleFactor; - return this; - } - - public String getDiagramName() { - return diagramName; - } - - public LayoutParameters setDiagramName(String diagramName) { - this.diagramName = diagramName; - return this; - } - - public boolean isDrawStraightWires() { - return drawStraightWires; - } - - public LayoutParameters setDrawStraightWires(boolean drawStraightWires) { - this.drawStraightWires = drawStraightWires; - return this; - } - public double getHorizontalSnakeLinePadding() { return horizontalSnakeLinePadding; } @@ -357,24 +196,6 @@ public LayoutParameters setVerticalSnakeLinePadding(double verticalSnakeLinePadd return this; } - public double getFeederInfosOuterMargin() { - return feederInfosOuterMargin; - } - - public LayoutParameters setFeederInfosOuterMargin(double feederInfosOuterMargin) { - this.feederInfosOuterMargin = feederInfosOuterMargin; - return this; - } - - public boolean isAvoidSVGComponentsDuplication() { - return avoidSVGComponentsDuplication; - } - - public LayoutParameters setAvoidSVGComponentsDuplication(boolean avoidSVGComponentsDuplication) { - this.avoidSVGComponentsDuplication = avoidSVGComponentsDuplication; - return this; - } - public boolean isAdaptCellHeightToContent() { return adaptCellHeightToContent; } @@ -419,60 +240,6 @@ public Map getComponentsSize() { return componentsSize; } - public double getAngleLabelShift() { - return angleLabelShift; - } - - public LayoutParameters setAngleLabelShift(double angleLabelShift) { - this.angleLabelShift = angleLabelShift; - return this; - } - - public boolean isLabelCentered() { - return labelCentered; - } - - public LayoutParameters setLabelCentered(boolean labelCentered) { - this.labelCentered = labelCentered; - return this; - } - - public boolean isLabelDiagonal() { - return labelDiagonal; - } - - public LayoutParameters setLabelDiagonal(boolean labelDiagonal) { - this.labelDiagonal = labelDiagonal; - return this; - } - - public boolean isHighlightLineState() { - return highlightLineState; - } - - public LayoutParameters setHighlightLineState(boolean highlightLineState) { - this.highlightLineState = highlightLineState; - return this; - } - - public boolean isTooltipEnabled() { - return tooltipEnabled; - } - - public LayoutParameters setTooltipEnabled(boolean tooltipEnabled) { - this.tooltipEnabled = tooltipEnabled; - return this; - } - - public boolean isAddNodesInfos() { - return addNodesInfos; - } - - public LayoutParameters setAddNodesInfos(boolean addNodesInfos) { - this.addNodesInfos = addNodesInfos; - return this; - } - public double getSpaceForFeederInfos() { return spaceForFeederInfos; } @@ -482,24 +249,6 @@ public LayoutParameters setSpaceForFeederInfos(double spaceForFeederInfos) { return this; } - public boolean isFeederInfoSymmetry() { - return feederInfoSymmetry; - } - - public LayoutParameters setFeederInfoSymmetry(boolean feederInfoSymmetry) { - this.feederInfoSymmetry = feederInfoSymmetry; - return this; - } - - public CssLocation getCssLocation() { - return cssLocation; - } - - public LayoutParameters setCssLocation(CssLocation cssLocation) { - this.cssLocation = cssLocation; - return this; - } - public Padding getVoltageLevelPadding() { return voltageLevelPadding; } @@ -518,47 +267,11 @@ public LayoutParameters setDiagrammPadding(double paddingLeft, double paddingTop return this; } - public boolean isSvgWidthAndHeightAdded() { - return svgWidthAndHeightAdded; - } - - public LayoutParameters setSvgWidthAndHeightAdded(boolean svgWidthAndHeightAdded) { - this.svgWidthAndHeightAdded = svgWidthAndHeightAdded; - return this; - } - @JsonIgnore public double getBusPadding() { return getCellWidth() / 4; } - public boolean isUseName() { - return useName; - } - - public LayoutParameters setUseName(boolean useName) { - this.useName = useName; - return this; - } - - public double getFeederInfosIntraMargin() { - return feederInfosIntraMargin; - } - - public LayoutParameters setFeederInfosIntraMargin(double feederInfosIntraMargin) { - this.feederInfosIntraMargin = feederInfosIntraMargin; - return this; - } - - public double getBusInfoMargin() { - return busInfoMargin; - } - - public LayoutParameters setBusInfoMargin(double busInfoMargin) { - this.busInfoMargin = busInfoMargin; - return this; - } - public Alignment getBusbarsAlignment() { return busbarsAlignment; } @@ -577,56 +290,8 @@ public LayoutParameters setComponentsOnBusbars(List componentsOnBusbars) return this; } - public String getLanguageTag() { - return languageTag; - } - - /** - * Sets the language tag string. This is used to format the value displayed according to the corresponding standards. - * @param languageTag Specified IETF BCP 47 language tag string - */ - public LayoutParameters setLanguageTag(String languageTag) { - this.languageTag = languageTag; - return this; - } - - public int getVoltageValuePrecision() { - return voltageValuePrecision; - } - - public LayoutParameters setVoltageValuePrecision(int voltageValuePrecision) { - this.voltageValuePrecision = voltageValuePrecision; - return this; - } - - public int getPowerValuePrecision() { - return powerValuePrecision; - } - - public LayoutParameters setPowerValuePrecision(int powerValuePrecision) { - this.powerValuePrecision = powerValuePrecision; - return this; - } - - public int getAngleValuePrecision() { - return angleValuePrecision; - } - - public LayoutParameters setAngleValuePrecision(int angleValuePrecision) { - this.angleValuePrecision = angleValuePrecision; - return this; - } - - public ValueFormatter createValueFormatter() { - return new ValueFormatter(powerValuePrecision, voltageValuePrecision, angleValuePrecision, Locale.forLanguageTag(languageTag), undefinedValueSymbol); - } - public enum Alignment { - FIRST, LAST, MIDDLE, NONE; - } - - public enum CssLocation { - INSERTED_IN_SVG, EXTERNAL_IMPORTED, EXTERNAL_NO_IMPORT; + FIRST, LAST, MIDDLE, NONE } public static class Padding { @@ -678,21 +343,39 @@ public double getFeederSpan() { return getSpaceForFeederInfos() + getMaxComponentHeight(); } - public String getUndefinedValueSymbol() { - return undefinedValueSymbol; + public boolean isRemoveFictitiousSwitchNodes() { + return removeFictitiousSwitchNodes; } - public LayoutParameters setUndefinedValueSymbol(String undefinedValueSymbol) { - this.undefinedValueSymbol = undefinedValueSymbol; + public LayoutParameters setRemoveFictitiousSwitchNodes(boolean removeFictitiousSwitchNodes) { + this.removeFictitiousSwitchNodes = removeFictitiousSwitchNodes; return this; } - public boolean isRemoveFictitiousSwitchNodes() { - return removeFictitiousSwitchNodes; + public double getCgmesScaleFactor() { + return cgmesScaleFactor; } - public LayoutParameters setRemoveFictitiousSwitchNodes(boolean removeFictitiousSwitchNodes) { - this.removeFictitiousSwitchNodes = removeFictitiousSwitchNodes; + public LayoutParameters setCgmesScaleFactor(double cgmesScaleFactor) { + this.cgmesScaleFactor = cgmesScaleFactor; + return this; + } + + public String getCgmesDiagramName() { + return cgmesDiagramName; + } + + public LayoutParameters setCgmesDiagramName(String cgmesDiagramName) { + this.cgmesDiagramName = cgmesDiagramName; + return this; + } + + public boolean isCgmesUseNames() { + return cgmesUseNames; + } + + public LayoutParameters setCgmesUseNames(boolean cgmesUseNames) { + this.cgmesUseNames = cgmesUseNames; return this; } diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Direction.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Direction.java index 15f78d2a3..5afe73ec1 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Direction.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Direction.java @@ -1,5 +1,14 @@ +/** + * Copyright (c) 2022, 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.model.coordinate; +/** + * @author Benoit Jeanson + */ public enum Direction { TOP, BOTTOM, MIDDLE, UNDEFINED; diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Node.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Node.java index 34e9df53f..438506e5a 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Node.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Node.java @@ -1,3 +1,9 @@ +/** + * Copyright (c) 2019, 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.model.nodes; import com.fasterxml.jackson.core.JsonGenerator; @@ -10,6 +16,14 @@ import java.util.List; import java.util.Optional; +/** + * + * @author Geoffroy Jamgotchian + * @author Franck Lecuyer + * @author Florian Dupuy + * @author Benoit Jeanson + + */ public interface Node { enum NodeType { diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractDiagramLabelProvider.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractLabelProvider.java similarity index 85% rename from single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractDiagramLabelProvider.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractLabelProvider.java index 78c1f685f..4653ee929 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractDiagramLabelProvider.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractLabelProvider.java @@ -22,7 +22,7 @@ /** * @author Florian Dupuy */ -public abstract class AbstractDiagramLabelProvider implements DiagramLabelProvider { +public abstract class AbstractLabelProvider implements LabelProvider { private static final double LABEL_OFFSET = 5d; private static final double DECORATOR_OFFSET = 5d; @@ -30,11 +30,13 @@ public abstract class AbstractDiagramLabelProvider implements DiagramLabelProvid protected final ComponentLibrary componentLibrary; protected final LayoutParameters layoutParameters; protected final ValueFormatter valueFormatter; + protected final SvgParameters svgParameters; - protected AbstractDiagramLabelProvider(ComponentLibrary componentLibrary, LayoutParameters layoutParameters) { + protected AbstractLabelProvider(ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { this.componentLibrary = Objects.requireNonNull(componentLibrary); this.layoutParameters = Objects.requireNonNull(layoutParameters); - this.valueFormatter = layoutParameters.createValueFormatter(); + this.svgParameters = svgParameters; + this.valueFormatter = svgParameters.createValueFormatter(); } @Override @@ -59,7 +61,7 @@ public List getNodeLabels(Node node, Direction direction) { private Optional getLabelOrNameOrId(Node node) { if (node instanceof EquipmentNode) { EquipmentNode eqNode = (EquipmentNode) node; - return Optional.ofNullable(node.getLabel().orElse(layoutParameters.isUseName() ? eqNode.getName() : eqNode.getEquipmentId())); + return Optional.ofNullable(node.getLabel().orElse(svgParameters.isUseName() ? eqNode.getName() : eqNode.getEquipmentId())); } else { return node.getLabel(); } @@ -99,13 +101,13 @@ protected LabelPosition getFeederLabelPosition(Node node, Direction direction) { ? -LABEL_OFFSET : ((int) (componentLibrary.getSize(node.getComponentType()).getHeight()) + LABEL_OFFSET); positionName = direction == TOP ? "N" : "S"; - if (layoutParameters.isLabelDiagonal()) { - angle = direction == TOP ? -layoutParameters.getAngleLabelShift() : layoutParameters.getAngleLabelShift(); + if (svgParameters.isLabelDiagonal()) { + angle = direction == TOP ? -svgParameters.getAngleLabelShift() : svgParameters.getAngleLabelShift(); } } return new LabelPosition(positionName + "_LABEL", - layoutParameters.isLabelCentered() ? 0 : -LABEL_OFFSET, yShift, layoutParameters.isLabelCentered(), (int) angle); + svgParameters.isLabelCentered() ? 0 : -LABEL_OFFSET, yShift, svgParameters.isLabelCentered(), (int) angle); } protected LabelPosition getBusLabelPosition() { diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BasicStyleProvider.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BasicStyleProvider.java index f4b1111bf..29e6efe64 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BasicStyleProvider.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BasicStyleProvider.java @@ -6,7 +6,6 @@ */ package com.powsybl.sld.svg; -import com.powsybl.sld.layout.LayoutParameters; import com.powsybl.sld.library.ComponentLibrary; import com.powsybl.sld.library.ComponentTypeName; import com.powsybl.sld.model.cells.Cell; @@ -52,7 +51,7 @@ protected Optional getEdgeStyle(Graph graph, Edge edge) { } /** - * Return the highlight style if any to apply to given edge (if {@link LayoutParameters#isHighlightLineState()}) + * Return the highlight style if any to apply to given edge (if {@link SvgParameters#isHighlightLineState()}) * @param graph the graph may be used in overriding classes * @param edge the edge on which the style if any is applied to * @return the highlight style if any @@ -91,7 +90,7 @@ private static boolean isEquivalentToInternalNode(Node node) { } @Override - public List getSvgNodeDecoratorStyles(DiagramLabelProvider.NodeDecorator nodeDecorator, Node node, ComponentLibrary componentLibrary) { + public List getSvgNodeDecoratorStyles(LabelProvider.NodeDecorator nodeDecorator, Node node, ComponentLibrary componentLibrary) { List styles = new ArrayList<>(); componentLibrary.getComponentStyleClass(nodeDecorator.getType()).ifPresent(styles::add); return styles; @@ -154,7 +153,7 @@ public List getFeederInfoStyles(FeederInfo info) { List styles = new ArrayList<>(); styles.add(FEEDER_INFO); if (info instanceof DirectionalFeederInfo) { - styles.add(((DirectionalFeederInfo) info).getDirection() == DiagramLabelProvider.LabelDirection.OUT ? OUT_CLASS : IN_CLASS); + styles.add(((DirectionalFeederInfo) info).getDirection() == LabelProvider.LabelDirection.OUT ? OUT_CLASS : IN_CLASS); } return styles; } diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultDiagramLabelProvider.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultLabelProvider.java similarity index 96% rename from single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultDiagramLabelProvider.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultLabelProvider.java index c7168b06a..6e820c6bc 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultDiagramLabelProvider.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultLabelProvider.java @@ -27,15 +27,15 @@ * @author Giovanni Ferrari * @author Franck Lecuyer */ -public class DefaultDiagramLabelProvider extends AbstractDiagramLabelProvider { +public class DefaultLabelProvider extends AbstractLabelProvider { private static final String PLANNED_OUTAGE_BRANCH_NODE_DECORATOR = "LOCK"; private static final String FORCED_OUTAGE_BRANCH_NODE_DECORATOR = "FLASH"; protected final Network network; - public DefaultDiagramLabelProvider(Network net, ComponentLibrary componentLibrary, LayoutParameters layoutParameters) { - super(componentLibrary, layoutParameters); + public DefaultLabelProvider(Network net, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + super(componentLibrary, layoutParameters, svgParameters); this.network = Objects.requireNonNull(net); } @@ -65,7 +65,7 @@ public List getFeederInfos(FeederNode node) { default: break; } - if (node.getDirection() == BOTTOM && !layoutParameters.isFeederInfoSymmetry()) { + if (node.getDirection() == BOTTOM && !svgParameters.isFeederInfoSymmetry()) { Collections.reverse(feederInfos); } return feederInfos; diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultLabelProviderFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultLabelProviderFactory.java new file mode 100644 index 000000000..ae509790f --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultLabelProviderFactory.java @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.sld.svg; + +import com.powsybl.iidm.network.Network; +import com.powsybl.sld.layout.LayoutParameters; +import com.powsybl.sld.library.ComponentLibrary; + +/** + * + * @author Sophie Frasnedo + */ +public class DefaultLabelProviderFactory implements LabelProviderFactory { + + @Override + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters); + } +} diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultSVGWriter.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultSVGWriter.java index 522f8ea67..66a0b112e 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultSVGWriter.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultSVGWriter.java @@ -79,10 +79,13 @@ public class DefaultSVGWriter implements SVGWriter { protected final LayoutParameters layoutParameters; private final ValueFormatter valueFormatter; - public DefaultSVGWriter(ComponentLibrary componentLibrary, LayoutParameters layoutParameters) { + protected final SvgParameters svgParameters; + + public DefaultSVGWriter(ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { this.componentLibrary = Objects.requireNonNull(componentLibrary); this.layoutParameters = Objects.requireNonNull(layoutParameters); - this.valueFormatter = layoutParameters.createValueFormatter(); + this.valueFormatter = svgParameters.createValueFormatter(); + this.svgParameters = svgParameters; } /** @@ -91,7 +94,7 @@ public DefaultSVGWriter(ComponentLibrary componentLibrary, LayoutParameters layo * @param writer writer for the SVG content */ @Override - public GraphMetadata write(String prefixId, Graph graph, DiagramLabelProvider labelProvider, DiagramStyleProvider styleProvider, Writer writer) { + public GraphMetadata write(String prefixId, Graph graph, LabelProvider labelProvider, DiagramStyleProvider styleProvider, Writer writer) { DOMImplementation domImpl = DomUtil.getDocumentBuilder().getDOMImplementation(); Document document = domImpl.createDocument(SVG_NAMESPACE, SVG_QUALIFIED_NAME, null); @@ -115,7 +118,7 @@ public GraphMetadata write(String prefixId, Graph graph, DiagramLabelProvider la private void setDocumentSize(Graph graph, Document document) { document.getDocumentElement().setAttribute("viewBox", "0 0 " + getDiagramWidth(graph, layoutParameters) + " " + getDiagramHeight(graph, layoutParameters)); - if (layoutParameters.isSvgWidthAndHeightAdded()) { + if (svgParameters.isSvgWidthAndHeightAdded()) { document.getDocumentElement().setAttribute(WIDTH, Double.toString(getDiagramWidth(graph, layoutParameters))); document.getDocumentElement().setAttribute(HEIGHT, Double.toString(getDiagramHeight(graph, layoutParameters))); } @@ -127,25 +130,25 @@ private double getDiagramWidth(Graph graph, LayoutParameters layoutParameters) { private double getDiagramHeight(Graph graph, LayoutParameters layoutParameters) { double height = graph.getHeight() + layoutParameters.getDiagramPadding().getTop() + layoutParameters.getDiagramPadding().getBottom(); - if (graph instanceof VoltageLevelGraph && layoutParameters.isAddNodesInfos()) { + if (graph instanceof VoltageLevelGraph && svgParameters.isAddNodesInfos()) { height += 6 * CIRCLE_RADIUS_NODE_INFOS_SIZE; } return height; } - protected void addStyle(Document document, DiagramStyleProvider styleProvider, DiagramLabelProvider labelProvider, + protected void addStyle(Document document, DiagramStyleProvider styleProvider, LabelProvider labelProvider, Graph graph, Set listUsedComponentSVG) { graph.getAllNodesStream().forEach(n -> { listUsedComponentSVG.add(n.getComponentType()); - List nodeDecorators = labelProvider.getNodeDecorators(n, graph.getDirection(n)); + List nodeDecorators = labelProvider.getNodeDecorators(n, graph.getDirection(n)); if (nodeDecorators != null) { nodeDecorators.forEach(nodeDecorator -> listUsedComponentSVG.add(nodeDecorator.getType())); } }); Element style = document.createElement(STYLE); - switch (layoutParameters.getCssLocation()) { + switch (svgParameters.getCssLocation()) { case INSERTED_IN_SVG: List urls = styleProvider.getCssUrls(); urls.addAll(componentLibrary.getCssUrls()); @@ -163,7 +166,7 @@ protected void addStyle(Document document, DiagramStyleProvider styleProvider, D // Nothing to do break; default: - throw new AssertionError("Unexpected CSS location: " + layoutParameters.getCssLocation()); + throw new AssertionError("Unexpected CSS location: " + svgParameters.getCssLocation()); } } @@ -199,7 +202,7 @@ private void addFrame(Document document) { /** * Create the SVGDocument corresponding to the graph */ - protected GraphMetadata writeGraph(String prefixId, Graph graph, Document document, DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider) { + protected GraphMetadata writeGraph(String prefixId, Graph graph, Document document, LabelProvider initProvider, DiagramStyleProvider styleProvider) { GraphMetadata metadata = new GraphMetadata(layoutParameters); Element root = document.createElement(GROUP); @@ -221,7 +224,7 @@ protected GraphMetadata writeGraph(String prefixId, Graph graph, Document docume } private void drawGrid(String prefixId, Graph graph, Document document, GraphMetadata metadata, Element root) { - if (layoutParameters.isShowGrid()) { + if (svgParameters.isShowGrid()) { for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) { if (vlGraph.isPositionNodeBusesCalculated()) { drawGrid(prefixId, vlGraph, document, metadata, root); @@ -234,7 +237,7 @@ protected void drawVoltageLevel(String prefixId, VoltageLevelGraph graph, Element root, GraphMetadata metadata, - DiagramLabelProvider initProvider, + LabelProvider initProvider, DiagramStyleProvider styleProvider) { if (!graph.isForVoltageLevelDiagram()) { @@ -259,13 +262,13 @@ protected void drawVoltageLevel(String prefixId, // Drawing the nodes outside the voltageLevel graphs (multi-terminal nodes) drawNodes(prefixId, root, graph, new Point(0, 0), metadata, initProvider, styleProvider, graph.getMultiTermNodes()); - if (graph.isForVoltageLevelDiagram() && layoutParameters.isAddNodesInfos()) { + if (graph.isForVoltageLevelDiagram() && svgParameters.isAddNodesInfos()) { drawNodesInfos(prefixId, root, graph, metadata, initProvider, styleProvider); } } private void drawCell(String prefixId, Element root, VoltageLevelGraph graph, Cell cell, - GraphMetadata metadata, DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, + GraphMetadata metadata, LabelProvider initProvider, DiagramStyleProvider styleProvider, Set remainingEdgesToDraw, Set remainingNodesToDraw) { // To avoid overlapping lines over the switches, first, we draw all nodes except the switch nodes and bus connections, @@ -295,7 +298,7 @@ protected void drawSubstation(String prefixId, SubstationGraph graph, Element root, GraphMetadata metadata, - DiagramLabelProvider initProvider, + LabelProvider initProvider, DiagramStyleProvider styleProvider) { // Drawing the voltageLevel graphs for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) { @@ -387,7 +390,7 @@ protected void drawBuses(String prefixId, Element root, VoltageLevelGraph graph, GraphMetadata metadata, - DiagramLabelProvider initProvider, + LabelProvider initProvider, DiagramStyleProvider styleProvider, Set remainingNodesToDraw) { @@ -397,10 +400,10 @@ protected void drawBuses(String prefixId, Element g = root.getOwnerDocument().createElement(GROUP); g.setAttribute("id", nodeId); - g.setAttribute(CLASS, String.join(" ", styleProvider.getSvgNodeStyles(graph, busNode, componentLibrary, layoutParameters.isShowInternalNodes()))); + g.setAttribute(CLASS, String.join(" ", styleProvider.getSvgNodeStyles(graph, busNode, componentLibrary, svgParameters.isShowInternalNodes()))); drawBus(graph, busNode, g); - List nodeLabels = initProvider.getNodeLabels(busNode, graph.getDirection(busNode)); + List nodeLabels = initProvider.getNodeLabels(busNode, graph.getDirection(busNode)); drawNodeLabel(prefixId, g, busNode, nodeLabels); drawNodeDecorators(prefixId, g, graph, busNode, initProvider, styleProvider); @@ -422,9 +425,9 @@ protected void drawBuses(String prefixId, } } - protected List createNodeLabelMetadata(String prefixId, Node node, List nodeLabels) { + protected List createNodeLabelMetadata(String prefixId, Node node, List nodeLabels) { List labelsMetadata = new ArrayList<>(); - for (DiagramLabelProvider.NodeLabel nodeLabel : nodeLabels) { + for (LabelProvider.NodeLabel nodeLabel : nodeLabels) { LabelPosition labelPosition = nodeLabel.getPosition(); String svgId = getNodeLabelId(prefixId, node, labelPosition); labelsMetadata.add(new GraphMetadata.NodeLabelMetadata(svgId, labelPosition.getPositionName(), nodeLabel.getUserDefinedId())); @@ -440,7 +443,7 @@ protected void drawNodes(String prefixId, BaseGraph graph, Point shift, GraphMetadata metadata, - DiagramLabelProvider labelProvider, + LabelProvider labelProvider, DiagramStyleProvider styleProvider, Collection nodes) { @@ -448,10 +451,10 @@ protected void drawNodes(String prefixId, String nodeId = DiagramStyles.escapeId(prefixId + node.getId()); Element g = root.getOwnerDocument().createElement(GROUP); g.setAttribute("id", nodeId); - g.setAttribute(CLASS, String.join(" ", styleProvider.getSvgNodeStyles(graph.getVoltageLevelGraph(node), node, componentLibrary, layoutParameters.isShowInternalNodes()))); + g.setAttribute(CLASS, String.join(" ", styleProvider.getSvgNodeStyles(graph.getVoltageLevelGraph(node), node, componentLibrary, svgParameters.isShowInternalNodes()))); incorporateComponents(prefixId, graph, node, shift, g, labelProvider, styleProvider); - List nodeLabels = labelProvider.getNodeLabels(node, graph.getDirection(node)); + List nodeLabels = labelProvider.getNodeLabels(node, graph.getDirection(node)); drawNodeLabel(prefixId, g, node, nodeLabels); drawNodeDecorators(prefixId, g, graph, node, labelProvider, styleProvider); @@ -462,7 +465,7 @@ protected void drawNodes(String prefixId, } } - protected void setMetadata(String prefixId, GraphMetadata metadata, Node node, String nodeId, BaseGraph graph, Direction direction, List nodeLabels) { + protected void setMetadata(String prefixId, GraphMetadata metadata, Node node, String nodeId, BaseGraph graph, Direction direction, List nodeLabels) { String nextVId = null; if (node instanceof FeederNode && ((FeederNode) node).getFeeder() instanceof FeederWithSides) { FeederWithSides feederWs = (FeederWithSides) ((FeederNode) node).getFeeder(); @@ -482,8 +485,8 @@ protected void setMetadata(String prefixId, GraphMetadata metadata, Node node, S addInfoComponentMetadata(metadata, node.getComponentType()); } - protected void drawNodeLabel(String prefixId, Element g, Node node, List nodeLabels) { - for (DiagramLabelProvider.NodeLabel nodeLabel : nodeLabels) { + protected void drawNodeLabel(String prefixId, Element g, Node node, List nodeLabels) { + for (LabelProvider.NodeLabel nodeLabel : nodeLabels) { LabelPosition labelPosition = nodeLabel.getPosition(); Element label = createLabelElement(nodeLabel.getLabel(), labelPosition.getdX(), labelPosition.getdY(), labelPosition.getShiftAngle(), g); String svgId = getNodeLabelId(prefixId, node, labelPosition); @@ -495,9 +498,9 @@ protected void drawNodeLabel(String prefixId, Element g, Node node, List elementAttributesSetter = (elt, subComponent) -> setComponentAttributes(prefixId, g, graph, node, styleProvider, elt, componentType, subComponent); - String tooltipContent = layoutParameters.isTooltipEnabled() ? labelProvider.getTooltip(node) : null; + String tooltipContent = svgParameters.isTooltipEnabled() ? labelProvider.getTooltip(node) : null; insertSVGIntoDocumentSVG(componentType, g, tooltipContent, elementAttributesSetter); } @@ -607,7 +610,7 @@ private void setInfoAttributes(String infoType, String prefixId, Element g, Elem } } - protected void insertDecoratorSVGIntoDocumentSVG(String prefixId, DiagramLabelProvider.NodeDecorator nodeDecorator, + protected void insertDecoratorSVGIntoDocumentSVG(String prefixId, LabelProvider.NodeDecorator nodeDecorator, Element g, Graph graph, Node node, DiagramStyleProvider styleProvider) { BiConsumer elementAttributesSetter = (elt, subComponent) -> setDecoratorAttributes(prefixId, g, graph, node, nodeDecorator, styleProvider, elt, subComponent); @@ -619,7 +622,7 @@ protected void insertSVGIntoDocumentSVG(String componentType, Element g, String BiConsumer elementAttributesSetter) { addToolTip(g, tooltip); Map> subComponents = componentLibrary.getSvgElements(componentType); - subComponents.forEach(layoutParameters.isAvoidSVGComponentsDuplication() ? + subComponents.forEach(svgParameters.isAvoidSVGComponentsDuplication() ? (subComponentName, svgSubComponent) -> insertSubcomponentReference(g, elementAttributesSetter, componentType, subComponentName, subComponents.size()) : (subComponentName, svgSubComponent) -> insertDuplicatedSubcomponent(g, elementAttributesSetter, subComponentName, svgSubComponent) ); @@ -695,7 +698,7 @@ private void setComponentAttributes(String prefixId, Element g, Graph graph, Nod } } - private void setDecoratorAttributes(String prefixId, Element g, Graph graph, Node node, DiagramLabelProvider.NodeDecorator nodeDecorator, + private void setDecoratorAttributes(String prefixId, Element g, Graph graph, Node node, LabelProvider.NodeDecorator nodeDecorator, DiagramStyleProvider styleProvider, Element elt, String subComponentName) { replaceId(g, elt, prefixId); ComponentSize decoratorSize = componentLibrary.getSize(nodeDecorator.getType()); @@ -772,8 +775,8 @@ protected void transformFeederInfo(List points, ComponentSize componentSi double cosAngle = dx / distancePoints; double sinAngle = dy / distancePoints; - double x = pointA.getX() + cosAngle * (layoutParameters.getFeederInfosOuterMargin() + shift); - double y = pointA.getY() + sinAngle * (layoutParameters.getFeederInfosOuterMargin() + shift); + double x = pointA.getX() + cosAngle * (svgParameters.getFeederInfosOuterMargin() + shift); + double y = pointA.getY() + sinAngle * (svgParameters.getFeederInfosOuterMargin() + shift); double feederInfoRotationAngle = Math.atan(dy / dx) - Math.PI / 2; if (feederInfoRotationAngle < -Math.PI / 2) { @@ -826,7 +829,7 @@ protected void insertFeederInfos(String prefixId, VoltageLevelGraph graph, FeederNode feederNode, GraphMetadata metadata, - DiagramLabelProvider labelProvider, + LabelProvider labelProvider, DiagramStyleProvider styleProvider) { if (points.isEmpty()) { points.add(graph.getShiftedPoint(feederNode)); @@ -839,7 +842,7 @@ protected void insertFeederInfos(String prefixId, addInfoComponentMetadata(metadata, feederInfo.getComponentType()); double height = componentLibrary.getSize(feederInfo.getComponentType()).getHeight(); - shiftFeederInfo += layoutParameters.getFeederInfosIntraMargin() + height; + shiftFeederInfo += svgParameters.getFeederInfosIntraMargin() + height; } } @@ -898,7 +901,7 @@ private void drawFeederInfo(String prefixId, FeederNode feederNode, List } protected void insertBusInfo(String prefixId, Element root, BusNode busNode, - GraphMetadata metadata, DiagramLabelProvider labelProvider, DiagramStyleProvider styleProvider) { + GraphMetadata metadata, LabelProvider labelProvider, DiagramStyleProvider styleProvider) { Optional busInfo = labelProvider.getBusInfo(busNode); busInfo.ifPresent(info -> { drawBusInfo(prefixId, busNode, root, info, styleProvider, metadata); @@ -912,7 +915,7 @@ private void drawBusInfo(String prefixId, BusNode busNode, Element root, BusInfo // Position ComponentSize size = componentLibrary.getSize(busInfo.getComponentType()); - double shiftX = layoutParameters.getBusInfoMargin(); + double shiftX = svgParameters.getBusInfoMargin(); double dy = -size.getHeight() / 2; double dx = busInfo.getAnchor() == Side.RIGHT ? busNode.getPxWidth() - shiftX - size.getWidth() : shiftX; g.setAttribute(TRANSFORM, TRANSLATE + "(" + dx + "," + dy + ")"); @@ -965,7 +968,7 @@ private static String getNodeLabelId(String prefixId, Node node, LabelPosition l * Drawing the voltageLevel graph edges */ protected void drawEdges(String prefixId, Element root, VoltageLevelGraph graph, GraphMetadata metadata, - DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, Collection edges) { + LabelProvider initProvider, DiagramStyleProvider styleProvider, Collection edges) { String voltageLevelId = graph.getVoltageLevelInfos().getId(); for (Edge edge : edges) { @@ -976,13 +979,13 @@ protected void drawEdges(String prefixId, Element root, VoltageLevelGraph graph, // Determine points of the polyline Point shift = graph.getCoord(); pol = WireConnection.searchBestAnchorPoints(componentLibrary, graph, edge.getNode1(), edge.getNode2()) - .calculatePolylinePoints(edge.getNode1(), edge.getNode2(), layoutParameters.isDrawStraightWires(), shift); + .calculatePolylinePoints(edge.getNode1(), edge.getNode2(), svgParameters.isDrawStraightWires(), shift); if (!pol.isEmpty()) { Element g = root.getOwnerDocument().createElement(GROUP); g.setAttribute("id", wireId); - List wireStyles = styleProvider.getSvgWireStyles(graph, edge, layoutParameters.isHighlightLineState()); + List wireStyles = styleProvider.getSvgWireStyles(graph, edge, svgParameters.isHighlightLineState()); g.setAttribute(CLASS, String.join(" ", wireStyles)); Element polyline = root.getOwnerDocument().createElement(POLYLINE); @@ -996,7 +999,7 @@ protected void drawEdges(String prefixId, Element root, VoltageLevelGraph graph, metadata.addWireMetadata(new GraphMetadata.WireMetadata(wireId, escapeId(edge.getNode1().getId()), escapeId(edge.getNode2().getId()), - layoutParameters.isDrawStraightWires(), + svgParameters.isDrawStraightWires(), false)); if (edge.getNode1() instanceof FeederNode) { @@ -1038,7 +1041,7 @@ private void drawSnakeLines(Graph graph, BranchEdge edge, String prefixId, Eleme Element g = root.getOwnerDocument().createElement(GROUP); String snakeLineId = escapeId(prefixId + edge.getId()); g.setAttribute("id", snakeLineId); - List wireStyles = styleProvider.getSvgWireStyles(graph, edge, layoutParameters.isHighlightLineState()); + List wireStyles = styleProvider.getSvgWireStyles(graph, edge, svgParameters.isHighlightLineState()); g.setAttribute(CLASS, String.join(" ", wireStyles)); root.appendChild(g); @@ -1058,7 +1061,7 @@ private void drawSnakeLines(Graph graph, BranchEdge edge, String prefixId, Eleme metadata.addWireMetadata(new GraphMetadata.WireMetadata(snakeLineId, escapeId(edge.getNode1().getId()), escapeId(edge.getNode2().getId()), - layoutParameters.isDrawStraightWires(), + svgParameters.isDrawStraightWires(), true)); } @@ -1091,7 +1094,7 @@ protected String pointsListToString(List polyline) { * Creation of the defs area for the SVG components */ protected void createDefsSVGComponents(Document document, Set listUsedComponentSVG) { - if (layoutParameters.isAvoidSVGComponentsDuplication()) { + if (svgParameters.isAvoidSVGComponentsDuplication()) { // adding also arrows listUsedComponentSVG.add(ARROW_ACTIVE); listUsedComponentSVG.add(ARROW_REACTIVE); @@ -1142,7 +1145,7 @@ private void drawZone(String prefixId, ZoneGraph graph, Element root, GraphMetadata metadata, - DiagramLabelProvider initProvider, + LabelProvider initProvider, DiagramStyleProvider styleProvider) { for (SubstationGraph sGraph : graph.getSubstations()) { drawSubstation(prefixId, sGraph, root, metadata, initProvider, styleProvider); @@ -1192,7 +1195,7 @@ private void drawNodeInfos(ElectricalNodeInfo nodeInfo, double xShift, double yS } private void drawNodesInfos(String prefixId, Element root, VoltageLevelGraph graph, - GraphMetadata metadata, DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider) { + GraphMetadata metadata, LabelProvider initProvider, DiagramStyleProvider styleProvider) { Element nodesInfosNode = root.getOwnerDocument().createElement(GROUP); root.appendChild(nodesInfosNode); diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyleProvider.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyleProvider.java index e16d51c9d..cbdcab307 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyleProvider.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyleProvider.java @@ -28,7 +28,7 @@ public interface DiagramStyleProvider { List getSvgNodeStyles(VoltageLevelGraph graph, Node node, ComponentLibrary componentLibrary, boolean showInternalNodes); - List getSvgNodeDecoratorStyles(DiagramLabelProvider.NodeDecorator nodeDecorator, Node node, ComponentLibrary componentLibrary); + List getSvgNodeDecoratorStyles(LabelProvider.NodeDecorator nodeDecorator, Node node, ComponentLibrary componentLibrary); List getZoneLineStyles(BranchEdge edge, ComponentLibrary componentLibrary); diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DirectionalFeederInfo.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DirectionalFeederInfo.java index 44fe38124..709b2ffa3 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DirectionalFeederInfo.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DirectionalFeederInfo.java @@ -1,3 +1,9 @@ +/** + * Copyright (c) 2022, 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.svg; import java.util.Objects; @@ -11,15 +17,15 @@ */ public class DirectionalFeederInfo extends AbstractFeederInfo { - private final DiagramLabelProvider.LabelDirection arrowDirection; + private final LabelProvider.LabelDirection arrowDirection; private final double value; - public DirectionalFeederInfo(String componentType, DiagramLabelProvider.LabelDirection arrowDirection, String leftLabel, String rightLabel) { + public DirectionalFeederInfo(String componentType, LabelProvider.LabelDirection arrowDirection, String leftLabel, String rightLabel) { this(componentType, arrowDirection, leftLabel, rightLabel, null); } - public DirectionalFeederInfo(String componentType, DiagramLabelProvider.LabelDirection arrowDirection, String leftLabel, String rightLabel, String userDefinedId) { + public DirectionalFeederInfo(String componentType, LabelProvider.LabelDirection arrowDirection, String leftLabel, String rightLabel, String userDefinedId) { super(componentType, leftLabel, rightLabel, userDefinedId); this.arrowDirection = Objects.requireNonNull(arrowDirection); this.value = Double.NaN; @@ -35,11 +41,11 @@ public DirectionalFeederInfo(String componentType, double value, DoubleFunction< this.value = value; } - private static DiagramLabelProvider.LabelDirection getArrowDirection(double value) { - return value > 0 ? DiagramLabelProvider.LabelDirection.OUT : DiagramLabelProvider.LabelDirection.IN; + private static LabelProvider.LabelDirection getArrowDirection(double value) { + return value > 0 ? LabelProvider.LabelDirection.OUT : LabelProvider.LabelDirection.IN; } - public DiagramLabelProvider.LabelDirection getDirection() { + public LabelProvider.LabelDirection getDirection() { return arrowDirection; } diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramLabelProvider.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelProvider.java similarity index 98% rename from single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramLabelProvider.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelProvider.java index adb72c679..f949fe691 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramLabelProvider.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelProvider.java @@ -19,7 +19,7 @@ * @author Giovanni Ferrari * @author Franck Lecuyer */ -public interface DiagramLabelProvider { +public interface LabelProvider { class NodeLabel { private final String label; diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelProviderFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelProviderFactory.java new file mode 100644 index 000000000..57d495fe1 --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelProviderFactory.java @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.sld.svg; + +import com.powsybl.iidm.network.Network; +import com.powsybl.sld.layout.LayoutParameters; +import com.powsybl.sld.library.ComponentLibrary; + +/** + * + * @author Sophie Frasnedo + */ +public interface LabelProviderFactory { + LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters); +} diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/SVGWriter.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/SVGWriter.java index 211778c5c..893b07ec6 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/SVGWriter.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/SVGWriter.java @@ -15,5 +15,5 @@ * @author Franck Lecuyer */ public interface SVGWriter { - GraphMetadata write(String prefixId, Graph graph, DiagramLabelProvider initProvider, DiagramStyleProvider styleProvider, Writer writer); + GraphMetadata write(String prefixId, Graph graph, LabelProvider initProvider, DiagramStyleProvider styleProvider, Writer writer); } diff --git a/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/SvgParameters.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/SvgParameters.java new file mode 100644 index 000000000..9cb3a3c0b --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/SvgParameters.java @@ -0,0 +1,301 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.sld.svg; + +import com.powsybl.diagram.util.ValueFormatter; + +import java.util.Locale; + +/** + * + * @author Sophie Frasnedo + */ +public class SvgParameters { + + private String prefixId = ""; + private String undefinedValueSymbol = "\u2014"; //em dash unicode for undefined value + private String languageTag = "en"; + private int voltageValuePrecision = 1; + private int powerValuePrecision = 0; + private int angleValuePrecision = 1; + private double busInfoMargin = 0.0; //Can be used as horizontal shifting value for busInfo indicator. Can be negative value + private double feederInfosIntraMargin = 10; + private boolean useName = false; + private boolean svgWidthAndHeightAdded = false; + private SvgParameters.CssLocation cssLocation = SvgParameters.CssLocation.INSERTED_IN_SVG; + private boolean feederInfoSymmetry = false; + private boolean addNodesInfos = false; + private boolean tooltipEnabled = false; + private boolean highlightLineState = true; + private double angleLabelShift = 15.; + private boolean labelCentered = false; + private boolean labelDiagonal = false; + private boolean avoidSVGComponentsDuplication = false; + private double feederInfosOuterMargin = 20; + private String diagramName = null; + private boolean drawStraightWires = false; + private boolean showGrid = false; + private boolean showInternalNodes = false; + + public SvgParameters() { + } + + public enum CssLocation { + INSERTED_IN_SVG, EXTERNAL_IMPORTED, EXTERNAL_NO_IMPORT + } + + public SvgParameters(SvgParameters other) { + this.prefixId = other.prefixId; + this.undefinedValueSymbol = other.undefinedValueSymbol; + this.languageTag = other.languageTag; + this.voltageValuePrecision = other.voltageValuePrecision; + this.powerValuePrecision = other.powerValuePrecision; + this.angleValuePrecision = other.angleValuePrecision; + this.busInfoMargin = other.busInfoMargin; + this.feederInfosIntraMargin = other.feederInfosIntraMargin; + this.useName = other.useName; + this.svgWidthAndHeightAdded = other.svgWidthAndHeightAdded; + this.cssLocation = other.cssLocation; + this.feederInfoSymmetry = other.feederInfoSymmetry; + this.addNodesInfos = other.addNodesInfos; + this.tooltipEnabled = other.tooltipEnabled; + this.highlightLineState = other.highlightLineState; + this.angleLabelShift = other.angleLabelShift; + this.labelCentered = other.labelCentered; + this.labelDiagonal = other.labelDiagonal; + this.avoidSVGComponentsDuplication = other.avoidSVGComponentsDuplication; + this.feederInfosOuterMargin = other.feederInfosOuterMargin; + this.diagramName = other.diagramName; + this.drawStraightWires = other.drawStraightWires; + this.showGrid = other.showGrid; + this.showInternalNodes = other.showInternalNodes; + } + + public ValueFormatter createValueFormatter() { + return new ValueFormatter(powerValuePrecision, voltageValuePrecision, angleValuePrecision, Locale.forLanguageTag(languageTag), undefinedValueSymbol); + } + + public String getPrefixId() { + return prefixId; + } + + public SvgParameters setPrefixId(String prefixId) { + this.prefixId = prefixId; + return this; + } + + public String getUndefinedValueSymbol() { + return undefinedValueSymbol; + } + + public SvgParameters setUndefinedValueSymbol(String undefinedValueSymbol) { + this.undefinedValueSymbol = undefinedValueSymbol; + return this; + } + + public String getLanguageTag() { + return languageTag; + } + + /** + * Sets the language tag string. This is used to format the value displayed according to the corresponding standards. + * @param languageTag Specified IETF BCP 47 language tag string + */ + public SvgParameters setLanguageTag(String languageTag) { + this.languageTag = languageTag; + return this; + } + + public int getVoltageValuePrecision() { + return voltageValuePrecision; + } + + public SvgParameters setVoltageValuePrecision(int voltageValuePrecision) { + this.voltageValuePrecision = voltageValuePrecision; + return this; + } + + public int getPowerValuePrecision() { + return powerValuePrecision; + } + + public SvgParameters setPowerValuePrecision(int powerValuePrecision) { + this.powerValuePrecision = powerValuePrecision; + return this; + } + + public int getAngleValuePrecision() { + return angleValuePrecision; + } + + public SvgParameters setAngleValuePrecision(int angleValuePrecision) { + this.angleValuePrecision = angleValuePrecision; + return this; + } + + public double getBusInfoMargin() { + return busInfoMargin; + } + + public SvgParameters setBusInfoMargin(double busInfoMargin) { + this.busInfoMargin = busInfoMargin; + return this; + } + + public double getFeederInfosIntraMargin() { + return feederInfosIntraMargin; + } + + public SvgParameters setFeederInfosIntraMargin(double feederInfosIntraMargin) { + this.feederInfosIntraMargin = feederInfosIntraMargin; + return this; + } + + public boolean isUseName() { + return useName; + } + + public SvgParameters setUseName(boolean useName) { + this.useName = useName; + return this; + } + + public boolean isSvgWidthAndHeightAdded() { + return svgWidthAndHeightAdded; + } + + public SvgParameters setSvgWidthAndHeightAdded(boolean svgWidthAndHeightAdded) { + this.svgWidthAndHeightAdded = svgWidthAndHeightAdded; + return this; + } + + public CssLocation getCssLocation() { + return cssLocation; + } + + public SvgParameters setCssLocation(CssLocation cssLocation) { + this.cssLocation = cssLocation; + return this; + } + + public boolean isFeederInfoSymmetry() { + return feederInfoSymmetry; + } + + public SvgParameters setFeederInfoSymmetry(boolean feederInfoSymmetry) { + this.feederInfoSymmetry = feederInfoSymmetry; + return this; + } + + public boolean isAddNodesInfos() { + return addNodesInfos; + } + + public SvgParameters setAddNodesInfos(boolean addNodesInfos) { + this.addNodesInfos = addNodesInfos; + return this; + } + + public boolean isTooltipEnabled() { + return tooltipEnabled; + } + + public SvgParameters setTooltipEnabled(boolean tooltipEnabled) { + this.tooltipEnabled = tooltipEnabled; + return this; + } + + public boolean isHighlightLineState() { + return highlightLineState; + } + + public SvgParameters setHighlightLineState(boolean highlightLineState) { + this.highlightLineState = highlightLineState; + return this; + } + + public double getAngleLabelShift() { + return angleLabelShift; + } + + public SvgParameters setAngleLabelShift(double angleLabelShift) { + this.angleLabelShift = angleLabelShift; + return this; + } + + public boolean isLabelCentered() { + return labelCentered; + } + + public SvgParameters setLabelCentered(boolean labelCentered) { + this.labelCentered = labelCentered; + return this; + } + + public boolean isLabelDiagonal() { + return labelDiagonal; + } + + public SvgParameters setLabelDiagonal(boolean labelDiagonal) { + this.labelDiagonal = labelDiagonal; + return this; + } + + public boolean isAvoidSVGComponentsDuplication() { + return avoidSVGComponentsDuplication; + } + + public SvgParameters setAvoidSVGComponentsDuplication(boolean avoidSVGComponentsDuplication) { + this.avoidSVGComponentsDuplication = avoidSVGComponentsDuplication; + return this; + } + + public double getFeederInfosOuterMargin() { + return feederInfosOuterMargin; + } + + public SvgParameters setFeederInfosOuterMargin(double feederInfosOuterMargin) { + this.feederInfosOuterMargin = feederInfosOuterMargin; + return this; + } + + public String getDiagramName() { + return diagramName; + } + + public SvgParameters setDiagramName(String diagramName) { + this.diagramName = diagramName; + return this; + } + + public boolean isDrawStraightWires() { + return drawStraightWires; + } + + public SvgParameters setDrawStraightWires(boolean drawStraightWires) { + this.drawStraightWires = drawStraightWires; + return this; + } + + public boolean isShowGrid() { + return showGrid; + } + + public SvgParameters setShowGrid(boolean showGrid) { + this.showGrid = showGrid; + return this; + } + + public boolean isShowInternalNodes() { + return showInternalNodes; + } + + public SvgParameters setShowInternalNodes(boolean showInternalNodes) { + this.showInternalNodes = showInternalNodes; + return this; + } +} diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/AbstractTestCase.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/AbstractTestCase.java index 71408a597..be9e0e230 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/AbstractTestCase.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/AbstractTestCase.java @@ -13,8 +13,7 @@ import com.powsybl.sld.model.graphs.Graph; import com.powsybl.sld.model.graphs.SubstationGraph; import com.powsybl.sld.model.graphs.VoltageLevelGraph; -import com.powsybl.sld.svg.DiagramLabelProvider; -import com.powsybl.sld.svg.DiagramStyleProvider; +import com.powsybl.sld.svg.SvgParameters; import org.apache.commons.io.output.NullWriter; import java.io.*; @@ -39,6 +38,16 @@ public abstract class AbstractTestCase { protected final LayoutParameters layoutParameters = createDefaultLayoutParameters(); + protected final SvgParameters svgParameters = new SvgParameters() + .setFeederInfosIntraMargin(10) + .setUseName(true) + .setSvgWidthAndHeightAdded(true) + .setCssLocation(SvgParameters.CssLocation.INSERTED_IN_SVG) + .setFeederInfosOuterMargin(20) + .setDrawStraightWires(false) + .setShowGrid(false) + .setShowInternalNodes(false); + private static LayoutParameters createDefaultLayoutParameters() { return new LayoutParameters() .setAdaptCellHeightToContent(true) @@ -48,17 +57,9 @@ private static LayoutParameters createDefaultLayoutParameters() { .setExternCellHeight(250) .setInternCellHeight(40) .setStackHeight(30) - .setShowGrid(false) - .setShowInternalNodes(false) - .setScaleFactor(1) - .setFeederInfosOuterMargin(20) - .setDrawStraightWires(false) + .setCgmesScaleFactor(1) .setHorizontalSnakeLinePadding(30) - .setVerticalSnakeLinePadding(30) - .setCssLocation(LayoutParameters.CssLocation.INSERTED_IN_SVG) - .setSvgWidthAndHeightAdded(true) - .setUseName(true) - .setFeederInfosIntraMargin(10); + .setVerticalSnakeLinePadding(30); } protected ResourcesComponentLibrary getResourcesComponentLibrary() { @@ -125,10 +126,10 @@ protected static String fixSvg(String svg) { return SVG_FIX_PATTERN.matcher(Objects.requireNonNull(svg)).replaceAll(">$1 getBusInfo(BusNode node) { - Objects.requireNonNull(node); - BusInfo result = null; - switch (node.getId()) { - case "bbs21": - result = new BusVoltageInfo(false); - break; - case "bbs1": - case "bbs13": - result = new BusVoltageInfo(true, "Top", null, Side.RIGHT); - break; - case "bbs22": - case "bbs23": - result = new BusVoltageInfo(false, null, "Bottom", Side.LEFT); - break; - } - return Optional.ofNullable(result); + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters) { + + @Override + public Optional getBusInfo(BusNode node) { + Objects.requireNonNull(node); + BusInfo result = null; + switch (node.getId()) { + case "bbs21": + result = new BusVoltageInfo(false); + break; + case "bbs1": + case "bbs13": + result = new BusVoltageInfo(true, "Top", null, Side.RIGHT); + break; + case "bbs22": + case "bbs23": + result = new BusVoltageInfo(false, null, "Bottom", Side.LEFT); + break; + } + return Optional.ofNullable(result); + } + }; } }; - withIncompleteBusInfoProvider = new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters) { + withIncompleteBusInfoProviderFactory = new DefaultLabelProviderFactory() { @Override - public Optional getBusInfo(BusNode node) { - Objects.requireNonNull(node); - BusInfo result = null; - switch (node.getId()) { - case "bbs21": - result = new BusVoltageInfo(false); - break; - case "bbs13": - result = new BusVoltageInfo(true, "Top", null, Side.RIGHT); - break; - case "bbs23": - result = new BusVoltageInfo(false, null, "Bottom", Side.LEFT); - break; - } - return Optional.ofNullable(result); + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters) { + + @Override + public Optional getBusInfo(BusNode node) { + Objects.requireNonNull(node); + BusInfo result = null; + switch (node.getId()) { + case "bbs21": + result = new BusVoltageInfo(false); + break; + case "bbs13": + result = new BusVoltageInfo(true, "Top", null, Side.RIGHT); + break; + case "bbs23": + result = new BusVoltageInfo(false, null, "Bottom", Side.LEFT); + break; + } + return Optional.ofNullable(result); + } + }; } }; } @@ -106,7 +123,7 @@ protected ResourcesComponentLibrary getResourcesComponentLibrary() { @Test public void testWithoutBusInfo() { - runTest(new BasicStyleProvider(), "/TestCase15GraphWithoutVoltageIndicator.svg", new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters)); + runTest(new BasicStyleProvider(), "/TestCase15GraphWithoutVoltageIndicator.svg", new DefaultLabelProviderFactory()); } @Test @@ -117,7 +134,7 @@ public Optional getBusInfoStyle(BusInfo info) { return Optional.of(((BusVoltageInfo) info).isPowered() ? "sld-powered" : "sld-unpowered"); } }; - runTest(styleProvider, "/TestCase15GraphWithVoltageIndicator.svg", withIncompleteBusInfoProvider); + runTest(styleProvider, "/TestCase15GraphWithVoltageIndicator.svg", withIncompleteBusInfoProviderFactory); } @Test @@ -128,16 +145,18 @@ public Optional getBusInfoStyle(BusInfo info) { return Optional.of(((BusVoltageInfo) info).isPowered() ? "sld-powered" : "sld-unpowered"); } }; - runTest(styleProvider, "/TestCase15GraphWithVoltageIndicatorTopological.svg", withFullBusInfoProvider); + runTest(styleProvider, "/TestCase15GraphWithVoltageIndicatorTopological.svg", withFullBusInfoProviderFactory); } - private void runTest(DiagramStyleProvider styleProvider, String filename, DiagramLabelProvider labelProvider) { - layoutParameters.setBusInfoMargin(5); + private void runTest(DiagramStyleProvider styleProvider, String filename, LabelProviderFactory labelProviderFactory) { + svgParameters.setBusInfoMargin(5); // build graph VoltageLevelGraph g = graphBuilder.buildVoltageLevelGraph("vl1"); // Run layout + LabelProvider labelProvider = labelProviderFactory.create(network, componentLibrary, layoutParameters, svgParameters); + new PositionVoltageLevelLayoutFactory() .setBusInfoMap(labelProvider.getBusInfoSides(g)) .setExceptionIfPatternNotHandled(true) @@ -145,7 +164,15 @@ private void runTest(DiagramStyleProvider styleProvider, String filename, Diagra .create(g) .run(layoutParameters); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withSvgParameters(svgParameters) + .withComponentLibrary(getResourcesComponentLibrary()) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(styleProvider) + .build(); + // write SVG and compare to reference - assertEquals(toString(filename), toSVG(g, filename, labelProvider, styleProvider)); + assertEquals(toString(filename), toSVG(g, filename, config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseConsecutiveShunts.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseConsecutiveShunts.java index 24684ff52..cb7bc2e65 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseConsecutiveShunts.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseConsecutiveShunts.java @@ -7,13 +7,15 @@ package com.powsybl.sld.iidm; import com.powsybl.iidm.network.Network; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; +import com.powsybl.sld.layout.LayoutParameters; +import com.powsybl.sld.library.ComponentLibrary; import com.powsybl.sld.model.coordinate.Direction; import com.powsybl.sld.model.graphs.VoltageLevelGraph; import com.powsybl.sld.model.nodes.Node; -import com.powsybl.sld.svg.DefaultDiagramLabelProvider; -import com.powsybl.sld.svg.DiagramLabelProvider; -import com.powsybl.sld.svg.LabelPosition; +import com.powsybl.sld.svg.*; import org.junit.Before; import org.junit.Test; @@ -30,23 +32,26 @@ public class TestCaseConsecutiveShunts extends AbstractTestCaseIidm { @Before public void setUp() { - layoutParameters.setShowInternalNodes(true); + svgParameters.setShowInternalNodes(true); network = Network.read("consecutive_shunts.xiidm", getClass().getResourceAsStream("/consecutive_shunts.xiidm")); vl = network.getVoltageLevel("AU"); graphBuilder = new NetworkGraphBuilder(network); } - @Override - protected DiagramLabelProvider getDefaultDiagramLabelProvider() { - return new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters) { - @Override - public List getNodeLabels(Node node, Direction direction) { - return node.isFictitious() - ? node.getId().matches("INTERNAL_AU_\\d*") ? Collections.singletonList(new NodeLabel(node.getId().replace("INTERNAL_AU_", ""), new LabelPosition("NW", 4, -1, true, 0))) : Collections.emptyList() - : Collections.singletonList(new NodeLabel(node.getId(), new LabelPosition("NW", 4, -1, true, 0))); - } - }; - } + LabelProviderFactory labelProviderFactory = new DefaultLabelProviderFactory() { + @Override + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters) { + + @Override + public List getNodeLabels(Node node, Direction direction) { + return node.isFictitious() + ? node.getId().matches("INTERNAL_AU_\\d*") ? Collections.singletonList(new NodeLabel(node.getId().replace("INTERNAL_AU_", ""), new LabelPosition("NW", 4, -1, true, 0))) : Collections.emptyList() + : Collections.singletonList(new NodeLabel(node.getId(), new LabelPosition("NW", 4, -1, true, 0))); + } + }; + } + }; @Test public void test() throws IOException { @@ -57,7 +62,13 @@ public void test() throws IOException { voltageLevelGraphLayout(g); // write SVG and compare to reference - assertEquals(toString("/consecutive_shunts.svg"), toSVG(g, "/consecutive_shunts.svg")); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .build(); + assertEquals(toString("/consecutive_shunts.svg"), toSVG(g, "/consecutive_shunts.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousBus.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousBus.java index f1ddf5d0a..28043f349 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousBus.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousBus.java @@ -10,9 +10,10 @@ import com.powsybl.iidm.network.TopologyKind; import com.powsybl.iidm.network.VoltageLevel; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.model.graphs.VoltageLevelGraph; -import com.powsybl.sld.util.TopologicalStyleProvider; import org.junit.Before; import org.junit.Test; @@ -40,6 +41,8 @@ public class TestCaseFictitiousBus extends AbstractTestCaseIidm { private VoltageLevel vl2; private VoltageLevel vl3; + Config config; + @Before public void setUp() { network = Network.create("testCase1", "test"); @@ -88,6 +91,12 @@ public void setUp() { "L3", 2, ConnectablePosition.Direction.TOP, "L3", 0, ConnectablePosition.Direction.TOP); + config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .build(); + } @Test @@ -100,7 +109,7 @@ public void testBasic() { // write Json and compare to reference assertEquals(toString("/TestCaseFictitiousBus.svg"), - toSVG(g, "/TestCaseFictitiousBus.svg", getDefaultDiagramLabelProvider(), getDefaultDiagramStyleProvider())); + toSVG(g, "/TestCaseFictitiousBus.svg", config)); } @Test @@ -113,6 +122,6 @@ public void testTopological() { // write Json and compare to reference assertEquals(toString("/TestCaseFictitiousBusTopological.svg"), - toSVG(g, "/TestCaseFictitiousBusTopological.svg", getDefaultDiagramLabelProvider(), new TopologicalStyleProvider(network))); + toSVG(g, "/TestCaseFictitiousBusTopological.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousSwitchNode.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousSwitchNode.java index 3b9f70403..b04762d4d 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousSwitchNode.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousSwitchNode.java @@ -8,6 +8,8 @@ import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.layout.PositionVoltageLevelLayoutFactory; import com.powsybl.sld.model.graphs.VoltageLevelGraph; @@ -46,7 +48,11 @@ public void keepFictitiousSwitchNodesTest() { factory.create(g1).run(layoutParameters); // write svg and compare to reference - assertEquals(toString("/TestCaseKeepFictitiousSwitchNode.svg"), toSVG(g1, "/TestCaseKeepFictitiousSwitchNode.svg")); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withSvgParameters(svgParameters) + .build(); + assertEquals(toString("/TestCaseKeepFictitiousSwitchNode.svg"), toSVG(g1, "/TestCaseKeepFictitiousSwitchNode.svg", config)); } @Test @@ -61,7 +67,11 @@ public void removeFictitiousSwitchNodesTest() { factory.create(g2).run(layoutParameters); // write svg and compare to reference - assertEquals(toString("/TestCaseRemoveFictitiousSwitchNode.svg"), toSVG(g2, "/TestCaseRemoveFictitiousSwitchNode.svg")); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withSvgParameters(svgParameters) + .build(); + assertEquals(toString("/TestCaseRemoveFictitiousSwitchNode.svg"), toSVG(g2, "/TestCaseRemoveFictitiousSwitchNode.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseLoadBreakSwitch.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseLoadBreakSwitch.java index 84804e244..cf3116154 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseLoadBreakSwitch.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseLoadBreakSwitch.java @@ -11,9 +11,10 @@ import com.powsybl.iidm.network.SwitchKind; import com.powsybl.iidm.network.TopologyKind; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.model.graphs.VoltageLevelGraph; -import com.powsybl.sld.util.TopologicalStyleProvider; import org.junit.Before; import org.junit.Test; @@ -24,6 +25,8 @@ */ public class TestCaseLoadBreakSwitch extends AbstractTestCaseIidm { + Config config; + @Before public void setUp() { network = Network.create("testCaseLoadBreakSwitch", "test"); @@ -46,6 +49,12 @@ public void setUp() { createSwitch(vl, "b3", "b3", SwitchKind.LOAD_BREAK_SWITCH, false, true, false, 1, 5); createSwitch(vl, "b4", "b4", SwitchKind.LOAD_BREAK_SWITCH, false, true, false, 5, 6); createSwitch(vl, "b5", "b5", SwitchKind.LOAD_BREAK_SWITCH, false, true, false, 5, 3); + + config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .build(); } @Test @@ -57,6 +66,6 @@ public void test() { voltageLevelGraphLayout(g); // write Json and compare to reference - assertEquals(toString("/TestCaseLoadBreakSwitch.svg"), toSVG(g, "/TestCaseLoadBreakSwitch.svg", getDefaultDiagramLabelProvider(), new TopologicalStyleProvider(network))); + assertEquals(toString("/TestCaseLoadBreakSwitch.svg"), toSVG(g, "/TestCaseLoadBreakSwitch.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestComplexParallelLegsInternalPst.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestComplexParallelLegsInternalPst.java index 27d6a9839..3fb33ffb1 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestComplexParallelLegsInternalPst.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestComplexParallelLegsInternalPst.java @@ -6,6 +6,8 @@ */ package com.powsybl.sld.iidm; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.library.FlatDesignLibrary; import com.powsybl.sld.library.ResourcesComponentLibrary; @@ -43,6 +45,11 @@ public void test() { // write SVG and compare to reference String filename = "/TestComplexParallelLegsInternalPst.svg"; - assertEquals(toString(filename), toSVG(g, filename)); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(getResourcesComponentLibrary()) + .withSvgParameters(svgParameters) + .build(); + assertEquals(toString(filename), toSVG(g, filename, config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFeederInfos.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFeederInfos.java index 9a8a53d44..62910e8e3 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFeederInfos.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFeederInfos.java @@ -8,7 +8,11 @@ import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; +import com.powsybl.sld.layout.LayoutParameters; +import com.powsybl.sld.library.ComponentLibrary; import com.powsybl.sld.model.coordinate.Direction; import com.powsybl.sld.model.graphs.VoltageLevelGraph; import com.powsybl.sld.model.nodes.FeederNode; @@ -56,38 +60,52 @@ public void testManyFeederInfos() { // build graph VoltageLevelGraph g = graphBuilder.buildVoltageLevelGraph(vl.getId()); - layoutParameters.setSpaceForFeederInfos(100) - .setFeederInfosIntraMargin(5) - .setPowerValuePrecision(3); + layoutParameters.setSpaceForFeederInfos(100); + + svgParameters.setPowerValuePrecision(3) + .setFeederInfosIntraMargin(5); // Run layout voltageLevelGraphLayout(g); - // many feeder values provider example for the test : - DiagramLabelProvider manyFeederInfoProvider = new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters) { - - @Override - public List getFeederInfos(FeederNode node) { - List feederInfos = Arrays.asList( - new DirectionalFeederInfo(ARROW_ACTIVE, 1000.967543, valueFormatter::formatPower, null), - new DirectionalFeederInfo(ARROW_REACTIVE, Double.NaN, valueFormatter::formatPower, null), - new DirectionalFeederInfo(ARROW_REACTIVE, LabelDirection.IN, null, "3000", null), - new DirectionalFeederInfo(ARROW_ACTIVE, LabelDirection.OUT, null, "40", null), // Not displayed - new DirectionalFeederInfo(ARROW_ACTIVE, LabelDirection.OUT, null, "50", null)); - boolean feederArrowSymmetry = node.getDirection() == Direction.TOP || layoutParameters.isFeederInfoSymmetry(); - if (!feederArrowSymmetry) { - Collections.reverse(feederInfos); - } - return feederInfos; - } - + // many feeder values provider example for the test: + LabelProviderFactory diagramLabelManyFeederInfoProviderFactory = new DefaultLabelProviderFactory() { @Override - public List getNodeDecorators(Node node, Direction direction) { - return new ArrayList<>(); + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters, svgParameters) { + + @Override + public List getFeederInfos(FeederNode node) { + List feederInfos = Arrays.asList( + new DirectionalFeederInfo(ARROW_ACTIVE, 1000.967543, valueFormatter::formatPower, null), + new DirectionalFeederInfo(ARROW_REACTIVE, Double.NaN, valueFormatter::formatPower, null), + new DirectionalFeederInfo(ARROW_REACTIVE, LabelDirection.IN, null, "3000", null), + new DirectionalFeederInfo(ARROW_ACTIVE, LabelDirection.OUT, null, "40", null), // Not displayed + new DirectionalFeederInfo(ARROW_ACTIVE, LabelDirection.OUT, null, "50", null)); + boolean feederArrowSymmetry = node.getDirection() == Direction.TOP || svgParameters.isFeederInfoSymmetry(); + if (!feederArrowSymmetry) { + Collections.reverse(feederInfos); + } + return feederInfos; + } + + @Override + public List getNodeDecorators(Node node, Direction direction) { + return new ArrayList<>(); + } + }; } }; + // write SVG and compare to reference - assertEquals(toString("/TestFeederInfos.svg"), toSVG(g, "/TestFeederInfos.svg", manyFeederInfoProvider, new BasicStyleProvider())); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(diagramLabelManyFeederInfoProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); + assertEquals(toString("/TestFeederInfos.svg"), toSVG(g, "/TestFeederInfos.svg", config)); } @Test @@ -96,7 +114,7 @@ public void testFrenchFormatting() { network.getLoad("l").getTerminal().setP(1200.29); network.getLoad("l").getTerminal().setQ(-1); - layoutParameters.setLanguageTag("fr").setPowerValuePrecision(1); + svgParameters.setLanguageTag("fr").setPowerValuePrecision(1); // build graph VoltageLevelGraph g = graphBuilder.buildVoltageLevelGraph(vl.getId()); @@ -105,7 +123,10 @@ public void testFrenchFormatting() { voltageLevelGraphLayout(g); // write SVG and compare to reference - assertEquals(toString("/TestFormattingFeederInfos.svg"), toSVG(g, "/TestFormattingFeederInfos.svg")); + Config config = new ConfigBuilder(network) + .withSvgParameters(svgParameters) + .build(); + assertEquals(toString("/TestFormattingFeederInfos.svg"), toSVG(g, "/TestFormattingFeederInfos.svg", config)); } @Test @@ -121,45 +142,51 @@ public void testAnimation() { network.getLoad("l2").getTerminal().setP(501.0); network.getLoad("l2").getTerminal().setQ(0.0); - layoutParameters.setFeederInfosIntraMargin(20); + svgParameters.setFeederInfosIntraMargin(20); - DiagramLabelProvider labelProvider = new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters) { + LabelProviderFactory labelProviderFactory = new DefaultLabelProviderFactory() { @Override - public List getFeederInfos(FeederNode node) { - Load l = network.getLoad("l"); - Load l2 = network.getLoad("l2"); - - if (Objects.equals(l.getNameOrId(), node.getEquipmentId())) { - return Arrays.asList( - new DirectionalFeederInfo(ARROW_ACTIVE, l.getTerminal().getP(), valueFormatter::formatPower, null), - new DirectionalFeederInfo(ARROW_REACTIVE, l.getTerminal().getQ(), valueFormatter::formatPower, null)); - } else { - return Arrays.asList( - new DirectionalFeederInfo(ARROW_ACTIVE, l2.getTerminal().getP(), valueFormatter::formatPower, null), - new DirectionalFeederInfo(ARROW_REACTIVE, l2.getTerminal().getQ(), valueFormatter::formatPower, null), - new DirectionalFeederInfo(ARROW_REACTIVE, Double.NaN, valueFormatter::formatPower, null), - new FeederInfo() { - @Override - public String getUserDefinedId() { - return null; - } - - @Override - public String getComponentType() { - return ARROW_ACTIVE; - } - - @Override - public Optional getLeftLabel() { - return Optional.of("Left"); - } - - @Override - public Optional getRightLabel() { - return Optional.of("Right"); - } - }); - } + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters) { + + @Override + public List getFeederInfos(FeederNode node) { + Load l = network.getLoad("l"); + Load l2 = network.getLoad("l2"); + + if (Objects.equals(l.getNameOrId(), node.getEquipmentId())) { + return Arrays.asList( + new DirectionalFeederInfo(ARROW_ACTIVE, l.getTerminal().getP(), valueFormatter::formatPower, null), + new DirectionalFeederInfo(ARROW_REACTIVE, l.getTerminal().getQ(), valueFormatter::formatPower, null)); + } else { + return Arrays.asList( + new DirectionalFeederInfo(ARROW_ACTIVE, l2.getTerminal().getP(), valueFormatter::formatPower, null), + new DirectionalFeederInfo(ARROW_REACTIVE, l2.getTerminal().getQ(), valueFormatter::formatPower, null), + new DirectionalFeederInfo(ARROW_REACTIVE, Double.NaN, valueFormatter::formatPower, null), + new FeederInfo() { + @Override + public String getUserDefinedId() { + return null; + } + + @Override + public String getComponentType() { + return ARROW_ACTIVE; + } + + @Override + public Optional getLeftLabel() { + return Optional.of("Left"); + } + + @Override + public Optional getRightLabel() { + return Optional.of("Right"); + } + }); + } + } + }; } }; @@ -171,7 +198,14 @@ public Optional getRightLabel() { // Run layout voltageLevelGraphLayout(g); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(styleProvider) + .build(); // write SVG and compare to reference - assertEquals(toString("/TestAnimatedFeederInfos.svg"), toSVG(g, "/TestAnimatedFeederInfos.svg", labelProvider, styleProvider)); + assertEquals(toString("/TestAnimatedFeederInfos.svg"), toSVG(g, "/TestAnimatedFeederInfos.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesBusBreaker.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesBusBreaker.java index 8c7315380..c77274663 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesBusBreaker.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesBusBreaker.java @@ -9,6 +9,8 @@ import com.powsybl.commons.config.BaseVoltagesConfig; import com.powsybl.commons.config.ModuleConfigRepository; import com.powsybl.commons.config.PlatformConfig; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.layout.PositionVoltageLevelLayoutFactory; import com.powsybl.sld.layout.VerticalSubstationLayoutFactory; @@ -51,8 +53,14 @@ public void testVLGraph() { voltageLevelGraphLayout(g); // write SVG and compare to reference + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramStyleProvider(getDefaultDiagramStyleProvider()) + .build(); assertEquals(toString("/InternalBranchesBusBreaker.svg"), - toSVG(g, "/InternalBranchesBusBreaker.svg", getDefaultDiagramLabelProvider(), getDefaultDiagramStyleProvider())); + toSVG(g, "/InternalBranchesBusBreaker.svg", config)); } @Test diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesNodeBreaker.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesNodeBreaker.java index b2d43cac9..24e31b347 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesNodeBreaker.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesNodeBreaker.java @@ -6,6 +6,8 @@ */ package com.powsybl.sld.iidm; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.layout.PositionVoltageLevelLayoutFactory; import com.powsybl.sld.layout.VerticalSubstationLayoutFactory; @@ -37,8 +39,13 @@ public void testVLGraph() { voltageLevelGraphLayout(g); // write SVG and compare to reference + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .build(); assertEquals(toString("/InternalBranchesNodeBreaker.svg"), - toSVG(g, "/InternalBranchesNodeBreaker.svg", getDefaultDiagramLabelProvider(), getDefaultDiagramStyleProvider())); + toSVG(g, "/InternalBranchesNodeBreaker.svg", config)); } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsBusBreaker.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsBusBreaker.java index 6dcd840b6..d5c89d5a4 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsBusBreaker.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsBusBreaker.java @@ -6,6 +6,8 @@ */ package com.powsybl.sld.iidm; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.model.graphs.VoltageLevelGraph; import org.junit.Before; @@ -34,7 +36,12 @@ public void testBranchStatusDecorators() { voltageLevelGraphLayout(g); // write SVG and compare to reference + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .build(); assertEquals(toString("/NodeDecoratorsBranchStatusBusBreaker.svg"), - toSVG(g, "/NodeDecoratorsBranchStatusBusBreaker.svg", getDefaultDiagramLabelProvider(), getDefaultDiagramStyleProvider())); + toSVG(g, "/NodeDecoratorsBranchStatusBusBreaker.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsNodeBreaker.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsNodeBreaker.java index 43960979e..6fb256c2c 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsNodeBreaker.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsNodeBreaker.java @@ -7,15 +7,18 @@ package com.powsybl.sld.iidm; import com.powsybl.iidm.network.Network; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; +import com.powsybl.sld.layout.LayoutParameters; +import com.powsybl.sld.library.ComponentLibrary; import com.powsybl.sld.library.ComponentSize; import com.powsybl.sld.model.coordinate.Direction; import com.powsybl.sld.model.nodes.SwitchNode; import com.powsybl.sld.model.nodes.Node; import com.powsybl.sld.model.graphs.SubstationGraph; import com.powsybl.sld.model.graphs.VoltageLevelGraph; -import com.powsybl.sld.svg.DefaultDiagramLabelProvider; -import com.powsybl.sld.svg.LabelPosition; +import com.powsybl.sld.svg.*; import org.junit.Before; import org.junit.Test; @@ -31,6 +34,33 @@ */ public class TestNodeDecoratorsNodeBreaker extends AbstractTestCaseIidm { + LabelProviderFactory diagramLabelTestProviderFactory = new DefaultLabelProviderFactory() { + + private static final double SWITCH_DECORATOR_OFFSET = 1d; + + @Override + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters) { + + @Override + public List 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); + } + }; + } + }; + @Before public void setUp() { network = CreateNetworksUtil.createNodeBreakerNetworkWithBranchStatus("TestNodeDecorators", "test"); @@ -46,8 +76,14 @@ public void testBranchStatusDecorators() { // Run horizontal substation layout substationGraphLayout(g); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .build(); + assertEquals(toString("/NodeDecoratorsBranchStatusNodeBreaker.svg"), - toSVG(g, "/NodeDecoratorsBranchStatusNodeBreaker.svg", getDefaultDiagramLabelProvider(), getDefaultDiagramStyleProvider())); + toSVG(g, "/NodeDecoratorsBranchStatusNodeBreaker.svg", config)); } @Test @@ -59,32 +95,13 @@ public void testSwitchDecorators() { voltageLevelGraphLayout(g); // write SVG and compare to reference + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(diagramLabelTestProviderFactory) + .build(); assertEquals(toString("/NodeDecoratorsSwitches.svg"), - toSVG(g, "/NodeDecoratorsSwitches.svg", new TestDiagramLabelProvider(network), getDefaultDiagramStyleProvider())); - } - - private class TestDiagramLabelProvider extends DefaultDiagramLabelProvider { - - private static final double SWITCH_DECORATOR_OFFSET = 1d; - - public TestDiagramLabelProvider(Network network) { - super(network, TestNodeDecoratorsNodeBreaker.this.componentLibrary, TestNodeDecoratorsNodeBreaker.this.layoutParameters); - } - - @Override - public List 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); - } + toSVG(g, "/NodeDecoratorsSwitches.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSVGWriter.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSVGWriter.java index 2f80977eb..ffb95570c 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSVGWriter.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSVGWriter.java @@ -8,7 +8,10 @@ import com.powsybl.iidm.network.Branch.Side; import com.powsybl.iidm.network.Network; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.layout.LayoutParameters; +import com.powsybl.sld.library.ComponentLibrary; import com.powsybl.sld.library.ComponentTypeName; import com.powsybl.sld.model.coordinate.Direction; import com.powsybl.sld.model.coordinate.Orientation; @@ -56,8 +59,10 @@ public class TestSVGWriter extends AbstractTestCaseIidm { private VoltageLevelGraph g2; private VoltageLevelGraph g3; private SubstationGraph substG; - private DiagramLabelProvider labelProvider; - private DiagramLabelProvider noFeederInfoProvider; + private LabelProviderFactory labelProviderFactory; + private LabelProviderFactory diagramLabelNoFeederInfoProviderFactory; + private LabelProviderFactory diagramLabelMultiLineTooltipProviderFactory; + private LabelProviderFactory diagramLabelSameNodeProviderFactory; private ZoneGraph zGraph; private void createVoltageLevelGraphs() { @@ -587,196 +592,336 @@ public void setUp() { createZoneGraph(); // Layout parameters : - layoutParameters.setShowGrid(false); // grid is only for SVG generated with a CellDetector + svgParameters.setShowGrid(false); // grid is only for SVG generated with a CellDetector // initValueProvider example for the test : - // - labelProvider = new DefaultDiagramLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters) { - + labelProviderFactory = new DefaultLabelProviderFactory() { @Override - public List getFeederInfos(FeederNode node) { - List feederInfos = Arrays.asList( - new DirectionalFeederInfo(ARROW_ACTIVE, LabelDirection.OUT, null, "10", null), - new DirectionalFeederInfo(ARROW_REACTIVE, LabelDirection.IN, null, "20", null)); - boolean feederArrowSymmetry = node.getDirection() == TOP || layoutParameters.isFeederInfoSymmetry(); - if (!feederArrowSymmetry) { - Collections.reverse(feederInfos); - } - return feederInfos; + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters, svgParameters) { + + @Override + public List getFeederInfos(FeederNode node) { + List feederInfos = Arrays.asList( + new DirectionalFeederInfo(ARROW_ACTIVE, LabelDirection.OUT, null, "10", null), + new DirectionalFeederInfo(ARROW_REACTIVE, LabelDirection.IN, null, "20", null)); + boolean feederArrowSymmetry = node.getDirection() == TOP || svgParameters.isFeederInfoSymmetry(); + if (!feederArrowSymmetry) { + Collections.reverse(feederInfos); + } + return feederInfos; + } + + @Override + public List getNodeDecorators(Node node, Direction direction) { + return new ArrayList<>(); + } + }; } + }; + // no feeder value provider example for the test : + diagramLabelNoFeederInfoProviderFactory = new DefaultLabelProviderFactory() { @Override - public List getNodeDecorators(Node node, Direction direction) { - return new ArrayList<>(); + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters, svgParameters) { + + @Override + public List getFeederInfos(FeederNode node) { + return Collections.emptyList(); + } + + @Override + public List getNodeDecorators(Node node, Direction direction) { + return new ArrayList<>(); + } + }; } }; - // no feeder value provider example for the test : - // - noFeederInfoProvider = new DefaultDiagramLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters) { + diagramLabelMultiLineTooltipProviderFactory = new DefaultLabelProviderFactory() { @Override - public List getFeederInfos(FeederNode node) { - return Collections.emptyList(); + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters, svgParameters) { + + @Override + public String getTooltip(Node node) { + String tooltip = node.getId(); + if (node.getType() == Node.NodeType.FEEDER) { + tooltip += "\n" + node.getComponentType(); + } + return tooltip; + } + + @Override + public List getNodeDecorators(Node node, Direction direction) { + return Collections.emptyList(); + } + }; } + }; + diagramLabelSameNodeProviderFactory = new DefaultLabelProviderFactory() { @Override - public List getNodeDecorators(Node node, Direction direction) { - return new ArrayList<>(); + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters, svgParameters) { + + @Override + public List getNodeLabels(Node node, Direction direction) { + LabelPosition labelPosition = new LabelPosition("default", 0, -5, true, 0); + return Collections.singletonList(new LabelProvider.NodeLabel("Tests", labelPosition, null)); + } + + @Override + public List getNodeDecorators(Node node, Direction direction) { + return new ArrayList<>(); + } + }; } }; + } @Test public void testVl1() { + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl1.svg"), - toSVG(g1, "/vl1.svg", labelProvider, new BasicStyleProvider())); + toSVG(g1, "/vl1.svg", config)); } @Test public void testVl1CssExternalImported() { - layoutParameters.setCssLocation(LayoutParameters.CssLocation.EXTERNAL_IMPORTED); + svgParameters.setCssLocation(SvgParameters.CssLocation.EXTERNAL_IMPORTED); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl1_external_css.svg"), - toSVG(g1, "/vl1_external_css.svg", labelProvider, new BasicStyleProvider())); + toSVG(g1, "/vl1_external_css.svg", config)); } @Test public void testVl1CssExternalNoImport() { - layoutParameters.setCssLocation(LayoutParameters.CssLocation.EXTERNAL_NO_IMPORT); + svgParameters.setCssLocation(SvgParameters.CssLocation.EXTERNAL_NO_IMPORT); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl1_external_css_no_import.svg"), - toSVG(g1, "/vl1_external_css_no_import.svg", labelProvider, new BasicStyleProvider())); + toSVG(g1, "/vl1_external_css_no_import.svg", config)); } @Test public void testVl2() { + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl2.svg"), - toSVG(g2, "/vl2.svg", labelProvider, new BasicStyleProvider())); + toSVG(g2, "/vl2.svg", config)); } @Test public void testVl3() { + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl3.svg"), - toSVG(g3, "/vl3.svg", labelProvider, new BasicStyleProvider())); + toSVG(g3, "/vl3.svg", config)); } @Test public void testSubstation() { // SVG file generation for substation and comparison to reference + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new NominalVoltageDiagramStyleProvider(Network.create("empty", ""))) + .build(); assertEquals(toString("/substation.svg"), - toSVG(substG, "/substation.svg", labelProvider, new NominalVoltageDiagramStyleProvider(Network.create("empty", "")))); + toSVG(substG, "/substation.svg", config)); } @Test public void testSubstationArrowSymmetry() { // SVG file generation for substation with symmetric feeder arrow and comparison to reference - layoutParameters.setFeederInfoSymmetry(true); + svgParameters.setFeederInfoSymmetry(true); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/substation_feeder_arrow_symmetry.svg"), - toSVG(substG, "/substation_feeder_arrow_symmetry.svg", labelProvider, new BasicStyleProvider())); + toSVG(substG, "/substation_feeder_arrow_symmetry.svg", config)); } @Test public void testSubstationNoFeederInfos() { // SVG file generation for substation and comparison to reference but with no feeder values + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(diagramLabelNoFeederInfoProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/substation_no_feeder_values.svg"), - toSVG(substG, "/substation_no_feeder_values.svg", noFeederInfoProvider, new BasicStyleProvider())); + toSVG(substG, "/substation_no_feeder_values.svg", config)); } @Test public void testVl1Optimized() { - // Same tests than before, with optimized svg - layoutParameters.setAvoidSVGComponentsDuplication(true); + // Same tests as before, with optimized svg + svgParameters.setAvoidSVGComponentsDuplication(true); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl1_optimized.svg"), - toSVG(g1, "/vl1_optimized.svg", labelProvider, new BasicStyleProvider())); + toSVG(g1, "/vl1_optimized.svg", config)); } @Test public void testVl2Optimized() { - // Same tests than before, with optimized svg - layoutParameters.setAvoidSVGComponentsDuplication(true); + // Same tests as before, with optimized svg + svgParameters.setAvoidSVGComponentsDuplication(true); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl2_optimized.svg"), - toSVG(g2, "/vl2_optimized.svg", labelProvider, new BasicStyleProvider())); + toSVG(g2, "/vl2_optimized.svg", config)); } @Test public void testVl3Optimized() { - // Same tests than before, with optimized svg - layoutParameters.setAvoidSVGComponentsDuplication(true); + // Same tests as before, with optimized svg + svgParameters.setAvoidSVGComponentsDuplication(true); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl3_optimized.svg"), - toSVG(g3, "/vl3_optimized.svg", labelProvider, new BasicStyleProvider())); + toSVG(g3, "/vl3_optimized.svg", config)); } @Test public void testSubstationOptimized() { - // Same tests than before, with optimized svg - layoutParameters.setAvoidSVGComponentsDuplication(true); + // Same tests as before, with optimized svg + svgParameters.setAvoidSVGComponentsDuplication(true); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/substation_optimized.svg"), - toSVG(substG, "/substation_optimized.svg", labelProvider, new BasicStyleProvider())); + toSVG(substG, "/substation_optimized.svg", config)); } @Test public void testWriteZone() { - layoutParameters.setShowGrid(false); + svgParameters.setShowGrid(false); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/zone.svg"), - toSVG(zGraph, "/zone.svg", labelProvider, new BasicStyleProvider())); + toSVG(zGraph, "/zone.svg", config)); } @Test public void testStraightWires() { - DiagramStyleProvider styleProvider = new BasicStyleProvider(); - layoutParameters.setDrawStraightWires(true); + svgParameters.setDrawStraightWires(true); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl1_straightWires.svg"), - toSVG(g1, "/vl1_straightWires.svg", labelProvider, styleProvider)); + toSVG(g1, "/vl1_straightWires.svg", config)); } @Test public void testTooltip() { - layoutParameters.setTooltipEnabled(true); + svgParameters.setTooltipEnabled(true); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl1_tooltip.svg"), - toSVG(g1, "/vl1_tooltip.svg", labelProvider, new BasicStyleProvider())); + toSVG(g1, "/vl1_tooltip.svg", config)); } @Test public void testMultiLineTooltip() { - DiagramLabelProvider labelProvider = new DefaultDiagramLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters) { - @Override - public String getTooltip(Node node) { - String tooltip = node.getId(); - if (node.getType() == Node.NodeType.FEEDER) { - tooltip += "\n" + node.getComponentType(); - } - return tooltip; - } - - @Override - public List getNodeDecorators(Node node, Direction direction) { - return Collections.emptyList(); - } - }; - layoutParameters.setAvoidSVGComponentsDuplication(true); - layoutParameters.setTooltipEnabled(true); + svgParameters.setAvoidSVGComponentsDuplication(true); + svgParameters.setTooltipEnabled(true); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(diagramLabelMultiLineTooltipProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/vl1_multiline_tooltip.svg"), - toSVG(g1, "/vl1_multiline_tooltip.svg", labelProvider, new BasicStyleProvider())); + toSVG(g1, "/vl1_multiline_tooltip.svg", config)); } @Test public void testLabelOnAllNodes() { - // same node label provider example for the test : - // - DiagramLabelProvider sameNodeLabelProvider = new DefaultDiagramLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters) { - @Override - public List getNodeLabels(Node node, Direction direction) { - LabelPosition labelPosition = new LabelPosition("default", 0, -5, true, 0); - return Collections.singletonList(new DiagramLabelProvider.NodeLabel("Tests", labelPosition, null)); - } - - @Override - public List getNodeDecorators(Node node, Direction direction) { - return new ArrayList<>(); - } - }; + // same node label provider example for the test: + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(diagramLabelSameNodeProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); - DiagramStyleProvider styleProvider = new BasicStyleProvider(); assertEquals(toString("/label_on_all_nodes.svg"), - toSVG(g1, "/label_on_all_nodes.svg", sameNodeLabelProvider, styleProvider)); + toSVG(g1, "/label_on_all_nodes.svg", config)); } @Test @@ -787,7 +932,14 @@ public List getCssFilenames() { return Arrays.asList("tautologies.css", "baseVoltages.css", "highlightLineStates.css", "TestWithGreyFrameBackground.css"); } }; + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(labelProviderFactory) + .withDiagramStyleProvider(styleProvider) + .build(); assertEquals(toString("/with_frame_background.svg"), - toSVG(g1, "/with_frame_background.svg", labelProvider, styleProvider)); + toSVG(g1, "/with_frame_background.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSingleLineDiagramClass.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSingleLineDiagramClass.java index 1bb8f51e0..a98f8eb61 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSingleLineDiagramClass.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSingleLineDiagramClass.java @@ -12,6 +12,7 @@ import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; import com.powsybl.sld.SingleLineDiagram; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import org.apache.commons.io.output.NullWriter; import org.junit.After; @@ -79,7 +80,7 @@ public void testSvgVl1() throws IOException { assertEquals(expected, toDefaultSVG(network, vl.getId(), "/TestSldClassVl.svg", "/TestSldClassVlMetadata.json")); Writer writerForSvg = new StringWriter(); - SingleLineDiagram.drawVoltageLevel(network, vl.getId(), writerForSvg, new NullWriter()); + SingleLineDiagram.drawVoltageLevel(network, vl.getId(), writerForSvg, new NullWriter(), new ConfigBuilder(network).build()); assertEquals(expected, fixSvg(normalizeLineSeparator(writerForSvg.toString()))); Path svgPath = tmpDir.resolve("result.svg"); @@ -120,7 +121,7 @@ public void testSvgSubs() throws IOException { } Writer writerForSvg = new StringWriter(); - SingleLineDiagram.drawSubstation(network, substation.getId(), writerForSvg, new NullWriter()); + SingleLineDiagram.drawSubstation(network, substation.getId(), writerForSvg, new NullWriter(), new ConfigBuilder(network).build()); assertEquals(expected, fixSvg(normalizeLineSeparator(writerForSvg.toString()))); Path svgPath = tmpDir.resolve("result.svg"); diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestUnicityNodeIdWithMutipleNetwork.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestUnicityNodeIdWithMutipleNetwork.java index 5cf538493..2d96483c4 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestUnicityNodeIdWithMutipleNetwork.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestUnicityNodeIdWithMutipleNetwork.java @@ -10,8 +10,8 @@ import com.powsybl.iidm.network.extensions.ConnectablePosition; import com.powsybl.sld.builders.GraphBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; -import com.powsybl.sld.layout.LayoutParameters; import com.powsybl.sld.model.graphs.VoltageLevelGraph; +import com.powsybl.sld.svg.SvgParameters; import org.junit.Before; import org.junit.Test; @@ -29,9 +29,8 @@ public class TestUnicityNodeIdWithMutipleNetwork extends AbstractTestCaseIidm { @Before public void setUp() { - layoutParameters - .setAdaptCellHeightToContent(false) - .setCssLocation(LayoutParameters.CssLocation.INSERTED_IN_SVG); + layoutParameters.setAdaptCellHeightToContent(false); + svgParameters.setCssLocation(SvgParameters.CssLocation.INSERTED_IN_SVG); // Create first network with a substation and a voltageLevel network = Network.create("n1", "test"); diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/ComponentsOnBusTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/ComponentsOnBusTest.java index aebb7868e..e1d33c223 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/ComponentsOnBusTest.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/ComponentsOnBusTest.java @@ -6,6 +6,8 @@ */ package com.powsybl.sld.layout; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.iidm.AbstractTestCaseIidm; import com.powsybl.sld.iidm.CreateNetworksUtil; @@ -36,7 +38,12 @@ public void testNoComponentsOnBuses() { layoutParameters.setComponentsOnBusbars(Collections.emptyList()); VoltageLevelGraph vlg = graphBuilder.buildVoltageLevelGraph(vl.getId()); voltageLevelGraphLayout(vlg); - assertEquals(toString("/noComponentsOnBus.svg"), toSVG(vlg, "/noComponentsOnBus.svg")); + Config config = new ConfigBuilder(network) + .withComponentLibrary(getResourcesComponentLibrary()) + .withLayoutParameters(layoutParameters) + .withSvgParameters(svgParameters) + .build(); + assertEquals(toString("/noComponentsOnBus.svg"), toSVG(vlg, "/noComponentsOnBus.svg", config)); } @Test @@ -44,6 +51,11 @@ public void testSwitchesOnBuses() { layoutParameters.setComponentsOnBusbars(List.of(ComponentTypeName.BREAKER, ComponentTypeName.DISCONNECTOR)); VoltageLevelGraph vlg = graphBuilder.buildVoltageLevelGraph(vl.getId()); voltageLevelGraphLayout(vlg); - assertEquals(toString("/switchesOnBus.svg"), toSVG(vlg, "/switchesOnBus.svg")); + Config config = new ConfigBuilder(network) + .withComponentLibrary(getResourcesComponentLibrary()) + .withLayoutParameters(layoutParameters) + .withSvgParameters(svgParameters) + .build(); + assertEquals(toString("/switchesOnBus.svg"), toSVG(vlg, "/switchesOnBus.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/LayoutParametersTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/LayoutParametersTest.java index f291bd0b1..9ee2be3f1 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/LayoutParametersTest.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/LayoutParametersTest.java @@ -30,39 +30,18 @@ public void test() { .setExternCellHeight(240) .setInternCellHeight(50) .setStackHeight(40) - .setShowGrid(true) - .setShowInternalNodes(true) - .setScaleFactor(2) - .setDrawStraightWires(true) + .setCgmesScaleFactor(2) + .setCgmesDiagramName("cgmes") + .setCgmesUseNames(true) .setHorizontalSnakeLinePadding(25) .setVerticalSnakeLinePadding(40) - .setFeederInfosOuterMargin(25) - .setDiagramName("diag") - .setAvoidSVGComponentsDuplication(true) .setAdaptCellHeightToContent(true) .setMaxComponentHeight(10) .setMinSpaceBetweenComponents(30) .setMinExternCellHeight(150) - .setAngleLabelShift(42) - .setLabelCentered(true) - .setLabelDiagonal(true) - .setHighlightLineState(false) - .setTooltipEnabled(true) - .setAddNodesInfos(true) .setSpaceForFeederInfos(70) - .setFeederInfoSymmetry(true) - .setCssLocation(LayoutParameters.CssLocation.EXTERNAL_NO_IMPORT) - .setSvgWidthAndHeightAdded(true) - .setUseName(true) - .setFeederInfosIntraMargin(21) - .setBusInfoMargin(22) .setBusbarsAlignment(LayoutParameters.Alignment.LAST) .setComponentsOnBusbars(List.of("COMPONENT_ON_BUS")) - .setLanguageTag("fr") - .setVoltageValuePrecision(3) - .setPowerValuePrecision(2) - .setAngleValuePrecision(0) - .setUndefinedValueSymbol("\u002A") .setRemoveFictitiousSwitchNodes(true); layoutParameters.setComponentsSize(null); @@ -83,39 +62,18 @@ public void test() { assertEquals(layoutParameters.getExternCellHeight(), layoutParameters2.getExternCellHeight(), 0); assertEquals(layoutParameters.getInternCellHeight(), layoutParameters2.getInternCellHeight(), 0); assertEquals(layoutParameters.getStackHeight(), layoutParameters2.getStackHeight(), 0); - assertEquals(layoutParameters.isShowGrid(), layoutParameters2.isShowGrid()); - assertEquals(layoutParameters.isShowInternalNodes(), layoutParameters2.isShowInternalNodes()); - assertEquals(layoutParameters.getScaleFactor(), layoutParameters2.getScaleFactor(), 0); - assertEquals(layoutParameters.isDrawStraightWires(), layoutParameters2.isDrawStraightWires()); + assertEquals(layoutParameters.getCgmesScaleFactor(), layoutParameters2.getCgmesScaleFactor(), 0); + assertEquals(layoutParameters.getCgmesDiagramName(), layoutParameters2.getCgmesDiagramName()); + assertEquals(layoutParameters.isCgmesUseNames(), layoutParameters2.isCgmesUseNames()); assertEquals(layoutParameters.getHorizontalSnakeLinePadding(), layoutParameters2.getHorizontalSnakeLinePadding(), 0); assertEquals(layoutParameters.getVerticalSnakeLinePadding(), layoutParameters2.getVerticalSnakeLinePadding(), 0); - assertEquals(layoutParameters.getFeederInfosOuterMargin(), layoutParameters2.getFeederInfosOuterMargin(), 0); - assertEquals(layoutParameters.getDiagramName(), layoutParameters2.getDiagramName()); - assertEquals(layoutParameters.isAvoidSVGComponentsDuplication(), layoutParameters2.isAvoidSVGComponentsDuplication()); assertEquals(layoutParameters.isAdaptCellHeightToContent(), layoutParameters2.isAdaptCellHeightToContent()); assertEquals(layoutParameters.getMaxComponentHeight(), layoutParameters2.getMaxComponentHeight(), 0); assertEquals(layoutParameters.getMinSpaceBetweenComponents(), layoutParameters2.getMinSpaceBetweenComponents(), 0); assertEquals(layoutParameters.getMinExternCellHeight(), layoutParameters2.getMinExternCellHeight(), 0); - assertEquals(layoutParameters.getAngleLabelShift(), layoutParameters2.getAngleLabelShift(), 0); - assertEquals(layoutParameters.isLabelCentered(), layoutParameters2.isLabelCentered()); - assertEquals(layoutParameters.isLabelDiagonal(), layoutParameters2.isLabelDiagonal()); - assertEquals(layoutParameters.isHighlightLineState(), layoutParameters2.isHighlightLineState()); - assertEquals(layoutParameters.isTooltipEnabled(), layoutParameters2.isTooltipEnabled()); - assertEquals(layoutParameters.isAddNodesInfos(), layoutParameters2.isAddNodesInfos()); assertEquals(layoutParameters.getSpaceForFeederInfos(), layoutParameters2.getSpaceForFeederInfos(), 0); - assertEquals(layoutParameters.isFeederInfoSymmetry(), layoutParameters2.isFeederInfoSymmetry()); - assertEquals(layoutParameters.getCssLocation(), layoutParameters2.getCssLocation()); - assertEquals(layoutParameters.isSvgWidthAndHeightAdded(), layoutParameters2.isSvgWidthAndHeightAdded()); - assertEquals(layoutParameters.isUseName(), layoutParameters2.isUseName()); - assertEquals(layoutParameters.getFeederInfosIntraMargin(), layoutParameters2.getFeederInfosIntraMargin(), 0); - assertEquals(layoutParameters.getBusInfoMargin(), layoutParameters2.getBusInfoMargin(), 0); assertEquals(layoutParameters.getBusbarsAlignment(), layoutParameters2.getBusbarsAlignment()); assertEquals(layoutParameters.getComponentsOnBusbars(), layoutParameters2.getComponentsOnBusbars()); - assertEquals(layoutParameters.getLanguageTag(), layoutParameters2.getLanguageTag()); - assertEquals(layoutParameters.getVoltageValuePrecision(), layoutParameters2.getVoltageValuePrecision()); - assertEquals(layoutParameters.getPowerValuePrecision(), layoutParameters2.getPowerValuePrecision()); - assertEquals(layoutParameters.getAngleValuePrecision(), layoutParameters2.getAngleValuePrecision()); - assertEquals(layoutParameters.getUndefinedValueSymbol(), layoutParameters2.getUndefinedValueSymbol()); assertEquals(layoutParameters.getComponentsSize(), layoutParameters2.getComponentsSize()); assertEquals(layoutParameters.isRemoveFictitiousSwitchNodes(), layoutParameters2.isRemoveFictitiousSwitchNodes()); } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/AbstractTestCaseRaw.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/AbstractTestCaseRaw.java index 9ff6f52f4..23d48d592 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/AbstractTestCaseRaw.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/AbstractTestCaseRaw.java @@ -6,7 +6,10 @@ */ package com.powsybl.sld.raw; +import com.powsybl.iidm.network.Network; import com.powsybl.sld.AbstractTestCase; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.RawGraphBuilder; import com.powsybl.sld.layout.LayoutParameters; import com.powsybl.sld.library.ComponentLibrary; @@ -27,30 +30,38 @@ public abstract class AbstractTestCaseRaw extends AbstractTestCase { protected RawGraphBuilder rawGraphBuilder = new RawGraphBuilder(); - protected RawDiagramLabelProvider getRawLabelProvider() { - return new RawDiagramLabelProvider(componentLibrary, layoutParameters); - } - @Override public String toSVG(Graph graph, String filename) { - return toSVG(graph, filename, getRawLabelProvider(), new BasicStyleProvider()); + Config config = new ConfigBuilder(Network.create("empty", "")) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withDiagramLabelProviderFactory(diagramLabelRawProviderFactory) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); + return toSVG(graph, filename, config); } - private static class RawDiagramLabelProvider extends AbstractDiagramLabelProvider { - public RawDiagramLabelProvider(ComponentLibrary componentLibrary, LayoutParameters layoutParameters) { - super(componentLibrary, layoutParameters); - } - + private final LabelProviderFactory diagramLabelRawProviderFactory = new DefaultLabelProviderFactory() { @Override - public List getFeederInfos(FeederNode node) { - return Arrays.asList( - new DirectionalFeederInfo(ARROW_ACTIVE, LabelDirection.OUT, "", "tata", null), - new DirectionalFeederInfo(ARROW_REACTIVE, LabelDirection.IN, "", "tutu", null)); - } + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(Network.create("empty", ""), componentLibrary, layoutParameters, svgParameters) { - @Override - public List getNodeDecorators(Node node, Direction direction) { - return new ArrayList<>(); + @Override + public List getFeederInfos(FeederNode node) { + return Arrays.asList( + new DirectionalFeederInfo(ARROW_ACTIVE, LabelDirection.OUT, "", "tata", null), + new DirectionalFeederInfo(ARROW_REACTIVE, LabelDirection.IN, "", "tutu", null)); + } + + @Override + public List getNodeDecorators(Node node, Direction direction) { + return new ArrayList<>(); + } + }; } + }; + + public LabelProviderFactory getDiagramLabelRawProviderFactory() { + return diagramLabelRawProviderFactory; } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestAddExternalComponent.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestAddExternalComponent.java index c014d1396..a12c455d8 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestAddExternalComponent.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestAddExternalComponent.java @@ -6,6 +6,9 @@ */ package com.powsybl.sld.raw; +import com.powsybl.iidm.network.Network; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.VoltageLevelRawBuilder; import com.powsybl.sld.library.ResourcesComponentLibrary; import com.powsybl.sld.model.graphs.NodeFactory; @@ -50,7 +53,14 @@ protected ResourcesComponentLibrary getResourcesComponentLibrary() { public void test() { VoltageLevelGraph g = rawGraphBuilder.buildVoltageLevelGraph("vl"); voltageLevelGraphLayout(g); + Config config = new ConfigBuilder(Network.create("empty", "")) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(getResourcesComponentLibrary()) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(getDiagramLabelRawProviderFactory()) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/TestCheese.svg"), - toSVG(g, "/TestCheese.svg", getRawLabelProvider(), new BasicStyleProvider())); + toSVG(g, "/TestCheese.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase1.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase1.java index dfdbd8c89..f9326393e 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase1.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase1.java @@ -6,6 +6,8 @@ */ package com.powsybl.sld.raw; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.VoltageLevelRawBuilder; import com.powsybl.sld.model.graphs.VoltageLevelGraph; import com.powsybl.sld.model.nodes.BusNode; @@ -49,7 +51,12 @@ public void setUp() { public void test() { VoltageLevelGraph g = rawGraphBuilder.buildVoltageLevelGraph("vl"); voltageLevelGraphLayout(g); + Config config = new ConfigBuilder(null) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(getDiagramLabelRawProviderFactory()) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); assertEquals(toString("/TestCase1.svg"), - toSVG(g, "/TestCase1.svg", getRawLabelProvider(), new BasicStyleProvider())); + toSVG(g, "/TestCase1.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseComplexCoupling.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseComplexCoupling.java index 792d7eed0..1d763450e 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseComplexCoupling.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseComplexCoupling.java @@ -6,6 +6,8 @@ */ package com.powsybl.sld.raw; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.VoltageLevelRawBuilder; import com.powsybl.sld.model.graphs.VoltageLevelGraph; import com.powsybl.sld.model.nodes.BusNode; @@ -54,7 +56,12 @@ public void test() { VoltageLevelGraph g = rawGraphBuilder.buildVoltageLevelGraph("vl"); voltageLevelGraphLayout(g); + Config config = new ConfigBuilder(null) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(getDiagramLabelRawProviderFactory()) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); - assertEquals(toString("/TestCaseComplexCoupling.svg"), toSVG(g, "/TestCaseComplexCoupling.svg", getRawLabelProvider(), new BasicStyleProvider())); + assertEquals(toString("/TestCaseComplexCoupling.svg"), toSVG(g, "/TestCaseComplexCoupling.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInsertFictitiousNodesAtFeeder.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInsertFictitiousNodesAtFeeder.java index 0265e7f58..a7387f5e1 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInsertFictitiousNodesAtFeeder.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInsertFictitiousNodesAtFeeder.java @@ -6,6 +6,8 @@ */ package com.powsybl.sld.raw; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.VoltageLevelRawBuilder; import com.powsybl.sld.model.graphs.VoltageLevelGraph; import com.powsybl.sld.model.nodes.BusNode; @@ -52,7 +54,12 @@ public void testFeederOnBus() { vlBuilder.connectNode(bbs, feederLineNode); VoltageLevelGraph g = rawGraphBuilder.buildVoltageLevelGraph("vl"); voltageLevelGraphLayout(g); - assertEquals(toString("/TestFeederOnBus.svg"), toSVG(g, "/TestFeederOnBus.svg", getRawLabelProvider(), new BasicStyleProvider())); + Config config = new ConfigBuilder(null) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(getDiagramLabelRawProviderFactory()) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); + assertEquals(toString("/TestFeederOnBus.svg"), toSVG(g, "/TestFeederOnBus.svg", config)); } @Test @@ -65,6 +72,11 @@ public void testFeederOnBusDisconnector() { vlBuilder.connectNode(busDisconnector, feederLineNode); VoltageLevelGraph g = rawGraphBuilder.buildVoltageLevelGraph("vl"); voltageLevelGraphLayout(g); - assertEquals(toString("/TestFeederOnBusDisconnector.svg"), toSVG(g, "/TestFeederOnBusDisconnector.svg", getRawLabelProvider(), new BasicStyleProvider())); + Config config = new ConfigBuilder(null) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(getDiagramLabelRawProviderFactory()) + .withDiagramStyleProvider(new BasicStyleProvider()) + .build(); + assertEquals(toString("/TestFeederOnBusDisconnector.svg"), toSVG(g, "/TestFeederOnBusDisconnector.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/FeederInfoProviderTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/FeederInfoProviderTest.java index b8197ad82..a88a1237d 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/FeederInfoProviderTest.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/FeederInfoProviderTest.java @@ -8,6 +8,8 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.iidm.AbstractTestCaseIidm; import com.powsybl.sld.iidm.CreateNetworksUtil; @@ -43,19 +45,24 @@ public void setUp() { @Test public void test() { ComponentLibrary componentLibrary = new ConvergenceComponentLibrary(); - layoutParameters.setFeederInfoSymmetry(true); + svgParameters.setFeederInfoSymmetry(true); // build first voltage level graph VoltageLevelGraph g = graphBuilder.buildVoltageLevelGraph(vl.getId()); voltageLevelGraphLayout(g); // to have cell orientations (bottom / up) - assertEquals(toString("/feederInfoTest.svg"), toSVG(g, "/feederInfoTest.svg")); + Config config = new ConfigBuilder(network) + .withComponentLibrary(componentLibrary) + .withLayoutParameters(layoutParameters) + .withSvgParameters(svgParameters) + .build(); + assertEquals(toString("/feederInfoTest.svg"), toSVG(g, "/feederInfoTest.svg", config)); Network network2 = Network.create("testCase2", "test2"); - DefaultDiagramLabelProvider wrongLabelProvider = new DefaultDiagramLabelProvider(network2, componentLibrary, layoutParameters); + DefaultLabelProvider wrongLabelProvider = new DefaultLabelProvider(network2, componentLibrary, layoutParameters, svgParameters); List feederInfos = wrongLabelProvider.getFeederInfos((FeederNode) g.getNode("svc")); assertTrue(feederInfos.isEmpty()); - DefaultDiagramLabelProvider labelProvider = new DefaultDiagramLabelProvider(network, componentLibrary, layoutParameters); + DefaultLabelProvider labelProvider = new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters); List feederInfos1 = labelProvider.getFeederInfos((FeederNode) g.getNode("svc")); assertEquals(2, feederInfos1.size()); assertEquals(ARROW_ACTIVE, feederInfos1.get(0).getComponentType()); @@ -106,7 +113,7 @@ public void test() { assertFalse(feederInfos4.get(1).getLeftLabel().isPresent()); // Reverse order - layoutParameters.setFeederInfoSymmetry(false); + svgParameters.setFeederInfoSymmetry(false); List feederInfos5 = labelProvider.getFeederInfos((FeederNode) g.getNode("dl1")); assertEquals(ARROW_REACTIVE, feederInfos5.get(0).getComponentType()); assertEquals(ARROW_ACTIVE, feederInfos5.get(1).getComponentType()); diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/SvgParametersTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/SvgParametersTest.java new file mode 100644 index 000000000..debad8028 --- /dev/null +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/SvgParametersTest.java @@ -0,0 +1,73 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.sld.svg; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * @author Sophie Frasnedo + */ +public class SvgParametersTest { + + @Test + public void test() { + SvgParameters svgParameters0 = new SvgParameters() + .setPrefixId("test") + .setUndefinedValueSymbol("\u002A") + .setLanguageTag("es") + .setVoltageValuePrecision(0) + .setPowerValuePrecision(3) + .setAngleValuePrecision(2) + .setBusInfoMargin(22) + .setFeederInfosIntraMargin(21) + .setUseName(true) + .setSvgWidthAndHeightAdded(true) + .setCssLocation(SvgParameters.CssLocation.EXTERNAL_NO_IMPORT) + .setFeederInfoSymmetry(true) + .setAddNodesInfos(true) + .setTooltipEnabled(true) + .setHighlightLineState(false) + .setAngleLabelShift(42) + .setLabelCentered(true) + .setLabelDiagonal(true) + .setAvoidSVGComponentsDuplication(true) + .setFeederInfosOuterMargin(25) + .setDiagramName("diag") + .setDrawStraightWires(true) + .setShowGrid(true) + .setShowInternalNodes(true); + + SvgParameters svgParameters1 = new SvgParameters(svgParameters0); + + assertEquals(svgParameters0.getPrefixId(), svgParameters1.getPrefixId()); + assertEquals(svgParameters0.getUndefinedValueSymbol(), svgParameters1.getUndefinedValueSymbol()); + assertEquals(svgParameters0.getLanguageTag(), svgParameters1.getLanguageTag()); + assertEquals(svgParameters0.getVoltageValuePrecision(), svgParameters1.getVoltageValuePrecision()); + assertEquals(svgParameters0.getPowerValuePrecision(), svgParameters1.getPowerValuePrecision()); + assertEquals(svgParameters0.getAngleValuePrecision(), svgParameters1.getAngleValuePrecision()); + assertEquals(svgParameters0.getBusInfoMargin(), svgParameters1.getBusInfoMargin(), 0); + assertEquals(svgParameters0.getFeederInfosIntraMargin(), svgParameters1.getFeederInfosIntraMargin(), 0); + assertEquals(svgParameters0.isUseName(), svgParameters1.isUseName()); + assertEquals(svgParameters0.isSvgWidthAndHeightAdded(), svgParameters1.isSvgWidthAndHeightAdded()); + assertEquals(svgParameters0.getCssLocation(), svgParameters1.getCssLocation()); + assertEquals(svgParameters0.isFeederInfoSymmetry(), svgParameters1.isFeederInfoSymmetry()); + assertEquals(svgParameters0.isAddNodesInfos(), svgParameters1.isAddNodesInfos()); + assertEquals(svgParameters0.isTooltipEnabled(), svgParameters1.isTooltipEnabled()); + assertEquals(svgParameters0.isHighlightLineState(), svgParameters1.isHighlightLineState()); + assertEquals(svgParameters0.getAngleLabelShift(), svgParameters1.getAngleLabelShift(), 0); + assertEquals(svgParameters0.isLabelCentered(), svgParameters1.isLabelCentered()); + assertEquals(svgParameters0.isLabelDiagonal(), svgParameters1.isLabelDiagonal()); + assertEquals(svgParameters0.isAvoidSVGComponentsDuplication(), svgParameters1.isAvoidSVGComponentsDuplication()); + assertEquals(svgParameters0.getFeederInfosOuterMargin(), svgParameters1.getFeederInfosOuterMargin(), 0); + assertEquals(svgParameters0.getDiagramName(), svgParameters1.getDiagramName()); + assertEquals(svgParameters0.isDrawStraightWires(), svgParameters1.isDrawStraightWires()); + assertEquals(svgParameters0.isShowGrid(), svgParameters1.isShowGrid()); + assertEquals(svgParameters0.isShowInternalNodes(), svgParameters1.isShowInternalNodes()); + } +} diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/NominalVoltageStyleTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/NominalVoltageStyleTest.java index 1637f1da3..9e4f55bab 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/NominalVoltageStyleTest.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/NominalVoltageStyleTest.java @@ -8,16 +8,18 @@ import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.iidm.AbstractTestCaseIidm; +import com.powsybl.sld.layout.LayoutParameters; +import com.powsybl.sld.library.ComponentLibrary; import com.powsybl.sld.model.graphs.SubstationGraph; import com.powsybl.sld.model.graphs.VoltageLevelGraph; import com.powsybl.sld.model.nodes.Edge; import com.powsybl.sld.model.nodes.FeederNode; import com.powsybl.sld.model.nodes.Node; -import com.powsybl.sld.svg.DefaultDiagramLabelProvider; -import com.powsybl.sld.svg.DiagramStyles; -import com.powsybl.sld.svg.FeederInfo; +import com.powsybl.sld.svg.*; import org.junit.Before; import org.junit.Test; @@ -88,16 +90,18 @@ public void setUp() { createSwitch(vl3, "b3WT_3", "b3WT_3", SwitchKind.BREAKER, true, true, true, 1, 2); } - private class NoFeederInfoProvider extends DefaultDiagramLabelProvider { - public NoFeederInfoProvider() { - super(NominalVoltageStyleTest.this.network, NominalVoltageStyleTest.this.componentLibrary, NominalVoltageStyleTest.this.layoutParameters); - } - + private final LabelProviderFactory diagramLabelNoFeederInfoProviderFactory = new DefaultLabelProviderFactory() { @Override - public List getFeederInfos(FeederNode node) { - return Collections.emptyList(); + public LabelProvider create(Network network, ComponentLibrary componentLibrary, LayoutParameters layoutParameters, SvgParameters svgParameters) { + return new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters) { + + @Override + public List getFeederInfos(FeederNode node) { + return Collections.emptyList(); + } + }; } - } + }; @Test public void testAttributes() { @@ -147,21 +151,42 @@ public void testAttributes() { public void testSubstation() { SubstationGraph graph = graphBuilder.buildSubstationGraph(substation.getId()); substationGraphLayout(graph); - assertEquals(toString("/nominal_voltage_style_substation.svg"), toSVG(graph, "/nominal_voltage_style_substation.svg", new NoFeederInfoProvider(), styleProvider)); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(diagramLabelNoFeederInfoProviderFactory) + .withDiagramStyleProvider(styleProvider) + .build(); + assertEquals(toString("/nominal_voltage_style_substation.svg"), toSVG(graph, "/nominal_voltage_style_substation.svg", config)); } @Test public void testVl2() { VoltageLevelGraph graph2 = graphBuilder.buildVoltageLevelGraph(vl2.getId()); voltageLevelGraphLayout(graph2); - assertEquals(toString("/nominal_voltage_style_vl2.svg"), toSVG(graph2, "/nominal_voltage_style_vl2.svg", new NoFeederInfoProvider(), styleProvider)); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(diagramLabelNoFeederInfoProviderFactory) + .withDiagramStyleProvider(styleProvider) + .build(); + assertEquals(toString("/nominal_voltage_style_vl2.svg"), toSVG(graph2, "/nominal_voltage_style_vl2.svg", config)); } @Test public void testVl3() { VoltageLevelGraph graph3 = graphBuilder.buildVoltageLevelGraph(vl3.getId()); voltageLevelGraphLayout(graph3); - assertEquals(toString("/nominal_voltage_style_vl3.svg"), toSVG(graph3, "/nominal_voltage_style_vl3.svg", new NoFeederInfoProvider(), styleProvider)); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .withDiagramLabelProviderFactory(diagramLabelNoFeederInfoProviderFactory) + .withDiagramStyleProvider(styleProvider) + .build(); + assertEquals(toString("/nominal_voltage_style_vl3.svg"), toSVG(graph3, "/nominal_voltage_style_vl3.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/TopologicalStyleTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/TopologicalStyleTest.java index aa25f6a40..87b13c7e5 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/TopologicalStyleTest.java +++ b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/TopologicalStyleTest.java @@ -8,6 +8,8 @@ import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import com.powsybl.sld.Config; +import com.powsybl.sld.ConfigBuilder; import com.powsybl.sld.builders.NetworkGraphBuilder; import com.powsybl.sld.iidm.AbstractTestCaseIidm; import com.powsybl.sld.model.graphs.SubstationGraph; @@ -138,6 +140,11 @@ public void test() throws IOException { public void testSubstation() { SubstationGraph graph = graphBuilder.buildSubstationGraph(substation.getId()); substationGraphLayout(graph); - assertEquals(toString("/topological_style_substation.svg"), toSVG(graph, "/topological_style_substation.svg")); + Config config = new ConfigBuilder(network) + .withLayoutParameters(layoutParameters) + .withComponentLibrary(componentLibrary) + .withSvgParameters(svgParameters) + .build(); + assertEquals(toString("/topological_style_substation.svg"), toSVG(graph, "/topological_style_substation.svg", config)); } } diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstationMetadata.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstationMetadata.json index 0bbe0c0f2..0695277f7 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstationMetadata.json +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstationMetadata.json @@ -554,39 +554,18 @@ "externCellHeight" : 250.0, "internCellHeight" : 40.0, "stackHeight" : 30.0, - "showGrid" : false, - "tooltipEnabled" : false, - "showInternalNodes" : false, - "scaleFactor" : 1.0, - "drawStraightWires" : false, + "cgmesScaleFactor" : 1.0, + "cgmesDiagramName" : null, + "cgmesUseNames" : true, "horizontalSnakeLinePadding" : 20.0, "verticalSnakeLinePadding" : 25.0, - "feederInfosOuterMargin" : 20.0, "spaceForFeederInfos" : 50.0, - "diagramName" : null, - "avoidSVGComponentsDuplication" : false, "adaptCellHeightToContent" : true, "maxComponentHeight" : 12.0, "minSpaceBetweenComponents" : 15.0, "minExternCellHeight" : 80.0, - "labelCentered" : false, - "labelDiagonal" : false, - "angleLabelShift" : 15.0, - "highlightLineState" : true, - "addNodesInfos" : false, - "feederInfoSymmetry" : false, - "cssLocation" : "INSERTED_IN_SVG", - "svgWidthAndHeightAdded" : false, - "useName" : false, - "feederInfosIntraMargin" : 10.0, - "busInfoMargin" : 0.0, "busbarsAlignment" : "FIRST", "componentsOnBusbars" : [ "DISCONNECTOR" ], - "languageTag" : "en", - "voltageValuePrecision" : 1, - "powerValuePrecision" : 0, - "angleValuePrecision" : 1, - "undefinedValueSymbol" : "—", "removeFictitiousSwitchNodes" : false } } \ No newline at end of file diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVlMetadata.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVlMetadata.json index 8e147cb6c..c604230ca 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVlMetadata.json +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVlMetadata.json @@ -313,39 +313,18 @@ "externCellHeight" : 250.0, "internCellHeight" : 40.0, "stackHeight" : 30.0, - "showGrid" : false, - "tooltipEnabled" : false, - "showInternalNodes" : false, - "scaleFactor" : 1.0, - "drawStraightWires" : false, + "cgmesScaleFactor" : 1.0, + "cgmesDiagramName" : null, + "cgmesUseNames" : true, "horizontalSnakeLinePadding" : 20.0, "verticalSnakeLinePadding" : 25.0, - "feederInfosOuterMargin" : 20.0, "spaceForFeederInfos" : 50.0, - "diagramName" : null, - "avoidSVGComponentsDuplication" : false, "adaptCellHeightToContent" : true, "maxComponentHeight" : 12.0, "minSpaceBetweenComponents" : 15.0, "minExternCellHeight" : 80.0, - "labelCentered" : false, - "labelDiagonal" : false, - "angleLabelShift" : 15.0, - "highlightLineState" : true, - "addNodesInfos" : false, - "feederInfoSymmetry" : false, - "cssLocation" : "INSERTED_IN_SVG", - "svgWidthAndHeightAdded" : false, - "useName" : false, - "feederInfosIntraMargin" : 10.0, - "busInfoMargin" : 0.0, "busbarsAlignment" : "FIRST", "componentsOnBusbars" : [ "DISCONNECTOR" ], - "languageTag" : "en", - "voltageValuePrecision" : 1, - "powerValuePrecision" : 0, - "angleValuePrecision" : 1, - "undefinedValueSymbol" : "—", "removeFictitiousSwitchNodes" : false } } \ No newline at end of file diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_metadata.json b/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_metadata.json index 9075cf749..f3743f881 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_metadata.json +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_metadata.json @@ -2936,39 +2936,18 @@ "externCellHeight" : 250.0, "internCellHeight" : 40.0, "stackHeight" : 30.0, - "showGrid" : false, - "tooltipEnabled" : false, - "showInternalNodes" : false, - "scaleFactor" : 1.0, - "drawStraightWires" : false, + "cgmesScaleFactor" : 1.0, + "cgmesDiagramName" : null, + "cgmesUseNames" : true, "horizontalSnakeLinePadding" : 30.0, "verticalSnakeLinePadding" : 30.0, - "feederInfosOuterMargin" : 20.0, "spaceForFeederInfos" : 50.0, - "diagramName" : null, - "avoidSVGComponentsDuplication" : false, "adaptCellHeightToContent" : true, "maxComponentHeight" : 12.0, "minSpaceBetweenComponents" : 15.0, "minExternCellHeight" : 80.0, - "labelCentered" : false, - "labelDiagonal" : false, - "angleLabelShift" : 15.0, - "highlightLineState" : true, - "addNodesInfos" : false, - "feederInfoSymmetry" : false, - "cssLocation" : "INSERTED_IN_SVG", - "svgWidthAndHeightAdded" : true, - "useName" : true, - "feederInfosIntraMargin" : 10.0, - "busInfoMargin" : 0.0, "busbarsAlignment" : "FIRST", "componentsOnBusbars" : [ "DISCONNECTOR" ], - "languageTag" : "en", - "voltageValuePrecision" : 1, - "powerValuePrecision" : 0, - "angleValuePrecision" : 1, - "undefinedValueSymbol" : "—", "removeFictitiousSwitchNodes" : false } } \ No newline at end of file diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vlDiag_metadata.json b/single-line-diagram/single-line-diagram-core/src/test/resources/vlDiag_metadata.json index 5d9c084a3..a730cc788 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vlDiag_metadata.json +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vlDiag_metadata.json @@ -1469,39 +1469,18 @@ "externCellHeight" : 250.0, "internCellHeight" : 40.0, "stackHeight" : 30.0, - "showGrid" : false, - "tooltipEnabled" : false, - "showInternalNodes" : false, - "scaleFactor" : 1.0, - "drawStraightWires" : false, + "cgmesScaleFactor" : 1.0, + "cgmesDiagramName" : null, + "cgmesUseNames" : true, "horizontalSnakeLinePadding" : 30.0, "verticalSnakeLinePadding" : 30.0, - "feederInfosOuterMargin" : 20.0, "spaceForFeederInfos" : 50.0, - "diagramName" : null, - "avoidSVGComponentsDuplication" : true, "adaptCellHeightToContent" : true, "maxComponentHeight" : 12.0, "minSpaceBetweenComponents" : 15.0, "minExternCellHeight" : 80.0, - "labelCentered" : false, - "labelDiagonal" : false, - "angleLabelShift" : 15.0, - "highlightLineState" : true, - "addNodesInfos" : true, - "feederInfoSymmetry" : false, - "cssLocation" : "INSERTED_IN_SVG", - "svgWidthAndHeightAdded" : true, - "useName" : true, - "feederInfosIntraMargin" : 10.0, - "busInfoMargin" : 0.0, "busbarsAlignment" : "FIRST", "componentsOnBusbars" : [ "DISCONNECTOR" ], - "languageTag" : "en", - "voltageValuePrecision" : 1, - "powerValuePrecision" : 0, - "angleValuePrecision" : 1, - "undefinedValueSymbol" : "—", "removeFictitiousSwitchNodes" : false } } \ No newline at end of file