From 71c84a6c609d5ee9ee8ca504d9f799c6ee225ded Mon Sep 17 00:00:00 2001 From: Florian Dupuy Date: Tue, 15 Nov 2022 14:28:16 +0100 Subject: [PATCH 1/8] Move nad into powsybl-sld Signed-off-by: Florian Dupuy --- .github/diagram_example.svg | 1969 ++++ .github/partial_diagram_example_1_25.svg | 1120 +++ .github/partial_diagram_example_25.svg | 624 ++ .github/workflows/maven.yml | 8 +- README.md | 104 +- .../pom.xml | 18 +- network-area-diagram/pom.xml | 111 + .../PowsyblNetworkAreaDiagramVersion.java | 21 + .../com/powsybl/nad/NetworkAreaDiagram.java | 153 + .../com/powsybl/nad/build/GraphBuilder.java | 16 + .../powsybl/nad/build/iidm/IdProvider.java | 21 + .../powsybl/nad/build/iidm/IntIdProvider.java | 35 + .../nad/build/iidm/NetworkGraphBuilder.java | 189 + .../nad/build/iidm/VoltageLevelFilter.java | 138 + .../powsybl/nad/layout/AbstractLayout.java | 99 + .../powsybl/nad/layout/BasicFixedLayout.java | 34 + .../nad/layout/BasicFixedLayoutFactory.java | 32 + .../powsybl/nad/layout/BasicForceLayout.java | 64 + .../nad/layout/BasicForceLayoutFactory.java | 17 + .../java/com/powsybl/nad/layout/Layout.java | 28 + .../com/powsybl/nad/layout/LayoutFactory.java | 14 + .../powsybl/nad/layout/LayoutParameters.java | 54 + .../com/powsybl/nad/model/AbstractEdge.java | 17 + .../nad/model/AbstractIdentifiable.java | 41 + .../com/powsybl/nad/model/AbstractNode.java | 65 + .../com/powsybl/nad/model/BranchEdge.java | 96 + .../java/com/powsybl/nad/model/BusNode.java | 38 + .../main/java/com/powsybl/nad/model/Edge.java | 14 + .../java/com/powsybl/nad/model/Graph.java | 325 + .../com/powsybl/nad/model/Identifiable.java | 21 + .../main/java/com/powsybl/nad/model/Node.java | 23 + .../java/com/powsybl/nad/model/Point.java | 76 + .../java/com/powsybl/nad/model/TextEdge.java | 30 + .../java/com/powsybl/nad/model/TextNode.java | 17 + .../com/powsybl/nad/model/ThreeWtEdge.java | 53 + .../com/powsybl/nad/model/ThreeWtNode.java | 18 + .../powsybl/nad/model/VoltageLevelNode.java | 64 + .../nad/svg/AbstractStyleProvider.java | 128 + .../powsybl/nad/svg/DefaultEdgeRendering.java | 269 + .../java/com/powsybl/nad/svg/EdgeInfo.java | 53 + .../com/powsybl/nad/svg/EdgeRendering.java | 16 + .../com/powsybl/nad/svg/GraphMetadata.java | 136 + .../com/powsybl/nad/svg/LabelProvider.java | 29 + .../java/com/powsybl/nad/svg/Padding.java | 72 + .../com/powsybl/nad/svg/StyleProvider.java | 55 + .../com/powsybl/nad/svg/SvgParameters.java | 352 + .../java/com/powsybl/nad/svg/SvgWriter.java | 740 ++ .../iidm/AbstractVoltageStyleProvider.java | 126 + .../nad/svg/iidm/DefaultLabelProvider.java | 80 + .../svg/iidm/NominalVoltageStyleProvider.java | 55 + .../svg/iidm/TopologicalStyleProvider.java | 106 + .../com/powsybl/nad/utils/iidm/IidmUtils.java | 70 + .../src/main/resources/nad_V1_0.xsd | 53 + .../src/main/resources/nominalStyle.css | 41 + .../src/main/resources/topologicalStyle.css | 105 + .../java/com/powsybl/nad/AbstractTest.java | 118 + .../powsybl/nad/layout/FixedLayoutTest.java | 48 + .../powsybl/nad/layout/ForceLayoutTest.java | 58 + .../nad/layout/LayoutNetworkFactory.java | 131 + .../nad/layout/LayoutParametersTest.java | 32 + .../LayoutWithInitialPositionsTest.java | 223 + .../powsybl/nad/svg/EdgeInfoLabelTest.java | 99 + .../powsybl/nad/svg/EdgeInfoShiftTest.java | 48 + .../powsybl/nad/svg/GraphMetadataTest.java | 150 + .../java/com/powsybl/nad/svg/HvdcTest.java | 55 + .../java/com/powsybl/nad/svg/LimitsTest.java | 61 + .../powsybl/nad/svg/NetworkTestFactory.java | 254 + .../nad/svg/NominalVoltageStyleTest.java | 127 + .../nad/svg/ParallelTransformerTest.java | 47 + .../powsybl/nad/svg/SvgParametersTest.java | 86 + .../nad/svg/ThreeWindingTransformerTest.java | 68 + .../powsybl/nad/svg/TopologicalStyleTest.java | 72 + .../nad/svg/VoltageLevelDescriptionTest.java | 62 + .../src/test/resources/3wt.svg | 162 + .../src/test/resources/3wt_disconnected.svg | 161 + .../src/test/resources/3wt_partial.svg | 110 + .../src/test/resources/IEEE_118_bus.svg | 8906 +++++++++++++++++ .../test/resources/IEEE_118_bus_partial.svg | 2023 ++++ .../IEEE_118_bus_partial_non_connected.svg | 1075 ++ .../src/test/resources/IEEE_14_bus.svg | 1026 ++ .../resources/IEEE_14_bus_disconnection.svg | 1025 ++ .../test/resources/IEEE_14_bus_fictitious.svg | 1026 ++ .../test/resources/IEEE_14_bus_text_nodes.svg | 1020 ++ .../test/resources/IEEE_14_id_prefixed.svg | 1026 ++ .../src/test/resources/IEEE_24_bus.svg | 1868 ++++ .../src/test/resources/IEEE_24_bus.xiidm | 386 + .../src/test/resources/IEEE_30_bus.svg | 2038 ++++ .../src/test/resources/IEEE_57_bus.svg | 3892 +++++++ .../src/test/resources/current_limits.svg | 123 + .../diamond-spring-repulsion-factor-0.0.svg | 837 ++ .../diamond-spring-repulsion-factor-0.2.svg | 837 ++ .../resources/edge_info_double_labels.svg | 138 + .../resources/edge_info_missing_label.svg | 107 + .../edge_info_perpendicular_label.svg | 111 + .../src/test/resources/edge_info_shift.svg | 261 + .../src/test/resources/hvdc-vl-depth-1.svg | 127 + .../src/test/resources/hvdc.svg | 322 + .../test/resources/parallel_transformers.svg | 170 + .../src/test/resources/simple-eu-loop100.svg | 912 ++ .../src/test/resources/simple-eu-loop80.svg | 912 ++ .../src/test/resources/simple-eu.svg | 912 ++ .../src/test/resources/simple-eu.uct | 43 + .../src/test/resources/vl_description_id.svg | 123 + .../resources/vl_description_substation.svg | 129 + .../vl_description_substation_id.svg | 129 + .../src/test/resources/voltage_limits.svg | 166 + pom.xml | 100 +- single-line-diagram/pom.xml | 31 + .../single-line-diagram-cgmes}/pom.xml | 6 +- .../pom.xml | 4 +- ...ractCouplingDeviceDiagramDataExporter.java | 0 .../AbstractDiagramDataExporter.java | 0 .../AbstractInjectionDiagramDataExporter.java | 0 .../AbstractLineDiagramDataExporter.java | 0 .../AbstractNodeDiagramDataExporter.java | 0 .../dl/conversion/BusDiagramDataExporter.java | 0 .../conversion/BusbarDiagramDataExporter.java | 0 .../cgmes/dl/conversion/CgmesDLExporter.java | 0 .../CgmesDLImportPostProcessor.java | 0 .../cgmes/dl/conversion/CgmesDLImporter.java | 0 .../sld/cgmes/dl/conversion/CgmesDLModel.java | 0 .../sld/cgmes/dl/conversion/CgmesDLUtils.java | 0 .../sld/cgmes/dl/conversion/ContextUtils.java | 0 .../DanglingLineDiagramDataExporter.java | 0 .../cgmes/dl/conversion/ExportContext.java | 0 .../GeneratorDiagramDataExporter.java | 0 .../HvdcLineDiagramDataExporter.java | 0 .../conversion/LineDiagramDataExporter.java | 0 .../conversion/LoadDiagramDataExporter.java | 0 .../conversion/ShuntDiagramDataExporter.java | 0 .../dl/conversion/SvcDiagramDataExporter.java | 0 .../conversion/SwitchDiagramDataExporter.java | 0 .../Transformer3WDiagramDataExporter.java | 0 .../TransformerDiagramDataExporter.java | 0 .../VoltageLevelDiagramDataExporter.java | 0 ...ractCouplingDeviceDiagramDataImporter.java | 0 .../AbstractInjectionDiagramDataImporter.java | 0 .../importers/BusDiagramDataImporter.java | 0 .../importers/BusbarDiagramDataImporter.java | 0 .../GeneratorDiagramDataImporter.java | 0 .../HvdcLineDiagramDataImporter.java | 0 .../importers/LineDiagramDataImporter.java | 0 .../importers/LoadDiagramDataImporter.java | 0 .../importers/ShuntDiagramDataImporter.java | 0 .../importers/SvcDiagramDataImporter.java | 0 .../importers/SwitchDiagramDataImporter.java | 0 .../TransformerDiagramDataImporter.java | 0 .../VoltageLevelDiagramDataImporter.java | 0 .../src/main/resources/CGMES-DL.sparql | 0 .../AbstractCgmesDLExporterTest.java | 0 .../dl/conversion/AbstractCgmesDLTest.java | 0 .../CgmesDLImportPostProcessorTest.java | 0 .../dl/conversion/CgmesDLImporterTest.java | 0 .../cgmes/dl/conversion/CgmesDLModelTest.java | 0 ...CouplingDeviceDiagramDataExporterTest.java | 0 ...tractInjectionDiagramDataExporterTest.java | 0 ...stractNodeLineDiagramDataExporterTest.java | 0 ...ctVoltageLevelDiagramDataExporterTest.java | 0 .../exporters/BusDiagramDataExporterTest.java | 0 .../BusbarDiagramDataExporterTest.java | 0 .../DanglingLineDiagramDataExporterTest.java | 0 .../GeneratorDiagramDataExporterTest.java | 0 .../HvdcLineDiagramDataExporterTest.java | 0 .../LineDiagramDataExporterTest.java | 0 .../LoadDiagramDataExporterTest.java | 0 .../ShuntDiagramDataExporterTest.java | 0 .../exporters/SvcDiagramDataExporterTest.java | 0 .../SwitchDiagramDataExporterTest.java | 0 .../Transformer3WDiagramDataExporterTest.java | 0 .../TransformerDiagramDataExporterTest.java | 0 .../VoltageLevelDiagramDataExporterTest.java | 0 .../pom.xml | 2 +- .../extensions/CouplingDeviceDiagramData.java | 0 .../dl/iidm/extensions/DiagramPoint.java | 0 .../dl/iidm/extensions/DiagramTerminal.java | 0 .../iidm/extensions/InjectionDiagramData.java | 0 .../dl/iidm/extensions/LineDiagramData.java | 0 .../iidm/extensions/NetworkDiagramData.java | 0 .../dl/iidm/extensions/NodeDiagramData.java | 0 .../ThreeWindingsTransformerDiagramData.java | 0 .../extensions/VoltageLevelDiagramData.java | 0 ...AbstractCouplingDeviceDiagramDataTest.java | 0 .../AbstractInjectionDiagramDataTest.java | 0 .../AbstractLineDiagramDataTest.java | 0 .../AbstractNodeDiagramDataTest.java | 0 .../iidm/extensions/BusDiagramDataTest.java | 0 .../extensions/BusbarDiagramDataTest.java | 0 .../DanglingLineDiagramDataTest.java | 0 .../extensions/GeneratorDiagramDataTest.java | 0 .../extensions/HvdcLineDiagramDataTest.java | 0 .../iidm/extensions/LineDiagramDataTest.java | 0 .../iidm/extensions/LoadDiagramDataTest.java | 0 .../extensions/NetworkDiagramDataTest.java | 0 .../cgmes/dl/iidm/extensions/Networks.java | 0 .../iidm/extensions/ShuntDiagramDataTest.java | 0 .../StaticVarCompensatorDiagramDataTest.java | 0 .../extensions/SwitchDiagramDataTest.java | 0 ...reeWindingsTransformerDiagramDataTest.java | 0 .../TransformerDiagramDataTest.java | 0 .../VoltageLevelDiagramDataTest.java | 0 .../single-line-diagram-cgmes-layout/pom.xml | 2 +- .../sld/cgmes/layout/AbstractCgmesLayout.java | 0 .../cgmes/layout/CgmesSubstationLayout.java | 0 .../layout/CgmesSubstationLayoutFactory.java | 0 .../cgmes/layout/CgmesVoltageLevelLayout.java | 0 .../CgmesVoltageLevelLayoutFactory.java | 0 ...oltageLevelLayoutFactorySmartSelector.java | 0 .../sld/cgmes/layout/CgmesZoneLayout.java | 0 .../cgmes/layout/CgmesZoneLayoutFactory.java | 0 .../layout/LayoutToCgmesDlExporterTool.java | 0 .../LayoutToCgmesExtensionsConverter.java | 0 .../AbstractCgmesVoltageLevelLayoutTest.java | 0 .../layout/AbstractNodeTopologyTest.java | 0 .../sld/cgmes/layout/BusTopologyTest.java | 0 .../sld/cgmes/layout/CgmesZoneLayoutTest.java | 0 .../cgmes/layout/DoubleBusbarSectionTest.java | 0 .../layout/LayoutToCgmesExtensionsTest.java | 0 .../NodeTopologyHorizontalBusbarTest.java | 0 .../NodeTopologyVerticalBusbarTest.java | 0 .../doc/CellBlockDecomposer.adoc | 0 .../doc/CellDetector.adoc | 0 .../doc/GraphBuilderCreationRequirements.adoc | 0 .../single-line-diagram-core}/doc/Index.adoc | 0 .../doc/PositionFinder.adoc | 0 .../doc/Subsections.adoc | 0 .../doc/images/CellType_INTERN.svg | 0 .../doc/images/CellTypes.svg | 0 .../doc/images/Cells.svg | 0 .../doc/images/PowsyblLayout_HPos.svg | 0 .../doc/images/busbars.svg | 0 .../doc/images/rawGraph.svg | 0 .../rawGraph.svg.2019_04_01_16_43_32.0.svg | 0 .../doc/images/rawGraphExtern.svg | 0 .../doc/images/rawGraphExternShunt.svg | 0 .../doc/images/rawGraphIntern.svg | 0 .../doc/images/rawPosition.svg | 0 .../doc/images/subsections.svg | 0 .../images/verticalBusConnectionPattern.svg | 0 .../single-line-diagram-core}/pom.xml | 2 +- .../util/PowsyblSingleLineDiagramVersion.java | 0 .../sld/AbstractSingleLineDiagramCommand.java | 0 .../com/powsybl/sld/SingleLineDiagram.java | 0 .../powsybl/sld/SingleLineDiagramTool.java | 0 .../powsybl/sld/builders/GraphBuilder.java | 0 .../sld/builders/NetworkGraphBuilder.java | 0 .../powsybl/sld/builders/RawGraphBuilder.java | 0 .../sld/builders/SubstationRawBuilder.java | 0 .../sld/builders/VoltageLevelRawBuilder.java | 0 .../powsybl/sld/layout/AbstractLayout.java | 0 .../sld/layout/AbstractPositionFinder.java | 0 .../sld/layout/AbstractSubstationLayout.java | 0 .../layout/AbstractVoltageLevelLayout.java | 0 .../powsybl/sld/layout/BlockOrganizer.java | 0 .../powsybl/sld/layout/BlockPositionner.java | 0 .../CalculateCellHeightBlockVisitor.java | 0 .../layout/CalculateCoordBlockVisitor.java | 0 .../sld/layout/CalculateCoordCellVisitor.java | 0 .../sld/layout/CellBlockDecomposer.java | 0 .../com/powsybl/sld/layout/CellDetector.java | 0 .../com/powsybl/sld/layout/GraphRefiner.java | 0 .../powsybl/sld/layout/GraphTraversal.java | 0 .../powsybl/sld/layout/HorizontalBusLane.java | 0 .../sld/layout/HorizontalBusLaneManager.java | 0 .../layout/HorizontalSubstationLayout.java | 0 .../HorizontalSubstationLayoutFactory.java | 0 .../sld/layout/ImplicitCellDetector.java | 0 .../layout/InfosNbSnakeLinesHorizontal.java | 0 .../sld/layout/InfosNbSnakeLinesVertical.java | 0 .../powsybl/sld/layout/InternCellSide.java | 0 .../com/powsybl/sld/layout/LBSCluster.java | 0 .../java/com/powsybl/sld/layout/Layout.java | 0 .../com/powsybl/sld/layout/LayoutContext.java | 0 .../powsybl/sld/layout/LayoutParameters.java | 0 .../com/powsybl/sld/layout/LegBusSet.java | 0 ...oltageLevelLayoutFactorySmartSelector.java | 0 .../powsybl/sld/layout/PositionFinder.java | 0 ...oltageLevelLayoutFactorySmartSelector.java | 0 .../layout/PositionVoltageLevelLayout.java | 0 .../PositionVoltageLevelLayoutFactory.java | 0 .../sld/layout/RandomVoltageLevelLayout.java | 0 .../RandomVoltageLevelLayoutFactory.java | 0 .../SmartVoltageLevelLayoutFactory.java | 0 .../com/powsybl/sld/layout/Subsection.java | 0 .../sld/layout/SubstationLayoutFactory.java | 0 .../TopologicallyConnectedNodesSet.java | 0 .../sld/layout/TopologyCalculation.java | 0 .../sld/layout/VerticalSubstationLayout.java | 0 .../VerticalSubstationLayoutFactory.java | 0 .../sld/layout/VoltageLevelLayoutFactory.java | 0 ...oltageLevelLayoutFactorySmartSelector.java | 0 .../powsybl/sld/layout/ZoneLayoutFactory.java | 0 .../HBLaneManagerByClustering.java | 0 .../positionbyclustering/LBSClusterSide.java | 0 .../sld/layout/positionbyclustering/Link.java | 0 .../layout/positionbyclustering/Links.java | 0 .../PositionByClustering.java | 0 .../HBLaneManagerByExtension.java | 0 .../PositionFromExtension.java | 0 .../sld/library/AnchorOrientation.java | 0 .../com/powsybl/sld/library/AnchorPoint.java | 0 .../com/powsybl/sld/library/Component.java | 0 .../powsybl/sld/library/ComponentLibrary.java | 0 .../powsybl/sld/library/ComponentSize.java | 0 .../sld/library/ComponentTypeName.java | 0 .../com/powsybl/sld/library/Components.java | 0 .../library/ConvergenceComponentLibrary.java | 0 .../library/ResourcesComponentLibrary.java | 0 .../com/powsybl/sld/library/SubComponent.java | 0 .../sld/model/blocks/AbstractBlock.java | 0 .../model/blocks/AbstractComposedBlock.java | 0 .../model/blocks/AbstractParallelBlock.java | 0 .../model/blocks/AbstractPrimaryBlock.java | 0 .../com/powsybl/sld/model/blocks/Block.java | 0 .../sld/model/blocks/BlockVisitor.java | 56 +- .../sld/model/blocks/BodyParallelBlock.java | 0 .../sld/model/blocks/BodyPrimaryBlock.java | 0 .../sld/model/blocks/ComposedBlock.java | 0 .../sld/model/blocks/FeederPrimaryBlock.java | 0 .../powsybl/sld/model/blocks/LegBlock.java | 0 .../sld/model/blocks/LegParallelBlock.java | 0 .../sld/model/blocks/LegPrimaryBlock.java | 0 .../sld/model/blocks/PrimaryBlock.java | 0 .../powsybl/sld/model/blocks/SerialBlock.java | 0 .../sld/model/blocks/UndefinedBlock.java | 0 .../sld/model/cells/AbstractBusCell.java | 0 .../powsybl/sld/model/cells/AbstractCell.java | 0 .../com/powsybl/sld/model/cells/BusCell.java | 0 .../com/powsybl/sld/model/cells/Cell.java | 0 .../powsybl/sld/model/cells/CellVisitor.java | 0 .../powsybl/sld/model/cells/ExternCell.java | 0 .../powsybl/sld/model/cells/InternCell.java | 0 .../powsybl/sld/model/cells/ShuntCell.java | 0 .../powsybl/sld/model/coordinate/Coord.java | 0 .../sld/model/coordinate/Direction.java | 0 .../sld/model/coordinate/Orientation.java | 0 .../powsybl/sld/model/coordinate/Point.java | 0 .../sld/model/coordinate/Position.java | 0 .../powsybl/sld/model/coordinate/Side.java | 0 .../sld/model/graphs/AbstractBaseGraph.java | 0 .../sld/model/graphs/AbstractGraph.java | 0 .../powsybl/sld/model/graphs/BaseGraph.java | 0 .../com/powsybl/sld/model/graphs/Graph.java | 0 .../powsybl/sld/model/graphs/NodeFactory.java | 0 .../sld/model/graphs/SubstationGraph.java | 0 .../sld/model/graphs/VoltageLevelGraph.java | 0 .../sld/model/graphs/VoltageLevelInfos.java | 0 .../powsybl/sld/model/graphs/ZoneGraph.java | 0 .../powsybl/sld/model/nodes/AbstractNode.java | 0 .../powsybl/sld/model/nodes/BranchEdge.java | 0 .../com/powsybl/sld/model/nodes/BusNode.java | 0 .../sld/model/nodes/ConnectivityNode.java | 0 .../com/powsybl/sld/model/nodes/Edge.java | 0 .../sld/model/nodes/EquipmentNode.java | 0 .../com/powsybl/sld/model/nodes/Feeder.java | 0 .../powsybl/sld/model/nodes/FeederNode.java | 0 .../powsybl/sld/model/nodes/FeederType.java | 0 .../sld/model/nodes/Middle2WTNode.java | 0 .../sld/model/nodes/Middle3WTNode.java | 0 .../sld/model/nodes/MiddleTwtNode.java | 0 .../com/powsybl/sld/model/nodes/Node.java | 0 .../com/powsybl/sld/model/nodes/NodeSide.java | 0 .../powsybl/sld/model/nodes/SwitchNode.java | 0 .../sld/model/nodes/feeders/BaseFeeder.java | 0 .../sld/model/nodes/feeders/FeederTwLeg.java | 0 .../model/nodes/feeders/FeederWithSides.java | 0 .../GraphBuildPostProcessor.java | 0 .../GraphBuildPostProcessorMock.java | 0 .../sld/svg/AbstractDiagramLabelProvider.java | 0 .../powsybl/sld/svg/AbstractFeederInfo.java | 0 .../powsybl/sld/svg/BasicStyleProvider.java | 0 .../java/com/powsybl/sld/svg/BusInfo.java | 0 .../sld/svg/DefaultDiagramLabelProvider.java | 0 .../com/powsybl/sld/svg/DefaultSVGWriter.java | 0 .../powsybl/sld/svg/DiagramLabelProvider.java | 0 .../powsybl/sld/svg/DiagramStyleProvider.java | 0 .../com/powsybl/sld/svg/DiagramStyles.java | 0 .../sld/svg/DirectionalFeederInfo.java | 0 .../powsybl/sld/svg/ElectricalNodeInfo.java | 0 .../java/com/powsybl/sld/svg/FeederInfo.java | 0 .../com/powsybl/sld/svg/GraphMetadata.java | 0 .../com/powsybl/sld/svg/LabelPosition.java | 0 .../java/com/powsybl/sld/svg/SVGWriter.java | 0 .../com/powsybl/sld/svg/ValueFormatter.java | 0 .../com/powsybl/sld/svg/WireConnection.java | 0 ...stractBaseVoltageDiagramStyleProvider.java | 0 .../java/com/powsybl/sld/util/DomUtil.java | 0 .../NominalVoltageDiagramStyleProvider.java | 0 .../sld/util/TopologicalStyleProvider.java | 0 .../powsybl/sld/util/TopologyVisitorId.java | 0 .../2-windings-transformer-winding1.svg | 0 .../2-windings-transformer-winding2.svg | 0 .../3-windings-transformer-winding1.svg | 0 .../3-windings-transformer-winding2.svg | 0 .../3-windings-transformer-winding3.svg | 0 .../ConvergenceLibrary/arrow-down.svg | 0 .../resources/ConvergenceLibrary/arrow-up.svg | 0 .../ConvergenceLibrary/breaker-closed.svg | 0 .../ConvergenceLibrary/breaker-open.svg | 0 .../ConvergenceLibrary/bus_connection.svg | 0 .../ConvergenceLibrary/capacitor.svg | 0 .../ConvergenceLibrary/components.css | 0 .../ConvergenceLibrary/components.json | 0 .../disconnector-closed.svg | 0 .../ConvergenceLibrary/disconnector-open.svg | 0 .../resources/ConvergenceLibrary/flash.svg | 0 .../ConvergenceLibrary/generator.svg | 0 .../resources/ConvergenceLibrary/inductor.svg | 0 .../load-break-switch-closed.svg | 0 .../load-break-switch-open.svg | 0 .../resources/ConvergenceLibrary/load.svg | 0 .../resources/ConvergenceLibrary/lock.svg | 0 .../resources/ConvergenceLibrary/node.svg | 0 .../phase-shifter-arrow.svg | 0 .../phase-shifter-winding1.svg | 0 .../phase-shifter-winding2.svg | 0 .../main/resources/ConvergenceLibrary/svc.svg | 0 .../main/resources/ConvergenceLibrary/vsc.svg | 0 .../src/main/resources/baseVoltages.css | 0 .../main/resources/highlightLineStates.css | 0 .../src/main/resources/tautologies.css | 0 .../resources/topologicalBaseVoltages.css | 0 .../com/powsybl/sld/AbstractTestCase.java | 0 .../sld/builders/NetworkGraphBuilderTest.java | 0 .../sld/iidm/AbstractTestCaseIidm.java | 0 .../powsybl/sld/iidm/CreateNetworksUtil.java | 0 .../java/com/powsybl/sld/iidm/TestCase1.java | 0 .../sld/iidm/TestCase10TestBreakerToBus.java | 0 .../sld/iidm/TestCase11SubstationGraph.java | 0 .../sld/iidm/TestCase12GraphWith3WT.java | 0 .../powsybl/sld/iidm/TestCase13ZoneGraph.java | 0 .../TestCase15GraphWithVoltageIndicator.java | 0 .../powsybl/sld/iidm/TestCase1BusBreaker.java | 0 .../powsybl/sld/iidm/TestCase1inverted.java | 0 .../sld/iidm/TestCase2StackedCell.java | 0 .../powsybl/sld/iidm/TestCase3Coupling.java | 0 .../sld/iidm/TestCase3TripleCoupling.java | 0 .../sld/iidm/TestCase4NotParallelel.java | 0 .../sld/iidm/TestCase5ShuntHorizontal.java | 0 .../sld/iidm/TestCase5ShuntVertical.java | 0 .../TestCase6CouplingNonFlatHorizontal.java | 0 .../sld/iidm/TestCase6InternalConnection.java | 0 .../sld/iidm/TestCase7CellDetectionIssue.java | 0 .../powsybl/sld/iidm/TestCase7DoubleDJ.java | 0 .../sld/iidm/TestCase8JumpOverStacked.java | 0 .../sld/iidm/TestCaseConsecutiveShunts.java | 0 .../sld/iidm/TestCaseFictitiousBus.java | 0 ...TestCaseGraphAdaptCellHeightToContent.java | 0 .../sld/iidm/TestCaseLoadBreakSwitch.java | 0 .../iidm/TestCaseMissingBusbarPosition.java | 0 .../powsybl/sld/iidm/TestDoubleForkNode.java | 0 .../com/powsybl/sld/iidm/TestFeederInfos.java | 0 .../com/powsybl/sld/iidm/TestFlatSection.java | 0 .../iidm/TestInternalBranchesBusBreaker.java | 0 .../iidm/TestInternalBranchesNodeBreaker.java | 0 .../iidm/TestNodeDecoratorsBusBreaker.java | 0 .../iidm/TestNodeDecoratorsNodeBreaker.java | 0 .../com/powsybl/sld/iidm/TestSVGWriter.java | 0 .../com/powsybl/sld/iidm/TestSerialBlock.java | 0 .../sld/iidm/TestSerialParallelBlock.java | 0 .../sld/iidm/TestSingleLineDiagramClass.java | 0 .../sld/iidm/TestTopologyCalculation.java | 0 .../TestUnicityNodeIdWithMutipleNetwork.java | 0 .../sld/layout/ComponentsOnBusTest.java | 0 .../sld/layout/LayoutParametersTest.java | 0 ...PositionVoltageLevelLayoutFactoryTest.java | 0 .../SmartVoltageLevelLayoutFactoryTest.java | 0 .../powsybl/sld/library/AnchorPointTest.java | 0 .../sld/library/ComponentLibraryTest.java | 0 .../powsybl/sld/library/ComponentsTest.java | 0 .../powsybl/sld/model/AddNodeGraphTest.java | 0 .../com/powsybl/sld/model/ZoneGraphTest.java | 0 .../powsybl/sld/raw/AbstractTestCaseRaw.java | 0 .../sld/raw/TestAddExternalComponent.java | 0 .../java/com/powsybl/sld/raw/TestCase1.java | 0 .../sld/raw/TestCase11SubstationGraph.java | 0 .../java/com/powsybl/sld/raw/TestCase2.java | 0 .../java/com/powsybl/sld/raw/TestCase3.java | 0 .../java/com/powsybl/sld/raw/TestCase4.java | 0 .../java/com/powsybl/sld/raw/TestCase5H.java | 0 .../java/com/powsybl/sld/raw/TestCase5V.java | 0 .../java/com/powsybl/sld/raw/TestCase6.java | 0 .../sld/raw/TestCase7CellDetectionIssue.java | 0 .../sld/raw/TestCaseComplexCoupling.java | 0 .../sld/raw/TestCaseShuntArrangement.java | 0 .../sld/raw/TestIncompleteFeederIssue.java | 0 .../TestInsertFictitiousNodesAtFeeder.java | 0 .../raw/TestInternCellExplicitPosition.java | 0 .../powsybl/sld/raw/TestInternCellShapes.java | 0 .../powsybl/sld/raw/TestLanesWithUnileg.java | 0 .../powsybl/sld/raw/TestOrderConsistency.java | 0 .../sld/raw/TestParallelFeedersOnBus.java | 0 .../sld/raw/TestParallelFeedersOrders.java | 0 .../sld/raw/TestSerialBlocksInternCells.java | 0 .../sld/raw/TestUndefinedBlockExternCell.java | 0 .../raw/TestUnhandledPatternInternCell.java | 0 .../powsybl/sld/svg/DiagramStylesTest.java | 0 .../sld/svg/FeederInfoProviderTest.java | 0 .../powsybl/sld/svg/GraphMetadataTest.java | 0 .../sld/util/NominalVoltageStyleTest.java | 0 .../sld/util/TopologicalStyleTest.java | 0 .../resources/InternalBranchesBusBreaker.svg | 0 .../InternalBranchesBusBreakerH.json | 0 .../InternalBranchesBusBreakerV.json | 0 .../resources/InternalBranchesNodeBreaker.svg | 0 .../InternalBranchesNodeBreakerH.json | 0 .../InternalBranchesNodeBreakerV.json | 0 .../NodeDecoratorsBranchStatusBusBreaker.svg | 0 .../NodeDecoratorsBranchStatusNodeBreaker.svg | 0 .../test/resources/NodeDecoratorsSwitches.svg | 0 .../resources/PacmanLibrary/components.css | 0 .../resources/PacmanLibrary/components.json | 0 .../test/resources/PacmanLibrary/pacman.svg | 0 .../src/test/resources/TestCase1.json | 0 .../src/test/resources/TestCase1.svg | 0 .../TestCase11Left3wtOrientation.json | 0 .../TestCase11Right3wtOrientation.json | 0 .../resources/TestCase11SubstationGraphH.json | 0 .../TestCase11SubstationGraphHFirst.svg | 0 .../TestCase11SubstationGraphHLast.svg | 0 .../TestCase11SubstationGraphHMiddle.svg | 0 .../TestCase11SubstationGraphHNone.svg | 0 .../TestCase11SubstationGraphHRaw.json | 0 .../TestCase11SubstationGraphSmart.json | 0 ...tCase11SubstationGraphSmartHorizontal.json | 0 ...estCase11SubstationGraphSmartVertical.json | 0 .../resources/TestCase11SubstationGraphV.json | 0 .../TestCase11SubstationGraphVRaw.json | 0 .../test/resources/TestCase12GraphVL1.json | 0 .../test/resources/TestCase12GraphVL2.json | 0 .../test/resources/TestCase12GraphVL3.json | 0 ...ase12GraphWithNodesInfosNominalVoltage.svg | 0 ...stCase12GraphWithNodesInfosTopological.svg | 0 .../test/resources/TestCase13ZoneGraph.json | 0 .../TestCase13ZoneGraphNoCoords.json | 0 .../TestCase15GraphWithVoltageIndicator.svg | 0 ...15GraphWithVoltageIndicatorTopological.svg | 0 ...TestCase15GraphWithoutVoltageIndicator.svg | 0 .../test/resources/TestCase1BusBreaker.json | 0 .../src/test/resources/TestCase1inverted.json | 0 .../src/test/resources/TestCase2Stacked.json | 0 .../resources/TestCase2UnStackedCell.json | 0 .../src/test/resources/TestCase3Coupling.json | 0 .../resources/TestCase3Coupling3Bars.json | 0 .../TestCase3Coupling3Bars2Sections.json | 0 .../resources/TestCase3TripleCoupling.json | 0 ...tCase3TripleCoupling_disconnectorOpen.json | 0 .../resources/TestCase4NotParallelel.json | 0 .../src/test/resources/TestCase5H.json | 0 .../src/test/resources/TestCase5V.json | 0 .../TestCase6CouplingNonFlatHorizontal.json | 0 .../TestCase6InternalConnection.json | 0 .../resources/TestCaseComplexCoupling.svg | 0 .../test/resources/TestCaseFictitiousBus.svg | 0 .../TestCaseFictitiousBusTopological.svg | 0 ...TestCaseGraphAdaptCellHeightToContent.json | 0 .../TestCaseGraphExternCellHeightFixed.json | 0 .../resources/TestCaseLoadBreakSwitch.svg | 0 ...TestCaseMissingBusbarPositionBusApart.json | 0 ...tCaseMissingBusbarPositionBusParallel.json | 0 .../resources/TestCaseShuntArrangementNo.json | 0 .../TestCaseShuntArrangementYes.json | 0 .../resources/TestDefaultFeedersPosition.json | 0 .../TestDefaultFeedersPosition2.json | 0 .../src/test/resources/TestFeederInfos.svg | 0 .../src/test/resources/TestFeederOnBus.svg | 0 .../resources/TestFeederOnBusDisconnector.svg | 0 .../resources/TestFormattingFeederInfos.svg | 0 .../resources/TestIncompleteFeederIssue.json | 0 .../TestInternCellExplicitPosition.json | 0 .../test/resources/TestInternCellShapes.json | 0 .../src/test/resources/TestPacman.svg | 0 .../resources/TestShiftFeedersPosition.json | 0 .../test/resources/TestSldClassSubstation.svg | 0 .../TestSldClassSubstationMetadata.json | 0 .../src/test/resources/TestSldClassVl.svg | 0 .../resources/TestSldClassVlMetadata.json | 0 .../TestUndefinedBlockExternCell.json | 0 .../resources/TestUnicityNodeIdNetWork1.json | 0 .../resources/TestUnicityNodeIdNetWork2.json | 0 .../resources/TestWithGreyFrameBackground.css | 0 .../VoltageIndicatorLibrary/components.css | 0 .../VoltageIndicatorLibrary/components.json | 0 .../voltage-indicator.svg | 0 .../src/test/resources/consecutive_shunts.svg | 0 .../test/resources/consecutive_shunts.xiidm | 0 .../src/test/resources/feederInfoTest.svg | 0 .../src/test/resources/label_on_all_nodes.svg | 0 .../src/test/resources/noComponentsOnBus.svg | 0 .../nominal_voltage_style_substation.svg | 0 .../resources/nominal_voltage_style_vl2.svg | 0 .../resources/nominal_voltage_style_vl3.svg | 0 .../resources/orderConsistencyClust1.json | 0 .../resources/orderConsistencyClust2.json | 0 .../test/resources/orderConsistencyExt1.json | 0 .../test/resources/orderConsistencyExt2.json | 0 .../test/resources/substDiag_metadata.json | 0 ...stDiag_metadata_nominal_voltage_style.json | 0 .../src/test/resources/substation.svg | 0 .../substation_feeder_arrow_symmetry.svg | 0 .../resources/substation_no_feeder_values.svg | 0 .../test/resources/substation_optimized.svg | 0 .../src/test/resources/switchesOnBus.svg | 0 .../test/resources/testDoubleForkNode.json | 0 .../src/test/resources/testFlatSections.json | 0 .../test/resources/testLanesWithUnileg.json | 0 .../resources/testParallelFeedersOnBus.json | 0 .../resources/testParallelFeedersOrders.json | 0 .../testSerialBlocksInternCells.json | 0 .../topological_style_substation.svg | 0 .../src/test/resources/vl1.svg | 0 .../src/test/resources/vl1_external_css.svg | 0 .../resources/vl1_external_css_no_import.svg | 0 .../test/resources/vl1_multiline_tooltip.svg | 0 .../src/test/resources/vl1_optimized.svg | 0 .../src/test/resources/vl1_straightWires.svg | 0 .../src/test/resources/vl1_tooltip.svg | 0 .../src/test/resources/vl2.svg | 0 .../src/test/resources/vl2_optimized.svg | 0 .../src/test/resources/vl3.svg | 0 .../src/test/resources/vl3_optimized.svg | 0 .../src/test/resources/vlDiag_metadata.json | 0 .../test/resources/with_frame_background.svg | 0 .../src/test/resources/zone.svg | 0 util/pom.xml | 30 + util/util-forcelayout/pom.xml | 59 + .../PowsyblDiagramUtilForceLayoutVersion.java | 21 + .../diagram/util/forcelayout/BoundingBox.java | 54 + .../diagram/util/forcelayout/Canvas.java | 42 + .../diagram/util/forcelayout/ForceLayout.java | 360 + .../diagram/util/forcelayout/Point.java | 83 + .../diagram/util/forcelayout/Spring.java | 80 + .../diagram/util/forcelayout/Vector.java | 57 + 632 files changed, 43010 insertions(+), 74 deletions(-) create mode 100644 .github/diagram_example.svg create mode 100644 .github/partial_diagram_example_1_25.svg create mode 100644 .github/partial_diagram_example_25.svg rename {single-line-diagram-distribution => distribution-diagram}/pom.xml (86%) create mode 100644 network-area-diagram/pom.xml create mode 100644 network-area-diagram/src/main/java-templates/com/powsybl/nad/util/PowsyblNetworkAreaDiagramVersion.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/NetworkAreaDiagram.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/build/GraphBuilder.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/IdProvider.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/IntIdProvider.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/VoltageLevelFilter.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicFixedLayout.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicFixedLayoutFactory.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicForceLayout.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicForceLayoutFactory.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/layout/Layout.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/layout/LayoutFactory.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/layout/LayoutParameters.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractEdge.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractIdentifiable.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractNode.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/BusNode.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/Edge.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/Graph.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/Identifiable.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/Node.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/Point.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/TextEdge.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/TextNode.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtNode.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/AbstractStyleProvider.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/DefaultEdgeRendering.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/EdgeInfo.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/EdgeRendering.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/GraphMetadata.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/LabelProvider.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/Padding.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/DefaultLabelProvider.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/NominalVoltageStyleProvider.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/TopologicalStyleProvider.java create mode 100644 network-area-diagram/src/main/java/com/powsybl/nad/utils/iidm/IidmUtils.java create mode 100644 network-area-diagram/src/main/resources/nad_V1_0.xsd create mode 100644 network-area-diagram/src/main/resources/nominalStyle.css create mode 100644 network-area-diagram/src/main/resources/topologicalStyle.css create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/AbstractTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/layout/FixedLayoutTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/layout/ForceLayoutTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutNetworkFactory.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutParametersTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutWithInitialPositionsTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoLabelTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoShiftTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/GraphMetadataTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/HvdcTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/LimitsTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/NetworkTestFactory.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/NominalVoltageStyleTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/ParallelTransformerTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/SvgParametersTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/ThreeWindingTransformerTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/TopologicalStyleTest.java create mode 100644 network-area-diagram/src/test/java/com/powsybl/nad/svg/VoltageLevelDescriptionTest.java create mode 100644 network-area-diagram/src/test/resources/3wt.svg create mode 100644 network-area-diagram/src/test/resources/3wt_disconnected.svg create mode 100644 network-area-diagram/src/test/resources/3wt_partial.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_118_bus.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_14_bus.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_24_bus.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_24_bus.xiidm create mode 100644 network-area-diagram/src/test/resources/IEEE_30_bus.svg create mode 100644 network-area-diagram/src/test/resources/IEEE_57_bus.svg create mode 100644 network-area-diagram/src/test/resources/current_limits.svg create mode 100644 network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg create mode 100644 network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg create mode 100644 network-area-diagram/src/test/resources/edge_info_double_labels.svg create mode 100644 network-area-diagram/src/test/resources/edge_info_missing_label.svg create mode 100644 network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg create mode 100644 network-area-diagram/src/test/resources/edge_info_shift.svg create mode 100644 network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg create mode 100644 network-area-diagram/src/test/resources/hvdc.svg create mode 100644 network-area-diagram/src/test/resources/parallel_transformers.svg create mode 100644 network-area-diagram/src/test/resources/simple-eu-loop100.svg create mode 100644 network-area-diagram/src/test/resources/simple-eu-loop80.svg create mode 100644 network-area-diagram/src/test/resources/simple-eu.svg create mode 100644 network-area-diagram/src/test/resources/simple-eu.uct create mode 100644 network-area-diagram/src/test/resources/vl_description_id.svg create mode 100644 network-area-diagram/src/test/resources/vl_description_substation.svg create mode 100644 network-area-diagram/src/test/resources/vl_description_substation_id.svg create mode 100644 network-area-diagram/src/test/resources/voltage_limits.svg create mode 100644 single-line-diagram/pom.xml rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/pom.xml (89%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/pom.xml (98%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCouplingDeviceDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractInjectionDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractLineDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractNodeDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusbarDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessor.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModel.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLUtils.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ContextUtils.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/DanglingLineDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ExportContext.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/GeneratorDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/HvdcLineDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LineDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LoadDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ShuntDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SvcDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SwitchDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/Transformer3WDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/TransformerDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/VoltageLevelDiagramDataExporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractCouplingDeviceDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractInjectionDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusbarDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/GeneratorDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/HvdcLineDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LineDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LoadDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/ShuntDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SvcDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SwitchDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/TransformerDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/VoltageLevelDiagramDataImporter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/main/resources/CGMES-DL.sparql (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessorTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModelTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractCouplingDeviceDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractInjectionDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractNodeLineDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractVoltageLevelDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusbarDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/DanglingLineDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/GeneratorDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/HvdcLineDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LineDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LoadDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/ShuntDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SvcDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SwitchDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/Transformer3WDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/TransformerDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/VoltageLevelDiagramDataExporterTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/pom.xml (98%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/CouplingDeviceDiagramData.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramPoint.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramTerminal.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/InjectionDiagramData.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramData.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramData.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NodeDiagramData.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramData.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramData.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractCouplingDeviceDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractInjectionDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractLineDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractNodeDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusbarDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DanglingLineDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/GeneratorDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/HvdcLineDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LoadDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/Networks.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ShuntDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/StaticVarCompensatorDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/SwitchDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/TransformerDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramDataTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/pom.xml (98%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/AbstractCgmesLayout.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayout.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayoutFactory.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayout.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactory.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactorySmartSelector.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayout.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutFactory.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesDlExporterTool.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsConverter.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractCgmesVoltageLevelLayoutTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractNodeTopologyTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/BusTopologyTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/DoubleBusbarSectionTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyHorizontalBusbarTest.java (100%) rename {single-line-diagram-cgmes => single-line-diagram/single-line-diagram-cgmes}/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyVerticalBusbarTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/CellBlockDecomposer.adoc (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/CellDetector.adoc (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/GraphBuilderCreationRequirements.adoc (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/Index.adoc (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/PositionFinder.adoc (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/Subsections.adoc (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/CellType_INTERN.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/CellTypes.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/Cells.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/PowsyblLayout_HPos.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/busbars.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/rawGraph.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/rawGraph.svg.2019_04_01_16_43_32.0.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/rawGraphExtern.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/rawGraphExternShunt.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/rawGraphIntern.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/rawPosition.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/subsections.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/doc/images/verticalBusConnectionPattern.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/pom.xml (98%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java-templates/com/powsybl/sld/util/PowsyblSingleLineDiagramVersion.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/AbstractSingleLineDiagramCommand.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/SingleLineDiagram.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/SingleLineDiagramTool.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/builders/GraphBuilder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/builders/NetworkGraphBuilder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/builders/RawGraphBuilder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/builders/VoltageLevelRawBuilder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/AbstractLayout.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/AbstractPositionFinder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/AbstractSubstationLayout.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/AbstractVoltageLevelLayout.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/BlockOrganizer.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/BlockPositionner.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/CalculateCellHeightBlockVisitor.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/CalculateCoordBlockVisitor.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/CalculateCoordCellVisitor.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/CellBlockDecomposer.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/CellDetector.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/GraphRefiner.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/GraphTraversal.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/HorizontalBusLane.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/HorizontalBusLaneManager.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayout.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayoutFactory.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/ImplicitCellDetector.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesHorizontal.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesVertical.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/InternCellSide.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/LBSCluster.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/Layout.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/LayoutContext.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/LayoutParameters.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/LegBusSet.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/PositionByClusterVoltageLevelLayoutFactorySmartSelector.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/PositionFinder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/PositionFromExtensionVoltageLevelLayoutFactorySmartSelector.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayout.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactory.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayout.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayoutFactory.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactory.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/Subsection.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/SubstationLayoutFactory.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/TopologicallyConnectedNodesSet.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/TopologyCalculation.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayout.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayoutFactory.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactory.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactorySmartSelector.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/ZoneLayoutFactory.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/positionbyclustering/HBLaneManagerByClustering.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/positionbyclustering/LBSClusterSide.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/positionbyclustering/Link.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/positionbyclustering/Links.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/positionbyclustering/PositionByClustering.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/positionfromextension/HBLaneManagerByExtension.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/layout/positionfromextension/PositionFromExtension.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/AnchorOrientation.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/AnchorPoint.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/Component.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/ComponentLibrary.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/ComponentSize.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/ComponentTypeName.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/Components.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/ConvergenceComponentLibrary.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/ResourcesComponentLibrary.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/library/SubComponent.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/AbstractBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/AbstractComposedBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/AbstractParallelBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/AbstractPrimaryBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/Block.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/BlockVisitor.java (96%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/BodyParallelBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/BodyPrimaryBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/ComposedBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/FeederPrimaryBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/LegBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/LegParallelBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/LegPrimaryBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/PrimaryBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/SerialBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/blocks/UndefinedBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/cells/AbstractBusCell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/cells/AbstractCell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/cells/BusCell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/cells/Cell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/cells/CellVisitor.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/cells/ExternCell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/cells/InternCell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/cells/ShuntCell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/coordinate/Coord.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/coordinate/Direction.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/coordinate/Orientation.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/coordinate/Point.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/coordinate/Position.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/coordinate/Side.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/graphs/AbstractBaseGraph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/graphs/AbstractGraph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/graphs/BaseGraph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/graphs/Graph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/graphs/NodeFactory.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/graphs/SubstationGraph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelGraph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelInfos.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/graphs/ZoneGraph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/AbstractNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/BranchEdge.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/BusNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/ConnectivityNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/Edge.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/EquipmentNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/Feeder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/FeederNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/FeederType.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/Middle2WTNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/Middle3WTNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/MiddleTwtNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/Node.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/NodeSide.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/SwitchNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/feeders/BaseFeeder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederTwLeg.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederWithSides.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessor.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessorMock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/AbstractDiagramLabelProvider.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/AbstractFeederInfo.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/BasicStyleProvider.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/BusInfo.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/DefaultDiagramLabelProvider.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/DefaultSVGWriter.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/DiagramLabelProvider.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/DiagramStyleProvider.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/DiagramStyles.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/DirectionalFeederInfo.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/ElectricalNodeInfo.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/FeederInfo.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/GraphMetadata.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/LabelPosition.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/SVGWriter.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/ValueFormatter.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/svg/WireConnection.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/util/AbstractBaseVoltageDiagramStyleProvider.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/util/DomUtil.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/util/NominalVoltageDiagramStyleProvider.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/util/TopologicalStyleProvider.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/java/com/powsybl/sld/util/TopologyVisitorId.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding1.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding2.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding1.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding2.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding3.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/arrow-down.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/arrow-up.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/breaker-closed.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/breaker-open.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/bus_connection.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/capacitor.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/components.css (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/components.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/disconnector-closed.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/disconnector-open.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/flash.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/generator.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/inductor.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/load-break-switch-closed.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/load-break-switch-open.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/load.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/lock.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/node.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/phase-shifter-arrow.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/phase-shifter-winding1.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/phase-shifter-winding2.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/svc.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/ConvergenceLibrary/vsc.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/baseVoltages.css (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/highlightLineStates.css (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/tautologies.css (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/main/resources/topologicalBaseVoltages.css (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/AbstractTestCase.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/builders/NetworkGraphBuilderTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/AbstractTestCaseIidm.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/CreateNetworksUtil.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase1.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase10TestBreakerToBus.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase11SubstationGraph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase12GraphWith3WT.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase13ZoneGraph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase15GraphWithVoltageIndicator.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase1BusBreaker.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase1inverted.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase2StackedCell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase3Coupling.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase3TripleCoupling.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase4NotParallelel.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntHorizontal.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntVertical.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase6CouplingNonFlatHorizontal.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase6InternalConnection.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase7CellDetectionIssue.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase7DoubleDJ.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCase8JumpOverStacked.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCaseConsecutiveShunts.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousBus.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCaseGraphAdaptCellHeightToContent.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCaseLoadBreakSwitch.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestCaseMissingBusbarPosition.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestDoubleForkNode.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestFeederInfos.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestFlatSection.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesBusBreaker.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesNodeBreaker.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsBusBreaker.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsNodeBreaker.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestSVGWriter.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestSerialBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestSerialParallelBlock.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestSingleLineDiagramClass.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestTopologyCalculation.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/iidm/TestUnicityNodeIdWithMutipleNetwork.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/layout/ComponentsOnBusTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/layout/LayoutParametersTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactoryTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactoryTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/library/AnchorPointTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/library/ComponentLibraryTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/library/ComponentsTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/model/AddNodeGraphTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/model/ZoneGraphTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/AbstractTestCaseRaw.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestAddExternalComponent.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCase1.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCase11SubstationGraph.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCase2.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCase3.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCase4.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCase5H.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCase5V.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCase6.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCase7CellDetectionIssue.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCaseComplexCoupling.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestCaseShuntArrangement.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestIncompleteFeederIssue.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestInsertFictitiousNodesAtFeeder.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestInternCellExplicitPosition.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestInternCellShapes.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestLanesWithUnileg.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestOrderConsistency.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOnBus.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOrders.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestSerialBlocksInternCells.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestUndefinedBlockExternCell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/raw/TestUnhandledPatternInternCell.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/svg/DiagramStylesTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/svg/FeederInfoProviderTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/svg/GraphMetadataTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/util/NominalVoltageStyleTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/java/com/powsybl/sld/util/TopologicalStyleTest.java (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/InternalBranchesBusBreaker.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/InternalBranchesBusBreakerH.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/InternalBranchesBusBreakerV.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/InternalBranchesNodeBreaker.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/InternalBranchesNodeBreakerH.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/InternalBranchesNodeBreakerV.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/NodeDecoratorsBranchStatusBusBreaker.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/NodeDecoratorsBranchStatusNodeBreaker.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/NodeDecoratorsSwitches.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/PacmanLibrary/components.css (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/PacmanLibrary/components.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/PacmanLibrary/pacman.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase1.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase1.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11Left3wtOrientation.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11Right3wtOrientation.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphH.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphHFirst.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphHLast.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphHMiddle.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphHNone.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphHRaw.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphSmart.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphSmartHorizontal.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphSmartVertical.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphV.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase11SubstationGraphVRaw.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase12GraphVL1.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase12GraphVL2.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase12GraphVL3.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase12GraphWithNodesInfosNominalVoltage.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase12GraphWithNodesInfosTopological.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase13ZoneGraph.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase13ZoneGraphNoCoords.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase15GraphWithVoltageIndicator.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase15GraphWithVoltageIndicatorTopological.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase15GraphWithoutVoltageIndicator.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase1BusBreaker.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase1inverted.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase2Stacked.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase2UnStackedCell.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase3Coupling.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase3Coupling3Bars.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase3Coupling3Bars2Sections.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase3TripleCoupling.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase3TripleCoupling_disconnectorOpen.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase4NotParallelel.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase5H.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase5V.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase6CouplingNonFlatHorizontal.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCase6InternalConnection.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseComplexCoupling.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseFictitiousBus.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseFictitiousBusTopological.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseGraphAdaptCellHeightToContent.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseGraphExternCellHeightFixed.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseLoadBreakSwitch.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseMissingBusbarPositionBusApart.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseMissingBusbarPositionBusParallel.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseShuntArrangementNo.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestCaseShuntArrangementYes.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestDefaultFeedersPosition.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestDefaultFeedersPosition2.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestFeederInfos.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestFeederOnBus.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestFeederOnBusDisconnector.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestFormattingFeederInfos.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestIncompleteFeederIssue.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestInternCellExplicitPosition.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestInternCellShapes.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestPacman.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestShiftFeedersPosition.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestSldClassSubstation.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestSldClassSubstationMetadata.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestSldClassVl.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestSldClassVlMetadata.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestUndefinedBlockExternCell.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestUnicityNodeIdNetWork1.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestUnicityNodeIdNetWork2.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/TestWithGreyFrameBackground.css (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/VoltageIndicatorLibrary/components.css (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/VoltageIndicatorLibrary/components.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/VoltageIndicatorLibrary/voltage-indicator.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/consecutive_shunts.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/consecutive_shunts.xiidm (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/feederInfoTest.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/label_on_all_nodes.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/noComponentsOnBus.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/nominal_voltage_style_substation.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/nominal_voltage_style_vl2.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/nominal_voltage_style_vl3.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/orderConsistencyClust1.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/orderConsistencyClust2.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/orderConsistencyExt1.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/orderConsistencyExt2.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/substDiag_metadata.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/substDiag_metadata_nominal_voltage_style.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/substation.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/substation_feeder_arrow_symmetry.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/substation_no_feeder_values.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/substation_optimized.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/switchesOnBus.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/testDoubleForkNode.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/testFlatSections.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/testLanesWithUnileg.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/testParallelFeedersOnBus.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/testParallelFeedersOrders.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/testSerialBlocksInternCells.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/topological_style_substation.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl1.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl1_external_css.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl1_external_css_no_import.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl1_multiline_tooltip.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl1_optimized.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl1_straightWires.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl1_tooltip.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl2.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl2_optimized.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl3.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vl3_optimized.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/vlDiag_metadata.json (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/with_frame_background.svg (100%) rename {single-line-diagram-core => single-line-diagram/single-line-diagram-core}/src/test/resources/zone.svg (100%) create mode 100644 util/pom.xml create mode 100644 util/util-forcelayout/pom.xml create mode 100644 util/util-forcelayout/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilForceLayoutVersion.java create mode 100644 util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java create mode 100644 util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java create mode 100644 util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java create mode 100644 util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java create mode 100644 util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java create mode 100644 util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java diff --git a/.github/diagram_example.svg b/.github/diagram_example.svg new file mode 100644 index 000000000..e9c8d0da8 --- /dev/null +++ b/.github/diagram_example.svg @@ -0,0 +1,1969 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL11 + VL12 + VL13 + VL14 + VL15 + VL16 + VL17 + VL18 + VL19 + VL2 + VL20 + VL21 + VL22 + VL23 + VL24 + VL25 + VL26 + VL27 + VL28 + VL29 + VL3 + VL30 + VL4 + VL5 + VL6 + VL7 + VL8 + VL9 + + diff --git a/.github/partial_diagram_example_1_25.svg b/.github/partial_diagram_example_1_25.svg new file mode 100644 index 000000000..170b5dd4e --- /dev/null +++ b/.github/partial_diagram_example_1_25.svg @@ -0,0 +1,1120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL2 + VL22 + VL23 + VL24 + VL25 + VL26 + VL27 + VL28 + VL29 + VL3 + VL30 + VL4 + VL5 + VL6 + + diff --git a/.github/partial_diagram_example_25.svg b/.github/partial_diagram_example_25.svg new file mode 100644 index 000000000..df913729a --- /dev/null +++ b/.github/partial_diagram_example_25.svg @@ -0,0 +1,624 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + VL22 + VL23 + VL24 + VL25 + VL26 + VL27 + VL28 + VL29 + VL30 + + diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 4427b1b7b..4464789b1 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -34,14 +34,8 @@ jobs: mvn --batch-mode -Pjacoco verify sonar:sonar -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=powsybl-ci-github - -Dsonar.projectKey=com.powsybl:powsybl-single-line-diagram + -Dsonar.projectKey=com.powsybl:powsybl-diagram env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - - name: Broadcast update event - if: matrix.os == 'ubuntu-latest' && github.ref == 'refs/heads/main' - uses: gridsuite/broadcast-event@main - with: - token: ${{ secrets.REPO_ACCESS_TOKEN }} - event-type: single_line_diagram_updated diff --git a/README.md b/README.md index 08caae860..146a6e0da 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# PowSyBl Single Line Diagram +# PowSyBl Diagram -[![Actions Status](https://github.com/powsybl/powsybl-single-line-diagram/workflows/CI/badge.svg)](https://github.com/powsybl/powsybl-single-line-diagram/actions) -[![Coverage Status](https://sonarcloud.io/api/project_badges/measure?project=com.powsybl%3Apowsybl-single-line-diagram&metric=coverage)](https://sonarcloud.io/component_measures?id=com.powsybl%3Apowsybl-single-line-diagram&metric=coverage) -[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=com.powsybl%3Apowsybl-single-line-diagram&metric=alert_status)](https://sonarcloud.io/dashboard?id=com.powsybl%3Apowsybl-single-line-diagram) +[![Actions Status](https://github.com/powsybl/powsybl-diagram/workflows/CI/badge.svg)](https://github.com/powsybl/powsybl-diagram/actions) +[![Coverage Status](https://sonarcloud.io/api/project_badges/measure?project=com.powsybl%3Apowsybl-diagram&metric=coverage)](https://sonarcloud.io/component_measures?id=com.powsybl%3Apowsybl-diagram&metric=coverage) +[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=com.powsybl%3Apowsybl-diagram&metric=alert_status)](https://sonarcloud.io/dashboard?id=com.powsybl%3Apowsybl-diagram) [![MPL-2.0 License](https://img.shields.io/badge/license-MPL_2.0-blue.svg)](https://www.mozilla.org/en-US/MPL/2.0/) [![Slack](https://img.shields.io/badge/slack-powsybl-blueviolet.svg?logo=slack)](https://join.slack.com/t/powsybl/shared_invite/zt-rzvbuzjk-nxi0boim1RKPS5PjieI0rA) @@ -17,7 +17,7 @@ within the energy and electricity sectors. PowSyBl Logo

-Read more at https://www.powsybl.org ! +Read more at https://www.powsybl.org! This project and everyone participating in it is governed by the [PowSyBl Code of Conduct](https://github.com/powsybl/.github/blob/main/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [powsybl-tsc@lists.lfenergy.org](mailto:powsybl-tsc@lists.lfenergy.org). @@ -90,3 +90,97 @@ We obtain the SVG below. ![Diagram demo](.github/example_n.svg) Note that a JSON file named `n_metadata.json` is also generated in the same folder, containing all the metadata needed to interact with the diagram. + + +## PowSyBl vs PowSyBl Network Area Diagram + +

+Diagram example +

+ +PowSyBl Network Area Diagram is a component build on top of the `Network` model available in the PowSyBl Core repository responsible for generating a concise diagram of the whole network or of a part of the network, showing in particular the interconnections between the different voltage levels. +A network area diagram emphasizes the electrical structure of the network, and may differ substantially from the network physical geography. +It displays the graph whose nodes are the network voltage levels, and whose edges are the lines and transformers between those voltage levels. + +## Getting started +In order to generate a SVG from a given network, we need to add some Maven dependencies: +- `powsybl-network-area-diagram` for the network area diagram itself +- `powsybl-iidm-impl` for the network model +- `powsybl-config-test` and `powsybl-ieee-cdf-converter` to load the `Network` example +- `slf4j-simple` for simple logging capabilities + +```xml + + 0.6.0 + 4.10.0 + 1.7.22 + + + + + com.powsybl + powsybl-network-area-diagram + ${powsybl.nad.version} + + + com.powsybl + powsybl-iidm-impl + ${powsybl.core.version} + + + com.powsybl + powsybl-config-test + ${powsybl.core.version} + + + com.powsybl + powsybl-ieee-cdf-converter + ${powsybl.core.version} + + + org.slf4j + slf4j-simple + ${slf4j.version} + + +``` + +Then we simply need to load the IEEE 30-bus example network and then generate the corresponding network area diagram SVG. +```java +Network network = IeeeCdfNetworkFactory.create30(); +new NetworkAreaDiagram(network).draw(Path.of("/tmp/diagram.svg")); +``` +We obtain the following SVG: + +

+Diagram IEEE30 network +

+ +If only part of the network is wanted, we can generate a partial graph of the network, by providing +- either a voltage level id and a depth, +- or a list of voltage level ids and a (unique) depth. + +For instance let's generate the subgraph centered on voltage level `"VL25"` with a depth of `2`: + +```java +new NetworkAreaDiagram(network, "VL25", 2).draw(Path.of("/tmp/partial_diagram_25.svg")); +``` + +This leads to following diagram: + +

+Diagram IEEE30 partial network VL25 +

+ +Now let's generate the subgraph with voltage levels at a maximum distance of 2 from `"VL1"` and `"VL25"`: + +```java +new NetworkAreaDiagram(network, Arrays.asList("VL1", "VL25"), 2).draw(Path.of("/tmp/partial_diagram_1_25.svg")); +``` + +This gives us the diagram below. Note that nothing ensures that the parts displayed in resulting diagram are connected. +That is, the voltage levels between two voltage levels which are connected in the full graph are not necessarily drawn. + +

+Diagram IEEE30 partial network VL1-VL25 +

diff --git a/single-line-diagram-distribution/pom.xml b/distribution-diagram/pom.xml similarity index 86% rename from single-line-diagram-distribution/pom.xml rename to distribution-diagram/pom.xml index 8b4cbf8ab..630c14c01 100644 --- a/single-line-diagram-distribution/pom.xml +++ b/distribution-diagram/pom.xml @@ -13,17 +13,25 @@ 4.0.0 - powsybl-single-line-diagram + powsybl-diagram com.powsybl - 2.14.0-SNAPSHOT + 3.0.0-SNAPSHOT pom - powsybl-single-line-diagram-distribution - Single line diagram distribution - Single line diagram distribution module + powsybl-diagram-distribution + PowSyBl diagram distribution + PowSyBl diagram distribution module + + ${project.groupId} + powsybl-network-area-diagram + + + ${project.groupId} + powsybl-diagram-util-forcelayout + ${project.groupId} powsybl-single-line-diagram-cgmes-dl-conversion diff --git a/network-area-diagram/pom.xml b/network-area-diagram/pom.xml new file mode 100644 index 000000000..c84a12a21 --- /dev/null +++ b/network-area-diagram/pom.xml @@ -0,0 +1,111 @@ + + + + 4.0.0 + + + com.powsybl + powsybl-diagram + 3.0.0-SNAPSHOT + + + powsybl-network-area-diagram + PowSyBl network area diagram + Generate the SVG corresponding to the electrical nodes graph of the whole network or of a part of the network + http://www.powsybl.org + + + + + org.codehaus.mojo + buildnumber-maven-plugin + + + org.codehaus.mojo + templating-maven-plugin + + + + + + + com.powsybl + powsybl-diagram-util-forcelayout + + + + + org.jgrapht + jgrapht-core + + + com.powsybl + powsybl-iidm-api + + + com.powsybl + powsybl-commons + + + com.powsybl + powsybl-tools + + + + + ch.qos.logback + logback-classic + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + com.powsybl + powsybl-iidm-impl + test + + + com.powsybl + powsybl-ieee-cdf-converter + test + + + com.powsybl + powsybl-iidm-test + test + + + com.powsybl + powsybl-ucte-converter + test + + + com.powsybl + powsybl-config-test + test + + + com.powsybl + powsybl-loadflow-api + test + + + com.powsybl + powsybl-open-loadflow + test + + + + diff --git a/network-area-diagram/src/main/java-templates/com/powsybl/nad/util/PowsyblNetworkAreaDiagramVersion.java b/network-area-diagram/src/main/java-templates/com/powsybl/nad/util/PowsyblNetworkAreaDiagramVersion.java new file mode 100644 index 000000000..e234a417c --- /dev/null +++ b/network-area-diagram/src/main/java-templates/com/powsybl/nad/util/PowsyblNetworkAreaDiagramVersion.java @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.util; + +import com.google.auto.service.AutoService; +import com.powsybl.tools.*; + +/** + * @author Florian Dupuy + */ +@AutoService(Version.class) +public class PowsyblNetworkAreaDiagramVersion extends AbstractVersion { + + public PowsyblNetworkAreaDiagramVersion() { + super("powsybl-network-area-diagram", "${project.version}", "${buildNumber}", "${scmBranch}", Long.parseLong("${timestamp}")); + } +} 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 new file mode 100644 index 000000000..5d218d69c --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/NetworkAreaDiagram.java @@ -0,0 +1,153 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad; + +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; +import com.powsybl.nad.svg.LabelProvider; +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.NominalVoltageStyleProvider; + +import java.io.IOException; +import java.io.StringWriter; +import java.io.UncheckedIOException; +import java.io.Writer; +import java.nio.file.Path; +import java.util.List; +import java.util.Objects; +import java.util.function.Predicate; + +/** + * @author Florian Dupuy + */ +public 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); + } + + public Network getNetwork() { + return network; + } + + public void draw(Path svgFile) { + draw(svgFile, new SvgParameters()); + } + + public void draw(Path svgFile, SvgParameters svgParameters) { + draw(svgFile, svgParameters, new LayoutParameters()); + } + + public void draw(Path svgFile, SvgParameters svgParameters, LayoutParameters layoutParameters) { + draw(svgFile, svgParameters, layoutParameters, new NominalVoltageStyleProvider(network)); + } + + public void draw(Path svgFile, SvgParameters svgParameters, LayoutParameters layoutParameters, + StyleProvider styleProvider) { + draw(svgFile, svgParameters, layoutParameters, styleProvider, new DefaultLabelProvider(network, svgParameters)); + } + + public void draw(Path svgFile, SvgParameters svgParameters, LayoutParameters layoutParameters, + StyleProvider styleProvider, LabelProvider labelProvider) { + draw(svgFile, svgParameters, layoutParameters, styleProvider, labelProvider, new BasicForceLayoutFactory()); + } + + 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 void draw(Path svgFile, SvgParameters svgParameters, LayoutParameters layoutParameters, + StyleProvider styleProvider, LabelProvider labelProvider, LayoutFactory layoutFactory, + IdProvider idProvider) { + Objects.requireNonNull(svgFile); + Objects.requireNonNull(layoutParameters); + Objects.requireNonNull(svgParameters); + Objects.requireNonNull(styleProvider); + Objects.requireNonNull(layoutFactory); + Objects.requireNonNull(idProvider); + + 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()); + } + + public void draw(Writer writer, SvgParameters svgParameters) { + draw(writer, svgParameters, new LayoutParameters()); + } + + public void draw(Writer writer, SvgParameters svgParameters, LayoutParameters layoutParameters) { + draw(writer, svgParameters, layoutParameters, new NominalVoltageStyleProvider(network)); + } + + public void draw(Writer writer, SvgParameters svgParameters, LayoutParameters layoutParameters, + StyleProvider styleProvider) { + draw(writer, svgParameters, layoutParameters, styleProvider, new DefaultLabelProvider(network, svgParameters)); + } + + public void draw(Writer writer, SvgParameters svgParameters, LayoutParameters layoutParameters, + StyleProvider styleProvider, LabelProvider labelProvider) { + draw(writer, svgParameters, layoutParameters, styleProvider, labelProvider, new BasicForceLayoutFactory()); + } + + public void draw(Writer writer, SvgParameters svgParameters, LayoutParameters layoutParameters, + StyleProvider styleProvider, LabelProvider labelProvider, LayoutFactory layoutFactory) { + draw(writer, svgParameters, layoutParameters, styleProvider, labelProvider, layoutFactory, new IntIdProvider()); + } + + 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 String drawToString(SvgParameters svgParameters) { + try (StringWriter writer = new StringWriter()) { + draw(writer, svgParameters); + return writer.toString(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/build/GraphBuilder.java b/network-area-diagram/src/main/java/com/powsybl/nad/build/GraphBuilder.java new file mode 100644 index 000000000..2088b0876 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/build/GraphBuilder.java @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.build; + +import com.powsybl.nad.model.Graph; + +/** + * @author Florian Dupuy + */ +public interface GraphBuilder { + Graph buildGraph(); +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/IdProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/IdProvider.java new file mode 100644 index 000000000..9ec3d44a6 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/IdProvider.java @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.build.iidm; + +import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.ThreeWindingsTransformer; + +/** + * @author Florian Dupuy + */ +public interface IdProvider { + + String createId(Identifiable identifiable); + + String createId(ThreeWindingsTransformer.Leg leg); + +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/IntIdProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/IntIdProvider.java new file mode 100644 index 000000000..9558d17d6 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/IntIdProvider.java @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.build.iidm; + +import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.ThreeWindingsTransformer; + +/** + * @author Florian Dupuy + */ +public class IntIdProvider implements IdProvider { + private int count; + + public IntIdProvider() { + count = 0; + } + + @Override + public String createId(Identifiable identifiable) { + return nextId(); + } + + @Override + public String createId(ThreeWindingsTransformer.Leg leg) { + return nextId(); + } + + private String nextId() { + return String.valueOf(count++); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java new file mode 100644 index 000000000..b2e33275d --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/NetworkGraphBuilder.java @@ -0,0 +1,189 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.build.iidm; + +import com.powsybl.commons.PowsyblException; +import com.powsybl.iidm.network.Identifiable; +import com.powsybl.iidm.network.*; +import com.powsybl.nad.build.GraphBuilder; +import com.powsybl.nad.model.*; +import com.powsybl.nad.utils.iidm.IidmUtils; + +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +/** + * @author Florian Dupuy + */ +public class NetworkGraphBuilder implements GraphBuilder { + + private final Network network; + private final IdProvider idProvider; + private final Predicate voltageLevelFilter; + + public NetworkGraphBuilder(Network network, Predicate voltageLevelFilter, IdProvider idProvider) { + this.network = Objects.requireNonNull(network); + this.voltageLevelFilter = voltageLevelFilter; + this.idProvider = Objects.requireNonNull(idProvider); + } + + public NetworkGraphBuilder(Network network, Predicate voltageLevelFilter) { + this(network, voltageLevelFilter, new IntIdProvider()); + } + + public NetworkGraphBuilder(Network network) { + this(network, VoltageLevelFilter.NO_FILTER, new IntIdProvider()); + } + + @Override + public Graph buildGraph() { + Graph graph = new Graph(); + List voltageLevels = network.getVoltageLevelStream() + .filter(voltageLevelFilter) + .sorted(Comparator.comparing(VoltageLevel::getId)) + .collect(Collectors.toList()); + voltageLevels.forEach(vl -> addVoltageLevelGraphNode(vl, graph, true)); + voltageLevels.forEach(vl -> addGraphEdges(vl, graph)); + return graph; + } + + private VoltageLevelNode addVoltageLevelGraphNode(VoltageLevel vl, Graph graph, boolean visible) { + VoltageLevelNode vlNode = new VoltageLevelNode(idProvider.createId(vl), vl.getId(), vl.getNameOrId(), vl.isFictitious(), visible); + vl.getBusView().getBusStream() + .map(bus -> new BusNode(idProvider.createId(bus), bus.getId())) + .forEach(vlNode::addBusNode); + graph.addNode(vlNode); + if (visible) { + graph.addTextNode(vlNode); + } + return vlNode; + } + + private void addGraphEdges(VoltageLevel vl, Graph graph) { + vl.getLineStream().forEach(l -> visitLine(vl, l, graph)); + vl.getTwoWindingsTransformerStream().forEach(twt -> visitTwoWindingsTransformer(vl, twt, graph)); + vl.getThreeWindingsTransformerStream().forEach(thwt -> visitThreeWindingsTransformer(vl, thwt, graph)); + vl.getConnectableStream(HvdcConverterStation.class).forEach(hvdc -> visitHvdcConverterStation(hvdc, graph)); + } + + private void visitLine(VoltageLevel vl, Line line, Graph graph) { + addEdge(graph, line, vl, BranchEdge.LINE_EDGE); + } + + private void visitTwoWindingsTransformer(VoltageLevel vl, TwoWindingsTransformer twt, Graph graph) { + addEdge(graph, twt, vl, BranchEdge.TWO_WT_EDGE); + } + + private void visitThreeWindingsTransformer(VoltageLevel vl, ThreeWindingsTransformer thwt, Graph graph) { + // check if the transformer was not already added (at the other sides of the transformer) + if (graph.containsNode(thwt.getId())) { + return; + } + + ThreeWtNode tn = new ThreeWtNode(idProvider.createId(thwt), thwt.getId(), thwt.getNameOrId()); + graph.addNode(tn); + + ThreeWindingsTransformer.Side side; + if (thwt.getLeg1().getTerminal().getVoltageLevel() == vl) { + side = ThreeWindingsTransformer.Side.ONE; + } else if (thwt.getLeg2().getTerminal().getVoltageLevel() == vl) { + side = ThreeWindingsTransformer.Side.TWO; + } else { + side = ThreeWindingsTransformer.Side.THREE; + } + + for (ThreeWindingsTransformer.Side s : getSidesArray(side)) { + addThreeWtEdge(graph, thwt, tn, s); + } + } + + private void visitHvdcConverterStation(HvdcConverterStation converterStation, Graph graph) { + // check if the hvdc line was not already added (at the other side of the line) + HvdcLine hvdcLine = converterStation.getHvdcLine(); + if (graph.containsEdge(hvdcLine.getId())) { + return; + } + + HvdcLine.Side otherSide = (hvdcLine.getConverterStation1().getId().equals(converterStation.getId())) + ? HvdcLine.Side.TWO : HvdcLine.Side.ONE; + + Terminal terminal = converterStation.getTerminal(); + Terminal otherSideTerminal = hvdcLine.getConverterStation(otherSide).getTerminal(); + + addEdge(graph, terminal, otherSideTerminal, hvdcLine, BranchEdge.HVDC_LINE_EDGE, otherSide == HvdcLine.Side.ONE); + } + + private void addEdge(Graph graph, Branch branch, VoltageLevel vl, String edgeType) { + Branch.Side side = branch.getTerminal(Branch.Side.ONE).getVoltageLevel() == vl ? Branch.Side.ONE : Branch.Side.TWO; + // check if the edge was not already added (at the other side of the transformer) + if (graph.containsEdge(branch.getId())) { + return; + } + + Terminal terminalA = branch.getTerminal(side); + Terminal terminalB = branch.getTerminal(IidmUtils.getOpposite(side)); + + addEdge(graph, terminalA, terminalB, branch, edgeType, side == Branch.Side.TWO); + } + + private void addEdge(Graph graph, Terminal terminalA, Terminal terminalB, Identifiable identifiable, String edgeType, boolean terminalsInReversedOrder) { + VoltageLevelNode vlNodeA = graph.getVoltageLevelNode(terminalA.getVoltageLevel().getId()) + .orElseThrow(() -> new PowsyblException("Cannot add edge, corresponding voltage level is unknown: '" + terminalA.getVoltageLevel().getId() + "'")); + VoltageLevelNode vlNodeB = getOrCreateInvisibleVoltageLevelNode(graph, terminalB); + + BusNode busNodeA = getBusNode(graph, terminalA); + BusNode busNodeB = getBusNode(graph, terminalB); + + BranchEdge edge = new BranchEdge(idProvider.createId(identifiable), identifiable.getId(), identifiable.getNameOrId(), edgeType); + if (!terminalsInReversedOrder) { + graph.addEdge(vlNodeA, busNodeA, vlNodeB, busNodeB, edge); + } else { + graph.addEdge(vlNodeB, busNodeB, vlNodeA, busNodeA, edge); + } + } + + private void addThreeWtEdge(Graph graph, ThreeWindingsTransformer twt, ThreeWtNode tn, ThreeWindingsTransformer.Side side) { + Terminal terminal = twt.getTerminal(side); + VoltageLevelNode vlNode = getOrCreateInvisibleVoltageLevelNode(graph, terminal); + ThreeWtEdge edge = new ThreeWtEdge(idProvider.createId(IidmUtils.get3wtLeg(twt, side)), + twt.getId(), twt.getNameOrId(), IidmUtils.getThreeWtEdgeSideFromIidmSide(side), vlNode.isVisible()); + graph.addEdge(vlNode, getBusNode(graph, terminal), tn, edge); + } + + private BusNode getBusNode(Graph graph, Terminal terminal) { + Bus connectableBusA = terminal.getBusView().getConnectableBus(); + if (connectableBusA == null) { + graph.getVoltageLevelNode(terminal.getVoltageLevel().getId()).ifPresent(vlNode -> vlNode.setHasUnknownBusNode(true)); + return BusNode.UNKNOWN; + } + return graph.getBusNode(connectableBusA.getId()); + } + + private VoltageLevelNode getOrCreateInvisibleVoltageLevelNode(Graph graph, Terminal terminal) { + VoltageLevel vl = terminal.getVoltageLevel(); + return graph.getVoltageLevelNode(vl.getId()).orElseGet(() -> addVoltageLevelGraphNode(vl, graph, false)); + } + + private ThreeWindingsTransformer.Side[] getSidesArray(ThreeWindingsTransformer.Side sideA) { + ThreeWindingsTransformer.Side sideB; + ThreeWindingsTransformer.Side sideC; + if (sideA == ThreeWindingsTransformer.Side.ONE) { + sideB = ThreeWindingsTransformer.Side.TWO; + sideC = ThreeWindingsTransformer.Side.THREE; + } else if (sideA == ThreeWindingsTransformer.Side.TWO) { + sideB = ThreeWindingsTransformer.Side.ONE; + sideC = ThreeWindingsTransformer.Side.THREE; + } else { + sideB = ThreeWindingsTransformer.Side.ONE; + sideC = ThreeWindingsTransformer.Side.TWO; + } + return new ThreeWindingsTransformer.Side[] {sideA, sideB, sideC}; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/VoltageLevelFilter.java b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/VoltageLevelFilter.java new file mode 100644 index 000000000..a261200a3 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/build/iidm/VoltageLevelFilter.java @@ -0,0 +1,138 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.build.iidm; + +import com.powsybl.commons.PowsyblException; +import com.powsybl.iidm.network.*; +import com.powsybl.nad.utils.iidm.IidmUtils; + +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.function.Predicate; + +/** + * @author Florian Dupuy + */ +public class VoltageLevelFilter implements Predicate { + + public static final Predicate NO_FILTER = voltageLevel -> true; + + private final Set voltageLevels; + + public VoltageLevelFilter(Set voltageLevels) { + this.voltageLevels = voltageLevels; + } + + @Override + public boolean test(VoltageLevel voltageLevel) { + return voltageLevels.contains(voltageLevel); + } + + public static VoltageLevelFilter createVoltageLevelDepthFilter(Network network, String voltageLevelId, int depth) { + Objects.requireNonNull(network); + Objects.requireNonNull(voltageLevelId); + + Set voltageLevels = new HashSet<>(); + VoltageLevel vl = network.getVoltageLevel(voltageLevelId); + if (vl == null) { + throw new PowsyblException("Unknown voltage level id '" + voltageLevelId + "'"); + } + + Set startingSet = new HashSet<>(); + startingSet.add(vl); + traverseVoltageLevels(startingSet, depth, voltageLevels); + return new VoltageLevelFilter(voltageLevels); + } + + public static VoltageLevelFilter createVoltageLevelsDepthFilter(Network network, List voltageLevelIds, int depth) { + Objects.requireNonNull(network); + Objects.requireNonNull(voltageLevelIds); + Set startingSet = new HashSet<>(); + for (String voltageLevelId : voltageLevelIds) { + VoltageLevel vl = network.getVoltageLevel(voltageLevelId); + if (vl == null) { + throw new PowsyblException("Unknown voltage level id '" + voltageLevelId + "'"); + } + startingSet.add(vl); + } + + Set voltageLevels = new HashSet<>(); + traverseVoltageLevels(startingSet, depth, voltageLevels); + return new VoltageLevelFilter(voltageLevels); + } + + public static VoltageLevelFilter createVoltageLevelsFilter(Network network, List voltageLevelIds) { + return createVoltageLevelsDepthFilter(network, voltageLevelIds, 0); + } + + private static void traverseVoltageLevels(Set voltageLevelsDepth, int depth, Set visitedVoltageLevels) { + if (depth < 0) { + return; + } + Set nextDepthVoltageLevels = new HashSet<>(); + for (VoltageLevel vl : voltageLevelsDepth) { + if (!visitedVoltageLevels.contains(vl)) { + visitedVoltageLevels.add(vl); + vl.visitEquipments(new VlVisitor(nextDepthVoltageLevels, visitedVoltageLevels)); + } + } + traverseVoltageLevels(nextDepthVoltageLevels, depth - 1, visitedVoltageLevels); + } + + private static class VlVisitor extends DefaultTopologyVisitor { + private final Set nextDepthVoltageLevels; + private final Set visitedVoltageLevels; + + public VlVisitor(Set nextDepthVoltageLevels, Set visitedVoltageLevels) { + this.nextDepthVoltageLevels = nextDepthVoltageLevels; + this.visitedVoltageLevels = visitedVoltageLevels; + } + + @Override + public void visitLine(Line line, Branch.Side side) { + visitBranch(line, side); + } + + @Override + public void visitTwoWindingsTransformer(TwoWindingsTransformer twt, Branch.Side side) { + visitBranch(twt, side); + } + + @Override + public void visitThreeWindingsTransformer(ThreeWindingsTransformer twt, ThreeWindingsTransformer.Side side) { + if (side == ThreeWindingsTransformer.Side.ONE) { + visitTerminal(twt.getTerminal(ThreeWindingsTransformer.Side.TWO)); + visitTerminal(twt.getTerminal(ThreeWindingsTransformer.Side.THREE)); + } else if (side == ThreeWindingsTransformer.Side.TWO) { + visitTerminal(twt.getTerminal(ThreeWindingsTransformer.Side.ONE)); + visitTerminal(twt.getTerminal(ThreeWindingsTransformer.Side.THREE)); + } else { + visitTerminal(twt.getTerminal(ThreeWindingsTransformer.Side.ONE)); + visitTerminal(twt.getTerminal(ThreeWindingsTransformer.Side.TWO)); + } + } + + @Override + public void visitHvdcConverterStation(HvdcConverterStation converterStation) { + converterStation.getOtherConverterStation().ifPresent(c -> visitTerminal(c.getTerminal())); + } + + private void visitBranch(Branch branch, Branch.Side side) { + visitTerminal(branch.getTerminal(IidmUtils.getOpposite(side))); + } + + private void visitTerminal(Terminal terminal) { + VoltageLevel voltageLevel = terminal.getVoltageLevel(); + if (!visitedVoltageLevels.contains(voltageLevel)) { + nextDepthVoltageLevels.add(voltageLevel); + } + } + } + +} 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 new file mode 100644 index 000000000..cee1c330c --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/AbstractLayout.java @@ -0,0 +1,99 @@ +package com.powsybl.nad.layout; + +import com.powsybl.nad.model.*; +import org.jgrapht.alg.util.Pair; + +import java.util.*; +import java.util.stream.Stream; + +public abstract class AbstractLayout implements Layout { + + private Map initialNodePositions = Collections.emptyMap(); + private Set nodesWithFixedPosition = Collections.emptySet(); + + @Override + public void run(Graph graph, LayoutParameters layoutParameters) { + Objects.requireNonNull(graph); + Objects.requireNonNull(layoutParameters); + + nodesLayout(graph, layoutParameters); + busNodesLayout(graph, layoutParameters); + edgesLayout(graph, layoutParameters); + + computeSize(graph); + } + + @Override + public Map getInitialNodePositions() { + return initialNodePositions; + } + + @Override + public void setInitialNodePositions(Map initialNodePositions) { + Objects.requireNonNull(initialNodePositions); + this.initialNodePositions = initialNodePositions; + } + + @Override + public void setNodesWithFixedPosition(Set nodesWithFixedPosition) { + this.nodesWithFixedPosition = nodesWithFixedPosition; + } + + @Override + public Set getNodesWithFixedPosition() { + return nodesWithFixedPosition; + } + + public void setFixedNodePositions(Map fixedNodePositions) { + setInitialNodePositions(fixedNodePositions); + setNodesWithFixedPosition(fixedNodePositions.keySet()); + } + + protected abstract void nodesLayout(Graph graph, LayoutParameters layoutParameters); + + protected void busNodesLayout(Graph graph, LayoutParameters ignoredLayoutParameters) { + Comparator c = Comparator.comparing(bn -> graph.getBusEdges(bn).size()); + graph.getVoltageLevelNodesStream().forEach(n -> { + n.sortBusNodes(c); + List sortedNodes = n.getBusNodes(); + for (int i = 0; i < sortedNodes.size(); i++) { + BusNode busNode = sortedNodes.get(i); + busNode.setIndex(i); + busNode.setNbNeighbouringBusNodes(sortedNodes.size() - 1); + busNode.setPosition(n.getPosition()); + } + }); + } + + protected void fixedTextNodeLayout(Pair nodes, LayoutParameters layoutParameters) { + Point fixedShift = layoutParameters.getTextNodeFixedShift(); + Point textPos = nodes.getFirst().getPosition().shift(fixedShift.getX(), fixedShift.getY()); + nodes.getSecond().setPosition(textPos); + } + + protected void edgesLayout(Graph graph, LayoutParameters layoutParameters) { + Objects.requireNonNull(graph); + Objects.requireNonNull(layoutParameters); + graph.getBranchEdgeStream().forEach(edge -> { + setEdgeVisibility(graph.getNode1(edge), edge, BranchEdge.Side.ONE); + setEdgeVisibility(graph.getNode2(edge), edge, BranchEdge.Side.TWO); + }); + } + + private void setEdgeVisibility(Node node, BranchEdge branchEdge, BranchEdge.Side side) { + if (node instanceof VoltageLevelNode && !((VoltageLevelNode) node).isVisible()) { + branchEdge.setVisible(side, false); + } + } + + private void computeSize(Graph graph) { + double[] dims = new double[4]; + Stream.concat(graph.getTextNodesStream(), graph.getNodesStream()).forEach(node -> { + dims[0] = Math.min(dims[0], node.getX()); + dims[1] = Math.max(dims[1], node.getX()); + dims[2] = Math.min(dims[2], node.getY()); + dims[3] = Math.max(dims[3], node.getY()); + }); + graph.setDimensions(dims[0], dims[1], dims[2], dims[3]); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicFixedLayout.java b/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicFixedLayout.java new file mode 100644 index 000000000..2eab5f56d --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicFixedLayout.java @@ -0,0 +1,34 @@ +/** + * 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.Edge; +import com.powsybl.nad.model.Graph; +import com.powsybl.nad.model.Node; +import com.powsybl.nad.model.Point; + +/** + * @author Luma Zamarreño + */ +public class BasicFixedLayout extends AbstractLayout { + + @Override + protected void nodesLayout(Graph graph, LayoutParameters layoutParameters) { + org.jgrapht.Graph jgraphtGraph = graph.getJgraphtGraph(layoutParameters.isTextNodesForceLayout()); + + jgraphtGraph.vertexSet().forEach(node -> { + Point p = getInitialNodePositions().get(node.getEquipmentId()); + if (p != null) { + node.setPosition(p.getX(), p.getY()); + } + }); + + if (!layoutParameters.isTextNodesForceLayout()) { + graph.getTextEdgesMap().values().forEach(nodePair -> fixedTextNodeLayout(nodePair, layoutParameters)); + } + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicFixedLayoutFactory.java b/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicFixedLayoutFactory.java new file mode 100644 index 000000000..341e28b9c --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicFixedLayoutFactory.java @@ -0,0 +1,32 @@ +/** + * 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.Point; + +import java.util.Map; +import java.util.Objects; + +/** + * @author Luma Zamarreño + */ +public class BasicFixedLayoutFactory implements LayoutFactory { + + private final Map fixedPositions; + + public BasicFixedLayoutFactory(Map fixedPositions) { + Objects.requireNonNull(fixedPositions); + this.fixedPositions = fixedPositions; + } + + @Override + public Layout create() { + AbstractLayout layout = new BasicFixedLayout(); + layout.setFixedNodePositions(fixedPositions); + return layout; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicForceLayout.java b/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicForceLayout.java new file mode 100644 index 000000000..d8567fcbc --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicForceLayout.java @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.layout; + +import com.powsybl.diagram.util.forcelayout.ForceLayout; +import com.powsybl.diagram.util.forcelayout.Vector; +import com.powsybl.nad.model.Edge; +import com.powsybl.nad.model.Graph; +import com.powsybl.nad.model.Node; + +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author Florian Dupuy + */ +public class BasicForceLayout extends AbstractLayout { + + private static final int SCALE = 100; + + @Override + protected void nodesLayout(Graph graph, LayoutParameters layoutParameters) { + org.jgrapht.Graph jgraphtGraph = graph.getJgraphtGraph(layoutParameters.isTextNodesForceLayout()); + ForceLayout forceLayout = new ForceLayout<>(jgraphtGraph); + forceLayout.setSpringRepulsionFactor(layoutParameters.getSpringRepulsionFactorForceLayout()); + + setInitialPositions(forceLayout, graph); + Set fixedNodes = getNodesWithFixedPosition().stream() + .map(graph::getNode) + .flatMap(Optional::stream) + .collect(Collectors.toSet()); + forceLayout.setFixedNodes(fixedNodes); + + forceLayout.execute(); + + jgraphtGraph.vertexSet().forEach(node -> { + Vector p = forceLayout.getStablePosition(node); + node.setPosition(SCALE * p.getX(), SCALE * p.getY()); + }); + + if (!layoutParameters.isTextNodesForceLayout()) { + graph.getTextEdgesMap().values().forEach(nodePair -> fixedTextNodeLayout(nodePair, layoutParameters)); + } + } + + private void setInitialPositions(ForceLayout forceLayout, Graph graph) { + Map initialPoints = getInitialNodePositions().entrySet().stream() + // Only accept positions for nodes in the graph + .filter(nodePosition -> graph.getNode(nodePosition.getKey()).isPresent()) + .collect(Collectors.toMap( + nodePosition -> graph.getNode(nodePosition.getKey()).orElseThrow(), + nodePosition -> new com.powsybl.diagram.util.forcelayout.Point( + nodePosition.getValue().getX() / SCALE, + nodePosition.getValue().getY() / SCALE) + )); + forceLayout.setInitialPoints(initialPoints); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicForceLayoutFactory.java b/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicForceLayoutFactory.java new file mode 100644 index 000000000..e470cc51d --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/BasicForceLayoutFactory.java @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.layout; + +/** + * @author Florian Dupuy + */ +public class BasicForceLayoutFactory implements LayoutFactory { + @Override + public Layout create() { + return new BasicForceLayout(); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/layout/Layout.java b/network-area-diagram/src/main/java/com/powsybl/nad/layout/Layout.java new file mode 100644 index 000000000..fd86e68e7 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/Layout.java @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.layout; + +import com.powsybl.nad.model.Graph; +import com.powsybl.nad.model.Point; + +import java.util.Map; +import java.util.Set; + +/** + * @author Florian Dupuy + */ +public interface Layout { + void run(Graph graph, LayoutParameters layoutParameters); + + void setInitialNodePositions(Map initialNodePositions); + + void setNodesWithFixedPosition(Set nodesWithFixedPosition); + + Map getInitialNodePositions(); + + Set getNodesWithFixedPosition(); +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/layout/LayoutFactory.java b/network-area-diagram/src/main/java/com/powsybl/nad/layout/LayoutFactory.java new file mode 100644 index 000000000..ef2faeeb4 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/LayoutFactory.java @@ -0,0 +1,14 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.layout; + +/** + * @author Florian Dupuy + */ +public interface LayoutFactory { + Layout create(); +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/layout/LayoutParameters.java b/network-area-diagram/src/main/java/com/powsybl/nad/layout/LayoutParameters.java new file mode 100644 index 000000000..47b99502a --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/layout/LayoutParameters.java @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.layout; + +import com.powsybl.nad.model.Point; + +/** + * @author Florian Dupuy + */ +public class LayoutParameters { + private boolean textNodesForceLayout = false; + private double springRepulsionFactorForceLayout = 0.0; + private Point textNodeFixedShift = new Point(100, -15); + + public LayoutParameters() { + } + + public LayoutParameters(LayoutParameters other) { + this.textNodesForceLayout = other.textNodesForceLayout; + this.springRepulsionFactorForceLayout = other.springRepulsionFactorForceLayout; + this.textNodeFixedShift = new Point(other.textNodeFixedShift.getX(), other.textNodeFixedShift.getY()); + } + + public boolean isTextNodesForceLayout() { + return textNodesForceLayout; + } + + public LayoutParameters setTextNodesForceLayout(boolean textNodesForceLayout) { + this.textNodesForceLayout = textNodesForceLayout; + return this; + } + + public LayoutParameters setSpringRepulsionFactorForceLayout(double springRepulsionFactorForceLayout) { + this.springRepulsionFactorForceLayout = springRepulsionFactorForceLayout; + return this; + } + + public double getSpringRepulsionFactorForceLayout() { + return springRepulsionFactorForceLayout; + } + + public Point getTextNodeFixedShift() { + return textNodeFixedShift; + } + + public LayoutParameters setTextNodeFixedShift(double textNodeFixedShiftX, double textNodeFixedShiftY) { + this.textNodeFixedShift = new Point(textNodeFixedShiftX, textNodeFixedShiftY); + return this; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractEdge.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractEdge.java new file mode 100644 index 000000000..4544f08ae --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractEdge.java @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +/** + * @author Florian Dupuy + */ +public abstract class AbstractEdge extends AbstractIdentifiable implements Edge { + + protected AbstractEdge(String diagramId, String equipmentId, String nameOrId) { + super(diagramId, equipmentId, nameOrId); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractIdentifiable.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractIdentifiable.java new file mode 100644 index 000000000..dea861dab --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractIdentifiable.java @@ -0,0 +1,41 @@ +/** + * 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.model; + +import java.util.Objects; +import java.util.Optional; + +/** + * @author Thomas Adam + */ +abstract class AbstractIdentifiable implements Identifiable { + + private final String diagramId; + private final String equipmentId; + private final String name; + + protected AbstractIdentifiable(String diagramId, String equipmentId, String nameOrId) { + this.diagramId = Objects.requireNonNull(diagramId); + this.equipmentId = equipmentId; + this.name = nameOrId; + } + + @Override + public String getDiagramId() { + return diagramId; + } + + @Override + public String getEquipmentId() { + return equipmentId; + } + + @Override + public Optional getName() { + return Optional.ofNullable(name); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractNode.java new file mode 100644 index 000000000..80ac8e1d5 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/AbstractNode.java @@ -0,0 +1,65 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +/** + * @author Florian Dupuy + */ +public abstract class AbstractNode extends AbstractIdentifiable implements Node { + + private int width; + private int height; + private Point position; + + protected AbstractNode(String diagramId, String equipmentId, String name) { + super(diagramId, equipmentId, name); + position = new Point(); + width = 0; + height = 0; + } + + @Override + public void setPosition(Point position) { + this.position = position; + } + + @Override + public void setPosition(double x, double y) { + position = new Point(x, y); + } + + @Override + public Point getPosition() { + return position; + } + + @Override + public double getX() { + return position.getX(); + } + + @Override + public double getY() { + return position.getY(); + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java new file mode 100644 index 000000000..8dc6657fe --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/BranchEdge.java @@ -0,0 +1,96 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * @author Florian Dupuy + */ +public class BranchEdge extends AbstractEdge { + + public enum Side { + ONE, TWO; + + public Side getOpposite() { + return this == ONE ? TWO : ONE; + } + } + + public static final String TWO_WT_EDGE = "TwoWtEdge"; + public static final String LINE_EDGE = "LineEdge"; + public static final String HVDC_LINE_EDGE = "HvdcLineEdge"; + + private List points1 = Collections.emptyList(); + private List points2 = Collections.emptyList(); + private final boolean[] visible = new boolean[] {true, true}; + private final String type; + + public BranchEdge(String diagramId, String equipmentId, String nameOrId, String type) { + super(diagramId, equipmentId, nameOrId); + this.type = type; + } + + public String getType() { + return type; + } + + public List getPoints(Side side) { + Objects.requireNonNull(side); + return side == Side.ONE ? getPoints1() : getPoints2(); + } + + public List getPoints1() { + return Collections.unmodifiableList(points1); + } + + public List getPoints2() { + return Collections.unmodifiableList(points2); + } + + public void setPoints(Side side, Point... points) { + Objects.requireNonNull(side); + if (side == Side.ONE) { + setPoints1(points); + } else { + setPoints2(points); + } + } + + public void setPoints1(Point... points) { + Arrays.stream(points).forEach(Objects::requireNonNull); + this.points1 = Arrays.asList(points); + } + + public void setPoints2(Point... points) { + Arrays.stream(points).forEach(Objects::requireNonNull); + this.points2 = Arrays.asList(points); + } + + public boolean isVisible(Side side) { + Objects.requireNonNull(side); + return visible[side.ordinal()]; + } + + public void setVisible(Side side, boolean visible) { + Objects.requireNonNull(side); + this.visible[side.ordinal()] = visible; + } + + public double getEdgeStartAngle(Side side) { + List points = getPoints(side); + return points.get(0).getAngle(points.get(1)); + } + + public double getEdgeEndAngle(Side side) { + List points = getPoints(side); + return points.get(points.size() - 2).getAngle(points.get(points.size() - 1)); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/BusNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/BusNode.java new file mode 100644 index 000000000..2b58af4cf --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/BusNode.java @@ -0,0 +1,38 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +/** + * @author Florian Dupuy + */ +public class BusNode extends AbstractNode { + + public static final BusNode UNKNOWN = new BusNode("", ""); + + private int index; + private int nbNeighbouringBusNodes; + + public BusNode(String diagramId, String id) { + super(diagramId, id, null); + } + + public void setIndex(int index) { + this.index = index; + } + + public int getIndex() { + return index; + } + + public void setNbNeighbouringBusNodes(int nbNeighbouringBusNodes) { + this.nbNeighbouringBusNodes = nbNeighbouringBusNodes; + } + + public int getNbNeighbouringBusNodes() { + return nbNeighbouringBusNodes; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/Edge.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/Edge.java new file mode 100644 index 000000000..7c6c0dc4d --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/Edge.java @@ -0,0 +1,14 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +/** + * @author Florian Dupuy + */ +public interface Edge extends Identifiable { + +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/Graph.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/Graph.java new file mode 100644 index 000000000..100a69854 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/Graph.java @@ -0,0 +1,325 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +import org.jgrapht.alg.util.Pair; +import org.jgrapht.graph.Pseudograph; +import org.jgrapht.graph.WeightedPseudograph; + +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author Florian Dupuy + */ +public class Graph { + + private final Map nodes = new LinkedHashMap<>(); + private final Map busNodes = new LinkedHashMap<>(); + private final Map edges = new LinkedHashMap<>(); + private double minX = 0; + private double minY = 0; + private double maxX = 0; + private double maxY = 0; + + private final org.jgrapht.Graph voltageLevelGraph = new WeightedPseudograph<>(Edge.class); + private final org.jgrapht.Graph busGraph = new Pseudograph<>(Edge.class); + private final Map> textEdges = new LinkedHashMap<>(); + + public void addNode(Node node) { + Objects.requireNonNull(node); + nodes.put(node.getEquipmentId(), node); + voltageLevelGraph.addVertex(node); + if (node instanceof VoltageLevelNode) { + ((VoltageLevelNode) node).getBusNodeStream().forEach(b -> { + busGraph.addVertex(b); + busNodes.put(b.getEquipmentId(), b); + }); + } + if (node instanceof ThreeWtNode) { + busGraph.addVertex(node); + } + } + + public void addTextNode(VoltageLevelNode vlNode) { + Objects.requireNonNull(vlNode); + addEdge(vlNode, new TextNode(vlNode.getDiagramId() + "_text"), new TextEdge(vlNode.getDiagramId() + "_edge")); + } + + public void addEdge(VoltageLevelNode node1, BusNode busNode1, + VoltageLevelNode node2, BusNode busNode2, BranchEdge edge) { + addVoltageLevelsEdge(node1, node2, edge); + addBusesEdge(busNode1, busNode2, edge); + } + + public void addEdge(VoltageLevelNode vlNode, BusNode busNode, ThreeWtNode tNode, ThreeWtEdge edge) { + addVoltageLevelsEdge(vlNode, tNode, edge); + addBusesEdge(busNode, tNode, edge); + } + + public void addEdge(VoltageLevelNode vlNode, TextNode textNode, TextEdge edge) { + Objects.requireNonNull(vlNode); + Objects.requireNonNull(textNode); + Objects.requireNonNull(edge); + textEdges.put(edge, Pair.of(vlNode, textNode)); + } + + private void addVoltageLevelsEdge(Node node1, Node node2, Edge edge) { + Objects.requireNonNull(node1); + Objects.requireNonNull(node2); + Objects.requireNonNull(edge); + edges.put(edge.getEquipmentId(), edge); + voltageLevelGraph.addEdge(node1, node2, edge); + } + + private void addBusesEdge(BusNode node1, Node node2, Edge edge) { + Objects.requireNonNull(node1); + Objects.requireNonNull(node2); + Objects.requireNonNull(edge); + if (node1 == BusNode.UNKNOWN || node2 == BusNode.UNKNOWN) { + busGraph.addVertex(BusNode.UNKNOWN); + } + busGraph.addEdge(node1, node2, edge); + } + + public Stream getBusNodesStream() { + return busNodes.values().stream(); + } + + public Stream getNodesStream() { + return voltageLevelGraph.vertexSet().stream(); + } + + public Stream getVoltageLevelNodesStream() { + return nodes.values().stream().filter(VoltageLevelNode.class::isInstance).map(VoltageLevelNode.class::cast); + } + + public Stream getThreeWtNodesStream() { + return nodes.values().stream().filter(ThreeWtNode.class::isInstance).map(ThreeWtNode.class::cast); + } + + public Stream getTextNodesStream() { + return textEdges.values().stream().map(Pair::getSecond); + } + + public Collection> getVoltageLevelTextPairs() { + return Collections.unmodifiableCollection(textEdges.values()); + } + + public Stream getEdgesStream() { + return edges.values().stream(); + } + + public Collection getEdges() { + return Collections.unmodifiableCollection(voltageLevelGraph.edgeSet()); + } + + public Stream getEdgeStream(Node node) { + return voltageLevelGraph.edgesOf(node).stream(); + } + + public Stream getThreeWtEdgeStream(ThreeWtNode node) { + return voltageLevelGraph.edgesOf(node).stream().filter(ThreeWtEdge.class::isInstance).map(ThreeWtEdge.class::cast); + } + + public Stream getBranchEdgeStream(Node node) { + return getEdgeStream(node) + .filter(BranchEdge.class::isInstance) + .map(BranchEdge.class::cast); + } + + public Collection getBusEdges(BusNode busNode) { + return busGraph.edgesOf(busNode); + } + + public Stream getBranchEdgeStream() { + return voltageLevelGraph.edgeSet().stream() + .filter(BranchEdge.class::isInstance) + .map(BranchEdge.class::cast); + } + + public List getBranchEdges() { + return getBranchEdgeStream().collect(Collectors.toList()); + } + + public Stream getTextEdgesStream() { + return textEdges.keySet().stream(); + } + + public List getTextEdges() { + return getTextEdgesStream().collect(Collectors.toList()); + } + + public Map> getTextEdgesMap() { + return Collections.unmodifiableMap(textEdges); + } + + public Stream getNonMultiBranchEdgesStream() { + return voltageLevelGraph.edgeSet().stream() + .filter(BranchEdge.class::isInstance) + .map(BranchEdge.class::cast) + .filter(e -> voltageLevelGraph.getAllEdges(voltageLevelGraph.getEdgeSource(e), voltageLevelGraph.getEdgeTarget(e)).size() == 1); + } + + public Stream> getMultiBranchEdgesStream() { + return voltageLevelGraph.edgeSet().stream() + .filter(e -> !isLoop(e)) + .map(e -> voltageLevelGraph.getAllEdges(voltageLevelGraph.getEdgeSource(e), voltageLevelGraph.getEdgeTarget(e))) + .filter(e -> e.size() > 1) + .distinct() + .map(e -> e.stream().filter(BranchEdge.class::isInstance).map(BranchEdge.class::cast).collect(Collectors.toList())) + .filter(e -> e.size() > 1); + } + + public Map> getLoopBranchEdgesMap() { + return voltageLevelGraph.vertexSet().stream() + .map(n -> voltageLevelGraph.getAllEdges(n, n).stream() + .filter(BranchEdge.class::isInstance).map(BranchEdge.class::cast) + .collect(Collectors.toList())) + .filter(l -> !l.isEmpty()) + .collect(Collectors.toMap(l -> getVoltageLevelNode1(l.get(0)), l -> l)); + } + + public Stream getThreeWtEdgesStream() { + return voltageLevelGraph.edgeSet().stream() + .filter(ThreeWtEdge.class::isInstance) + .map(ThreeWtEdge.class::cast); + } + + public List getThreeWtEdges() { + return getThreeWtEdgesStream().collect(Collectors.toList()); + } + + public Optional getNode(String equipmentId) { + return Optional.ofNullable(nodes.get(equipmentId)); + } + + public Optional getVoltageLevelNode(String voltageLevelId) { + return getNode(voltageLevelId).filter(VoltageLevelNode.class::isInstance).map(VoltageLevelNode.class::cast); + } + + public VoltageLevelNode getVoltageLevelNode(TextEdge textEdge) { + return textEdges.get(textEdge).getFirst(); + } + + public BusNode getBusNode(String busId) { + return busNodes.get(busId); + } + + public org.jgrapht.Graph getJgraphtGraph(boolean includeTextNodes) { + if (includeTextNodes) { + org.jgrapht.Graph graphWithTextNodes = new WeightedPseudograph<>(Edge.class); + voltageLevelGraph.vertexSet().forEach(graphWithTextNodes::addVertex); + voltageLevelGraph.edgeSet().forEach(e -> graphWithTextNodes.addEdge(voltageLevelGraph.getEdgeSource(e), voltageLevelGraph.getEdgeTarget(e), e)); + textEdges.values().forEach(nodePair -> graphWithTextNodes.addVertex(nodePair.getSecond())); + textEdges.forEach((edge, nodePair) -> { + graphWithTextNodes.addEdge(nodePair.getFirst(), nodePair.getSecond(), edge); + graphWithTextNodes.setEdgeWeight(edge, 1); + }); + return graphWithTextNodes; + } else { + return voltageLevelGraph; + } + } + + public double getWidth() { + return maxX - minX; + } + + public double getHeight() { + return maxY - minY; + } + + public double getMinX() { + return minX; + } + + public double getMinY() { + return minY; + } + + public double getMaxX() { + return maxX; + } + + public double getMaxY() { + return maxY; + } + + public void setDimensions(double minX, double maxX, double minY, double maxY) { + this.minX = minX; + this.maxX = maxX; + this.minY = minY; + this.maxY = maxY; + } + + public Node getNode1(Edge edge) { + return voltageLevelGraph.getEdgeSource(edge); + } + + public Node getNode2(Edge edge) { + return voltageLevelGraph.getEdgeTarget(edge); + } + + public VoltageLevelNode getVoltageLevelNode(BranchEdge edge, BranchEdge.Side side) { + return side == BranchEdge.Side.ONE ? getVoltageLevelNode1(edge) : getVoltageLevelNode2(edge); + } + + public VoltageLevelNode getVoltageLevelNode1(BranchEdge edge) { + return (VoltageLevelNode) voltageLevelGraph.getEdgeSource(edge); + } + + public VoltageLevelNode getVoltageLevelNode2(BranchEdge edge) { + return (VoltageLevelNode) voltageLevelGraph.getEdgeTarget(edge); + } + + public VoltageLevelNode getVoltageLevelNode(ThreeWtEdge edge) { + return (VoltageLevelNode) voltageLevelGraph.getEdgeSource(edge); + } + + public ThreeWtNode getThreeWtNode(ThreeWtEdge edge) { + return (ThreeWtNode) voltageLevelGraph.getEdgeTarget(edge); + } + + public BusNode getBusGraphNode(BranchEdge edge, BranchEdge.Side side) { + return (BusNode) (side == BranchEdge.Side.ONE ? getBusGraphNode1(edge) : getBusGraphNode2(edge)); + } + + public BusNode getBusGraphNode(ThreeWtEdge edge) { + return (BusNode) getBusGraphNode1(edge); + } + + public Node getBusGraphNode1(Edge edge) { + return busGraph.getEdgeSource(edge); + } + + public Node getBusGraphNode2(Edge edge) { + return busGraph.getEdgeTarget(edge); + } + + public boolean containsEdge(String equipmentId) { + return edges.containsKey(equipmentId); + } + + public boolean containsNode(String equipmentId) { + return nodes.containsKey(equipmentId); + } + + public boolean isLoop(Edge edge) { + return getNode1(edge) == getNode2(edge); + } + + public Map getNodePositions() { + return getVoltageLevelNodesStream() + .filter(VoltageLevelNode::isVisible) + .collect(Collectors.toMap( + VoltageLevelNode::getEquipmentId, + VoltageLevelNode::getPosition + )); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/Identifiable.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/Identifiable.java new file mode 100644 index 000000000..c42e80e41 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/Identifiable.java @@ -0,0 +1,21 @@ +/** + * 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.model; + +import java.util.Optional; + +/** + * @author Thomas Adam + */ +public interface Identifiable { + + String getDiagramId(); + + String getEquipmentId(); + + Optional getName(); +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/Node.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/Node.java new file mode 100644 index 000000000..0fdb36cf0 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/Node.java @@ -0,0 +1,23 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +/** + * @author Florian Dupuy + */ +public interface Node extends Identifiable { + + void setPosition(Point point); + + Point getPosition(); + + void setPosition(double x, double y); + + double getX(); + + double getY(); +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/Point.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/Point.java new file mode 100644 index 000000000..c1c8bf4b7 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/Point.java @@ -0,0 +1,76 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +import java.util.Objects; + +/** + * @author Florian Dupuy + */ +public class Point { + + private final double x; + private final double y; + + public Point(double x, double y) { + this.x = x; + this.y = y; + } + + public Point() { + this(0, 0); + } + + public static Point createMiddlePoint(Point point1, Point point2) { + Objects.requireNonNull(point1); + Objects.requireNonNull(point2); + return new Point(0.5 * (point1.x + point2.x), 0.5 * (point1.y + point2.y)); + } + + public double distanceSquare(Point other) { + Objects.requireNonNull(other); + double dx = other.x - x; + double dy = other.y - y; + return dx * dx + dy * dy; + } + + public double distance(Point other) { + Objects.requireNonNull(other); + return Math.sqrt(distanceSquare(other)); + } + + public Point shiftRhoTheta(double rho, double theta) { + return shift(rho * Math.cos(theta), rho * Math.sin(theta)); + } + + public Point shift(double shiftX, double shiftY) { + return new Point(x + shiftX, y + shiftY); + } + + public double getY() { + return y; + } + + public double getX() { + return x; + } + + public Point atDistance(double dist, Point direction) { + double r = dist / distance(direction); + return new Point(x + r * (direction.x - x), + y + r * (direction.y - y)); + } + + public Point atDistance(double dist, double angle) { + return new Point(x + dist * Math.cos(angle), + y + dist * Math.sin(angle)); + } + + public double getAngle(Point other) { + return Math.atan2(other.y - y, other.x - x); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/TextEdge.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/TextEdge.java new file mode 100644 index 000000000..acfcbe9fe --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/TextEdge.java @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +import java.util.Arrays; +import java.util.List; + +/** + * @author Florian Dupuy + */ +public class TextEdge extends AbstractEdge { + + private Point[] points; + + public TextEdge(String diagramId) { + super(diagramId, null, null); + } + + public void setPoints(Point... points) { + this.points = points; + } + + public List getPoints() { + return Arrays.asList(points); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/TextNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/TextNode.java new file mode 100644 index 000000000..cdbf01e27 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/TextNode.java @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +/** + * @author Florian Dupuy + */ +public class TextNode extends AbstractNode { + + public TextNode(String diagramId) { + super(diagramId, null, null); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java new file mode 100644 index 000000000..3e167b9b8 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtEdge.java @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * @author Florian Dupuy + */ +public class ThreeWtEdge extends AbstractEdge { + + public enum Side { + ONE, TWO, THREE; + } + + private Side side; + + private List points; + + private final boolean visible; + + public ThreeWtEdge(String diagramId, String equipmentId, String transformerName, Side side, boolean visible) { + super(diagramId, equipmentId, transformerName); + this.side = side; + this.visible = visible; + } + + public void setPoints(Point point1, Point point2) { + this.points = Arrays.asList(point1, point2); + } + + public List getPoints() { + return Collections.unmodifiableList(points); + } + + public boolean isVisible() { + return visible; + } + + public Side getSide() { + return side; + } + + public double getEdgeAngle() { + return points.get(0).getAngle(points.get(1)); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtNode.java new file mode 100644 index 000000000..8e7f54482 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/ThreeWtNode.java @@ -0,0 +1,18 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +/** + * @author Florian Dupuy + */ +public class ThreeWtNode extends AbstractNode { + + public ThreeWtNode(String diagramId, String equipmentId, String nameOrId) { + super(diagramId, equipmentId, nameOrId); + } + +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java b/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java new file mode 100644 index 000000000..7289a7219 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/model/VoltageLevelNode.java @@ -0,0 +1,64 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.model; + +import java.util.*; +import java.util.stream.Stream; + +/** + * @author Florian Dupuy + */ +public class VoltageLevelNode extends AbstractNode { + + private final List busNodes = new ArrayList<>(); + private final boolean fictitious; + private final boolean visible; + private boolean hasUnknownBusNode = false; + + public VoltageLevelNode(String diagramId, String equipmentId, String nameOrId, boolean fictitious) { + this(diagramId, equipmentId, nameOrId, fictitious, true); + } + + public VoltageLevelNode(String diagramId, String equipmentId, String nameOrId, boolean fictitious, boolean visible) { + super(diagramId, equipmentId, nameOrId); + this.fictitious = fictitious; + this.visible = visible; + } + + public void addBusNode(BusNode busNode) { + Objects.requireNonNull(busNode); + busNodes.add(busNode); + } + + public List getBusNodes() { + return Collections.unmodifiableList(busNodes); + } + + public Stream getBusNodeStream() { + return busNodes.stream(); + } + + public boolean isVisible() { + return visible; + } + + public void sortBusNodes(Comparator c) { + busNodes.sort(c); + } + + public void setHasUnknownBusNode(boolean hasUnknownBusNode) { + this.hasUnknownBusNode = hasUnknownBusNode; + } + + public boolean hasUnknownBusNode() { + return hasUnknownBusNode; + } + + public boolean isFictitious() { + return fictitious; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/AbstractStyleProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/AbstractStyleProvider.java new file mode 100644 index 000000000..39ff89a4e --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/AbstractStyleProvider.java @@ -0,0 +1,128 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +import com.powsybl.commons.config.BaseVoltagesConfig; +import com.powsybl.nad.model.*; +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author Florian Dupuy + */ +public abstract class AbstractStyleProvider implements StyleProvider { + + private final BaseVoltagesConfig baseVoltagesConfig; + + protected AbstractStyleProvider() { + this(BaseVoltagesConfig.fromPlatformConfig()); + } + + protected AbstractStyleProvider(BaseVoltagesConfig baseVoltagesConfig) { + this.baseVoltagesConfig = Objects.requireNonNull(baseVoltagesConfig); + } + + @Override + public String getStyleDefs() { + StringBuilder styleSheetBuilder = new StringBuilder("\n"); + for (URL cssUrl : getCssUrls()) { + try { + styleSheetBuilder.append(new String(IOUtils.toByteArray(cssUrl), StandardCharsets.UTF_8)); + } catch (IOException e) { + throw new UncheckedIOException("Can't read css file " + cssUrl.getPath(), e); + } + } + return styleSheetBuilder.toString() + .replace("\r\n", "\n") // workaround for https://bugs.openjdk.java.net/browse/JDK-8133452 + .replace("\r", "\n"); + } + + protected List getCssUrls() { + return getCssFilenames().stream() + .map(n -> getClass().getResource("/" + n)) + .collect(Collectors.toList()); + } + + @Override + public List getNodeStyleClasses(Node node) { + return Collections.emptyList(); + } + + @Override + public List getNodeStyleClasses(BusNode busNode) { + return busNode == BusNode.UNKNOWN ? Collections.singletonList(UNKNOWN_BUSNODE_CLASS) : Collections.emptyList(); + } + + @Override + public List getEdgeStyleClasses(Edge edge) { + List result = new ArrayList<>(); + if (isDisconnected(edge)) { + result.add(DISCONNECTED_CLASS); + } + getBaseVoltageStyle(edge).ifPresent(result::add); + return result; + } + + @Override + public List getSideEdgeStyleClasses(BranchEdge edge, BranchEdge.Side side) { + Objects.requireNonNull(side); + List result = new ArrayList<>(); + if (isDisconnected(edge, side)) { + result.add(DISCONNECTED_CLASS); + } + getBaseVoltageStyle(edge, side).ifPresent(result::add); + return result; + } + + @Override + public List getEdgeInfoStyles(EdgeInfo info) { + List styles = new LinkedList<>(); + if (info.getInfoType().equals(EdgeInfo.ACTIVE_POWER)) { + styles.add(CLASSES_PREFIX + "active"); + } else if (info.getInfoType().equals(EdgeInfo.REACTIVE_POWER)) { + styles.add(CLASSES_PREFIX + "reactive"); + } + info.getDirection().ifPresent(direction -> styles.add( + CLASSES_PREFIX + (direction == EdgeInfo.Direction.IN ? "state-in" : "state-out"))); + return styles; + } + + @Override + public List getThreeWtNodeStyle(ThreeWtNode threeWtNode, ThreeWtEdge.Side side) { + Objects.requireNonNull(side); + List result = new ArrayList<>(); + if (isDisconnected(threeWtNode, side)) { + result.add(DISCONNECTED_CLASS); + } + getBaseVoltageStyle(threeWtNode, side).ifPresent(result::add); + return result; + } + + protected abstract boolean isDisconnected(Edge edge); + + protected abstract boolean isDisconnected(BranchEdge edge, BranchEdge.Side side); + + protected abstract boolean isDisconnected(ThreeWtNode threeWtNode, ThreeWtEdge.Side side); + + protected abstract Optional getBaseVoltageStyle(Edge edge); + + protected abstract Optional getBaseVoltageStyle(BranchEdge edge, BranchEdge.Side side); + + protected abstract Optional getBaseVoltageStyle(ThreeWtNode threeWtNode, ThreeWtEdge.Side side); + + protected Optional getBaseVoltageStyle(double nominalV) { + return baseVoltagesConfig.getBaseVoltageName(nominalV, baseVoltagesConfig.getDefaultProfile()) + .map(bvName -> CLASSES_PREFIX + bvName); + } + +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/DefaultEdgeRendering.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/DefaultEdgeRendering.java new file mode 100644 index 000000000..b611420bc --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/DefaultEdgeRendering.java @@ -0,0 +1,269 @@ +/** + * 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; + +import com.powsybl.nad.model.*; + +import java.util.*; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +/** + * @author Florian Dupuy + */ +public class DefaultEdgeRendering implements EdgeRendering { + + @Override + public void run(Graph graph, SvgParameters svgParameters) { + graph.getNonMultiBranchEdgesStream().forEach(edge -> computeSingleBranchEdgeCoordinates(graph, edge, svgParameters)); + graph.getMultiBranchEdgesStream().forEach(edges -> computeMultiBranchEdgesCoordinates(graph, edges, svgParameters)); + graph.getLoopBranchEdgesMap().forEach((node, edges) -> loopEdgesLayout(graph, node, edges, svgParameters)); + graph.getThreeWtNodesStream().forEach(threeWtNode -> computeThreeWtEdgeCoordinates(graph, threeWtNode, svgParameters)); + graph.getTextEdgesMap().forEach((edge, nodes) -> computeTextEdgeLayoutCoordinates(nodes.getFirst(), nodes.getSecond(), edge)); + } + + private void computeTextEdgeLayoutCoordinates(Node node1, Node node2, TextEdge edge) { + edge.setPoints(node1.getPosition(), node2.getPosition()); + } + + private void computeSingleBranchEdgeCoordinates(Graph graph, BranchEdge edge, SvgParameters svgParameters) { + Node node1 = graph.getBusGraphNode1(edge); + Node node2 = graph.getBusGraphNode2(edge); + + Point direction1 = getDirection(node2, () -> graph.getNode2(edge)); + Point edgeStart1 = computeEdgeStart(node1, direction1, graph.getVoltageLevelNode1(edge), svgParameters); + + Point direction2 = getDirection(node1, () -> graph.getNode1(edge)); + Point edgeStart2 = computeEdgeStart(node2, direction2, graph.getVoltageLevelNode2(edge), svgParameters); + + Point middle = Point.createMiddlePoint(edgeStart1, edgeStart2); + if (edge.getType().equals(BranchEdge.TWO_WT_EDGE)) { + double radius = svgParameters.getTransformerCircleRadius(); + edge.setPoints1(edgeStart1, middle.atDistance(1.5 * radius, direction2)); + edge.setPoints2(edgeStart2, middle.atDistance(1.5 * radius, direction1)); + } else { + edge.setPoints1(edgeStart1, middle); + edge.setPoints2(edgeStart2, middle); + } + } + + private Point getDirection(Node directionBusGraphNode, Supplier vlNodeSupplier) { + if (directionBusGraphNode == BusNode.UNKNOWN) { + return vlNodeSupplier.get().getPosition(); + } + return directionBusGraphNode.getPosition(); + } + + private Point computeEdgeStart(Node node, Point direction, VoltageLevelNode vlNode, SvgParameters svgParameters) { + // If edge not connected to a bus node on that side, we use corresponding voltage level with specific extra radius + if (node == BusNode.UNKNOWN && vlNode != null) { + double unknownBusRadius = SvgWriter.getVoltageLevelCircleRadius(vlNode, svgParameters) + svgParameters.getUnknownBusNodeExtraRadius(); + return vlNode.getPosition().atDistance(unknownBusRadius, direction); + } + + Point edgeStart = node.getPosition(); + if (node instanceof BusNode && vlNode != null) { + double busAnnulusOuterRadius = SvgWriter.getBusAnnulusOuterRadius((BusNode) node, vlNode, svgParameters); + edgeStart = edgeStart.atDistance(busAnnulusOuterRadius - svgParameters.getEdgeStartShift(), direction); + } + return edgeStart; + } + + private void computeMultiBranchEdgesCoordinates(Graph graph, List edges, SvgParameters svgParameters) { + BranchEdge firstEdge = edges.iterator().next(); + VoltageLevelNode nodeA = graph.getVoltageLevelNode1(firstEdge); + VoltageLevelNode nodeB = graph.getVoltageLevelNode2(firstEdge); + Point pointA = nodeA.getPosition(); + Point pointB = nodeB.getPosition(); + + double dx = pointB.getX() - pointA.getX(); + double dy = pointB.getY() - pointA.getY(); + double angle = Math.atan2(dy, dx); + + int nbForks = edges.size(); + double forkAperture = svgParameters.getEdgesForkAperture(); + double forkLength = svgParameters.getEdgesForkLength(); + double angleStep = forkAperture / (nbForks - 1); + + int i = 0; + for (BranchEdge edge : edges) { + if (2 * i + 1 == nbForks) { // in the middle, hence alpha = 0 + computeSingleBranchEdgeCoordinates(graph, edge, svgParameters); + } else { + double alpha = -forkAperture / 2 + i * angleStep; + double angleForkA = angle - alpha; + double angleForkB = angle + Math.PI + alpha; + + Point forkA = pointA.shift(forkLength * Math.cos(angleForkA), forkLength * Math.sin(angleForkA)); + Point forkB = pointB.shift(forkLength * Math.cos(angleForkB), forkLength * Math.sin(angleForkB)); + Point middle = Point.createMiddlePoint(forkA, forkB); + BranchEdge.Side sideA = graph.getNode1(edge) == nodeA ? BranchEdge.Side.ONE : BranchEdge.Side.TWO; + + computeHalfForkCoordinates(graph, svgParameters, nodeA, edge, forkA, middle, sideA); + computeHalfForkCoordinates(graph, svgParameters, nodeB, edge, forkB, middle, sideA.getOpposite()); + } + i++; + } + } + + private void computeHalfForkCoordinates(Graph graph, SvgParameters svgParameters, VoltageLevelNode node, BranchEdge edge, Point fork, Point middle, BranchEdge.Side side) { + Node busNodeA = side == BranchEdge.Side.ONE ? graph.getBusGraphNode1(edge) : graph.getBusGraphNode2(edge); + Point edgeStart = computeEdgeStart(busNodeA, fork, node, svgParameters); + Point endFork = edge.getType().equals(BranchEdge.TWO_WT_EDGE) + ? middle.atDistance(1.5 * svgParameters.getTransformerCircleRadius(), fork) + : middle; + edge.setPoints(side, edgeStart, fork, endFork); + } + + private void loopEdgesLayout(Graph graph, VoltageLevelNode node, List loopEdges, SvgParameters svgParameters) { + List angles = computeLoopAngles(graph, loopEdges, node, svgParameters); + int i = 0; + for (BranchEdge edge : loopEdges) { + double angle = angles.get(i++); + Point middle = node.getPosition().atDistance(svgParameters.getLoopDistance(), angle); + loopEdgesHalfLayout(graph, node, svgParameters, edge, BranchEdge.Side.ONE, angle, middle); + loopEdgesHalfLayout(graph, node, svgParameters, edge, BranchEdge.Side.TWO, angle, middle); + } + } + + private void loopEdgesHalfLayout(Graph graph, VoltageLevelNode node, SvgParameters svgParameters, + BranchEdge edge, BranchEdge.Side side, double angle, Point middle) { + + int sideSign = side == BranchEdge.Side.ONE ? -1 : 1; + double startAngle = angle + sideSign * svgParameters.getLoopEdgesAperture() / 2; + double radius = svgParameters.getTransformerCircleRadius(); + double controlsDist = svgParameters.getLoopControlDistance(); + boolean isTwoWt = edge.getType().equals(BranchEdge.TWO_WT_EDGE); + double endAngle = angle + sideSign * Math.PI / 2; + + Point fork = node.getPosition().atDistance(svgParameters.getEdgesForkLength(), startAngle); + Point edgeStart = computeEdgeStart(graph.getBusGraphNode(edge, side), fork, node, svgParameters); + Point control1a = fork.atDistance(controlsDist, startAngle); + Point middle1 = isTwoWt ? middle.atDistance(1.5 * radius, endAngle) : middle; + Point control1b = middle1.atDistance(isTwoWt ? Math.max(0, controlsDist - 1.5 * radius) : controlsDist, endAngle); + + edge.setPoints(side, edgeStart, fork, control1a, control1b, middle1); + } + + private List computeLoopAngles(Graph graph, List loopEdges, Node node, SvgParameters svgParameters) { + int nbLoops = loopEdges.size(); + + List anglesOtherEdges = graph.getBranchEdgeStream(node) + .filter(e -> !loopEdges.contains(e)) + .mapToDouble(e -> getAngle(e, graph, node)) + .sorted().boxed().collect(Collectors.toList()); + + List loopAngles = new ArrayList<>(); + if (anglesOtherEdges.size() > 0) { + anglesOtherEdges.add(anglesOtherEdges.get(0) + 2 * Math.PI); + double apertureWithMargin = svgParameters.getLoopEdgesAperture() * 1.2; + + double[] deltaAngles = new double[anglesOtherEdges.size() - 1]; + int nbSeparatedSlots = 0; + int nbSharedSlots = 0; + for (int i = 0; i < anglesOtherEdges.size() - 1; i++) { + deltaAngles[i] = anglesOtherEdges.get(i + 1) - anglesOtherEdges.get(i); + nbSeparatedSlots += deltaAngles[i] > apertureWithMargin ? 1 : 0; + nbSharedSlots += Math.floor(deltaAngles[i] / apertureWithMargin); + } + + List sortedIndices = IntStream.range(0, deltaAngles.length) + .boxed().sorted(Comparator.comparingDouble(i -> deltaAngles[i])) + .collect(Collectors.toList()); + + if (nbLoops <= nbSeparatedSlots) { + // Place loops in "slots" separated by non-loop edges + for (int i = sortedIndices.size() - nbLoops; i < sortedIndices.size(); i++) { + int iSorted = sortedIndices.get(i); + loopAngles.add((anglesOtherEdges.get(iSorted) + anglesOtherEdges.get(iSorted + 1)) / 2); + } + } else if (nbLoops <= nbSharedSlots) { + // Place the maximum of loops in "slots" separated by non-loop edges, and put the excessive ones in the bigger "slots" + int nbExcessiveRemaining = nbLoops - nbSeparatedSlots; + for (int i = sortedIndices.size() - 1; i >= 0; i--) { + int iSorted = sortedIndices.get(i); + int nbAvailableSlots = (int) Math.floor(deltaAngles[iSorted] / apertureWithMargin); + if (nbAvailableSlots == 0) { + break; + } + int nbLoopsInDelta = Math.min(nbAvailableSlots, nbExcessiveRemaining + 1); + double extraSpace = deltaAngles[iSorted] - svgParameters.getLoopEdgesAperture() * nbLoopsInDelta; // extra space without margins + double intraSpace = extraSpace / (nbLoopsInDelta + 1); // space between two loops and between non-loop edges and first/last loop + double angleStep = (anglesOtherEdges.get(iSorted + 1) - anglesOtherEdges.get(iSorted) - intraSpace) / nbLoopsInDelta; + double startAngle = anglesOtherEdges.get(iSorted) + intraSpace / 2 + angleStep / 2; + IntStream.range(0, nbLoopsInDelta).mapToDouble(iLoop -> startAngle + iLoop * angleStep).forEach(loopAngles::add); + nbExcessiveRemaining -= nbLoopsInDelta - 1; + } + } else { + // Not enough place in the slots: dividing the circle in nbLoops, starting in the middle of the biggest slot + int iMaxDelta = sortedIndices.get(sortedIndices.size() - 1); + double startAngle = (anglesOtherEdges.get(iMaxDelta) + anglesOtherEdges.get(iMaxDelta + 1)) / 2; + IntStream.range(0, nbLoops).mapToDouble(i -> startAngle + i * 2 * Math.PI / nbLoops).forEach(loopAngles::add); + } + + } else { + // No other edges: dividing the circle in nbLoops + IntStream.range(0, nbLoops).mapToDouble(i -> i * 2 * Math.PI / nbLoops).forEach(loopAngles::add); + } + + return loopAngles; + } + + private double getAngle(BranchEdge edge, Graph graph, Node node) { + BranchEdge.Side side = graph.getNode1(edge) == node ? BranchEdge.Side.ONE : BranchEdge.Side.TWO; + return edge.getEdgeStartAngle(side); + } + + private void computeThreeWtEdgeCoordinates(Graph graph, ThreeWtNode threeWtNode, SvgParameters svgParameters) { + // The 3wt edges are computed by finding the "leading" edge and then placing the other edges at 120° + // The leading edge is chosen to be the opposite edge of the smallest aperture. + List edges = graph.getThreeWtEdgeStream(threeWtNode).collect(Collectors.toList()); + List angles = edges.stream() + .map(edge -> computeEdgeStart(graph.getBusGraphNode(edge), threeWtNode.getPosition(), graph.getVoltageLevelNode(edge), svgParameters)) + .map(edgeStart -> threeWtNode.getPosition().getAngle(edgeStart)) + .collect(Collectors.toList()); + List sortedIndices = IntStream.range(0, 3) + .boxed().sorted(Comparator.comparingDouble(angles::get)) + .collect(Collectors.toList()); + + int leadingSortedIndex = getSortedIndexMaximumAperture(angles); + double leadingAngle = angles.get(sortedIndices.get(leadingSortedIndex)); + + List edgesSorted = IntStream.range(0, 3) + .map(i -> (leadingSortedIndex + i) % 3) + .map(sortedIndices::get) + .mapToObj(edges::get) + .collect(Collectors.toList()); + double dNodeToAnchor = svgParameters.getTransformerCircleRadius() * 1.6; + for (int i = 0; i < edgesSorted.size(); i++) { + ThreeWtEdge edge = edgesSorted.get(i); + Point edgeStart = computeEdgeStart(graph.getBusGraphNode(edge), threeWtNode.getPosition(), graph.getVoltageLevelNode(edge), svgParameters); + double anchorAngle = leadingAngle + i * 2 * Math.PI / 3; + Point threeWtAnchor = threeWtNode.getPosition().shiftRhoTheta(dNodeToAnchor, anchorAngle); + edge.setPoints(edgeStart, threeWtAnchor); + } + } + + private int getSortedIndexMaximumAperture(List angles) { + // Sorting the given angles + List sortedAngles = angles.stream().sorted().collect(Collectors.toList()); + + // Then calculating the apertures + sortedAngles.add(sortedAngles.get(0) + 2 * Math.PI); + double[] deltaAngles = new double[3]; + for (int i = 0; i < 3; i++) { + deltaAngles[i] = sortedAngles.get(i + 1) - sortedAngles.get(i); + } + + // Returning the (sorted) index of the angle facing the minimal aperture + int minDeltaIndex = IntStream.range(0, 3) + .boxed().min(Comparator.comparingDouble(i -> deltaAngles[i])) + .orElse(0); + return ((minDeltaIndex - 1) + 3) % 3; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/EdgeInfo.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/EdgeInfo.java new file mode 100644 index 000000000..b6be5200b --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/EdgeInfo.java @@ -0,0 +1,53 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +import java.util.Optional; + +/** + * @author Florian Dupuy + */ +public class EdgeInfo { + public static final String ACTIVE_POWER = "ActivePower"; + public static final String REACTIVE_POWER = "ReactivePower"; + + private final String infoType; + private final Direction arrowDirection; + private final String internalLabel; + private final String externalLabel; + + public EdgeInfo(String infoType, Direction arrowDirection, String internalLabel, String externalLabel) { + this.infoType = infoType; + this.arrowDirection = arrowDirection; + this.internalLabel = internalLabel; + this.externalLabel = externalLabel; + } + + public EdgeInfo(String infoType, double value) { + this(infoType, value < 0 ? Direction.IN : Direction.OUT, null, String.valueOf(Math.round(value))); + } + + public String getInfoType() { + return infoType; + } + + public Optional getDirection() { + return Optional.ofNullable(arrowDirection); + } + + public Optional getInternalLabel() { + return Optional.ofNullable(internalLabel); + } + + public Optional getExternalLabel() { + return Optional.ofNullable(externalLabel); + } + + public enum Direction { + IN, OUT + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/EdgeRendering.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/EdgeRendering.java new file mode 100644 index 000000000..ab250d750 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/EdgeRendering.java @@ -0,0 +1,16 @@ +/** + * 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; + +import com.powsybl.nad.model.Graph; + +/** + * @author Florian Dupuy + */ +public interface EdgeRendering { + void run(Graph graph, SvgParameters svgParameters); +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/GraphMetadata.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/GraphMetadata.java new file mode 100644 index 000000000..92c36fb5a --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/GraphMetadata.java @@ -0,0 +1,136 @@ +/** + * 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; + +import com.powsybl.commons.xml.XmlUtil; +import com.powsybl.nad.model.BusNode; +import com.powsybl.nad.model.Edge; +import com.powsybl.nad.model.Identifiable; +import com.powsybl.nad.model.Node; + +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; + +import java.io.InputStream; +import java.util.*; +import java.util.function.UnaryOperator; + +/** + * @author Thomas Adam + */ +public class GraphMetadata { + + private static final String METADATA_NAMESPACE_URI = "http://www.powsybl.org/schema/nad-metadata/1_0"; + private static final String METADATA_PREFIX = "nad"; + private static final String METADATA_ELEMENT_NAME = "metadata"; + private static final String METADATA_BUS_NODES_ELEMENT_NAME = "busNodes"; + private static final String METADATA_NODES_ELEMENT_NAME = "nodes"; + private static final String METADATA_EDGES_ELEMENT_NAME = "edges"; + private static final String METADATA_BUS_NODE_ELEMENT_NAME = "busNode"; + private static final String METADATA_NODE_ELEMENT_NAME = "node"; + private static final String METADATA_EDGE_ELEMENT_NAME = "edge"; + private static final String DIAGRAM_ID_ATTRIBUTE = "diagramId"; + private static final String EQUIPMENT_ID_ATTRIBUTE = "equipmentId"; + + private final Map busNodeIdByDiagramId = new LinkedHashMap<>(); + + private final Map nodeIdByDiagramId = new LinkedHashMap<>(); + + private final Map edgeIdByDiagramId = new LinkedHashMap<>(); + + public static GraphMetadata parseXml(InputStream inputStream) throws XMLStreamException { + return parseXml(XMLInputFactory.newDefaultFactory().createXMLStreamReader(inputStream)); + } + + public static GraphMetadata parseXml(XMLStreamReader reader) throws XMLStreamException { + GraphMetadata metadata = new GraphMetadata(); + + XmlUtil.readUntilEndElement(METADATA_ELEMENT_NAME, reader, () -> { + String token = reader.getLocalName(); + switch (token) { + case METADATA_BUS_NODES_ELEMENT_NAME: + XmlUtil.readUntilEndElement(token, reader, () -> { + if (reader.getLocalName().equals(METADATA_BUS_NODE_ELEMENT_NAME)) { + parseId(metadata.busNodeIdByDiagramId, reader); + } + }); + break; + case METADATA_NODES_ELEMENT_NAME: + XmlUtil.readUntilEndElement(token, reader, () -> { + if (reader.getLocalName().equals(METADATA_NODE_ELEMENT_NAME)) { + parseId(metadata.nodeIdByDiagramId, reader); + } + }); + break; + case METADATA_EDGES_ELEMENT_NAME: + XmlUtil.readUntilEndElement(token, reader, () -> { + if (reader.getLocalName().equals(METADATA_EDGE_ELEMENT_NAME)) { + parseId(metadata.edgeIdByDiagramId, reader); + } + }); + break; + default: + // Not managed + } + }); + return metadata; + } + + private static void parseId(Map ids, XMLStreamReader reader) { + String diagramId = reader.getAttributeValue(null, DIAGRAM_ID_ATTRIBUTE); + String equipmentId = reader.getAttributeValue(null, EQUIPMENT_ID_ATTRIBUTE); + ids.put(diagramId, equipmentId); + } + + public void writeXml(XMLStreamWriter writer) throws XMLStreamException { + // Root element + writer.writeStartElement(METADATA_ELEMENT_NAME); + writer.writeNamespace(METADATA_PREFIX, METADATA_NAMESPACE_URI); + // BusNodes + writeIdMapping(METADATA_BUS_NODES_ELEMENT_NAME, METADATA_BUS_NODE_ELEMENT_NAME, busNodeIdByDiagramId, writer); + // Nodes + writeIdMapping(METADATA_NODES_ELEMENT_NAME, METADATA_NODE_ELEMENT_NAME, nodeIdByDiagramId, writer); + // Edges + writeIdMapping(METADATA_EDGES_ELEMENT_NAME, METADATA_EDGE_ELEMENT_NAME, edgeIdByDiagramId, writer); + // End root element + writer.writeEndElement(); + } + + private void writeIdMapping(String rootElementName, String tagElementName, Map ids, XMLStreamWriter writer) throws XMLStreamException { + if (ids.entrySet().isEmpty()) { + writer.writeEmptyElement(METADATA_PREFIX, rootElementName, METADATA_NAMESPACE_URI); + } else { + writer.writeStartElement(METADATA_PREFIX, rootElementName, METADATA_NAMESPACE_URI); + for (Map.Entry entry : ids.entrySet()) { + writer.writeEmptyElement(METADATA_PREFIX, tagElementName, METADATA_NAMESPACE_URI); + writer.writeAttribute(DIAGRAM_ID_ATTRIBUTE, entry.getKey()); + writer.writeAttribute(EQUIPMENT_ID_ATTRIBUTE, entry.getValue()); + } + writer.writeEndElement(); + } + } + + public void addBusNode(BusNode node, UnaryOperator diagramIdToSvgId) { + addIdentifiable(busNodeIdByDiagramId, node, diagramIdToSvgId); + } + + public void addNode(Node node, UnaryOperator diagramIdToSvgId) { + addIdentifiable(nodeIdByDiagramId, node, diagramIdToSvgId); + } + + public void addEdge(Edge edge, UnaryOperator diagramIdToSvgId) { + addIdentifiable(edgeIdByDiagramId, edge, diagramIdToSvgId); + } + + private void addIdentifiable(Map map, Identifiable identifiable, UnaryOperator diagramIdToSvgId) { + Objects.requireNonNull(identifiable); + Objects.requireNonNull(diagramIdToSvgId); + map.put(diagramIdToSvgId.apply(identifiable.getDiagramId()), identifiable.getEquipmentId()); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/LabelProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/LabelProvider.java new file mode 100644 index 000000000..d7ca33bda --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/LabelProvider.java @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +import com.powsybl.nad.model.BranchEdge; +import com.powsybl.nad.model.Graph; +import com.powsybl.nad.model.ThreeWtEdge; +import com.powsybl.nad.model.VoltageLevelNode; + +import java.util.List; + +/** + * @author Florian Dupuy + */ +public interface LabelProvider { + List getEdgeInfos(Graph graph, BranchEdge edge, BranchEdge.Side side); + + List getEdgeInfos(Graph graph, ThreeWtEdge edge); + + String getArrowPathDIn(); + + String getArrowPathDOut(); + + List getVoltageLevelDescription(VoltageLevelNode voltageLevelNode); +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/Padding.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/Padding.java new file mode 100644 index 000000000..c8d53c8b4 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/Padding.java @@ -0,0 +1,72 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +/** + * @author Florian Dupuy + */ +public class Padding { + + private double left; + private double top; + private double right; + private double bottom; + + public Padding(double left, double top, double right, double bottom) { + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + } + + public Padding(double horizontal, double vertical) { + this.left = horizontal; + this.top = vertical; + this.right = horizontal; + this.bottom = vertical; + } + + public Padding(double padding) { + this.left = padding; + this.top = padding; + this.right = padding; + this.bottom = padding; + } + + public double getLeft() { + return left; + } + + public void setLeft(double left) { + this.left = left; + } + + public double getTop() { + return top; + } + + public void setTop(double top) { + this.top = top; + } + + public double getRight() { + return right; + } + + public void setRight(double right) { + this.right = right; + } + + public double getBottom() { + return bottom; + } + + public void setBottom(double bottom) { + this.bottom = bottom; + } +} + diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java new file mode 100644 index 000000000..0478d46d6 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/StyleProvider.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +import com.powsybl.nad.model.*; + +import java.util.List; + +/** + * @author Florian Dupuy + */ +public interface StyleProvider { + + String CLASSES_PREFIX = "nad-"; + String VOLTAGE_LEVEL_NODES_CLASS = CLASSES_PREFIX + "vl-nodes"; + String TEXT_NODES_CLASS = CLASSES_PREFIX + "text-nodes"; + String THREE_WT_NODES_CLASS = CLASSES_PREFIX + "3wt-nodes"; + String DISCONNECTED_CLASS = CLASSES_PREFIX + "disconnected"; + String BRANCH_EDGES_CLASS = CLASSES_PREFIX + "branch-edges"; + String HVDC_EDGE_CLASS = CLASSES_PREFIX + "hvdc-edge"; + String THREE_WT_EDGES_CLASS = CLASSES_PREFIX + "3wt-edges"; + String TEXT_EDGES_CLASS = CLASSES_PREFIX + "text-edges"; + String EDGE_INFOS_CLASS = CLASSES_PREFIX + "edge-infos"; + String ARROW_IN_CLASS = CLASSES_PREFIX + "arrow-in"; + String ARROW_OUT_CLASS = CLASSES_PREFIX + "arrow-out"; + String HVDC_CLASS = CLASSES_PREFIX + "hvdc"; + String UNKNOWN_BUSNODE_CLASS = CLASSES_PREFIX + "unknown-busnode"; + String TEXT_BACKGROUND_CLASS = CLASSES_PREFIX + "text-background"; + String LINE_OVERLOADED_CLASS = CLASSES_PREFIX + "overload"; + String VL_OVERVOLTAGE_CLASS = CLASSES_PREFIX + "overvoltage"; + String VL_UNDERVOLTAGE_CLASS = CLASSES_PREFIX + "undervoltage"; + String EDGE_PATH_CLASS = CLASSES_PREFIX + "edge-path"; + String WINDING_CLASS = CLASSES_PREFIX + "winding"; + String BUSNODE_CLASS = CLASSES_PREFIX + "busnode"; + + List getCssFilenames(); + + String getStyleDefs(); + + List getNodeStyleClasses(Node node); + + List getNodeStyleClasses(BusNode busNode); + + List getEdgeStyleClasses(Edge edge); + + List getSideEdgeStyleClasses(BranchEdge edge, BranchEdge.Side side); + + List getEdgeInfoStyles(EdgeInfo info); + + List getThreeWtNodeStyle(ThreeWtNode threeWtNode, ThreeWtEdge.Side one); +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java new file mode 100644 index 000000000..64805371b --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgParameters.java @@ -0,0 +1,352 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +import java.util.Objects; + +/** + * @author Florian Dupuy + */ +public class SvgParameters { + + private Padding diagramPadding = new Padding(200); + private boolean insertNameDesc = false; + private boolean svgWidthAndHeightAdded = false; + private CssLocation cssLocation = CssLocation.INSERTED_IN_SVG; + private SizeConstraint sizeConstraint = SizeConstraint.FIXED_SCALE; + private int fixedWidth = -1; + private int fixedHeight = -1; + private double fixedScale = 0.2; + private double arrowShift = 30; + private double arrowLabelShift = 19; + private double converterStationWidth = 60; + private double voltageLevelCircleRadius = 30; + private double fictitiousVoltageLevelCircleRadius = 15; + private double transformerCircleRadius = 20; + private double nodeHollowWidth = 15; + private double edgesForkLength = 80; + private double edgesForkAperture = Math.toRadians(60); + private double edgeStartShift = 2; + private double unknownBusNodeExtraRadius = 10; + private double loopDistance = 120; + private double loopEdgesAperture = Math.toRadians(60); + private double loopControlDistance = 40; + private boolean textNodeBackground = true; + private boolean edgeInfoAlongEdge = true; + private double interAnnulusSpace = 5; + private String svgPrefix = ""; + private boolean idDisplayed = false; + private boolean substationDescriptionDisplayed; + private double arrowHeight = 10; + + public enum CssLocation { + INSERTED_IN_SVG, EXTERNAL_IMPORTED, EXTERNAL_NO_IMPORT + } + + public enum SizeConstraint { + NONE, FIXED_SCALE, FIXED_WIDTH, FIXED_HEIGHT + } + + public SvgParameters() { + } + + public SvgParameters(SvgParameters other) { + this.diagramPadding = other.diagramPadding; + this.insertNameDesc = other.insertNameDesc; + this.svgWidthAndHeightAdded = other.svgWidthAndHeightAdded; + this.cssLocation = other.cssLocation; + this.sizeConstraint = other.sizeConstraint; + this.fixedWidth = other.fixedWidth; + this.fixedHeight = other.fixedHeight; + this.fixedScale = other.fixedScale; + this.arrowShift = other.arrowShift; + this.arrowLabelShift = other.arrowLabelShift; + this.converterStationWidth = other.converterStationWidth; + this.voltageLevelCircleRadius = other.voltageLevelCircleRadius; + this.fictitiousVoltageLevelCircleRadius = other.fictitiousVoltageLevelCircleRadius; + this.transformerCircleRadius = other.transformerCircleRadius; + this.nodeHollowWidth = other.nodeHollowWidth; + this.edgesForkLength = other.edgesForkLength; + this.edgesForkAperture = other.edgesForkAperture; + this.edgeStartShift = other.edgeStartShift; + this.unknownBusNodeExtraRadius = other.unknownBusNodeExtraRadius; + this.loopDistance = other.loopDistance; + this.loopEdgesAperture = other.loopEdgesAperture; + this.loopControlDistance = other.loopControlDistance; + this.textNodeBackground = other.textNodeBackground; + this.edgeInfoAlongEdge = other.edgeInfoAlongEdge; + this.interAnnulusSpace = other.interAnnulusSpace; + this.svgPrefix = other.svgPrefix; + this.idDisplayed = other.idDisplayed; + this.substationDescriptionDisplayed = other.substationDescriptionDisplayed; + this.arrowHeight = other.arrowHeight; + } + + public Padding getDiagramPadding() { + return diagramPadding; + } + + public SvgParameters setDiagramPadding(Padding padding) { + this.diagramPadding = Objects.requireNonNull(padding); + return this; + } + + public boolean isInsertNameDesc() { + return insertNameDesc; + } + + public SvgParameters setInsertNameDesc(boolean insertNameDesc) { + this.insertNameDesc = insertNameDesc; + return this; + } + + public CssLocation getCssLocation() { + return cssLocation; + } + + public SvgParameters setCssLocation(CssLocation cssLocation) { + this.cssLocation = Objects.requireNonNull(cssLocation); + return this; + } + + public int getFixedWidth() { + return fixedWidth; + } + + public SvgParameters setFixedWidth(int fixedWidth) { + this.fixedWidth = fixedWidth; + sizeConstraint = SizeConstraint.FIXED_WIDTH; + return this; + } + + public int getFixedHeight() { + return fixedHeight; + } + + public SvgParameters setFixedHeight(int fixedHeight) { + this.fixedHeight = fixedHeight; + sizeConstraint = SizeConstraint.FIXED_HEIGHT; + return this; + } + + public double getFixedScale() { + return fixedScale; + } + + public SvgParameters setFixedScale(double fixedScale) { + this.fixedScale = fixedScale; + sizeConstraint = SizeConstraint.FIXED_SCALE; + return this; + } + + public SizeConstraint getSizeConstraint() { + return sizeConstraint; + } + + public SvgParameters setSizeConstraint(SizeConstraint sizeConstraint) { + this.sizeConstraint = sizeConstraint; + return this; + } + + public boolean isSvgWidthAndHeightAdded() { + return svgWidthAndHeightAdded; + } + + public SvgParameters setSvgWidthAndHeightAdded(boolean svgWidthAndHeightAdded) { + this.svgWidthAndHeightAdded = svgWidthAndHeightAdded; + return this; + } + + public double getArrowShift() { + return arrowShift; + } + + public SvgParameters setArrowShift(double arrowShift) { + this.arrowShift = arrowShift; + return this; + } + + public double getArrowLabelShift() { + return arrowLabelShift; + } + + public SvgParameters setArrowLabelShift(double arrowLabelShift) { + this.arrowLabelShift = arrowLabelShift; + return this; + } + + public double getConverterStationWidth() { + return converterStationWidth; + } + + public SvgParameters setConverterStationWidth(double converterStationWidth) { + this.converterStationWidth = converterStationWidth; + return this; + } + + public double getVoltageLevelCircleRadius() { + return voltageLevelCircleRadius; + } + + public SvgParameters setVoltageLevelCircleRadius(double voltageLevelCircleRadius) { + this.voltageLevelCircleRadius = voltageLevelCircleRadius; + return this; + } + + public double getTransformerCircleRadius() { + return transformerCircleRadius; + } + + public SvgParameters setTransformerCircleRadius(double transformerCircleRadius) { + this.transformerCircleRadius = transformerCircleRadius; + return this; + } + + public double getNodeHollowWidth() { + return nodeHollowWidth; + } + + public SvgParameters setNodeHollowWidth(double nodeHollowWidth) { + this.nodeHollowWidth = nodeHollowWidth; + return this; + } + + public double getEdgesForkAperture() { + return edgesForkAperture; + } + + public SvgParameters setEdgesForkAperture(double edgesForkApertureDegrees) { + this.edgesForkAperture = Math.toRadians(edgesForkApertureDegrees); + return this; + } + + public double getLoopEdgesAperture() { + return loopEdgesAperture; + } + + public SvgParameters setLoopEdgesAperture(double loopEdgesApertureDegrees) { + this.loopEdgesAperture = Math.toRadians(loopEdgesApertureDegrees); + return this; + } + + public double getEdgesForkLength() { + return edgesForkLength; + } + + public SvgParameters setEdgesForkLength(double edgesForkLength) { + this.edgesForkLength = edgesForkLength; + return this; + } + + public double getEdgeStartShift() { + return edgeStartShift; + } + + public SvgParameters setEdgeStartShift(double edgeStartShift) { + this.edgeStartShift = edgeStartShift; + return this; + } + + public double getUnknownBusNodeExtraRadius() { + return unknownBusNodeExtraRadius; + } + + public SvgParameters setUnknownBusNodeExtraRadius(double unknownBusNodeExtraRadius) { + this.unknownBusNodeExtraRadius = unknownBusNodeExtraRadius; + return this; + } + + public double getLoopDistance() { + return loopDistance; + } + + public SvgParameters setLoopDistance(double loopDistance) { + this.loopDistance = loopDistance; + return this; + } + + public double getFictitiousVoltageLevelCircleRadius() { + return fictitiousVoltageLevelCircleRadius; + } + + public SvgParameters setFictitiousVoltageLevelCircleRadius(double fictitiousVoltageLevelCircleRadius) { + this.fictitiousVoltageLevelCircleRadius = fictitiousVoltageLevelCircleRadius; + return this; + } + + public double getLoopControlDistance() { + return loopControlDistance; + } + + public SvgParameters setLoopControlDistance(double loopControlDistance) { + this.loopControlDistance = loopControlDistance; + return this; + } + + public boolean isTextNodeBackground() { + return textNodeBackground; + } + + public SvgParameters setTextNodeBackground(boolean textNodeBackground) { + this.textNodeBackground = textNodeBackground; + return this; + } + + public boolean isEdgeInfoAlongEdge() { + return edgeInfoAlongEdge; + } + + public SvgParameters setEdgeInfoAlongEdge(boolean edgeInfoAlongEdge) { + this.edgeInfoAlongEdge = edgeInfoAlongEdge; + return this; + } + + public double getInterAnnulusSpace() { + return interAnnulusSpace; + } + + public SvgParameters setInterAnnulusSpace(double interAnnulusSpace) { + this.interAnnulusSpace = interAnnulusSpace; + return this; + } + + public String getSvgPrefix() { + return svgPrefix; + } + + public SvgParameters setSvgPrefix(String svgPrefix) { + this.svgPrefix = svgPrefix; + return this; + } + + public boolean isIdDisplayed() { + return idDisplayed; + } + + public SvgParameters setIdDisplayed(boolean idDisplayed) { + this.idDisplayed = idDisplayed; + return this; + } + + public boolean isSubstationDescriptionDisplayed() { + return substationDescriptionDisplayed; + } + + public SvgParameters setSubstationDescriptionDisplayed(boolean substationDescriptionDisplayed) { + this.substationDescriptionDisplayed = substationDescriptionDisplayed; + return this; + } + + public double getArrowHeight() { + return arrowHeight; + } + + public SvgParameters setArrowHeight(double arrowHeight) { + this.arrowHeight = arrowHeight; + return this; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java new file mode 100644 index 000000000..b4ff7b352 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java @@ -0,0 +1,740 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +import com.powsybl.commons.exceptions.UncheckedXmlStreamException; +import com.powsybl.commons.xml.XmlUtil; +import com.powsybl.nad.model.*; +import org.apache.commons.io.output.WriterOutputStream; +import org.jgrapht.alg.util.Pair; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author Florian Dupuy + */ +public class SvgWriter { + + private static final String INDENT = " "; + public static final String NAMESPACE_URI = "http://www.w3.org/2000/svg"; + private static final String SVG_ROOT_ELEMENT_NAME = "svg"; + private static final String STYLE_ELEMENT_NAME = "style"; + private static final String DEFS_ELEMENT_NAME = "defs"; + private static final String GROUP_ELEMENT_NAME = "g"; + private static final String POLYLINE_ELEMENT_NAME = "polyline"; + private static final String PATH_ELEMENT_NAME = "path"; + private static final String CIRCLE_ELEMENT_NAME = "circle"; + private static final String TEXT_ELEMENT_NAME = "text"; + private static final String TSPAN_ELEMENT_NAME = "tspan"; + private static final String ID_ATTRIBUTE = "id"; + private static final String WIDTH_ATTRIBUTE = "width"; + private static final String HEIGHT_ATTRIBUTE = "height"; + private static final String VIEW_BOX_ATTRIBUTE = "viewBox"; + private static final String DESCRIPTION_ATTRIBUTE = "desc"; + private static final String CLASS_ATTRIBUTE = "class"; + private static final String TRANSFORM_ATTRIBUTE = "transform"; + private static final String CIRCLE_RADIUS_ATTRIBUTE = "r"; + private static final String PATH_D_ATTRIBUTE = "d"; + private static final String X_ATTRIBUTE = "x"; + private static final String Y_ATTRIBUTE = "y"; + private static final String DY_ATTRIBUTE = "dy"; + private static final String POINTS_ATTRIBUTE = "points"; + private static final String FILTER_ELEMENT_NAME = "filter"; + private static final String FE_FLOOD_ELEMENT_NAME = "feFlood"; + private static final String FE_COMPOSITE_ELEMENT_NAME = "feComposite"; + private static final String FE_IN_ATTRIBUTE = "in"; + private static final String FE_OPERATOR_ATTRIBUTE = "operator"; + public static final String TEXT_BG_FILTER_ID = "textBgFilter"; + + private final SvgParameters svgParameters; + private final StyleProvider styleProvider; + private final LabelProvider labelProvider; + private final EdgeRendering edgeRendering; + + public SvgWriter(SvgParameters svgParameters, StyleProvider styleProvider, LabelProvider labelProvider) { + this.svgParameters = Objects.requireNonNull(svgParameters); + this.styleProvider = Objects.requireNonNull(styleProvider); + this.labelProvider = Objects.requireNonNull(labelProvider); + this.edgeRendering = new DefaultEdgeRendering(); + } + + public void writeSvg(Graph graph, Path svgFile) { + Objects.requireNonNull(svgFile); + Path dir = svgFile.toAbsolutePath().getParent(); + String svgFileName = svgFile.getFileName().toString(); + if (!svgFileName.endsWith(".svg")) { + svgFileName = svgFileName + ".svg"; + } + try (OutputStream svgOs = new BufferedOutputStream(Files.newOutputStream(dir.resolve(svgFileName)))) { + writeSvg(graph, svgOs); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + public void writeSvg(Graph graph, Writer svgWriter) { + try (WriterOutputStream svgOs = new WriterOutputStream(svgWriter, StandardCharsets.UTF_8)) { + writeSvg(graph, svgOs); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + private void writeSvg(Graph graph, OutputStream svgOs) { + Objects.requireNonNull(graph); + Objects.requireNonNull(svgOs); + + // Edge coordinates need to be computed first, based on svg parameters + edgeRendering.run(graph, svgParameters); + + try { + XMLStreamWriter writer = XmlUtil.initializeWriter(true, INDENT, svgOs); + addSvgRoot(graph, writer); + addStyle(writer); + addMetadata(graph, writer); + addDefs(writer); + drawVoltageLevelNodes(graph, writer); + drawBranchEdges(graph, writer); + drawThreeWtEdges(graph, writer); + drawThreeWtNodes(graph, writer); + drawTextEdges(graph, writer); + drawTextNodes(graph, writer); + writer.writeEndDocument(); + } catch (XMLStreamException e) { + throw new UncheckedXmlStreamException(e); + } + } + + private void drawBranchEdges(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.BRANCH_EDGES_CLASS); + for (BranchEdge edge : graph.getBranchEdges()) { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(ID_ATTRIBUTE, getPrefixedId(edge.getDiagramId())); + addStylesIfAny(writer, styleProvider.getEdgeStyleClasses(edge)); + insertName(writer, edge::getName); + + drawHalfEdge(graph, writer, edge, BranchEdge.Side.ONE); + drawHalfEdge(graph, writer, edge, BranchEdge.Side.TWO); + + if (edge.getType().equals(BranchEdge.HVDC_LINE_EDGE)) { + drawConverterStation(writer, edge); + } + + writer.writeEndElement(); + } + writer.writeEndElement(); + } + + private void drawConverterStation(XMLStreamWriter writer, BranchEdge edge) throws XMLStreamException { + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + List line1 = edge.getPoints(BranchEdge.Side.ONE); + List line2 = edge.getPoints(BranchEdge.Side.TWO); + List points = new ArrayList<>(2); + double halfWidth = svgParameters.getConverterStationWidth() / 2; + if (line1.size() > 2) { + points.add(line1.get(2).atDistance(halfWidth, line1.get(1))); + points.add(line2.get(2).atDistance(halfWidth, line2.get(1))); + } else { + points.add(line1.get(1).atDistance(halfWidth, line1.get(0))); + points.add(line2.get(1).atDistance(halfWidth, line2.get(0))); + } + String lineFormatted = points.stream() + .map(point -> getFormattedValue(point.getX()) + "," + getFormattedValue(point.getY())) + .collect(Collectors.joining(" ")); + writer.writeAttribute(POINTS_ATTRIBUTE, lineFormatted); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.HVDC_CLASS); + } + + private void drawThreeWtEdges(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + List threeWtEdges = graph.getThreeWtEdges(); + if (threeWtEdges.isEmpty()) { + return; + } + + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.THREE_WT_EDGES_CLASS); + for (ThreeWtEdge edge : threeWtEdges) { + drawThreeWtEdge(graph, writer, edge); + } + writer.writeEndElement(); + } + + private void drawHalfEdge(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side) throws XMLStreamException { + // the half edge is only drawn if visible, but if the edge is a TwoWtEdge, the transformer is still drawn + if (!edge.isVisible(side) && !(edge.getType().equals(BranchEdge.TWO_WT_EDGE))) { + return; + } + writer.writeStartElement(GROUP_ELEMENT_NAME); + addStylesIfAny(writer, styleProvider.getSideEdgeStyleClasses(edge, side)); + if (edge.isVisible(side)) { + if (!graph.isLoop(edge)) { + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.EDGE_PATH_CLASS); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge, side)); + drawBranchEdgeInfo(graph, writer, edge, side, labelProvider.getEdgeInfos(graph, edge, side)); + } else { + writer.writeEmptyElement(PATH_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.EDGE_PATH_CLASS); + writer.writeAttribute(PATH_D_ATTRIBUTE, getLoopPathString(edge, side)); + drawLoopEdgeInfo(writer, edge, side, labelProvider.getEdgeInfos(graph, edge, side)); + } + } + if (edge.getType().equals(BranchEdge.TWO_WT_EDGE)) { + draw2WtWinding(writer, edge.getPoints(side)); + } + writer.writeEndElement(); + } + + private String getPolylinePointsString(BranchEdge edge, BranchEdge.Side side) { + return getPolylinePointsString(edge.getPoints(side)); + } + + private String getPolylinePointsString(ThreeWtEdge edge) { + return getPolylinePointsString(edge.getPoints()); + } + + private String getPolylinePointsString(List points) { + return points.stream() + .map(point -> getFormattedValue(point.getX()) + "," + getFormattedValue(point.getY())) + .collect(Collectors.joining(" ")); + } + + private String getLoopPathString(BranchEdge edge, BranchEdge.Side side) { + Object[] points = edge.getPoints(side).stream().flatMap(p -> Stream.of(p.getX(), p.getY())).toArray(); + return String.format(Locale.US, "M%.2f,%.2f L%.2f,%.2f C%.2f,%.2f %.2f,%.2f %.2f,%.2f", points); + } + + private void drawThreeWtEdge(Graph graph, XMLStreamWriter writer, ThreeWtEdge edge) throws XMLStreamException { + if (!edge.isVisible()) { + return; + } + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(ID_ATTRIBUTE, getPrefixedId(edge.getDiagramId())); + addStylesIfAny(writer, styleProvider.getEdgeStyleClasses(edge)); + insertName(writer, edge::getName); + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.EDGE_PATH_CLASS); + writer.writeAttribute(POINTS_ATTRIBUTE, getPolylinePointsString(edge)); + drawThreeWtEdgeInfo(graph, writer, edge, labelProvider.getEdgeInfos(graph, edge)); + writer.writeEndElement(); + } + + private void drawThreeWtNodes(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + List threeWtNodes = graph.getThreeWtNodesStream().collect(Collectors.toList()); + if (threeWtNodes.isEmpty()) { + return; + } + + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.THREE_WT_NODES_CLASS); + for (ThreeWtNode threeWtNode : threeWtNodes) { + writer.writeStartElement(GROUP_ELEMENT_NAME); + addStylesIfAny(writer, styleProvider.getNodeStyleClasses(threeWtNode)); + List edges = graph.getThreeWtEdgeStream(threeWtNode).collect(Collectors.toList()); + for (ThreeWtEdge edge : edges) { + draw3WtWinding(edge, threeWtNode, writer); + } + writer.writeEndElement(); + } + writer.writeEndElement(); + } + + private void draw3WtWinding(ThreeWtEdge edge, ThreeWtNode threeWtNode, XMLStreamWriter writer) throws XMLStreamException { + List styles = styleProvider.getThreeWtNodeStyle(threeWtNode, edge.getSide()); + styles.add(StyleProvider.WINDING_CLASS); + double radius = svgParameters.getTransformerCircleRadius(); + Point circleCenter = edge.getPoints().get(1).atDistance(radius, threeWtNode.getPosition()); + writer.writeEmptyElement(CIRCLE_ELEMENT_NAME); + addStylesIfAny(writer, styles); + writer.writeAttribute("cx", getFormattedValue(circleCenter.getX())); + writer.writeAttribute("cy", getFormattedValue(circleCenter.getY())); + writer.writeAttribute(CIRCLE_RADIUS_ATTRIBUTE, getFormattedValue(svgParameters.getTransformerCircleRadius())); + } + + private void drawLoopEdgeInfo(XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, List edgeInfos) throws XMLStreamException { + drawEdgeInfo(writer, edgeInfos, edge.getPoints(side).get(1), edge.getEdgeStartAngle(side)); + } + + private void drawBranchEdgeInfo(Graph graph, XMLStreamWriter writer, BranchEdge edge, BranchEdge.Side side, List edgeInfos) throws XMLStreamException { + VoltageLevelNode vlNode = graph.getVoltageLevelNode(edge, side); + BusNode busNode = graph.getBusGraphNode(edge, side); + drawEdgeInfo(writer, edgeInfos, getArrowCenter(vlNode, busNode, edge.getPoints(side)), edge.getEdgeEndAngle(side)); + } + + private void drawThreeWtEdgeInfo(Graph graph, XMLStreamWriter writer, ThreeWtEdge edge, List edgeInfos) throws XMLStreamException { + VoltageLevelNode vlNode = graph.getVoltageLevelNode(edge); + BusNode busNode = graph.getBusGraphNode(edge); + drawEdgeInfo(writer, edgeInfos, getArrowCenter(vlNode, busNode, edge.getPoints()), edge.getEdgeAngle()); + } + + private void drawEdgeInfo(XMLStreamWriter writer, List edgeInfos, Point infoCenter, double edgeAngle) throws XMLStreamException { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.EDGE_INFOS_CLASS); + writer.writeAttribute(TRANSFORM_ATTRIBUTE, getTranslateString(infoCenter)); + for (EdgeInfo info : edgeInfos) { + writer.writeStartElement(GROUP_ELEMENT_NAME); + addStylesIfAny(writer, styleProvider.getEdgeInfoStyles(info)); + drawInAndOutArrows(writer, edgeAngle); + Optional externalLabel = info.getExternalLabel(); + if (externalLabel.isPresent()) { + drawLabel(writer, externalLabel.get(), edgeAngle, true); + } + Optional internalLabel = info.getInternalLabel(); + if (internalLabel.isPresent()) { + drawLabel(writer, internalLabel.get(), edgeAngle, false); + } + writer.writeEndElement(); + } + writer.writeEndElement(); + } + + private void drawInAndOutArrows(XMLStreamWriter writer, double edgeAngle) throws XMLStreamException { + double rotationAngle = edgeAngle + (edgeAngle > Math.PI / 2 ? -3 * Math.PI / 2 : Math.PI / 2); + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(TRANSFORM_ATTRIBUTE, getRotateString(rotationAngle)); + writer.writeEmptyElement(PATH_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.ARROW_IN_CLASS); + writer.writeAttribute(TRANSFORM_ATTRIBUTE, getScaleString(svgParameters.getArrowHeight())); + writer.writeAttribute(PATH_D_ATTRIBUTE, labelProvider.getArrowPathDIn()); + writer.writeEmptyElement(PATH_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.ARROW_OUT_CLASS); + writer.writeAttribute(TRANSFORM_ATTRIBUTE, getScaleString(svgParameters.getArrowHeight())); + writer.writeAttribute(PATH_D_ATTRIBUTE, labelProvider.getArrowPathDOut()); + writer.writeEndElement(); + } + + private void drawLabel(XMLStreamWriter writer, String label, double edgeAngle, boolean externalLabel) throws XMLStreamException { + if (svgParameters.isEdgeInfoAlongEdge()) { + drawLabelAlongEdge(writer, label, edgeAngle, externalLabel); + } else { + drawLabelPerpendicularToEdge(writer, label, edgeAngle, externalLabel); + } + } + + private void drawLabelAlongEdge(XMLStreamWriter writer, String label, double edgeAngle, boolean externalLabel) throws XMLStreamException { + boolean textFlipped = Math.cos(edgeAngle) < 0; + String style = externalLabel == textFlipped ? "text-anchor:end" : null; + double textAngle = textFlipped ? edgeAngle - Math.PI : edgeAngle; + double shift = svgParameters.getArrowLabelShift() * (externalLabel ? 1 : -1); + drawLabel(writer, label, textFlipped ? -shift : shift, style, textAngle, X_ATTRIBUTE); + } + + private void drawLabelPerpendicularToEdge(XMLStreamWriter writer, String label, double edgeAngle, boolean externalLabel) throws XMLStreamException { + boolean textFlipped = Math.sin(edgeAngle) > 0; + double textAngle = textFlipped ? -Math.PI / 2 + edgeAngle : Math.PI / 2 + edgeAngle; + double shift = svgParameters.getArrowLabelShift(); + double shiftAdjusted = externalLabel == textFlipped ? shift * 1.15 : -shift; // to have a nice compact rendering, shift needs to be adjusted, because of dominant-baseline:middle (text is expected to be a number, hence not below the line) + drawLabel(writer, label, shiftAdjusted, "text-anchor:middle", textAngle, Y_ATTRIBUTE); + } + + private void drawLabel(XMLStreamWriter writer, String label, double shift, String style, double textAngle, String shiftAxis) throws XMLStreamException { + writer.writeStartElement(TEXT_ELEMENT_NAME); + writer.writeAttribute(TRANSFORM_ATTRIBUTE, getRotateString(textAngle)); + writer.writeAttribute(shiftAxis, getFormattedValue(shift)); + if (style != null) { + writer.writeAttribute(STYLE_ELEMENT_NAME, style); + } + writer.writeCharacters(label); + writer.writeEndElement(); + } + + private String getRotateString(double angleRad) { + return "rotate(" + getFormattedValue(Math.toDegrees(angleRad)) + ")"; + } + + private String getScaleString(double scale) { + return "scale(" + getFormattedValue(scale) + ")"; + } + + private Point getArrowCenter(VoltageLevelNode vlNode, BusNode busNode, List line) { + double shift = svgParameters.getArrowShift(); + if (line.size() == 2) { // straight line; in case of a forking line it is the middle point which is the starting point + double nodeOuterRadius = getVoltageLevelCircleRadius(vlNode); + double busAnnulusOuterRadius = getBusAnnulusOuterRadius(busNode, vlNode, svgParameters); + shift += nodeOuterRadius - busAnnulusOuterRadius; + } + return line.get(line.size() - 2).atDistance(shift, line.get(line.size() - 1)); + } + + private void draw2WtWinding(XMLStreamWriter writer, List half) throws XMLStreamException { + writer.writeEmptyElement(CIRCLE_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.WINDING_CLASS); + Point point1 = half.get(half.size() - 1); // point near 2wt + Point point2 = half.get(half.size() - 2); // point near voltage level, or control point for loops + double radius = svgParameters.getTransformerCircleRadius(); + Point circleCenter = point1.atDistance(-radius, point2); + writer.writeAttribute("cx", getFormattedValue(circleCenter.getX())); + writer.writeAttribute("cy", getFormattedValue(circleCenter.getY())); + writer.writeAttribute(CIRCLE_RADIUS_ATTRIBUTE, getFormattedValue(radius)); + } + + private void drawVoltageLevelNodes(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.VOLTAGE_LEVEL_NODES_CLASS); + for (VoltageLevelNode vlNode : graph.getVoltageLevelNodesStream().filter(VoltageLevelNode::isVisible).collect(Collectors.toList())) { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(TRANSFORM_ATTRIBUTE, getTranslateString(vlNode)); + drawNode(graph, writer, vlNode); + writer.writeEndElement(); + } + writer.writeEndElement(); + } + + private void drawTextNodes(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.TEXT_NODES_CLASS); + for (Pair nodePair : graph.getVoltageLevelTextPairs()) { + writeTextNode(writer, nodePair.getSecond(), labelProvider.getVoltageLevelDescription(nodePair.getFirst())); + } + writer.writeEndElement(); + } + + private String getTranslateString(Node node) { + return getTranslateString(node.getPosition()); + } + + private String getTranslateString(Point point) { + return getTranslateString(point.getX(), point.getY()); + } + + private String getTranslateString(double x, double y) { + return "translate(" + getFormattedValue(x) + "," + getFormattedValue(y) + ")"; + } + + private void writeTextNode(XMLStreamWriter writer, TextNode textNode, List content) throws XMLStreamException { + if (textNode == null) { + return; + } + writer.writeStartElement(TEXT_ELEMENT_NAME); + if (svgParameters.isTextNodeBackground()) { + writer.writeAttribute(FILTER_ELEMENT_NAME, "url(#" + TEXT_BG_FILTER_ID + ")"); + } + writer.writeAttribute(Y_ATTRIBUTE, getFormattedValue(textNode.getY())); + if (content.size() == 1) { + writer.writeAttribute(X_ATTRIBUTE, getFormattedValue(textNode.getX())); + writer.writeCharacters(content.get(0)); + } else { + for (int i = 0; i < content.size(); i++) { + String line = content.get(i); + writer.writeStartElement(TSPAN_ELEMENT_NAME); + writer.writeAttribute(X_ATTRIBUTE, getFormattedValue(textNode.getX())); + if (i > 0) { + writer.writeAttribute(DY_ATTRIBUTE, "1.1em"); + } + writer.writeCharacters(line); + writer.writeEndElement(); + } + } + writer.writeEndElement(); + } + + private void drawNode(Graph graph, XMLStreamWriter writer, VoltageLevelNode vlNode) throws XMLStreamException { + writer.writeAttribute(ID_ATTRIBUTE, getPrefixedId(vlNode.getDiagramId())); + addStylesIfAny(writer, styleProvider.getNodeStyleClasses(vlNode)); + insertName(writer, vlNode::getName); + + double nodeOuterRadius = getVoltageLevelCircleRadius(vlNode); + + if (vlNode.hasUnknownBusNode()) { + writer.writeEmptyElement(CIRCLE_ELEMENT_NAME); + addStylesIfAny(writer, styleProvider.getNodeStyleClasses(BusNode.UNKNOWN)); + writer.writeAttribute(CIRCLE_RADIUS_ATTRIBUTE, getFormattedValue(nodeOuterRadius + svgParameters.getUnknownBusNodeExtraRadius())); + } + + List traversingBusEdges = new ArrayList<>(); + + for (BusNode busNode : vlNode.getBusNodes()) { + double busInnerRadius = getBusAnnulusInnerRadius(busNode, vlNode, svgParameters); + double busOuterRadius = getBusAnnulusOuterRadius(busNode, vlNode, svgParameters); + if (busInnerRadius == 0) { + writer.writeEmptyElement(CIRCLE_ELEMENT_NAME); + writer.writeAttribute(CIRCLE_RADIUS_ATTRIBUTE, getFormattedValue(busOuterRadius)); + } else { + writer.writeEmptyElement(PATH_ELEMENT_NAME); + writer.writeAttribute(PATH_D_ATTRIBUTE, getFragmentedAnnulusPath(busInnerRadius, busOuterRadius, traversingBusEdges, graph, vlNode, busNode)); + } + writer.writeAttribute(ID_ATTRIBUTE, getPrefixedId(busNode.getDiagramId())); + + List nodeStyleClasses = styleProvider.getNodeStyleClasses(busNode); + nodeStyleClasses.add(StyleProvider.BUSNODE_CLASS); + addStylesIfAny(writer, nodeStyleClasses); + + traversingBusEdges.addAll(graph.getBusEdges(busNode)); + } + } + + private String getFragmentedAnnulusPath(double innerRadius, double outerRadius, List traversingBusEdges, Graph graph, VoltageLevelNode vlNode, BusNode busNode) { + if (traversingBusEdges.isEmpty()) { + String path = "M" + getCirclePath(outerRadius, 0, Math.PI, true) + + " M" + getCirclePath(outerRadius, Math.PI, 0, true); + if (innerRadius > 0) { // going the other way around (counter-clockwise) to subtract the inner circle + path += "M" + getCirclePath(innerRadius, 0, Math.PI, false) + + "M" + getCirclePath(innerRadius, Math.PI, 0, false); + } + return path; + } + + List angles = createSortedTraversingAnglesList(traversingBusEdges, graph, vlNode, busNode); + + // adding first angle to close the circle annulus, and adding 360° to keep the list ordered + angles.add(angles.get(0) + 2 * Math.PI); + + double halfWidth = svgParameters.getNodeHollowWidth() / 2; + double deltaAngle0 = halfWidth / outerRadius; + double deltaAngle1 = halfWidth / innerRadius; + + StringBuilder path = new StringBuilder(); + for (int i = 0; i < angles.size() - 1; i++) { + double outerArcStart = angles.get(i) + deltaAngle0; + double outerArcEnd = angles.get(i + 1) - deltaAngle0; + double innerArcStart = angles.get(i + 1) - deltaAngle1; + double innerArcEnd = angles.get(i) + deltaAngle1; + if (outerArcEnd > outerArcStart && innerArcEnd < innerArcStart) { + path.append("M").append(getCirclePath(outerRadius, outerArcStart, outerArcEnd, true)) + .append(" L").append(getCirclePath(innerRadius, innerArcStart, innerArcEnd, false)) + .append(" Z "); + } + } + + return path.toString(); + } + + private List createSortedTraversingAnglesList(List traversingBusEdges, Graph graph, VoltageLevelNode vlNode, BusNode busNode) { + List angles = new ArrayList<>(traversingBusEdges.size()); + for (Edge edge : traversingBusEdges) { + Node node1 = graph.getNode1(edge); + Node node2 = graph.getNode2(edge); + if (node1 == node2) { + // For looping edges we need to consider the two angles + if (isBusNodeDrawn(graph.getBusGraphNode1(edge), busNode)) { + angles.add(getEdgeStartAngle(edge, BranchEdge.Side.ONE)); + } + if (isBusNodeDrawn(graph.getBusGraphNode2(edge), busNode)) { + angles.add(getEdgeStartAngle(edge, BranchEdge.Side.TWO)); + } + } else { + angles.add(getEdgeStartAngle(edge, node1 == vlNode ? BranchEdge.Side.ONE : BranchEdge.Side.TWO)); + } + } + Collections.sort(angles); + + return angles; + } + + private boolean isBusNodeDrawn(Node busGraphNode, BusNode busNodeCurrentlyDrawn) { + if (busGraphNode instanceof BusNode) { + return ((BusNode) busGraphNode).getIndex() < busNodeCurrentlyDrawn.getIndex(); + } + return true; + } + + private double getEdgeStartAngle(Edge edge, BranchEdge.Side side) { + if (edge instanceof ThreeWtEdge) { + return ((ThreeWtEdge) edge).getEdgeAngle(); + } else if (edge instanceof BranchEdge) { + return ((BranchEdge) edge).getEdgeStartAngle(side); + } + return 0; + } + + private String getCirclePath(double radius, double angleStart, double angleEnd, boolean clockWise) { + double arcAngle = angleEnd - angleStart; + double xStart = radius * Math.cos(angleStart); + double yStart = radius * Math.sin(angleStart); + double xEnd = radius * Math.cos(angleEnd); + double yEnd = radius * Math.sin(angleEnd); + int largeArc = Math.abs(arcAngle) > Math.PI ? 1 : 0; + return String.format(Locale.US, "%.3f,%.3f A%.3f,%.3f %.3f %d %d %.3f,%.3f", + xStart, yStart, radius, radius, Math.toDegrees(arcAngle), largeArc, clockWise ? 1 : 0, xEnd, yEnd); + } + + private void insertName(XMLStreamWriter writer, Supplier> getName) throws XMLStreamException { + if (svgParameters.isInsertNameDesc()) { + Optional nodeName = getName.get(); + if (nodeName.isPresent()) { + writer.writeStartElement(DESCRIPTION_ATTRIBUTE); + writer.writeCharacters(nodeName.get()); + writer.writeEndElement(); + } + } + } + + private void drawTextEdges(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement(GROUP_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.TEXT_EDGES_CLASS); + for (TextEdge edge : graph.getTextEdges()) { + drawTextEdge(writer, edge, graph.getVoltageLevelNode(edge)); + } + writer.writeEndElement(); + } + + private void drawTextEdge(XMLStreamWriter writer, TextEdge edge, VoltageLevelNode vlNode) throws XMLStreamException { + writer.writeEmptyElement(POLYLINE_ELEMENT_NAME); + writer.writeAttribute(ID_ATTRIBUTE, getPrefixedId(edge.getDiagramId())); + addStylesIfAny(writer, styleProvider.getEdgeStyleClasses(edge)); + List points = edge.getPoints(); + shiftEdgeStart(points, vlNode); + String lineFormatted1 = points.stream() + .map(point -> getFormattedValue(point.getX()) + "," + getFormattedValue(point.getY())) + .collect(Collectors.joining(" ")); + writer.writeAttribute(POINTS_ATTRIBUTE, lineFormatted1); + } + + private void addStylesIfAny(XMLStreamWriter writer, List edgeStyleClasses) throws XMLStreamException { + if (!edgeStyleClasses.isEmpty()) { + writer.writeAttribute(CLASS_ATTRIBUTE, String.join(" ", edgeStyleClasses)); + } + } + + private void shiftEdgeStart(List points, VoltageLevelNode vlNode) { + double circleRadius = getVoltageLevelCircleRadius(vlNode); + points.set(0, points.get(0).atDistance(circleRadius, points.get(1))); + } + + private void addSvgRoot(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement("", SVG_ROOT_ELEMENT_NAME, NAMESPACE_URI); + if (svgParameters.isSvgWidthAndHeightAdded()) { + double[] diagramDimension = getDiagramDimensions(graph); + writer.writeAttribute(WIDTH_ATTRIBUTE, getFormattedValue(diagramDimension[0])); + writer.writeAttribute(HEIGHT_ATTRIBUTE, getFormattedValue(diagramDimension[1])); + } + writer.writeAttribute(VIEW_BOX_ATTRIBUTE, getViewBoxValue(graph)); + writer.writeDefaultNamespace(NAMESPACE_URI); + } + + private double[] getDiagramDimensions(Graph graph) { + double width = getDiagramWidth(graph); + double height = getDiagramHeight(graph); + double scale; + switch (svgParameters.getSizeConstraint()) { + case FIXED_WIDTH: + scale = svgParameters.getFixedWidth() / width; + break; + case FIXED_HEIGHT: + scale = svgParameters.getFixedHeight() / height; + break; + case FIXED_SCALE: + scale = svgParameters.getFixedScale(); + break; + default: + scale = 1; + break; + } + return new double[] {width * scale, height * scale}; + } + + private double getDiagramHeight(Graph graph) { + Padding diagramPadding = svgParameters.getDiagramPadding(); + return graph.getHeight() + diagramPadding.getTop() + diagramPadding.getBottom(); + } + + private double getDiagramWidth(Graph graph) { + Padding diagramPadding = svgParameters.getDiagramPadding(); + return graph.getWidth() + diagramPadding.getLeft() + diagramPadding.getRight(); + } + + private String getViewBoxValue(Graph graph) { + Padding diagramPadding = svgParameters.getDiagramPadding(); + return getFormattedValue(graph.getMinX() - diagramPadding.getLeft()) + " " + + getFormattedValue(graph.getMinY() - diagramPadding.getTop()) + " " + + getFormattedValue(getDiagramWidth(graph)) + " " + getFormattedValue(getDiagramHeight(graph)); + } + + private void addStyle(XMLStreamWriter writer) throws XMLStreamException { + switch (svgParameters.getCssLocation()) { + case INSERTED_IN_SVG: + writer.writeStartElement(STYLE_ELEMENT_NAME); + writer.writeCData(styleProvider.getStyleDefs()); + writer.writeEndElement(); + break; + case EXTERNAL_IMPORTED: + writer.writeStartElement(STYLE_ELEMENT_NAME); + for (String cssFilename : styleProvider.getCssFilenames()) { + writer.writeCharacters("@import url(" + cssFilename + ");"); + } + writer.writeEndElement(); + break; + case EXTERNAL_NO_IMPORT: + // nothing to do + break; + } + } + + private void addMetadata(Graph graph, XMLStreamWriter writer) throws XMLStreamException { + GraphMetadata metadata = new GraphMetadata(); + + graph.getBusNodesStream().forEach(bn -> metadata.addBusNode(bn, this::getPrefixedId)); + graph.getNodesStream().forEach(bn -> metadata.addNode(bn, this::getPrefixedId)); + graph.getEdgesStream().forEach(bn -> metadata.addEdge(bn, this::getPrefixedId)); + + metadata.writeXml(writer); + } + + private void addDefs(XMLStreamWriter writer) throws XMLStreamException { + if (svgParameters.isTextNodeBackground()) { + writer.writeStartElement(DEFS_ELEMENT_NAME); + writer.writeStartElement(FILTER_ELEMENT_NAME); + writer.writeAttribute(ID_ATTRIBUTE, TEXT_BG_FILTER_ID); + writer.writeAttribute(X_ATTRIBUTE, String.valueOf(0)); + writer.writeAttribute(Y_ATTRIBUTE, String.valueOf(0)); + writer.writeAttribute(WIDTH_ATTRIBUTE, String.valueOf(1)); + writer.writeAttribute(HEIGHT_ATTRIBUTE, String.valueOf(1)); + writer.writeEmptyElement(FE_FLOOD_ELEMENT_NAME); + writer.writeAttribute(CLASS_ATTRIBUTE, StyleProvider.TEXT_BACKGROUND_CLASS); + writer.writeEmptyElement(FE_COMPOSITE_ELEMENT_NAME); + writer.writeAttribute(FE_IN_ATTRIBUTE, "SourceGraphic"); + writer.writeAttribute(FE_OPERATOR_ATTRIBUTE, "over"); + writer.writeEndElement(); + writer.writeEndElement(); + } + } + + private static String getFormattedValue(double value) { + return String.format(Locale.US, "%.2f", value); + } + + protected double getVoltageLevelCircleRadius(VoltageLevelNode vlNode) { + return getVoltageLevelCircleRadius(vlNode, svgParameters); + } + + protected static double getVoltageLevelCircleRadius(VoltageLevelNode vlNode, SvgParameters svgParameters) { + if (vlNode.isFictitious()) { + return svgParameters.getFictitiousVoltageLevelCircleRadius(); + } + int nbBuses = vlNode.getBusNodes().size(); + return Math.min(Math.max(nbBuses, 1), 2) * svgParameters.getVoltageLevelCircleRadius(); + } + + public static double getBusAnnulusInnerRadius(BusNode node, VoltageLevelNode vlNode, SvgParameters svgParameters) { + if (node.getIndex() == 0) { + return 0; + } + int nbNeighbours = node.getNbNeighbouringBusNodes(); + double unitaryRadius = SvgWriter.getVoltageLevelCircleRadius(vlNode, svgParameters) / (nbNeighbours + 1); + return node.getIndex() * unitaryRadius + svgParameters.getInterAnnulusSpace() / 2; + } + + public static double getBusAnnulusOuterRadius(BusNode node, VoltageLevelNode vlNode, SvgParameters svgParameters) { + int nbNeighbours = node.getNbNeighbouringBusNodes(); + double unitaryRadius = SvgWriter.getVoltageLevelCircleRadius(vlNode, svgParameters) / (nbNeighbours + 1); + return (node.getIndex() + 1) * unitaryRadius - svgParameters.getInterAnnulusSpace() / 2; + } + + public String getPrefixedId(String id) { + return svgParameters.getSvgPrefix() + id; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java new file mode 100644 index 000000000..f188a21c8 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/AbstractVoltageStyleProvider.java @@ -0,0 +1,126 @@ +/** + * 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.iidm; + +import com.powsybl.commons.config.BaseVoltagesConfig; +import com.powsybl.iidm.network.Branch; +import com.powsybl.iidm.network.Bus; +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.Terminal; +import com.powsybl.nad.model.*; +import com.powsybl.nad.svg.AbstractStyleProvider; +import com.powsybl.nad.svg.StyleProvider; +import com.powsybl.nad.utils.iidm.IidmUtils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +/** + * @author Florian Dupuy + */ +public abstract class AbstractVoltageStyleProvider extends AbstractStyleProvider { + + protected final Network network; + + protected AbstractVoltageStyleProvider(Network network) { + this.network = network; + } + + protected AbstractVoltageStyleProvider(Network network, BaseVoltagesConfig baseVoltageStyle) { + super(baseVoltageStyle); + this.network = network; + } + + @Override + public List getNodeStyleClasses(BusNode busNode) { + if (busNode == BusNode.UNKNOWN) { + return Collections.singletonList(UNKNOWN_BUSNODE_CLASS); + } + List styles = new ArrayList<>(); + Bus b = network.getBusView().getBus(busNode.getEquipmentId()); + if (b != null) { + if (b.getV() > b.getVoltageLevel().getHighVoltageLimit()) { + styles.add(StyleProvider.VL_OVERVOLTAGE_CLASS); + } else if (b.getV() < b.getVoltageLevel().getLowVoltageLimit()) { + styles.add(StyleProvider.VL_UNDERVOLTAGE_CLASS); + } + } + return styles; + } + + @Override + public List getEdgeStyleClasses(Edge edge) { + List styleClasses = new ArrayList<>(super.getEdgeStyleClasses(edge)); + if (edge instanceof BranchEdge && !((BranchEdge) edge).getType().equals(BranchEdge.HVDC_LINE_EDGE)) { + Branch branch = network.getBranch(edge.getEquipmentId()); + if (branch.isOverloaded()) { + styleClasses.add(StyleProvider.LINE_OVERLOADED_CLASS); + } + } + return styleClasses; + } + + @Override + protected Optional getBaseVoltageStyle(ThreeWtNode threeWtNode, ThreeWtEdge.Side side) { + Terminal terminal = network.getThreeWindingsTransformer(threeWtNode.getEquipmentId()) + .getTerminal(IidmUtils.getIidmSideFromThreeWtEdgeSide(side)); + return getBaseVoltageStyle(terminal); + } + + @Override + protected boolean isDisconnected(Edge edge) { + if (edge instanceof ThreeWtEdge) { + ThreeWtEdge twtEdge = (ThreeWtEdge) edge; + Terminal terminal = network.getThreeWindingsTransformer(twtEdge.getEquipmentId()) + .getTerminal(IidmUtils.getIidmSideFromThreeWtEdgeSide(twtEdge.getSide())); + return terminal == null || !terminal.isConnected(); + } + if (edge instanceof BranchEdge) { + return isDisconnected((BranchEdge) edge, BranchEdge.Side.ONE) && isDisconnected((BranchEdge) edge, BranchEdge.Side.TWO); + } + return false; + } + + @Override + protected boolean isDisconnected(BranchEdge edge, BranchEdge.Side side) { + Terminal terminal = IidmUtils.getTerminalFromEdge(network, edge, side); + return terminal == null || !terminal.isConnected(); + } + + @Override + protected boolean isDisconnected(ThreeWtNode threeWtNode, ThreeWtEdge.Side side) { + Terminal terminal = network.getThreeWindingsTransformer(threeWtNode.getEquipmentId()) + .getTerminal(IidmUtils.getIidmSideFromThreeWtEdgeSide(side)); + return terminal == null || !terminal.isConnected(); + } + + @Override + protected Optional getBaseVoltageStyle(Edge edge) { + if (edge instanceof BranchEdge) { + String branchType = ((BranchEdge) edge).getType(); + if (branchType.equals(BranchEdge.HVDC_LINE_EDGE)) { + return Optional.of(HVDC_EDGE_CLASS); + } + } else if (edge instanceof ThreeWtEdge) { + Terminal terminal = network.getThreeWindingsTransformer(edge.getEquipmentId()) + .getTerminal(IidmUtils.getIidmSideFromThreeWtEdgeSide(((ThreeWtEdge) edge).getSide())); + return getBaseVoltageStyle(terminal); + } + + return Optional.empty(); + } + + @Override + protected Optional getBaseVoltageStyle(BranchEdge edge, BranchEdge.Side side) { + Terminal terminal = IidmUtils.getTerminalFromEdge(network, edge, side); + return getBaseVoltageStyle(terminal); + } + + protected abstract Optional getBaseVoltageStyle(Terminal terminal); +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/DefaultLabelProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/DefaultLabelProvider.java new file mode 100644 index 000000000..bc1038726 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/DefaultLabelProvider.java @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg.iidm; + +import com.powsybl.commons.PowsyblException; +import com.powsybl.iidm.network.*; +import com.powsybl.nad.svg.SvgParameters; +import com.powsybl.nad.utils.iidm.IidmUtils; +import com.powsybl.nad.model.*; +import com.powsybl.nad.svg.EdgeInfo; +import com.powsybl.nad.svg.LabelProvider; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * @author Florian Dupuy + */ +public class DefaultLabelProvider implements LabelProvider { + private final Network network; + private final SvgParameters svgParameters; + + public DefaultLabelProvider(Network network, SvgParameters svgParameters) { + this.network = network; + this.svgParameters = svgParameters; + } + + @Override + public List getEdgeInfos(Graph graph, BranchEdge edge, BranchEdge.Side side) { + Terminal terminal = IidmUtils.getTerminalFromEdge(network, edge, side); + return getEdgeInfos(terminal); + } + + @Override + public List getEdgeInfos(Graph graph, ThreeWtEdge edge) { + ThreeWindingsTransformer transformer = network.getThreeWindingsTransformer(edge.getEquipmentId()); + if (transformer == null) { + throw new PowsyblException("Unknown three windings transformer '" + edge.getEquipmentId() + "'"); + } + Terminal terminal = transformer.getTerminal(IidmUtils.getIidmSideFromThreeWtEdgeSide(edge.getSide())); + return getEdgeInfos(terminal); + } + + private List getEdgeInfos(Terminal terminal) { + if (terminal == null) { + return Collections.emptyList(); + } + return Arrays.asList(new EdgeInfo(EdgeInfo.ACTIVE_POWER, terminal.getP()), + new EdgeInfo(EdgeInfo.REACTIVE_POWER, terminal.getQ())); + } + + @Override + public List getVoltageLevelDescription(VoltageLevelNode voltageLevelNode) { + VoltageLevel vl = network.getVoltageLevel(voltageLevelNode.getEquipmentId()); + List description = new ArrayList<>(); + description.add(svgParameters.isIdDisplayed() ? vl.getId() : vl.getNameOrId()); + if (svgParameters.isSubstationDescriptionDisplayed()) { + vl.getSubstation() + .map(s -> svgParameters.isIdDisplayed() ? s.getId() : s.getNameOrId()) + .ifPresent(description::add); + } + return description; + } + + @Override + public String getArrowPathDIn() { + return "M-1 -1 H1 L0 1z"; + } + + @Override + public String getArrowPathDOut() { + return "M-1 1 H1 L0 -1z"; + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/NominalVoltageStyleProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/NominalVoltageStyleProvider.java new file mode 100644 index 000000000..f1d00d650 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/NominalVoltageStyleProvider.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg.iidm; + +import com.powsybl.commons.config.BaseVoltagesConfig; +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.Terminal; +import com.powsybl.nad.model.Node; +import com.powsybl.nad.model.VoltageLevelNode; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +/** + * @author Florian Dupuy + */ +public class NominalVoltageStyleProvider extends AbstractVoltageStyleProvider { + + public NominalVoltageStyleProvider(Network network) { + super(network); + } + + public NominalVoltageStyleProvider(Network network, BaseVoltagesConfig baseVoltageStyle) { + super(network, baseVoltageStyle); + } + + @Override + public List getCssFilenames() { + return Collections.singletonList("nominalStyle.css"); + } + + @Override + public List getNodeStyleClasses(Node node) { + List styles = new ArrayList<>(); + if (node instanceof VoltageLevelNode) { + double nominalV = network.getVoltageLevel(node.getEquipmentId()).getNominalV(); + getBaseVoltageStyle(nominalV).ifPresent(styles::add); + } + return styles; + } + + @Override + protected Optional getBaseVoltageStyle(Terminal terminal) { + if (terminal == null) { + return Optional.empty(); + } + return getBaseVoltageStyle(terminal.getVoltageLevel().getNominalV()); + } +} diff --git a/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/TopologicalStyleProvider.java b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/TopologicalStyleProvider.java new file mode 100644 index 000000000..f404daa83 --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/TopologicalStyleProvider.java @@ -0,0 +1,106 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg.iidm; + +import com.powsybl.commons.config.BaseVoltagesConfig; +import com.powsybl.iidm.network.*; +import com.powsybl.nad.model.BusNode; +import com.powsybl.nad.model.Node; +import com.powsybl.nad.utils.iidm.IidmUtils; + +import java.util.*; + +/** + * @author Florian Dupuy + */ +public class TopologicalStyleProvider extends AbstractVoltageStyleProvider { + + private final Map styleMap = new HashMap<>(); + private final Map baseVoltagesCounter = new HashMap<>(); + + public TopologicalStyleProvider(Network network) { + super(network); + } + + public TopologicalStyleProvider(Network network, BaseVoltagesConfig baseVoltageStyle) { + super(network, baseVoltageStyle); + } + + @Override + public List getCssFilenames() { + return Collections.singletonList("topologicalStyle.css"); + } + + @Override + public List getNodeStyleClasses(Node node) { + return Collections.emptyList(); + } + + @Override + public List getNodeStyleClasses(BusNode busNode) { + List styles = new ArrayList<>(super.getNodeStyleClasses(busNode)); + Bus b = network.getBusView().getBus(busNode.getEquipmentId()); + getNodeTopologicalStyle(b).ifPresent(styles::add); + return styles; + } + + private Optional getNodeTopologicalStyle(Bus b) { + if (b == null) { + return Optional.empty(); + } + if (styleMap.containsKey(b.getId())) { + return Optional.ofNullable(styleMap.get(b.getId())); + } + return getBaseVoltageStyle(b.getVoltageLevel().getNominalV()) + .map(baseVoltageStyle -> fillStyleMap(baseVoltageStyle, b)); + } + + private String fillStyleMap(String style, Bus bus) { + Collection connectedBuses = getConnectedBuses(bus); + String topologicalStyle = createNewTopologicalStyle(style); + connectedBuses.forEach(b -> styleMap.put(b.getId(), topologicalStyle)); + return topologicalStyle; + } + + private Collection getConnectedBuses(Bus bus) { + Set visitedBuses = new HashSet<>(); + findConnectedBuses(bus, visitedBuses); + return visitedBuses; + } + + private String createNewTopologicalStyle(String style) { + Integer baseVoltageIndex = baseVoltagesCounter.compute(style, (k, v) -> v == null ? 0 : v + 1); + return style + "-" + baseVoltageIndex; + } + + private void findConnectedBuses(Bus bus, Set visitedBus) { + if (visitedBus.contains(bus)) { + return; + } + visitedBus.add(bus); + bus.visitConnectedEquipments(new DefaultTopologyVisitor() { + @Override + public void visitLine(Line line, Branch.Side side) { + Terminal t = line.getTerminal(IidmUtils.getOpposite(side)); + Bus otherBus = t.getBusView().getBus(); + if (otherBus != null && !visitedBus.contains(otherBus)) { + findConnectedBuses(otherBus, visitedBus); + } + } + }); + } + + @Override + protected Optional getBaseVoltageStyle(Terminal terminal) { + if (terminal == null) { + return Optional.empty(); + } + return terminal.isConnected() + ? getNodeTopologicalStyle(terminal.getBusView().getBus()) + : getNodeTopologicalStyle(terminal.getBusView().getConnectableBus()); + } +} 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 new file mode 100644 index 000000000..665d7b35c --- /dev/null +++ b/network-area-diagram/src/main/java/com/powsybl/nad/utils/iidm/IidmUtils.java @@ -0,0 +1,70 @@ +package com.powsybl.nad.utils.iidm; + +import com.powsybl.iidm.network.*; +import com.powsybl.nad.model.BranchEdge; +import com.powsybl.nad.model.ThreeWtEdge; + +import java.util.Objects; + +public final class IidmUtils { + + private IidmUtils() { + } + + public static Terminal getTerminalFromEdge(Network network, BranchEdge edge, BranchEdge.Side side) { + if (!edge.getType().equals(BranchEdge.HVDC_LINE_EDGE)) { + Branch branch = network.getBranch(edge.getEquipmentId()); + return branch.getTerminal(IidmUtils.getIidmSideFromBranchEdgeSide(side)); + } else { + HvdcLine line = network.getHvdcLine(edge.getEquipmentId()); + return line.getConverterStation(IidmUtils.getIidmHvdcSideFromBranchEdgeSide(side)).getTerminal(); + } + } + + public static ThreeWindingsTransformer.Leg get3wtLeg(ThreeWindingsTransformer twt, ThreeWindingsTransformer.Side side) { + if (side == ThreeWindingsTransformer.Side.ONE) { + return twt.getLeg1(); + } else if (side == ThreeWindingsTransformer.Side.TWO) { + return twt.getLeg2(); + } else { + return twt.getLeg3(); + } + } + + public static Branch.Side getOpposite(Branch.Side side) { + return side == Branch.Side.ONE ? Branch.Side.TWO : Branch.Side.ONE; + } + + public static Branch.Side getIidmSideFromBranchEdgeSide(BranchEdge.Side side) { + return Objects.requireNonNull(side) == BranchEdge.Side.ONE ? Branch.Side.ONE : Branch.Side.TWO; + } + + public static HvdcLine.Side getIidmHvdcSideFromBranchEdgeSide(BranchEdge.Side side) { + return Objects.requireNonNull(side) == BranchEdge.Side.ONE ? HvdcLine.Side.ONE : HvdcLine.Side.TWO; + } + + public static ThreeWindingsTransformer.Side getIidmSideFromThreeWtEdgeSide(ThreeWtEdge.Side side) { + switch (Objects.requireNonNull(side)) { + case ONE: + return ThreeWindingsTransformer.Side.ONE; + case TWO: + return ThreeWindingsTransformer.Side.TWO; + case THREE: + return ThreeWindingsTransformer.Side.THREE; + } + return null; + } + + public static ThreeWtEdge.Side getThreeWtEdgeSideFromIidmSide(ThreeWindingsTransformer.Side side) { + switch (Objects.requireNonNull(side)) { + case ONE: + return ThreeWtEdge.Side.ONE; + case TWO: + return ThreeWtEdge.Side.TWO; + case THREE: + return ThreeWtEdge.Side.THREE; + } + return null; + } + +} diff --git a/network-area-diagram/src/main/resources/nad_V1_0.xsd b/network-area-diagram/src/main/resources/nad_V1_0.xsd new file mode 100644 index 000000000..4fa889a96 --- /dev/null +++ b/network-area-diagram/src/main/resources/nad_V1_0.xsd @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/network-area-diagram/src/main/resources/nominalStyle.css b/network-area-diagram/src/main/resources/nominalStyle.css new file mode 100644 index 000000000..21109c4d9 --- /dev/null +++ b/network-area-diagram/src/main/resources/nominalStyle.css @@ -0,0 +1,41 @@ +.nad-branch-edges .nad-edge-path, .nad-3wt-edges .nad-edge-path {stroke: var(--nad-vl-color, lightgrey); stroke-width: 5; fill: none} +.nad-branch-edges .nad-winding, .nad-3wt-nodes .nad-winding {stroke: var(--nad-vl-color, lightgrey); stroke-width: 5; fill: none} +.nad-text-edges {stroke: black; stroke-width: 2; stroke-dasharray: 3,5} +.nad-disconnected .nad-edge-path {stroke-dasharray: 10,10} +.nad-vl-nodes .nad-busnode {fill: var(--nad-vl-color, lightblue)} +.nad-vl-nodes circle.nad-unknown-busnode {stroke: lightgrey; stroke-width: 5; stroke-dasharray: 5,5; fill: none} +.nad-hvdc-edge polyline.nad-hvdc {stroke: grey; stroke-width: 20} +.nad-state-out .nad-arrow-in {visibility: hidden} +.nad-state-in .nad-arrow-out {visibility: hidden} +.nad-active path {stroke: none; fill: #546e7a} +.nad-active {visibility: visible} +.nad-reactive {visibility: hidden} +.nad-reactive path {stroke: none; fill: #0277bd} +.nad-text-background {flood-color: #90a4aeaa} +.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-edge-infos .nad-state-in text {fill: #b71c1c} +.nad-edge-infos .nad-state-out text {fill: #2e7d32} +.nad-vl0to30 {--nad-vl-color: #AFB42B} +.nad-vl30to50 {--nad-vl-color: #EF9A9A} +.nad-vl50to70 {--nad-vl-color: #9C27B0} +.nad-vl70to120 {--nad-vl-color: #E65100} +.nad-vl120to180 {--nad-vl-color: #00ACC1} +.nad-vl180to300 {--nad-vl-color: #2E7D32} +.nad-vl300to500 {--nad-vl-color: #D32F2F} +.nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} +.nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} +.nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} + +@keyframes line-blink { + 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} + 40% {stroke: #FFEB3B; stroke-width: 15} +} +@keyframes node-over-blink { + 0%, 80%, 100% {stroke: white; stroke-width: 0} + 40% {stroke: #ff5722; stroke-width: 15} +} +@keyframes node-under-blink { + 0%, 80%, 100% {stroke: white; stroke-width: 0} + 40% {stroke: #00BCD4; stroke-width: 15} +} diff --git a/network-area-diagram/src/main/resources/topologicalStyle.css b/network-area-diagram/src/main/resources/topologicalStyle.css new file mode 100644 index 000000000..5598aa8a3 --- /dev/null +++ b/network-area-diagram/src/main/resources/topologicalStyle.css @@ -0,0 +1,105 @@ +.nad-branch-edges .nad-edge-path, .nad-3wt-edges .nad-edge-path {stroke: var(--nad-vl-color, lightgrey); stroke-width: 5; fill: none} +.nad-branch-edges .nad-winding, .nad-3wt-nodes .nad-winding {stroke: var(--nad-vl-color, lightgrey); stroke-width: 5; fill: none} +.nad-text-edges {stroke: black; stroke-width: 2; stroke-dasharray: 3,5} +.nad-disconnected .nad-edge-path {stroke-dasharray: 10,10} +.nad-vl-nodes .nad-busnode {fill: var(--nad-vl-color, lightgrey)} +.nad-vl-nodes circle.nad-unknown-busnode {stroke: var(--nad-vl-color, #808080); stroke-width: 5; stroke-dasharray: 5,5; fill: none} +.nad-hvdc-edge polyline.nad-hvdc {stroke: grey; stroke-width: 20} +.nad-state-out .nad-arrow-in {visibility: hidden} +.nad-state-in .nad-arrow-out {visibility: hidden} +.nad-active path {stroke: none; fill: #546e7a} +.nad-active {visibility: visible} +.nad-reactive {visibility: hidden} +.nad-reactive path {stroke: none; fill: #0277bd} +.nad-text-background {flood-color: #90a4aeaa} +.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-edge-infos .nad-state-in text {fill: #b71c1c} +.nad-edge-infos .nad-state-out text {fill: #2e7d32} +.nad-disconnected {--nad-vl-color: #808080} +.nad-vl0to30-0 {--nad-vl-color: #afb42b} +.nad-vl0to30-1 {--nad-vl-color: #e6ee9c} +.nad-vl0to30-2 {--nad-vl-color: #d4e157} +.nad-vl0to30-3 {--nad-vl-color: #827717} +.nad-vl0to30-4 {--nad-vl-color: #c0ca33} +.nad-vl0to30-5 {--nad-vl-color: #f0fc83} +.nad-vl0to30-6 {--nad-vl-color: #9e9d24} +.nad-vl0to30-7 {--nad-vl-color: #cddc39} +.nad-vl0to30-8 {--nad-vl-color: #dce775} +.nad-vl0to30-9 {--nad-vl-color: #ddfc88} +.nad-vl30to50-0 {--nad-vl-color: #ef9a9a} +.nad-vl30to50-1 {--nad-vl-color: #f06292} +.nad-vl30to50-2 {--nad-vl-color: #d81b60} +.nad-vl30to50-3 {--nad-vl-color: #c2185b} +.nad-vl30to50-4 {--nad-vl-color: #ec407a} +.nad-vl30to50-5 {--nad-vl-color: #880e4f} +.nad-vl30to50-6 {--nad-vl-color: #ad1457} +.nad-vl30to50-7 {--nad-vl-color: #e91e63} +.nad-vl30to50-8 {--nad-vl-color: #f48fb1} +.nad-vl30to50-9 {--nad-vl-color: #f8bbd0} +.nad-vl50to70-0 {--nad-vl-color: #9c27b0} +.nad-vl50to70-1 {--nad-vl-color: #512da8} +.nad-vl50to70-2 {--nad-vl-color: #ba68c8} +.nad-vl50to70-3 {--nad-vl-color: #7b1fa2} +.nad-vl50to70-4 {--nad-vl-color: #ab47bc} +.nad-vl50to70-5 {--nad-vl-color: #e1bee7} +.nad-vl50to70-6 {--nad-vl-color: #6a1b9a} +.nad-vl50to70-7 {--nad-vl-color: #4a148c} +.nad-vl50to70-8 {--nad-vl-color: #ce93d8} +.nad-vl50to70-9 {--nad-vl-color: #9575cd} +.nad-vl70to120-0 {--nad-vl-color: #e65100} +.nad-vl70to120-1 {--nad-vl-color: #ffb74d} +.nad-vl70to120-2 {--nad-vl-color: #fb8c00} +.nad-vl70to120-3 {--nad-vl-color: #f57c00} +.nad-vl70to120-4 {--nad-vl-color: #ffa726} +.nad-vl70to120-5 {--nad-vl-color: #ffe0b2} +.nad-vl70to120-6 {--nad-vl-color: #ef6c00} +.nad-vl70to120-7 {--nad-vl-color: #ff9800} +.nad-vl70to120-8 {--nad-vl-color: #ffcc80} +.nad-vl70to120-9 {--nad-vl-color: #fff3e0} +.nad-vl120to180-0 {--nad-vl-color: #00ACC1} +.nad-vl120to180-1 {--nad-vl-color: #b3e5fc} +.nad-vl120to180-2 {--nad-vl-color: #01579b} +.nad-vl120to180-3 {--nad-vl-color: #4fc3f7} +.nad-vl120to180-4 {--nad-vl-color: #039be5} +.nad-vl120to180-5 {--nad-vl-color: #0288d1} +.nad-vl120to180-6 {--nad-vl-color: #29b6f6} +.nad-vl120to180-7 {--nad-vl-color: #81d4fa} +.nad-vl120to180-8 {--nad-vl-color: #0277bd} +.nad-vl120to180-9 {--nad-vl-color: #03a9f4} +.nad-vl180to300-0 {--nad-vl-color: #2e7d32} +.nad-vl180to300-1 {--nad-vl-color: #c8e6c9} +.nad-vl180to300-2 {--nad-vl-color: #558b2f} +.nad-vl180to300-3 {--nad-vl-color: #81c784} +.nad-vl180to300-4 {--nad-vl-color: #43a047} +.nad-vl180to300-5 {--nad-vl-color: #a5d6a7} +.nad-vl180to300-6 {--nad-vl-color: #388e3c} +.nad-vl180to300-7 {--nad-vl-color: #66bb6a} +.nad-vl180to300-8 {--nad-vl-color: #1b5e20} +.nad-vl180to300-9 {--nad-vl-color: #4caf50} +.nad-vl300to500-0 {--nad-vl-color: #d32f2f} +.nad-vl300to500-1 {--nad-vl-color: #ffcdd2} +.nad-vl300to500-2 {--nad-vl-color: #e57373} +.nad-vl300to500-3 {--nad-vl-color: #ff8a80} +.nad-vl300to500-4 {--nad-vl-color: #b71c1c} +.nad-vl300to500-5 {--nad-vl-color: #ef5350} +.nad-vl300to500-6 {--nad-vl-color: #e53935} +.nad-vl300to500-7 {--nad-vl-color: #ef9a9a} +.nad-vl300to500-8 {--nad-vl-color: #f44336} +.nad-vl300to500-9 {--nad-vl-color: #c62828} +.nad-branch-edges .nad-overload .nad-edge-path {animation: line-blink 3s infinite} +.nad-vl-nodes .nad-overvoltage {animation: node-over-blink 3s infinite} +.nad-vl-nodes .nad-undervoltage {animation: node-under-blink 3s infinite} + +@keyframes line-blink { + 0%, 80%, 100% {stroke: var(--nad-vl-color, black); stroke-width: 5} + 40% {stroke: #FFEB3B; stroke-width: 15} +} +@keyframes node-over-blink { + 0%, 80%, 100% {stroke: white; stroke-width: 5} + 40% {stroke: #ff5722; stroke-width: 15} +} +@keyframes node-under-blink { + 0%, 80%, 100% {stroke: white; stroke-width: 5} + 40% {stroke: #00BCD4; stroke-width: 15} +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/AbstractTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/AbstractTest.java new file mode 100644 index 000000000..9cc96f44d --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/AbstractTest.java @@ -0,0 +1,118 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad; + +import com.google.common.io.ByteStreams; +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.nad.build.iidm.NetworkGraphBuilder; +import com.powsybl.nad.build.iidm.VoltageLevelFilter; +import com.powsybl.nad.layout.BasicForceLayout; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.model.Graph; +import com.powsybl.nad.svg.LabelProvider; +import com.powsybl.nad.svg.StyleProvider; +import com.powsybl.nad.svg.SvgParameters; +import com.powsybl.nad.svg.SvgWriter; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Objects; +import java.util.function.Predicate; + +/** + * @author Florian Dupuy + */ +public abstract class AbstractTest { + + protected boolean debugSvg = false; + protected boolean overrideTestReferences = false; + + private SvgParameters svgParameters; + + private LayoutParameters layoutParameters; + + protected abstract StyleProvider getStyleProvider(Network network); + + protected abstract LabelProvider getLabelProvider(Network network); + + protected String generateSvgString(Network network, String refFilename) { + return generateSvgString(network, VoltageLevelFilter.NO_FILTER, refFilename); + } + + protected String generateSvgString(Network network, Predicate voltageLevelFilter, String refFilename) { + Graph graph = new NetworkGraphBuilder(network, voltageLevelFilter).buildGraph(); + new BasicForceLayout().run(graph, getLayoutParameters()); + StringWriter writer = new StringWriter(); + new SvgWriter(getSvgParameters(), getStyleProvider(network), getLabelProvider(network)).writeSvg(graph, writer); + String svgString = writer.toString(); + if (debugSvg) { + writeToHomeDir(refFilename, svgString); + } + if (overrideTestReferences) { + overrideTestReference(refFilename, svgString); + } + return svgString; + } + + private void writeToHomeDir(String refFilename, String svgString) { + Path debugFolder = Path.of(System.getProperty("user.home"), ".powsybl", "debug-nad"); + try { + Files.createDirectories(debugFolder); + Path debugFile = debugFolder.resolve(refFilename.startsWith("/") ? refFilename.substring(1) : refFilename); + try (BufferedWriter bw = Files.newBufferedWriter(debugFile, StandardCharsets.UTF_8)) { + bw.write(normalizeLineSeparator(svgString)); + } + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + private void overrideTestReference(String filename, String svgString) { + Path testReference = Path.of("src", "test", "resources", filename); + if (!Files.exists(testReference)) { + return; + } + try (BufferedWriter bw = Files.newBufferedWriter(testReference, StandardCharsets.UTF_8)) { + bw.write(normalizeLineSeparator(svgString)); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + protected String toString(String resourceName) { + try { + InputStream in = Objects.requireNonNull(getClass().getResourceAsStream(resourceName)); + return normalizeLineSeparator(new String(ByteStreams.toByteArray(in), StandardCharsets.UTF_8)); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + private static String normalizeLineSeparator(String str) { + return str.replace("\r\n", "\n") + .replace("\r", "\n"); + } + + protected LayoutParameters getLayoutParameters() { + return layoutParameters; + } + + protected SvgParameters getSvgParameters() { + return svgParameters; + } + + protected void setLayoutParameters(LayoutParameters layoutParameters) { + this.layoutParameters = layoutParameters; + } + + protected void setSvgParameters(SvgParameters svgParameters) { + this.svgParameters = svgParameters; + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/layout/FixedLayoutTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/layout/FixedLayoutTest.java new file mode 100644 index 000000000..ff1d1ecb9 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/layout/FixedLayoutTest.java @@ -0,0 +1,48 @@ +/** + * 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.iidm.network.Network; +import com.powsybl.nad.build.iidm.NetworkGraphBuilder; +import com.powsybl.nad.build.iidm.VoltageLevelFilter; +import com.powsybl.nad.model.Graph; +import com.powsybl.nad.model.Point; +import com.powsybl.nad.svg.NetworkTestFactory; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * @author Luma Zamarreno + */ +class FixedLayoutTest { + + @Test + void testCurrentLimits() { + Network network = NetworkTestFactory.createTwoVoltageLevels(); + + Map expected = Map.of( + "vl1", new Point(1, 0), + "vl2", new Point(2, 1)); + Graph graph = new NetworkGraphBuilder(network, VoltageLevelFilter.NO_FILTER).buildGraph(); + Layout fixedLayout = new BasicFixedLayoutFactory(expected).create(); + fixedLayout.run(graph, new LayoutParameters()); + Map actual = graph.getNodePositions(); + + assertEquals(expected.keySet(), actual.keySet()); + expected.keySet().forEach(k -> { + Point pexpected = expected.get(k); + Point pactual = actual.get(k); + assertNotNull(pactual); + assertEquals(pexpected.getX(), pactual.getX()); + assertEquals(pexpected.getY(), pactual.getY()); + }); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/layout/ForceLayoutTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/layout/ForceLayoutTest.java new file mode 100644 index 000000000..d092d5804 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/layout/ForceLayoutTest.java @@ -0,0 +1,58 @@ +/** + * 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.iidm.network.*; +import com.powsybl.nad.AbstractTest; +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.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Luma Zamarreno + */ +class ForceLayoutTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters().setTextNodesForceLayout(false)); + setSvgParameters(new SvgParameters() + .setInsertNameDesc(false) + .setSvgWidthAndHeightAdded(false)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void testDiamondNoSpringRepulsionFactor() { + assertEquals( + toString("/diamond-spring-repulsion-factor-0.0.svg"), + generateSvgString(LayoutNetworkFactory.createDiamond(), "/diamond-spring-repulsion-factor-0.0.svg")); + } + + @Test + void testDiamondSmallSpringRepulsionFactor() { + getLayoutParameters().setSpringRepulsionFactorForceLayout(0.2); + assertEquals( + toString("/diamond-spring-repulsion-factor-0.2.svg"), + generateSvgString(LayoutNetworkFactory.createDiamond(), "/diamond-spring-repulsion-factor-0.2.svg")); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutNetworkFactory.java b/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutNetworkFactory.java new file mode 100644 index 000000000..8889e21c6 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutNetworkFactory.java @@ -0,0 +1,131 @@ +/** + * 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.iidm.network.*; + +/** + * @author Luma Zamarreno + */ +public final class LayoutNetworkFactory { + + private LayoutNetworkFactory() { + // Empty + } + + public static Network createDiamond() { + Network network = com.powsybl.iidm.network.NetworkFactory.findDefault().createNetwork("diamond", "manual"); + network.setName("diamond"); + + Substation subA = network.newSubstation().setId("A").add(); + Bus subA400 = createBus(subA, 400); + Bus subA230 = createBus(subA, 230); + createTransformer(subA400, subA230); + + Substation subB = network.newSubstation().setId("B").add(); + Bus subB230 = createBus(subB, 230); + createLine(subA230, subB230); + + Substation subC = network.newSubstation().setId("C").add(); + Bus subC230 = createBus(subC, 230); + Bus subC66 = createBus(subC, 66); + Bus subC20 = createBus(subC, 20); + createTransformer(subC230, subC66); + createTransformer(subC66, subC20); + createLine(subB230, subC230); + + Substation subD = network.newSubstation().setId("D").add(); + Bus subD66 = createBus(subD, 66); + Bus subD10 = createBus(subD, 10); + createTransformer(subD66, subD10); + createLine(subC66, subD66); + + Substation subE = network.newSubstation().setId("E").add(); + Bus subE10 = createBus(subE, 10); + createLine(subD10, subE10); + + Bus subF10 = createBus(network, "F", 10); + Bus subG10 = createBus(network, "G", 10); + Bus subH10 = createBus(network, "H", 10); + Bus subI10 = createBus(network, "I", 10); + Bus subJ10 = createBus(network, "J", 10); + Bus subK10 = createBus(network, "K", 10); + + createLine(subE10, subF10); + createLine(subF10, subG10); + createLine(subG10, subH10); + createLine(subH10, subD10); + + createLine(subF10, subI10); + createLine(subI10, subJ10); + createLine(subJ10, subK10); + createLine(subK10, subD10); + + return network; + } + + private static Bus createBus(Network network, String substationId, double nominalVoltage) { + Substation substation = network.newSubstation().setId(substationId).add(); + return createBus(substation, nominalVoltage); + } + + private static Bus createBus(Substation substation, double nominalVoltage) { + String vlId = String.format("%s %.0f", substation.getId(), nominalVoltage); + String busId = String.format("%s %s", vlId, "Bus"); + return substation.newVoltageLevel() + .setId(vlId) + .setNominalV(nominalVoltage) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add() + .getBusBreakerView() + .newBus() + .setId(busId) + .add(); + } + + private static void createTransformer(Bus bus1, Bus bus2) { + Substation substation = bus1.getVoltageLevel().getSubstation().orElseThrow(); + String id = String.format("%s %.0f %.0f", + substation.getId(), + bus1.getVoltageLevel().getNominalV(), + bus2.getVoltageLevel().getNominalV()); + substation.newTwoWindingsTransformer().setId(id) + .setR(0.0) + .setX(1.0) + .setG(0.0) + .setB(0.0) + .setVoltageLevel1(bus1.getVoltageLevel().getId()) + .setVoltageLevel2(bus2.getVoltageLevel().getId()) + .setConnectableBus1(bus1.getId()) + .setConnectableBus2(bus2.getId()) + .setRatedU1(bus1.getVoltageLevel().getNominalV()) + .setRatedU2(bus2.getVoltageLevel().getNominalV()) + .setBus1(bus1.getId()) + .setBus2(bus2.getId()) + .add(); + } + + private static void createLine(Bus bus1, Bus bus2) { + String id = String.format("%s - %s", + bus1.getVoltageLevel().getSubstation().orElseThrow().getId(), + bus2.getVoltageLevel().getSubstation().orElseThrow().getId()); + bus1.getNetwork().newLine().setId(id) + .setR(0.0) + .setX(1.0) + .setG1(0.0) + .setB1(0.0) + .setG2(0.0) + .setB2(0.0) + .setVoltageLevel1(bus1.getVoltageLevel().getId()) + .setVoltageLevel2(bus2.getVoltageLevel().getId()) + .setConnectableBus1(bus1.getId()) + .setConnectableBus2(bus2.getId()) + .setBus1(bus1.getId()) + .setBus2(bus2.getId()) + .add(); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutParametersTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutParametersTest.java new file mode 100644 index 000000000..21550d878 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutParametersTest.java @@ -0,0 +1,32 @@ +/** + * 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 org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class LayoutParametersTest { + + @Test + void test() { + LayoutParameters layoutParameters0 = new LayoutParameters() + .setTextNodesForceLayout(true) + .setSpringRepulsionFactorForceLayout(1.0) + .setTextNodeFixedShift(50., 50.); + + LayoutParameters layoutParameters1 = new LayoutParameters(layoutParameters0); + + assertEquals(layoutParameters0.isTextNodesForceLayout(), layoutParameters1.isTextNodesForceLayout()); + assertEquals(layoutParameters0.getSpringRepulsionFactorForceLayout(), layoutParameters1.getSpringRepulsionFactorForceLayout()); + assertEquals(layoutParameters0.getTextNodeFixedShift().getX(), layoutParameters1.getTextNodeFixedShift().getX()); + assertEquals(layoutParameters0.getTextNodeFixedShift().getY(), layoutParameters1.getTextNodeFixedShift().getY()); + } +} 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 new file mode 100644 index 000000000..4c3630540 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutWithInitialPositionsTest.java @@ -0,0 +1,223 @@ +/** + * 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.commons.PowsyblException; +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.NetworkAreaDiagram; +import com.powsybl.nad.build.iidm.VoltageLevelFilter; +import com.powsybl.nad.model.Graph; +import com.powsybl.nad.model.Point; +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.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.StringWriter; +import java.util.Collections; +import java.util.Map; +import java.util.Set; +import java.util.function.Predicate; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * @author Luma Zamarreno + */ +class LayoutWithInitialPositionsTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setInsertNameDesc(true) + .setSvgWidthAndHeightAdded(true) + .setFixedWidth(800)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void testDiamond() { + checkLayoutWithInitialPositions(LayoutNetworkFactory.createDiamond()); + } + + 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); + + // Check initial points contains an entry for all voltage levels filtered + network.getVoltageLevelStream().filter(filter).forEach(vl -> assertTrue(initialPositions.containsKey(vl.getId()))); + // Check we have voltage levels in the network that are not filtered and thus will not have an initial positions + assertTrue(network.getVoltageLevelStream().anyMatch(filter.negate())); + network.getVoltageLevelStream().filter(filter.negate()).forEach(vl -> assertFalse(initialPositions.containsKey(vl.getId()))); + + checkAllInitialPositionsFixed(network, initialPositions); + checkOnlySomeInitialPositionsFixed(network, initialPositions); + } + + 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); + + // Check positions of initial layout have been preserved in global layout + for (Map.Entry l : initialPositions.entrySet()) { + String equipmentId = l.getKey(); + Point expected = l.getValue(); + Point actual = allPositions.get(equipmentId); + assertNotNull(actual); + assertEquals(expected.getX(), actual.getX()); + assertEquals(expected.getY(), actual.getY()); + } + } + + private void checkOnlySomeInitialPositionsFixed(Network network, Map initialPositions) { + // Perform a global layout with all the voltage levels in the network, + // giving initial positions for some equipment, + // and fixing the position for only some equipment + NetworkAreaDiagram completeNetworkDiagram = new NetworkAreaDiagram(network, VoltageLevelFilter.NO_FILTER); + // Only consider fixed the first one in the initial layout + Set fixedNodes = Set.of(initialPositions.keySet().iterator().next()); + Map allPositions = layoutResult(completeNetworkDiagram, initialPositions, fixedNodes); + + // Check positions of initial layout have been preserved in global layout + for (Map.Entry l : initialPositions.entrySet()) { + String equipmentId = l.getKey(); + Point expected = l.getValue(); + Point actual = allPositions.get(equipmentId); + assertNotNull(actual); + if (fixedNodes.contains(equipmentId)) { + assertEquals(expected.getX(), actual.getX()); + assertEquals(expected.getY(), actual.getY()); + } else { + // We expect that the nodes with initial position but that have not been fixed have been moved + assertTrue(expected.getX() != actual.getX() || expected.getY() != actual.getY()); + } + } + } + + private Map layoutResult(NetworkAreaDiagram nad) { + return layoutResult(nad, Collections.emptyMap(), Collections.emptySet(), Collections.emptyMap()); + } + + private Map layoutResult(NetworkAreaDiagram nad, Map initialNodePositions, Set nodesWithFixedPositions) { + return layoutResult(nad, initialNodePositions, nodesWithFixedPositions, Collections.emptyMap()); + } + + private Map layoutResult(NetworkAreaDiagram nad, Map fixedNodePositions) { + return layoutResult(nad, Collections.emptyMap(), Collections.emptySet(), fixedNodePositions); + } + + private Map layoutResult(NetworkAreaDiagram nad, + Map initialNodePositions, + Set nodesWithFixedPositions, + Map fixedNodePositions + ) { + LayoutFactory delegateLayoutFactory = new BasicForceLayoutFactory(); + PositionsLayoutFactory positionsLayoutFactory = new PositionsLayoutFactory( + delegateLayoutFactory, + initialNodePositions, + nodesWithFixedPositions, + fixedNodePositions); + StringWriter writer = new StringWriter(); + nad.draw(writer, + getSvgParameters(), + getLayoutParameters(), + getStyleProvider(nad.getNetwork()), + getLabelProvider(nad.getNetwork()), + positionsLayoutFactory); + return positionsLayoutFactory.getLayoutResult().positions; + } + + static class PositionsLayoutFactory implements LayoutFactory { + static class LayoutResult { + Map positions; + } + + private final LayoutFactory delegateLayoutFactory; + private final LayoutResult layoutResult = new LayoutResult(); + private final Map initialNodePositions; + private final Set nodesWithFixedPositions; + private final Map fixedNodePositions; + + PositionsLayoutFactory(LayoutFactory delegateLayoutFactory, + Map initialNodePositions, + Set nodesWithFixedPositions, + Map fixedNodePositions + ) { + this.delegateLayoutFactory = delegateLayoutFactory; + this.initialNodePositions = initialNodePositions; + this.nodesWithFixedPositions = nodesWithFixedPositions; + this.fixedNodePositions = fixedNodePositions; + } + + public LayoutResult getLayoutResult() { + return layoutResult; + } + + @Override + public Layout create() { + final Layout delegateLayout = delegateLayoutFactory.create(); + return new Layout() { + @Override + public void run(Graph graph, LayoutParameters layoutParameters) { + if (!initialNodePositions.isEmpty()) { + delegateLayout.setInitialNodePositions(initialNodePositions); + } + if (!nodesWithFixedPositions.isEmpty()) { + delegateLayout.setNodesWithFixedPosition(nodesWithFixedPositions); + } + // only if not empty, + // setting nodes with fixed node positions will invalidate previous nodes with fixed positions + if (!fixedNodePositions.isEmpty() && delegateLayout instanceof AbstractLayout) { + ((AbstractLayout) delegateLayout).setFixedNodePositions(fixedNodePositions); + } + delegateLayout.run(graph, layoutParameters); + layoutResult.positions = graph.getNodePositions(); + } + + @Override + public void setInitialNodePositions(Map initialNodePositions) { + throw new PowsyblException("not implemented"); + } + + @Override + public void setNodesWithFixedPosition(Set nodesWithFixedPosition) { + throw new PowsyblException("not implemented"); + } + + @Override + public Map getInitialNodePositions() { + throw new PowsyblException("not implemented"); + } + + @Override + public Set getNodesWithFixedPosition() { + throw new PowsyblException("not implemented"); + } + }; + } + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoLabelTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoLabelTest.java new file mode 100644 index 000000000..57f1fd4de --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoLabelTest.java @@ -0,0 +1,99 @@ +/** + * 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; + +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.test.ThreeWindingsTransformerNetworkFactory; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.model.BranchEdge; +import com.powsybl.nad.model.Graph; +import com.powsybl.nad.model.ThreeWtEdge; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class EdgeInfoLabelTest extends AbstractTest { + + private String internalLabel; + private String externalLabel; + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setSvgWidthAndHeightAdded(true) + .setFixedWidth(800)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()) { + @Override + public List getEdgeInfos(Graph graph, BranchEdge edge, BranchEdge.Side side) { + return Collections.singletonList(new EdgeInfo("test", EdgeInfo.Direction.OUT, internalLabel, externalLabel)); + } + + @Override + public List getEdgeInfos(Graph graph, ThreeWtEdge edge) { + return Collections.singletonList(new EdgeInfo("test", EdgeInfo.Direction.IN, internalLabel, externalLabel)); + } + + @Override + public String getArrowPathDIn() { // larger arrow + return "M-2 -1 H2 L0 1z"; + } + + @Override + public String getArrowPathDOut() { // thinner arrow + return "M-0.5 1 H0.5 L0 -1z"; + } + }; + } + + @Test + void testMissingLabels() { + Network network = NetworkTestFactory.createTwoVoltageLevels(); + getSvgParameters().setArrowShift(10); + assertEquals(toString("/edge_info_missing_label.svg"), generateSvgString(network, "/edge_info_missing_label.svg")); + } + + @Test + void testPerpendicularLabels() { + Network network = NetworkTestFactory.createTwoVoltageLevels(); + internalLabel = "int"; + externalLabel = "ext"; + getSvgParameters().setEdgeInfoAlongEdge(false) + .setArrowShift(50) + .setArrowLabelShift(25); + assertEquals(toString("/edge_info_perpendicular_label.svg"), generateSvgString(network, "/edge_info_perpendicular_label.svg")); + } + + @Test + void testParallelLabels() { + Network network = ThreeWindingsTransformerNetworkFactory.create(); + internalLabel = "243"; + externalLabel = "145"; + getSvgParameters().setArrowShift(60) + .setArrowLabelShift(20); + assertEquals(toString("/edge_info_double_labels.svg"), generateSvgString(network, "/edge_info_double_labels.svg")); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoShiftTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoShiftTest.java new file mode 100644 index 000000000..4135fdef7 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoShiftTest.java @@ -0,0 +1,48 @@ +/** + * 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; + +import com.powsybl.iidm.network.Network; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class EdgeInfoShiftTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setSvgWidthAndHeightAdded(true) + .setFixedWidth(800)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void testArrowShift() { + Network network = NetworkTestFactory.createThreeVoltageLevelsFiveBuses(); + getSvgParameters().setArrowShift(20); + assertEquals(toString("/edge_info_shift.svg"), generateSvgString(network, "/edge_info_shift.svg")); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/GraphMetadataTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/GraphMetadataTest.java new file mode 100644 index 000000000..780aa655f --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/GraphMetadataTest.java @@ -0,0 +1,150 @@ +/** + * 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; + +import com.google.common.jimfs.Configuration; +import com.google.common.jimfs.Jimfs; +import com.powsybl.commons.xml.XmlUtil; +import com.powsybl.iidm.network.Network; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.TopologicalStyleProvider; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.FileSystem; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Thomas Adam + */ +class GraphMetadataTest extends AbstractTest { + + private static final String INDENT = " "; + private static final String METADATA_START_TOKEN = "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " "; + InputStream in = new ByteArrayInputStream(reference.getBytes(StandardCharsets.UTF_8)); + // Create Metadata from svg file + GraphMetadata metadata = GraphMetadata.parseXml(in); + // Write Metadata as temporary xml file + Path outPath = tmpDir.resolve("metadataInvalid.xml"); + writeMetadata(metadata, outPath); + // Read xml file + String actual = toString(outPath); + // remove xml header (first line) + actual = actual.substring(actual.indexOf(METADATA_START_TOKEN)); + // Keep only metadata from svg file + String expected = "\n" + + " \n" + + " \n" + + " \n" + + " "; + // Checking + assertEquals(removeWhiteSpaces(expected), removeWhiteSpaces(actual)); + } + + private void writeMetadata(GraphMetadata metadata, Path outPath) throws XMLStreamException { + try (OutputStream os = new BufferedOutputStream(Files.newOutputStream(outPath))) { + XMLStreamWriter writer = XmlUtil.initializeWriter(true, INDENT, os); + metadata.writeXml(writer); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + private String toString(Path outPath) { + String content; + try { + byte[] encoded = Files.readAllBytes(outPath); + content = new String(encoded, StandardCharsets.UTF_8); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + return content; + } + + private String removeWhiteSpaces(String input) { + return input.replaceAll("\\s+", ""); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/HvdcTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/HvdcTest.java new file mode 100644 index 000000000..a1ad637c9 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/HvdcTest.java @@ -0,0 +1,55 @@ +/** + * 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; + +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.test.HvdcTestNetwork; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.build.iidm.VoltageLevelFilter; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Luma Zamarreño + */ +class HvdcTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setInsertNameDesc(true) + .setSvgWidthAndHeightAdded(true) + .setFixedHeight(600)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void testHvdcVL1Depth1() { + Network network = HvdcTestNetwork.createVsc(); + debugSvg = true; + assertEquals( + toString("/hvdc-vl-depth-1.svg"), + generateSvgString(network, + VoltageLevelFilter.createVoltageLevelDepthFilter(network, network.getVoltageLevel("VL1").getId(), 1), + "/hvdc-vl-depth-1.svg")); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/LimitsTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/LimitsTest.java new file mode 100644 index 000000000..d19f581fb --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/LimitsTest.java @@ -0,0 +1,61 @@ +/** + * 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; + +import com.powsybl.iidm.network.Network; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class LimitsTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setSvgWidthAndHeightAdded(true) + .setFixedWidth(800)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void testVoltageLimits() { + Network network = NetworkTestFactory.createTwoVoltageLevelsThreeBuses(); + network.getVoltageLevel("vl1") + .setHighVoltageLimit(385) + .getBusView().getBus("vl1_0").setV(385.1); + network.getVoltageLevel("vl2") + .setLowVoltageLimit(390) + .getBusView().getBus("vl2_0").setV(388); + assertEquals(toString("/voltage_limits.svg"), generateSvgString(network, "/voltage_limits.svg")); + } + + @Test + void testCurrentLimits() { + Network network = NetworkTestFactory.createTwoVoltageLevels(); + network.getLine("l1").newCurrentLimits1().setPermanentLimit(250).add(); + network.getLine("l1").getTerminal1().setP(101).setQ(150).getBusView().getBus().setV(390); + assertEquals(toString("/current_limits.svg"), generateSvgString(network, "/current_limits.svg")); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/NetworkTestFactory.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/NetworkTestFactory.java new file mode 100644 index 000000000..4a4f8bd46 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/NetworkTestFactory.java @@ -0,0 +1,254 @@ +/** + * 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; + +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.Substation; +import com.powsybl.iidm.network.TopologyKind; +import com.powsybl.iidm.network.VoltageLevel; + +/** + * @author Florian Dupuy + */ +public final class NetworkTestFactory { + + private NetworkTestFactory() { + } + + /** + *
+     *  g1     dl1
+     *  |       |
+     *  b1 ---- b2
+     *      l1 
+ */ + public static Network createTwoVoltageLevels() { + Network network = Network.create("dl", "test"); + Substation s = network.newSubstation().setId("s1").setName("Substation 1").add(); + VoltageLevel vl1 = s.newVoltageLevel() + .setId("vl1") + .setName("Voltage level 1") + .setNominalV(400) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + vl1.getBusBreakerView().newBus() + .setId("b1") + .add(); + vl1.newGenerator() + .setId("g1") + .setConnectableBus("b1") + .setBus("b1") + .setTargetP(101.3664) + .setTargetV(390) + .setMinP(0) + .setMaxP(150) + .setVoltageRegulatorOn(true) + .add(); + VoltageLevel vl2 = s.newVoltageLevel() + .setId("vl2") + .setName("Voltage level 2") + .setNominalV(400) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + vl2.getBusBreakerView().newBus() + .setId("b2") + .add(); + vl2.newDanglingLine() + .setId("dl1") + .setConnectableBus("b2") + .setBus("b2") + .setR(0.7) + .setX(1) + .setG(1e-6) + .setB(3e-6) + .setP0(101) + .setQ0(150) + .newGeneration() + .setTargetP(0) + .setTargetQ(0) + .setTargetV(390) + .setVoltageRegulationOn(false) + .add() + .add(); + network.newLine() + .setId("l1") + .setVoltageLevel1("vl1") + .setBus1("b1") + .setVoltageLevel2("vl2") + .setBus2("b2") + .setR(1) + .setX(3) + .setG1(0) + .setG2(0) + .setB1(0) + .setB2(0) + .add(); + return network; + } + + public static Network createTwoVoltageLevelsThreeBuses() { + Network network = createTwoVoltageLevels(); + network.getVoltageLevel("vl1").getBusBreakerView().newBus() + .setId("b0") + .add(); + network.newLine() + .setId("l2") + .setVoltageLevel1("vl1") + .setBus1("b0") + .setVoltageLevel2("vl2") + .setConnectableBus2("b2") + .setR(1) + .setX(3) + .setG1(0) + .setG2(0) + .setB1(0) + .setB2(0) + .add(); + return network; + } + + public static Network createThreeVoltageLevelsFiveBuses() { + + Network network = createTwoVoltageLevelsThreeBuses(); + + Substation s = network.getSubstation("s1"); + VoltageLevel vl3 = s.newVoltageLevel() + .setId("vl3") + .setNominalV(200) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + vl3.getBusBreakerView().newBus() + .setId("b3") + .add(); + vl3.getBusBreakerView().newBus() + .setId("b4") + .add(); + vl3.newLoad() + .setId("load3") + .setBus("b3") + .setP0(10.0) + .setQ0(5.0) + .add(); + + s.newTwoWindingsTransformer() + .setId("tr1") + .setVoltageLevel1("vl1") + .setBus1("b0") + .setVoltageLevel2("vl3") + .setBus2("b3") + .setRatedU1(380) + .setRatedU2(190) + .setR(1) + .setX(30) + .setG(0) + .setB(0) + .add(); + s.newTwoWindingsTransformer() + .setId("tr2") + .setVoltageLevel1("vl2") + .setBus1("b2") + .setVoltageLevel2("vl3") + .setBus2("b4") + .setRatedU1(380) + .setRatedU2(190) + .setR(1) + .setX(30) + .setG(0) + .setB(0) + .add(); + + return network; + } + + /** + *
+     *   g1         dl1
+     *   |    tr1    |
+     *   |  --oo--   |
+     *  b1 /      \ b2
+     *     \      /
+     *      --oo--
+     *       tr2
+ */ + public static Network createTwoVoltageLevelsTwoTransformers() { + Network network = Network.create("dl", "test"); + Substation s = network.newSubstation().setId("s1").add(); + VoltageLevel vl1 = s.newVoltageLevel() + .setId("vl1") + .setNominalV(400) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + network.getVoltageLevel("vl1").getBusBreakerView().newBus() + .setId("b0") + .add(); + vl1.getBusBreakerView().newBus() + .setId("b1") + .add(); + vl1.newGenerator() + .setId("g1") + .setConnectableBus("b1") + .setBus("b1") + .setTargetP(101.3664) + .setTargetV(390) + .setMinP(0) + .setMaxP(150) + .setVoltageRegulatorOn(true) + .add(); + VoltageLevel vl2 = s.newVoltageLevel() + .setId("vl2") + .setNominalV(200) + .setTopologyKind(TopologyKind.BUS_BREAKER) + .add(); + vl2.getBusBreakerView().newBus() + .setId("b2") + .add(); + vl2.newDanglingLine() + .setId("dl1") + .setConnectableBus("b2") + .setBus("b2") + .setR(0.7) + .setX(1) + .setG(1e-6) + .setB(3e-6) + .setP0(101) + .setQ0(150) + .newGeneration() + .setTargetP(0) + .setTargetQ(0) + .setTargetV(390) + .setVoltageRegulationOn(false) + .add() + .add(); + s.newTwoWindingsTransformer() + .setId("tr1") + .setVoltageLevel1("vl1") + .setBus1("b0") + .setVoltageLevel2("vl2") + .setBus2("b2") + .setRatedU1(380) + .setRatedU2(190) + .setR(1) + .setX(30) + .setG(0) + .setB(0) + .add(); + s.newTwoWindingsTransformer() + .setId("tr2") + .setVoltageLevel1("vl1") + .setBus1("b1") + .setVoltageLevel2("vl2") + .setBus2("b2") + .setRatedU1(380) + .setRatedU2(190) + .setR(1) + .setX(30) + .setG(0) + .setB(0) + .add(); + return network; + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/NominalVoltageStyleTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/NominalVoltageStyleTest.java new file mode 100644 index 000000000..1f13aecc8 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/NominalVoltageStyleTest.java @@ -0,0 +1,127 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +import com.powsybl.ieeecdf.converter.IeeeCdfNetworkFactory; +import com.powsybl.iidm.network.Connectable; +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.Terminal; +import com.powsybl.iidm.network.test.FourSubstationsNodeBreakerFactory; +import com.powsybl.iidm.xml.NetworkXml; +import com.powsybl.loadflow.LoadFlow; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class NominalVoltageStyleTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setInsertNameDesc(true) + .setSvgWidthAndHeightAdded(true) + .setFixedWidth(800)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void testIEEE30() { + Network network = IeeeCdfNetworkFactory.create30(); + assertEquals(toString("/IEEE_30_bus.svg"), generateSvgString(network, "/IEEE_30_bus.svg")); + } + + @Test + void testIEEE14() { + Network network = IeeeCdfNetworkFactory.create14(); + LoadFlow.run(network); + assertEquals(toString("/IEEE_14_bus.svg"), generateSvgString(network, "/IEEE_14_bus.svg")); + } + + @Test + void testIEEE14ForceLayoutWithTextNodes() { + Network network = IeeeCdfNetworkFactory.create14(); + getLayoutParameters().setTextNodesForceLayout(true); + getSvgParameters().setTextNodeBackground(false); + assertEquals(toString("/IEEE_14_bus_text_nodes.svg"), generateSvgString(network, "/IEEE_14_bus_text_nodes.svg")); + } + + @Test + void testIEEE14FWithSvgPrefix() { + Network network = IeeeCdfNetworkFactory.create14(); + getSvgParameters().setSvgPrefix("test_"); + assertEquals(toString("/IEEE_14_id_prefixed.svg"), generateSvgString(network, "/IEEE_14_id_prefixed.svg")); + } + + @Test + void testDisconnection() { + Network network = IeeeCdfNetworkFactory.create14(); + network.getLine("L3-4-1").getTerminal1().disconnect(); + network.getTwoWindingsTransformer("T4-7-1").getTerminal1().disconnect(); + network.getVoltageLevel("VL14").getConnectableStream().map(connectable -> (Connectable) connectable).forEach(connectable -> connectable.getTerminals().forEach(Terminal::disconnect)); + LoadFlow.run(network); + assertEquals(toString("/IEEE_14_bus_disconnection.svg"), generateSvgString(network, "/IEEE_14_bus_disconnection.svg")); + } + + @Test + void testFictitiousVoltageLevel() { + Network network = IeeeCdfNetworkFactory.create14(); + network.getVoltageLevel("VL12").setFictitious(true); + network.getVoltageLevel("VL14").setFictitious(true); + assertEquals(toString("/IEEE_14_bus_fictitious.svg"), generateSvgString(network, "/IEEE_14_bus_fictitious.svg")); + } + + @Test + void testIEEE24() { + Network network = NetworkXml.read(getClass().getResourceAsStream("/IEEE_24_bus.xiidm")); + assertEquals(toString("/IEEE_24_bus.svg"), generateSvgString(network, "/IEEE_24_bus.svg")); + } + + @Test + void testEurope() { + Network network = Network.read("simple-eu.uct", getClass().getResourceAsStream("/simple-eu.uct")); + LoadFlow.run(network); + assertEquals(toString("/simple-eu.svg"), generateSvgString(network, "/simple-eu.svg")); + } + + @Test + void testEuropeLoopAperture80() { + Network network = Network.read("simple-eu.uct", getClass().getResourceAsStream("/simple-eu.uct")); + getSvgParameters().setLoopEdgesAperture(80); + assertEquals(toString("/simple-eu-loop80.svg"), generateSvgString(network, "/simple-eu-loop80.svg")); + } + + @Test + void testEuropeLoopAperture100() { + Network network = Network.read("simple-eu.uct", getClass().getResourceAsStream("/simple-eu.uct")); + getSvgParameters().setLoopEdgesAperture(100); + assertEquals(toString("/simple-eu-loop100.svg"), generateSvgString(network, "/simple-eu-loop100.svg")); + } + + @Test + void testHvdc() { + Network network = FourSubstationsNodeBreakerFactory.create(); + assertEquals(toString("/hvdc.svg"), generateSvgString(network, "/hvdc.svg")); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/ParallelTransformerTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/ParallelTransformerTest.java new file mode 100644 index 000000000..d8b458db0 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/ParallelTransformerTest.java @@ -0,0 +1,47 @@ +/** + * 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; + +import com.powsybl.iidm.network.Network; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class ParallelTransformerTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setSvgWidthAndHeightAdded(true) + .setFixedScale(0.5)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void test() { + Network network = NetworkTestFactory.createTwoVoltageLevelsTwoTransformers(); + assertEquals(toString("/parallel_transformers.svg"), generateSvgString(network, "/parallel_transformers.svg")); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SvgParametersTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SvgParametersTest.java new file mode 100644 index 000000000..47fdeb74b --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SvgParametersTest.java @@ -0,0 +1,86 @@ +/** + * 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; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class SvgParametersTest { + + @Test + void test() { + SvgParameters svgParameters0 = new SvgParameters() + .setDiagramPadding(new Padding(5)) + .setInsertNameDesc(false) + .setSvgWidthAndHeightAdded(true) + .setCssLocation(SvgParameters.CssLocation.EXTERNAL_NO_IMPORT) + .setFixedWidth(300) + .setFixedHeight(500) + .setFixedScale(0.4) + .setSizeConstraint(SvgParameters.SizeConstraint.NONE) + .setArrowShift(1.) + .setArrowLabelShift(0.5) + .setConverterStationWidth(2.) + .setVoltageLevelCircleRadius(3.) + .setFictitiousVoltageLevelCircleRadius(2.) + .setTransformerCircleRadius(1.2) + .setNodeHollowWidth(0.8) + .setEdgesForkLength(4.) + .setEdgesForkAperture(10.) + .setEdgeStartShift(0.) + .setUnknownBusNodeExtraRadius(10.) + .setLoopDistance(8.) + .setLoopEdgesAperture(10.) + .setLoopControlDistance(1.) + .setTextNodeBackground(false) + .setEdgeInfoAlongEdge(false) + .setInterAnnulusSpace(0.25) + .setSvgPrefix("TestPrefix") + .setIdDisplayed(true) + .setSubstationDescriptionDisplayed(true) + .setArrowHeight(25); + + SvgParameters svgParameters1 = new SvgParameters(svgParameters0); + + assertEquals(svgParameters0.getDiagramPadding().getLeft(), svgParameters1.getDiagramPadding().getLeft()); + assertEquals(svgParameters0.getDiagramPadding().getTop(), svgParameters1.getDiagramPadding().getTop()); + assertEquals(svgParameters0.getDiagramPadding().getRight(), svgParameters1.getDiagramPadding().getRight()); + assertEquals(svgParameters0.getDiagramPadding().getBottom(), svgParameters1.getDiagramPadding().getBottom()); + assertEquals(svgParameters0.isInsertNameDesc(), svgParameters1.isInsertNameDesc()); + assertEquals(svgParameters0.isSvgWidthAndHeightAdded(), svgParameters1.isSvgWidthAndHeightAdded()); + assertEquals(svgParameters0.getCssLocation(), svgParameters1.getCssLocation()); + assertEquals(svgParameters0.getFixedWidth(), svgParameters1.getFixedWidth()); + assertEquals(svgParameters0.getFixedHeight(), svgParameters1.getFixedHeight()); + assertEquals(svgParameters0.getFixedScale(), svgParameters1.getFixedScale()); + assertEquals(svgParameters0.getSizeConstraint(), svgParameters1.getSizeConstraint()); + assertEquals(svgParameters0.getArrowShift(), svgParameters1.getArrowShift()); + assertEquals(svgParameters0.getArrowLabelShift(), svgParameters1.getArrowLabelShift()); + assertEquals(svgParameters0.getConverterStationWidth(), svgParameters1.getConverterStationWidth()); + assertEquals(svgParameters0.getVoltageLevelCircleRadius(), svgParameters1.getVoltageLevelCircleRadius()); + assertEquals(svgParameters0.getFictitiousVoltageLevelCircleRadius(), svgParameters1.getFictitiousVoltageLevelCircleRadius()); + assertEquals(svgParameters0.getTransformerCircleRadius(), svgParameters1.getTransformerCircleRadius()); + assertEquals(svgParameters0.getNodeHollowWidth(), svgParameters1.getNodeHollowWidth()); + assertEquals(svgParameters0.getEdgesForkLength(), svgParameters1.getEdgesForkLength()); + assertEquals(svgParameters0.getEdgesForkAperture(), svgParameters1.getEdgesForkAperture()); + assertEquals(svgParameters0.getEdgeStartShift(), svgParameters1.getEdgeStartShift()); + assertEquals(svgParameters0.getUnknownBusNodeExtraRadius(), svgParameters1.getUnknownBusNodeExtraRadius()); + assertEquals(svgParameters0.getLoopDistance(), svgParameters1.getLoopDistance()); + assertEquals(svgParameters0.getLoopEdgesAperture(), svgParameters1.getLoopEdgesAperture()); + assertEquals(svgParameters0.getLoopControlDistance(), svgParameters1.getLoopControlDistance()); + assertEquals(svgParameters0.isTextNodeBackground(), svgParameters1.isTextNodeBackground()); + assertEquals(svgParameters0.isEdgeInfoAlongEdge(), svgParameters1.isEdgeInfoAlongEdge()); + assertEquals(svgParameters0.getInterAnnulusSpace(), svgParameters1.getInterAnnulusSpace()); + assertEquals(svgParameters0.getSvgPrefix(), svgParameters1.getSvgPrefix()); + assertEquals(svgParameters0.isIdDisplayed(), svgParameters1.isIdDisplayed()); + assertEquals(svgParameters0.isSubstationDescriptionDisplayed(), svgParameters1.isSubstationDescriptionDisplayed()); + assertEquals(svgParameters0.getArrowHeight(), svgParameters1.getArrowHeight()); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/ThreeWindingTransformerTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/ThreeWindingTransformerTest.java new file mode 100644 index 000000000..e0acf387e --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/ThreeWindingTransformerTest.java @@ -0,0 +1,68 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +import com.powsybl.iidm.network.Network; +import com.powsybl.iidm.network.ThreeWindingsTransformer; +import com.powsybl.iidm.network.test.ThreeWindingsTransformerNetworkFactory; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.build.iidm.VoltageLevelFilter; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class ThreeWindingTransformerTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setInsertNameDesc(true) + .setSvgWidthAndHeightAdded(true) + .setFixedWidth(800)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void test3wt() { + Network network = ThreeWindingsTransformerNetworkFactory.create(); + assertEquals(toString("/3wt.svg"), generateSvgString(network, "/3wt.svg")); + } + + @Test + void testDisconnected3wt() { + Network network = ThreeWindingsTransformerNetworkFactory.create(); + network.getThreeWindingsTransformer("3WT").getTerminal(ThreeWindingsTransformer.Side.TWO).disconnect(); + network.getLoad("LOAD_33").remove(); + assertEquals(toString("/3wt_disconnected.svg"), generateSvgString(network, "/3wt_disconnected.svg")); + } + + @Test + void testPartial3wt() { + Network network = ThreeWindingsTransformerNetworkFactory.create(); + VoltageLevelFilter filter = VoltageLevelFilter.createVoltageLevelsFilter(network, Collections.singletonList("VL_11")); + assertEquals(toString("/3wt_partial.svg"), generateSvgString(network, filter, "/3wt_partial.svg")); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/TopologicalStyleTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/TopologicalStyleTest.java new file mode 100644 index 000000000..fe7842e14 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/TopologicalStyleTest.java @@ -0,0 +1,72 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.nad.svg; + +import com.powsybl.ieeecdf.converter.IeeeCdfNetworkFactory; +import com.powsybl.iidm.network.Network; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.build.iidm.VoltageLevelFilter; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.TopologicalStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class TopologicalStyleTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setInsertNameDesc(true) + .setSvgWidthAndHeightAdded(true) + .setFixedWidth(800)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new TopologicalStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void testIEEE57() { + Network network = IeeeCdfNetworkFactory.create57(); + assertEquals(toString("/IEEE_57_bus.svg"), generateSvgString(network, "/IEEE_57_bus.svg")); + } + + @Test + void testIEEE118() { + Network network = IeeeCdfNetworkFactory.create118(); + assertEquals(toString("/IEEE_118_bus.svg"), generateSvgString(network, "/IEEE_118_bus.svg")); + } + + @Test + void testIEEE118PartialGraph() { + Network network = IeeeCdfNetworkFactory.create118(); + VoltageLevelFilter vlDepthFilter = VoltageLevelFilter.createVoltageLevelDepthFilter(network, "VL54", 2); + assertEquals(toString("/IEEE_118_bus_partial.svg"), generateSvgString(network, vlDepthFilter, "/IEEE_118_bus_partial.svg")); + } + + @Test + void testIEEE118PartialNonConnectedGraph() { + Network network = IeeeCdfNetworkFactory.create118(); + VoltageLevelFilter vlDepthFilter = VoltageLevelFilter.createVoltageLevelsDepthFilter(network, Arrays.asList("VL32", "VL38"), 1); + assertEquals(toString("/IEEE_118_bus_partial_non_connected.svg"), generateSvgString(network, vlDepthFilter, "/IEEE_118_bus_partial_non_connected.svg")); + } +} diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/VoltageLevelDescriptionTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/VoltageLevelDescriptionTest.java new file mode 100644 index 000000000..3a2fa9318 --- /dev/null +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/VoltageLevelDescriptionTest.java @@ -0,0 +1,62 @@ +/** + * 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; + +import com.powsybl.iidm.network.Network; +import com.powsybl.nad.AbstractTest; +import com.powsybl.nad.layout.LayoutParameters; +import com.powsybl.nad.svg.iidm.DefaultLabelProvider; +import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Florian Dupuy + */ +class VoltageLevelDescriptionTest extends AbstractTest { + + @BeforeEach + public void setup() { + setLayoutParameters(new LayoutParameters()); + setSvgParameters(new SvgParameters() + .setSvgWidthAndHeightAdded(true) + .setFixedWidth(800)); + } + + @Override + protected StyleProvider getStyleProvider(Network network) { + return new NominalVoltageStyleProvider(network); + } + + @Override + protected LabelProvider getLabelProvider(Network network) { + return new DefaultLabelProvider(network, getSvgParameters()); + } + + @Test + void testVlId() { + Network network = NetworkTestFactory.createTwoVoltageLevels(); + getSvgParameters().setIdDisplayed(true); + assertEquals(toString("/vl_description_id.svg"), generateSvgString(network, "/vl_description_id.svg")); + } + + @Test + void testSubstationDescription() { + Network network = NetworkTestFactory.createTwoVoltageLevels(); + getSvgParameters().setSubstationDescriptionDisplayed(true); + assertEquals(toString("/vl_description_substation.svg"), generateSvgString(network, "/vl_description_substation.svg")); + } + + @Test + void testSubstationId() { + Network network = NetworkTestFactory.createTwoVoltageLevels(); + getSvgParameters().setSubstationDescriptionDisplayed(true).setIdDisplayed(true); + assertEquals(toString("/vl_description_substation_id.svg"), generateSvgString(network, "/vl_description_substation_id.svg")); + } +} diff --git a/network-area-diagram/src/test/resources/3wt.svg b/network-area-diagram/src/test/resources/3wt.svg new file mode 100644 index 000000000..e47384134 --- /dev/null +++ b/network-area-diagram/src/test/resources/3wt.svg @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL_11 + + + + VL_132 + + + + VL_33 + + + + + + + 3WT + + + + + + + + 0 + + + + + + + 0 + + + + + 3WT + + + + + + + + 0 + + + + + + + 0 + + + + + 3WT + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + VL_11 + VL_132 + VL_33 + + diff --git a/network-area-diagram/src/test/resources/3wt_disconnected.svg b/network-area-diagram/src/test/resources/3wt_disconnected.svg new file mode 100644 index 000000000..6b7e6ecd7 --- /dev/null +++ b/network-area-diagram/src/test/resources/3wt_disconnected.svg @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + VL_11 + + + + VL_132 + + + + VL_33 + + + + + + + 3WT + + + + + + + + 0 + + + + + + + 0 + + + + + 3WT + + + + + + + + 0 + + + + + + + 0 + + + + + 3WT + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + VL_11 + VL_132 + VL_33 + + diff --git a/network-area-diagram/src/test/resources/3wt_partial.svg b/network-area-diagram/src/test/resources/3wt_partial.svg new file mode 100644 index 000000000..bbb5a8c22 --- /dev/null +++ b/network-area-diagram/src/test/resources/3wt_partial.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL_11 + + + + + + + 3WT + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + VL_11 + + diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus.svg b/network-area-diagram/src/test/resources/IEEE_118_bus.svg new file mode 100644 index 000000000..c181728fc --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_118_bus.svg @@ -0,0 +1,8906 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL10 + + + + VL100 + + + + VL101 + + + + VL102 + + + + VL103 + + + + VL104 + + + + VL105 + + + + VL106 + + + + VL107 + + + + VL108 + + + + VL109 + + + + VL11 + + + + VL110 + + + + VL111 + + + + VL112 + + + + VL113 + + + + VL114 + + + + VL115 + + + + VL116 + + + + VL117 + + + + VL118 + + + + VL12 + + + + VL13 + + + + VL14 + + + + VL15 + + + + VL16 + + + + VL17 + + + + VL18 + + + + VL19 + + + + VL2 + + + + VL20 + + + + VL21 + + + + VL22 + + + + VL23 + + + + VL24 + + + + VL25 + + + + VL26 + + + + VL27 + + + + VL28 + + + + VL29 + + + + VL3 + + + + VL30 + + + + VL31 + + + + VL32 + + + + VL33 + + + + VL34 + + + + VL35 + + + + VL36 + + + + VL37 + + + + VL38 + + + + VL39 + + + + VL4 + + + + VL40 + + + + VL41 + + + + VL42 + + + + VL43 + + + + VL44 + + + + VL45 + + + + VL46 + + + + VL47 + + + + VL48 + + + + VL49 + + + + VL5 + + + + VL50 + + + + VL51 + + + + VL52 + + + + VL53 + + + + VL54 + + + + VL55 + + + + VL56 + + + + VL57 + + + + VL58 + + + + VL59 + + + + VL6 + + + + VL60 + + + + VL61 + + + + VL62 + + + + VL63 + + + + VL64 + + + + VL65 + + + + VL66 + + + + VL67 + + + + VL68 + + + + VL69 + + + + VL7 + + + + VL70 + + + + VL71 + + + + VL72 + + + + VL73 + + + + VL74 + + + + VL75 + + + + VL76 + + + + VL77 + + + + VL78 + + + + VL79 + + + + VL8 + + + + VL80 + + + + VL81 + + + + VL82 + + + + VL83 + + + + VL84 + + + + VL85 + + + + VL86 + + + + VL87 + + + + VL88 + + + + VL89 + + + + VL9 + + + + VL90 + + + + VL91 + + + + VL92 + + + + VL93 + + + + VL94 + + + + VL95 + + + + VL96 + + + + VL97 + + + + VL98 + + + + VL99 + + + + + + L1-2-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L1-3-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L92-100-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L94-100-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L98-100-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L99-100-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L100-101-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L100-103-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L100-104-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L100-106-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L101-102-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L92-102-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L103-104-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L103-105-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L103-110-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L104-105-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L105-106-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L105-107-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L105-108-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L106-107-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L108-109-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L109-110-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L4-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L5-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L11-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L11-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L110-111-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L110-112-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L17-113-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L32-113-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L32-114-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L114-115-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L27-115-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L68-116-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-117-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L75-118-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L76-118-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L3-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L7-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-16-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L13-15-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L14-15-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L15-17-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L15-19-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L15-33-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L16-17-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L17-18-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L17-31-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T30-17-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L18-19-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L19-20-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L19-34-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L20-21-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L21-22-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L22-23-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L23-24-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L23-25-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L23-32-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L24-70-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L24-72-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L25-27-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T26-25-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L26-30-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L27-28-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L27-32-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L28-29-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L29-31-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L3-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L8-30-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L30-38-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L31-32-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L33-37-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L34-36-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L34-37-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L34-43-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L35-36-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L35-37-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L37-39-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L37-40-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T38-37-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L38-65-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L39-40-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L4-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L40-41-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L40-42-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L41-42-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L42-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L42-49-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L43-44-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L44-45-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L45-46-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L45-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L46-47-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L46-48-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L47-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L47-69-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L48-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-50-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-51-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-54-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-54-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-66-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-66-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-69-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L5-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T8-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L50-57-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L51-52-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L51-58-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L52-53-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L53-54-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L54-55-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L54-56-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L54-59-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L55-56-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L55-59-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L56-57-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L56-58-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L56-59-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L56-59-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L59-60-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L59-61-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T63-59-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L6-7-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L60-61-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L60-62-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L61-62-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T64-61-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L62-66-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L62-67-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L63-64-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L64-65-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L65-68-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T65-66-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L66-67-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L68-81-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T68-69-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L69-70-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L69-75-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L69-77-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L70-71-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L70-74-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L70-75-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L71-72-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L71-73-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L74-75-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L75-77-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L76-77-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L77-78-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L77-80-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L77-80-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L77-82-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L78-79-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L79-80-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L8-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L80-96-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L80-97-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L80-98-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L80-99-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T81-80-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L82-83-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L82-96-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L83-84-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L83-85-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L84-85-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L85-86-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L85-88-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L85-89-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L86-87-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L88-89-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L89-90-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L89-90-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L89-92-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L89-92-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L90-91-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L91-92-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L92-93-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L92-94-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L93-94-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L94-95-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L94-96-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L95-96-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L96-97-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL100 + VL101 + VL102 + VL103 + VL104 + VL105 + VL106 + VL107 + VL108 + VL109 + VL11 + VL110 + VL111 + VL112 + VL113 + VL114 + VL115 + VL116 + VL117 + VL118 + VL12 + VL13 + VL14 + VL15 + VL16 + VL17 + VL18 + VL19 + VL2 + VL20 + VL21 + VL22 + VL23 + VL24 + VL25 + VL26 + VL27 + VL28 + VL29 + VL3 + VL30 + VL31 + VL32 + VL33 + VL34 + VL35 + VL36 + VL37 + VL38 + VL39 + VL4 + VL40 + VL41 + VL42 + VL43 + VL44 + VL45 + VL46 + VL47 + VL48 + VL49 + VL5 + VL50 + VL51 + VL52 + VL53 + VL54 + VL55 + VL56 + VL57 + VL58 + VL59 + VL6 + VL60 + VL61 + VL62 + VL63 + VL64 + VL65 + VL66 + VL67 + VL68 + VL69 + VL7 + VL70 + VL71 + VL72 + VL73 + VL74 + VL75 + VL76 + VL77 + VL78 + VL79 + VL8 + VL80 + VL81 + VL82 + VL83 + VL84 + VL85 + VL86 + VL87 + VL88 + VL89 + VL9 + VL90 + VL91 + VL92 + VL93 + VL94 + VL95 + VL96 + VL97 + VL98 + VL99 + + diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg b/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg new file mode 100644 index 000000000..1b035e833 --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg @@ -0,0 +1,2023 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL42 + + + + VL45 + + + + VL47 + + + + VL48 + + + + VL49 + + + + VL50 + + + + VL51 + + + + VL52 + + + + VL53 + + + + VL54 + + + + VL55 + + + + VL56 + + + + VL57 + + + + VL58 + + + + VL59 + + + + VL60 + + + + VL61 + + + + VL63 + + + + VL66 + + + + VL69 + + + + + + L40-42-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L41-42-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L42-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L42-49-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L44-45-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L45-46-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L45-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L46-47-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L47-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L47-69-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L46-48-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L48-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-50-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-51-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-54-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-54-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-66-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-66-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-69-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L50-57-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L51-52-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L51-58-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L52-53-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L53-54-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L54-55-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L54-56-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L54-59-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L55-56-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L55-59-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L56-57-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L56-58-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L56-59-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L56-59-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L59-60-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L59-61-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T63-59-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L60-61-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L60-62-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L61-62-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + T64-61-1 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L63-64-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L62-66-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L66-67-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + T65-66-1 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L69-70-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L69-75-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L69-77-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + T68-69-1 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL42 + VL45 + VL47 + VL48 + VL49 + VL50 + VL51 + VL52 + VL53 + VL54 + VL55 + VL56 + VL57 + VL58 + VL59 + VL60 + VL61 + VL63 + VL66 + VL69 + + diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg b/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg new file mode 100644 index 000000000..1fc16553a --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg @@ -0,0 +1,1075 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL113 + + + + VL114 + + + + VL23 + + + + VL27 + + + + VL30 + + + + VL31 + + + + VL32 + + + + VL37 + + + + VL38 + + + + VL65 + + + + + + L17-113-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L32-113-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L32-114-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L114-115-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L22-23-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L23-24-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L23-25-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L23-32-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L25-27-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L27-28-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L27-32-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L27-115-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L8-30-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L26-30-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L30-38-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T30-17-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + L17-31-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L29-31-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L31-32-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L35-37-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L33-37-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L34-37-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L37-39-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L37-40-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + T38-37-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L38-65-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L64-65-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + L65-68-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + T65-66-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + VL113 + VL114 + VL23 + VL27 + VL30 + VL31 + VL32 + VL37 + VL38 + VL65 + + diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus.svg b/network-area-diagram/src/test/resources/IEEE_14_bus.svg new file mode 100644 index 000000000..ffd83fd0c --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_14_bus.svg @@ -0,0 +1,1026 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL10 + + + + VL11 + + + + VL12 + + + + VL13 + + + + VL14 + + + + VL2 + + + + VL3 + + + + VL4 + + + + VL5 + + + + VL6 + + + + VL7 + + + + VL8 + + + + VL9 + + + + + + L1-2-1 + + + + + + + + + 158 + + + + + + + -20 + + + + + + + + + + + + -153 + + + + + + + 27 + + + + + + L1-5-1 + + + + + + + + + 75 + + + + + + + 6 + + + + + + + + + + + + -72 + + + + + + + 0 + + + + + + L9-10-1 + + + + + + + + + 7 + + + + + + + 17 + + + + + + + + + + + + -7 + + + + + + + -17 + + + + + + L10-11-1 + + + + + + + + + -2 + + + + + + + 11 + + + + + + + + + + + + 2 + + + + + + + -11 + + + + + + L6-11-1 + + + + + + + + + 5 + + + + + + + -9 + + + + + + + + + + + + -5 + + + + + + + 9 + + + + + + L6-12-1 + + + + + + + + + 7 + + + + + + + 1 + + + + + + + + + + + + -7 + + + + + + + -1 + + + + + + L12-13-1 + + + + + + + + + 1 + + + + + + + -1 + + + + + + + + + + + + -1 + + + + + + + 1 + + + + + + L6-13-1 + + + + + + + + + 17 + + + + + + + 1 + + + + + + + + + + + + -16 + + + + + + + 0 + + + + + + L13-14-1 + + + + + + + + + 4 + + + + + + + -6 + + + + + + + + + + + + -4 + + + + + + + 7 + + + + + + L9-14-1 + + + + + + + + + 11 + + + + + + + 12 + + + + + + + + + + + + -11 + + + + + + + -12 + + + + + + L2-3-1 + + + + + + + + + 74 + + + + + + + 3 + + + + + + + + + + + + -72 + + + + + + + 2 + + + + + + L2-4-1 + + + + + + + + + 57 + + + + + + + 3 + + + + + + + + + + + + -55 + + + + + + + -2 + + + + + + L2-5-1 + + + + + + + + + 41 + + + + + + + 4 + + + + + + + + + + + + -40 + + + + + + + -5 + + + + + + L3-4-1 + + + + + + + + + -23 + + + + + + + 10 + + + + + + + + + + + + 23 + + + + + + + -10 + + + + + + L4-5-1 + + + + + + + + + -64 + + + + + + + 8 + + + + + + + + + + + + 65 + + + + + + + -6 + + + + + + T4-7-1 + + + + + + + + + 30 + + + + + + + 21 + + + + + + + + + + + + + -30 + + + + + + + -18 + + + + + + + T4-9-1 + + + + + + + + + 18 + + + + + + + -13 + + + + + + + + + + + + + -18 + + + + + + + 16 + + + + + + + T5-6-1 + + + + + + + + + 40 + + + + + + + 9 + + + + + + + + + + + + + -40 + + + + + + + -6 + + + + + + + L7-8-1 + + + + + + + + + 0 + + + + + + + -22 + + + + + + + + + + + + 0 + + + + + + + 24 + + + + + + L7-9-1 + + + + + + + + + 30 + + + + + + + 41 + + + + + + + + + + + + -30 + + + + + + + -39 + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL11 + VL12 + VL13 + VL14 + VL2 + VL3 + VL4 + VL5 + VL6 + VL7 + VL8 + VL9 + + diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg new file mode 100644 index 000000000..d94baa599 --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg @@ -0,0 +1,1025 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL10 + + + + VL11 + + + + VL12 + + + + VL13 + + + + VL14 + + + + VL2 + + + + VL3 + + + + VL4 + + + + VL5 + + + + VL6 + + + + VL7 + + + + VL8 + + + + VL9 + + + + + + L1-2-1 + + + + + + + + + 152 + + + + + + + -19 + + + + + + + + + + + + -148 + + + + + + + 26 + + + + + + L1-5-1 + + + + + + + + + 64 + + + + + + + 3 + + + + + + + + + + + + -62 + + + + + + + 0 + + + + + + L9-10-1 + + + + + + + + + -1 + + + + + + + 17 + + + + + + + + + + + + 1 + + + + + + + -17 + + + + + + L10-11-1 + + + + + + + + + -10 + + + + + + + 11 + + + + + + + + + + + + 10 + + + + + + + -11 + + + + + + L6-11-1 + + + + + + + + + 14 + + + + + + + -9 + + + + + + + + + + + + -13 + + + + + + + 9 + + + + + + L6-12-1 + + + + + + + + + 7 + + + + + + + 2 + + + + + + + + + + + + -7 + + + + + + + -2 + + + + + + L12-13-1 + + + + + + + + + 0 + + + + + + + 1 + + + + + + + + + + + + 0 + + + + + + + -1 + + + + + + L6-13-1 + + + + + + + + + 13 + + + + + + + 5 + + + + + + + + + + + + -13 + + + + + + + -5 + + + + + + L13-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-3-1 + + + + + + + + + 98 + + + + + + + 2 + + + + + + + + + + + + -94 + + + + + + + 11 + + + + + + L2-4-1 + + + + + + + + + 39 + + + + + + + -1 + + + + + + + + + + + + -38 + + + + + + + -1 + + + + + + L2-5-1 + + + + + + + + + 29 + + + + + + + 2 + + + + + + + + + + + + -29 + + + + + + + -4 + + + + + + L3-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + -1 + + + + + + L4-5-1 + + + + + + + + + -39 + + + + + + + 12 + + + + + + + + + + + + 39 + + + + + + + -12 + + + + + + T4-7-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T4-9-1 + + + + + + + + + 29 + + + + + + + -6 + + + + + + + + + + + + + -29 + + + + + + + 11 + + + + + + + T5-6-1 + + + + + + + + + 45 + + + + + + + 14 + + + + + + + + + + + + + -45 + + + + + + + -10 + + + + + + + L7-8-1 + + + + + + + + + 0 + + + + + + + -22 + + + + + + + + + + + + 0 + + + + + + + 24 + + + + + + L7-9-1 + + + + + + + + + 0 + + + + + + + 22 + + + + + + + + + + + + 0 + + + + + + + -22 + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL11 + VL12 + VL13 + VL14 + VL2 + VL3 + VL4 + VL5 + VL6 + VL7 + VL8 + VL9 + + diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg new file mode 100644 index 000000000..4ef8aa595 --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg @@ -0,0 +1,1026 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL10 + + + + VL11 + + + + VL12 + + + + VL13 + + + + VL14 + + + + VL2 + + + + VL3 + + + + VL4 + + + + VL5 + + + + VL6 + + + + VL7 + + + + VL8 + + + + VL9 + + + + + + L1-2-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L1-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L10-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L13-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-3-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L3-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L4-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T4-7-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T4-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T5-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L7-8-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L7-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL11 + VL12 + VL13 + VL14 + VL2 + VL3 + VL4 + VL5 + VL6 + VL7 + VL8 + VL9 + + diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg new file mode 100644 index 000000000..fb4ec530d --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg @@ -0,0 +1,1020 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL10 + + + + VL11 + + + + VL12 + + + + VL13 + + + + VL14 + + + + VL2 + + + + VL3 + + + + VL4 + + + + VL5 + + + + VL6 + + + + VL7 + + + + VL8 + + + + VL9 + + + + + + L1-2-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L1-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L10-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L13-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-3-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L3-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L4-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T4-7-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T4-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T5-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L7-8-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L7-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL11 + VL12 + VL13 + VL14 + VL2 + VL3 + VL4 + VL5 + VL6 + VL7 + VL8 + VL9 + + diff --git a/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg b/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg new file mode 100644 index 000000000..6dae12818 --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg @@ -0,0 +1,1026 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL10 + + + + VL11 + + + + VL12 + + + + VL13 + + + + VL14 + + + + VL2 + + + + VL3 + + + + VL4 + + + + VL5 + + + + VL6 + + + + VL7 + + + + VL8 + + + + VL9 + + + + + + L1-2-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L1-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L10-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L13-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-3-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L3-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L4-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T4-7-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T4-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T5-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L7-8-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L7-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL11 + VL12 + VL13 + VL14 + VL2 + VL3 + VL4 + VL5 + VL6 + VL7 + VL8 + VL9 + + diff --git a/network-area-diagram/src/test/resources/IEEE_24_bus.svg b/network-area-diagram/src/test/resources/IEEE_24_bus.svg new file mode 100644 index 000000000..1be2aebc1 --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_24_bus.svg @@ -0,0 +1,1868 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL10 + + + + VL11 + + + + VL12 + + + + VL13 + + + + VL14 + + + + VL15 + + + + VL16 + + + + VL17 + + + + VL18 + + + + VL19 + + + + VL2 + + + + VL20 + + + + VL21 + + + + VL22 + + + + VL23 + + + + VL24 + + + + VL3 + + + + VL4 + + + + VL5 + + + + VL6 + + + + VL7 + + + + VL8 + + + + VL9 + + + + + + L-1-2-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-3-1-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-1-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-10-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-8-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T-5-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T-11-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T-12-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L-11-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-11-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T-11-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L-12-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-12-23-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T-9-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L-23-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-14-16-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-16-15-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-15-21-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-21-15-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-15-24-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-16-17-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-16-19-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-17-18-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-17-22-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-18-21-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-18-21-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-19-20-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-19-20-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-2-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-2-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-20-23-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-20-23-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-21-22-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T-24-3-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L-3-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-4-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-7-8-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L-8-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL11 + VL12 + VL13 + VL14 + VL15 + VL16 + VL17 + VL18 + VL19 + VL2 + VL20 + VL21 + VL22 + VL23 + VL24 + VL3 + VL4 + VL5 + VL6 + VL7 + VL8 + VL9 + + diff --git a/network-area-diagram/src/test/resources/IEEE_24_bus.xiidm b/network-area-diagram/src/test/resources/IEEE_24_bus.xiidm new file mode 100644 index 000000000..45a409c70 --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_24_bus.xiidm @@ -0,0 +1,386 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/network-area-diagram/src/test/resources/IEEE_30_bus.svg b/network-area-diagram/src/test/resources/IEEE_30_bus.svg new file mode 100644 index 000000000..518e90dac --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_30_bus.svg @@ -0,0 +1,2038 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL10 + + + + VL11 + + + + VL12 + + + + VL13 + + + + VL14 + + + + VL15 + + + + VL16 + + + + VL17 + + + + VL18 + + + + VL19 + + + + VL2 + + + + VL20 + + + + VL21 + + + + VL22 + + + + VL23 + + + + VL24 + + + + VL25 + + + + VL26 + + + + VL27 + + + + VL28 + + + + VL29 + + + + VL3 + + + + VL30 + + + + VL4 + + + + VL5 + + + + VL6 + + + + VL7 + + + + VL8 + + + + VL9 + + + + + + L1-2-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L1-3-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L10-20-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L10-17-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L10-21-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L10-22-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T6-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L9-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-15-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-16-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T4-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L14-15-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L15-18-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L15-23-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L16-17-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L18-19-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L19-20-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L21-22-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L22-24-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L23-24-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L24-25-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L25-26-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L25-27-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L27-29-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L27-30-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T28-27-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L8-28-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-28-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L29-30-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L3-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L4-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L5-7-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-7-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-8-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T6-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL11 + VL12 + VL13 + VL14 + VL15 + VL16 + VL17 + VL18 + VL19 + VL2 + VL20 + VL21 + VL22 + VL23 + VL24 + VL25 + VL26 + VL27 + VL28 + VL29 + VL3 + VL30 + VL4 + VL5 + VL6 + VL7 + VL8 + VL9 + + diff --git a/network-area-diagram/src/test/resources/IEEE_57_bus.svg b/network-area-diagram/src/test/resources/IEEE_57_bus.svg new file mode 100644 index 000000000..79d7282f2 --- /dev/null +++ b/network-area-diagram/src/test/resources/IEEE_57_bus.svg @@ -0,0 +1,3892 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL10 + + + + + VL11 + + + + + + VL12 + + + + VL13 + + + + + VL14 + + + + + VL15 + + + + + VL16 + + + + VL17 + + + + VL19 + + + + VL2 + + + + VL20 + + + + + VL22 + + + + VL23 + + + + VL24 + + + + + + VL27 + + + + VL28 + + + + VL3 + + + + VL30 + + + + VL31 + + + + VL32 + + + + + VL33 + + + + VL35 + + + + VL36 + + + + VL37 + + + + VL38 + + + + VL39 + + + + + VL4 + + + + + VL40 + + + + + VL42 + + + + VL44 + + + + VL47 + + + + VL48 + + + + VL5 + + + + VL50 + + + + VL52 + + + + VL53 + + + + VL54 + + + + VL6 + + + + VL7 + + + + + VL8 + + + + VL9 + + + + + + + L1-2-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L1-15-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L1-16-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L1-17-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-10-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L10-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L50-51-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T10-51-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L9-11-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L11-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L41-42-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L41-43-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L56-41-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T11-41-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T11-43-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L9-12-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-16-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L12-17-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L9-13-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L13-14-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L13-15-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L48-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L49-50-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L38-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T13-49-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L14-15-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L46-47-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T14-46-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L3-15-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L44-45-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T15-45-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L18-19-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L19-20-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L2-3-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L21-22-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T21-20-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L22-23-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L22-38-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L23-24-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L25-30-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L26-27-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T24-25-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T24-25-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T24-26-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L27-28-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L28-29-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L3-4-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L30-31-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L31-32-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L32-33-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L34-35-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T34-32-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L35-36-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L36-37-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L36-40-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L37-38-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L37-39-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L38-44-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L38-48-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L57-56-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T39-57-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L4-5-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L4-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T4-18-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + T4-18-2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L56-42-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T40-56-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L47-48-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L5-6-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L29-52-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L52-53-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L53-54-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L54-55-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-7-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L6-8-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + L7-8-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T7-29-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + L8-9-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + T9-55-1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + VL10 + VL11 + VL12 + VL13 + VL14 + VL15 + VL16 + VL17 + VL19 + VL2 + VL20 + VL22 + VL23 + VL24 + VL27 + VL28 + VL3 + VL30 + VL31 + VL32 + VL33 + VL35 + VL36 + VL37 + VL38 + VL39 + VL4 + VL40 + VL42 + VL44 + VL47 + VL48 + VL5 + VL50 + VL52 + VL53 + VL54 + VL6 + VL7 + VL8 + VL9 + + diff --git a/network-area-diagram/src/test/resources/current_limits.svg b/network-area-diagram/src/test/resources/current_limits.svg new file mode 100644 index 000000000..14ee76c8d --- /dev/null +++ b/network-area-diagram/src/test/resources/current_limits.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 101 + + + + + + + 150 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + Voltage level 1 + Voltage level 2 + + diff --git a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg new file mode 100644 index 000000000..6067defe3 --- /dev/null +++ b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg @@ -0,0 +1,837 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + A 230 + A 400 + B 230 + C 20 + C 230 + C 66 + D 10 + D 66 + E 10 + F 10 + G 10 + H 10 + I 10 + J 10 + K 10 + + diff --git a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg new file mode 100644 index 000000000..e8c6c455e --- /dev/null +++ b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg @@ -0,0 +1,837 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + A 230 + A 400 + B 230 + C 20 + C 230 + C 66 + D 10 + D 66 + E 10 + F 10 + G 10 + H 10 + I 10 + J 10 + K 10 + + diff --git a/network-area-diagram/src/test/resources/edge_info_double_labels.svg b/network-area-diagram/src/test/resources/edge_info_double_labels.svg new file mode 100644 index 000000000..4bb04fc40 --- /dev/null +++ b/network-area-diagram/src/test/resources/edge_info_double_labels.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 145 + 243 + + + + + + + + + + + + 145 + 243 + + + + + + + + + + + + 145 + 243 + + + + + + + + + + + + + + + + + + VL_11 + VL_132 + VL_33 + + diff --git a/network-area-diagram/src/test/resources/edge_info_missing_label.svg b/network-area-diagram/src/test/resources/edge_info_missing_label.svg new file mode 100644 index 000000000..335256ac8 --- /dev/null +++ b/network-area-diagram/src/test/resources/edge_info_missing_label.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Voltage level 1 + Voltage level 2 + + diff --git a/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg b/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg new file mode 100644 index 000000000..7b49ebdb1 --- /dev/null +++ b/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ext + int + + + + + + + + + + + + ext + int + + + + + + + + + + + Voltage level 1 + Voltage level 2 + + diff --git a/network-area-diagram/src/test/resources/edge_info_shift.svg b/network-area-diagram/src/test/resources/edge_info_shift.svg new file mode 100644 index 000000000..2808ff403 --- /dev/null +++ b/network-area-diagram/src/test/resources/edge_info_shift.svg @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + Voltage level 1 + Voltage level 2 + vl3 + + diff --git a/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg b/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg new file mode 100644 index 000000000..615a11114 --- /dev/null +++ b/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + VL1 + + + + VL2 + + + + + + HVDC + + + + + + + + + 100 + + + + + + + 50 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + VL1 + VL2 + + diff --git a/network-area-diagram/src/test/resources/hvdc.svg b/network-area-diagram/src/test/resources/hvdc.svg new file mode 100644 index 000000000..f1bcd1672 --- /dev/null +++ b/network-area-diagram/src/test/resources/hvdc.svg @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + S1VL1 + + + + S1VL2 + + + + S2VL1 + + + + S3VL1 + + + + S4VL1 + + + + + + TWT + + + + + + + + + -80 + + + + + + + -10 + + + + + + + + + + + + + 80 + + + + + + + 5 + + + + + + + HVDC1 + + + + + + + + + 10 + + + + + + + -512 + + + + + + + + + + + + -10 + + + + + + + -120 + + + + + + + HVDC2 + + + + + + + + + 81 + + + + + + + 0 + + + + + + + + + + + + -79 + + + + + + + 0 + + + + + + + LINE_S2S3 + + + + + + + + + 110 + + + + + + + 190 + + + + + + + + + + + + -110 + + + + + + + -185 + + + + + + LINE_S3S4 + + + + + + + + + 240 + + + + + + + 2 + + + + + + + + + + + + -240 + + + + + + + 3 + + + + + + + + + + + + + + S1VL1 + S1VL2 + S2VL1 + S3VL1 + S4VL1 + + diff --git a/network-area-diagram/src/test/resources/parallel_transformers.svg b/network-area-diagram/src/test/resources/parallel_transformers.svg new file mode 100644 index 000000000..42b3b6934 --- /dev/null +++ b/network-area-diagram/src/test/resources/parallel_transformers.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + vl1 + vl2 + + diff --git a/network-area-diagram/src/test/resources/simple-eu-loop100.svg b/network-area-diagram/src/test/resources/simple-eu-loop100.svg new file mode 100644 index 000000000..e40b87a67 --- /dev/null +++ b/network-area-diagram/src/test/resources/simple-eu-loop100.svg @@ -0,0 +1,912 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BBE1AA1 + + + + + BBE2AA1 + + + + DDE1AA1 + + + + DDE2AA1 + + + + DDE3AA1 + + + + FFR1AA1 + + + + + FFR3AA1 + + + + NNL1AA1 + + + + NNL2AA1 + + + + NNL3AA1 + + + + + + BBE1AA1 BBE2AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + BBE1AA1 BBE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + BBE2AA1 BBE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + NNL2AA1 BBE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + BBE1AA1 BBE3AA1 2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + BBE2AA1 FFR3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + DDE1AA1 DDE2AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + DDE1AA1 DDE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + DDE2AA1 DDE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + DDE2AA1 NNL3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR2AA1 DDE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR1AA1 FFR2AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR1AA1 FFR3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR2AA1 FFR3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR1AA1 FFR2AA1 2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + NNL1AA1 NNL2AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + NNL1AA1 NNL3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + NNL2AA1 NNL3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + BBE1AA1 + BBE2AA1 + DDE1AA1 + DDE2AA1 + DDE3AA1 + FFR1AA1 + FFR3AA1 + NNL1AA1 + NNL2AA1 + NNL3AA1 + + diff --git a/network-area-diagram/src/test/resources/simple-eu-loop80.svg b/network-area-diagram/src/test/resources/simple-eu-loop80.svg new file mode 100644 index 000000000..438f515bc --- /dev/null +++ b/network-area-diagram/src/test/resources/simple-eu-loop80.svg @@ -0,0 +1,912 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BBE1AA1 + + + + + BBE2AA1 + + + + DDE1AA1 + + + + DDE2AA1 + + + + DDE3AA1 + + + + FFR1AA1 + + + + + FFR3AA1 + + + + NNL1AA1 + + + + NNL2AA1 + + + + NNL3AA1 + + + + + + BBE1AA1 BBE2AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + BBE1AA1 BBE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + BBE2AA1 BBE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + NNL2AA1 BBE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + BBE1AA1 BBE3AA1 2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + BBE2AA1 FFR3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + DDE1AA1 DDE2AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + DDE1AA1 DDE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + DDE2AA1 DDE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + DDE2AA1 NNL3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR2AA1 DDE3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR1AA1 FFR2AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR1AA1 FFR3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR2AA1 FFR3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + FFR1AA1 FFR2AA1 2 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + NNL1AA1 NNL2AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + NNL1AA1 NNL3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + NNL2AA1 NNL3AA1 1 + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + BBE1AA1 + BBE2AA1 + DDE1AA1 + DDE2AA1 + DDE3AA1 + FFR1AA1 + FFR3AA1 + NNL1AA1 + NNL2AA1 + NNL3AA1 + + diff --git a/network-area-diagram/src/test/resources/simple-eu.svg b/network-area-diagram/src/test/resources/simple-eu.svg new file mode 100644 index 000000000..e37e73c59 --- /dev/null +++ b/network-area-diagram/src/test/resources/simple-eu.svg @@ -0,0 +1,912 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BBE1AA1 + + + + + BBE2AA1 + + + + DDE1AA1 + + + + DDE2AA1 + + + + DDE3AA1 + + + + FFR1AA1 + + + + + FFR3AA1 + + + + NNL1AA1 + + + + NNL2AA1 + + + + NNL3AA1 + + + + + + BBE1AA1 BBE2AA1 1 + + + + + + + + + -1150 + + + + + + + 41 + + + + + + + + + + + + 1150 + + + + + + + 41 + + + + + + BBE1AA1 BBE3AA1 1 + + + + + + + + + -618 + + + + + + + 12 + + + + + + + + + + + + 618 + + + + + + + 12 + + + + + + BBE2AA1 BBE3AA1 1 + + + + + + + + + 533 + + + + + + + 9 + + + + + + + + + + + + -533 + + + + + + + 9 + + + + + + NNL2AA1 BBE3AA1 1 + + + + + + + + + -1183 + + + + + + + 44 + + + + + + + + + + + + 1183 + + + + + + + 44 + + + + + + BBE1AA1 BBE3AA1 2 + + + + + + + + + -267 + + + + + + + 8 + + + + + + + + + + + + + 267 + + + + + + + 4 + + + + + + + BBE2AA1 FFR3AA1 1 + + + + + + + + + 318 + + + + + + + 3 + + + + + + + + + + + + -318 + + + + + + + 3 + + + + + + DDE1AA1 DDE2AA1 1 + + + + + + + + + -394 + + + + + + + 5 + + + + + + + + + + + + 394 + + + + + + + 5 + + + + + + DDE1AA1 DDE3AA1 1 + + + + + + + + + -606 + + + + + + + 11 + + + + + + + + + + + + 606 + + + + + + + 11 + + + + + + DDE2AA1 DDE3AA1 1 + + + + + + + + + -212 + + + + + + + 1 + + + + + + + + + + + + 212 + + + + + + + 1 + + + + + + DDE2AA1 NNL3AA1 1 + + + + + + + + + -1183 + + + + + + + 44 + + + + + + + + + + + + 1183 + + + + + + + 44 + + + + + + FFR2AA1 DDE3AA1 1 + + + + + + + + + 1317 + + + + + + + 54 + + + + + + + + + + + + -1317 + + + + + + + 54 + + + + + + FFR1AA1 FFR2AA1 1 + + + + + + + + + 1523 + + + + + + + 73 + + + + + + + + + + + + -1523 + + + + + + + 73 + + + + + + FFR1AA1 FFR3AA1 1 + + + + + + + + + -148 + + + + + + + 1 + + + + + + + + + + + + 148 + + + + + + + 1 + + + + + + FFR2AA1 FFR3AA1 1 + + + + + + + + + -1670 + + + + + + + 87 + + + + + + + + + + + + 1670 + + + + + + + 87 + + + + + + FFR1AA1 FFR2AA1 2 + + + + + + + + + 376 + + + + + + + 4 + + + + + + + + + + + + + -376 + + + + + + + 9 + + + + + + + NNL1AA1 NNL2AA1 1 + + + + + + + + + -61 + + + + + + + 0 + + + + + + + + + + + + 61 + + + + + + + 0 + + + + + + NNL1AA1 NNL3AA1 1 + + + + + + + + + 561 + + + + + + + 10 + + + + + + + + + + + + -561 + + + + + + + 10 + + + + + + NNL2AA1 NNL3AA1 1 + + + + + + + + + 622 + + + + + + + 12 + + + + + + + + + + + + -622 + + + + + + + 12 + + + + + + + + + + + + + + + + + + + BBE1AA1 + BBE2AA1 + DDE1AA1 + DDE2AA1 + DDE3AA1 + FFR1AA1 + FFR3AA1 + NNL1AA1 + NNL2AA1 + NNL3AA1 + + diff --git a/network-area-diagram/src/test/resources/simple-eu.uct b/network-area-diagram/src/test/resources/simple-eu.uct new file mode 100644 index 000000000..31dd72aa4 --- /dev/null +++ b/network-area-diagram/src/test/resources/simple-eu.uct @@ -0,0 +1,43 @@ +##C 2007.05.01 +Generated by powsybl, 2021-06-05T22:56:17.145+02:00 +Case date: 2014-01-16T08:30:00.000+01:00 +##N +##ZBE +BBE1AA1 0 2 400.00 3000.00 0.00000 -1500.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +BBE2AA1 0 2 400.00 1000.00 0.00000 -3000.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +BBE3AA1 0 2 400.00 1500.00 0.00000 -2500.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +##ZDE +DDE1AA1 0 2 400.00 3500.00 0.00000 -2500.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +DDE2AA1 0 2 400.00 3000.00 0.00000 -2000.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +DDE3AA1 0 2 400.00 2000.00 0.00000 -1500.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +##ZFR +FFR1AA1 0 2 400.00 1000.00 0.00000 -2000.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +FFR2AA1 0 2 400.00 3500.00 0.00000 -2000.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +FFR3AA1 0 2 400.00 1500.00 0.00000 -3000.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +##ZNL +NNL1AA1 0 2 400.00 1000.00 0.00000 -1500.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +NNL2AA1 0 2 400.00 1000.00 0.00000 -500.00 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +NNL3AA1 0 2 400.00 2500.00 0.00000 -2500.0 0.00000 0.00000 -4999.0 4999.00 -9000.0 F +##L +BBE1AA1 BBE2AA1 1 0 0.0000 10.000 0.000000 5000 +BBE1AA1 BBE3AA1 1 0 0.0000 10.000 0.000000 5000 +BBE2AA1 BBE3AA1 1 0 0.0000 10.000 0.000000 5000 +BBE2AA1 FFR3AA1 1 0 0.0000 10.000 0.000000 5000 +DDE1AA1 DDE2AA1 1 0 0.0000 10.000 0.000000 5000 +DDE1AA1 DDE3AA1 1 0 0.0000 10.000 0.000000 5000 +DDE2AA1 DDE3AA1 1 0 0.0000 10.000 0.000000 5000 +DDE2AA1 NNL3AA1 1 0 0.0000 10.000 0.000000 5000 +FFR1AA1 FFR2AA1 1 0 0.0000 10.000 0.000000 5000 +FFR1AA1 FFR3AA1 1 0 0.0000 10.000 0.000000 5000 +FFR2AA1 DDE3AA1 1 0 0.0000 10.000 0.000000 5000 +FFR2AA1 FFR3AA1 1 0 0.0000 10.000 0.000000 5000 +NNL1AA1 NNL2AA1 1 0 0.0000 10.000 0.000000 5000 +NNL1AA1 NNL3AA1 1 0 0.0000 10.000 0.000000 5000 +NNL2AA1 BBE3AA1 1 0 0.0000 10.000 0.000000 5000 +NNL2AA1 NNL3AA1 1 0 0.0000 10.000 0.000000 5000 +##T +BBE1AA1 BBE3AA1 2 0 400.0 400.0 0.2080 25.500 -2.16250 1.0625 1227 +FFR1AA1 FFR2AA1 2 0 400.0 400.0 0.0867 13.988 -2.32750 1.2216 2329 +##R +BBE1AA1 BBE3AA1 2 1.626 90.00 33 5 SYMM +FFR1AA1 FFR2AA1 2 2.568 90.00 17 -5 SYMM diff --git a/network-area-diagram/src/test/resources/vl_description_id.svg b/network-area-diagram/src/test/resources/vl_description_id.svg new file mode 100644 index 000000000..2a0282c3e --- /dev/null +++ b/network-area-diagram/src/test/resources/vl_description_id.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + vl1 + vl2 + + diff --git a/network-area-diagram/src/test/resources/vl_description_substation.svg b/network-area-diagram/src/test/resources/vl_description_substation.svg new file mode 100644 index 000000000..1e2ea18b2 --- /dev/null +++ b/network-area-diagram/src/test/resources/vl_description_substation.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + Voltage level 1 + Substation 1 + + + Voltage level 2 + Substation 1 + + + diff --git a/network-area-diagram/src/test/resources/vl_description_substation_id.svg b/network-area-diagram/src/test/resources/vl_description_substation_id.svg new file mode 100644 index 000000000..144e2f5ca --- /dev/null +++ b/network-area-diagram/src/test/resources/vl_description_substation_id.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + vl1 + s1 + + + vl2 + s1 + + + diff --git a/network-area-diagram/src/test/resources/voltage_limits.svg b/network-area-diagram/src/test/resources/voltage_limits.svg new file mode 100644 index 000000000..9ae92faf9 --- /dev/null +++ b/network-area-diagram/src/test/resources/voltage_limits.svg @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + Voltage level 1 + Voltage level 2 + + diff --git a/pom.xml b/pom.xml index 43587e278..3bce7019e 100644 --- a/pom.xml +++ b/pom.xml @@ -18,18 +18,18 @@ 9 - powsybl-single-line-diagram - 2.14.0-SNAPSHOT + powsybl-diagram + 3.0.0-SNAPSHOT pom - Single line diagram - PowSyBl single line diagram parent project + PowSyBl Diagram + PowSyBl Diagram parent project http://www.powsybl.org - scm:git:https://github.com/powsybl/powsybl-single-line-diagram.git - scm:git:https://github.com/powsybl/powsybl-single-line-diagram.git - https://github.com/powsybl/powsybl-single-line-diagram + scm:git:https://github.com/powsybl/powsybl-diagram.git + scm:git:https://github.com/powsybl/powsybl-diagram.git + https://github.com/powsybl/powsybl-diagram @@ -54,25 +54,28 @@ - single-line-diagram-cgmes - single-line-diagram-core - single-line-diagram-distribution + distribution-diagram + network-area-diagram + single-line-diagram + util 11 - 1.7.22 - - ../single-line-diagram-distribution/target/site/jacoco-aggregate/jacoco.xml, - ../../single-line-diagram-distribution/target/site/jacoco-aggregate/jacoco.xml, + ../distribution-diagram/target/site/jacoco-aggregate/jacoco.xml, + ../../distribution-diagram/target/site/jacoco-aggregate/jacoco.xml, **/generated/**/* + 5.0.0-RC1 + + 5.8.1 + 0.23.0 @@ -112,6 +115,12 @@ pom import
+ + + com.powsybl + powsybl-network-area-diagram + ${project.version} + ${project.groupId} powsybl-single-line-diagram-core @@ -127,6 +136,18 @@ powsybl-single-line-diagram-cgmes-iidm-extensions ${project.version} + + ${project.groupId} + powsybl-single-line-diagram-cgmes-layout + ${project.version} + + + com.powsybl + powsybl-diagram-util-forcelayout + ${project.version} + + + com.powsybl powsybl-single-line-diagram-cgmes-iidm-extensions @@ -135,15 +156,52 @@ test - ${project.groupId} - powsybl-single-line-diagram-cgmes-layout - ${project.version} + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + com.powsybl + powsybl-iidm-impl + ${powsybl-core.version} + test - - org.slf4j - jcl-over-slf4j - ${slf4j.version} + com.powsybl + powsybl-ieee-cdf-converter + ${powsybl-core.version} + test + + + com.powsybl + powsybl-iidm-test + ${powsybl-core.version} + test + + + com.powsybl + powsybl-ucte-converter + ${powsybl-core.version} + test + + + com.powsybl + powsybl-config-test + ${powsybl-core.version} + test + + + com.powsybl + powsybl-loadflow-api + ${powsybl-core.version} + test + + + com.powsybl + powsybl-open-loadflow + ${powsybl-olf.version} + test
diff --git a/single-line-diagram/pom.xml b/single-line-diagram/pom.xml new file mode 100644 index 000000000..63008e275 --- /dev/null +++ b/single-line-diagram/pom.xml @@ -0,0 +1,31 @@ + + + + 4.0.0 + + + com.powsybl + powsybl-diagram + 3.0.0-SNAPSHOT + + + pom + powsybl-single-line-diagram + Single-line diagram + Single-line diagram aggregator module + + + single-line-diagram-cgmes + single-line-diagram-core + + + diff --git a/single-line-diagram-cgmes/pom.xml b/single-line-diagram/single-line-diagram-cgmes/pom.xml similarity index 89% rename from single-line-diagram-cgmes/pom.xml rename to single-line-diagram/single-line-diagram-cgmes/pom.xml index 6e85b4ab2..c9607b583 100644 --- a/single-line-diagram-cgmes/pom.xml +++ b/single-line-diagram/single-line-diagram-cgmes/pom.xml @@ -15,12 +15,12 @@ powsybl-single-line-diagram com.powsybl - 2.14.0-SNAPSHOT + 3.0.0-SNAPSHOT powsybl-single-line-diagram-cgmes Single line diagram CGMES - Single line diagram CGMES parent project + Single line diagram CGMES aggregator module pom @@ -29,4 +29,4 @@ single-line-diagram-cgmes-layout - \ No newline at end of file + diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/pom.xml b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/pom.xml similarity index 98% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/pom.xml rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/pom.xml index 54a2ed676..f8e38c22b 100644 --- a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/pom.xml +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/pom.xml @@ -12,7 +12,7 @@ com.powsybl powsybl-single-line-diagram-cgmes - 2.14.0-SNAPSHOT + 3.0.0-SNAPSHOT powsybl-single-line-diagram-cgmes-dl-conversion @@ -76,4 +76,4 @@ test - \ No newline at end of file + diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCouplingDeviceDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCouplingDeviceDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCouplingDeviceDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCouplingDeviceDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractInjectionDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractInjectionDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractInjectionDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractInjectionDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractLineDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractLineDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractLineDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractLineDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractNodeDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractNodeDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractNodeDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/AbstractNodeDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusbarDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusbarDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusbarDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/BusbarDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessor.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessor.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessor.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessor.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModel.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModel.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModel.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModel.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLUtils.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLUtils.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLUtils.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLUtils.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ContextUtils.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ContextUtils.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ContextUtils.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ContextUtils.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/DanglingLineDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/DanglingLineDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/DanglingLineDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/DanglingLineDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ExportContext.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ExportContext.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ExportContext.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ExportContext.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/GeneratorDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/GeneratorDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/GeneratorDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/GeneratorDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/HvdcLineDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/HvdcLineDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/HvdcLineDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/HvdcLineDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LineDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LineDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LineDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LineDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LoadDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LoadDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LoadDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/LoadDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ShuntDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ShuntDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ShuntDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/ShuntDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SvcDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SvcDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SvcDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SvcDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SwitchDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SwitchDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SwitchDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/SwitchDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/Transformer3WDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/Transformer3WDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/Transformer3WDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/Transformer3WDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/TransformerDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/TransformerDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/TransformerDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/TransformerDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/VoltageLevelDiagramDataExporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/VoltageLevelDiagramDataExporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/VoltageLevelDiagramDataExporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/VoltageLevelDiagramDataExporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractCouplingDeviceDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractCouplingDeviceDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractCouplingDeviceDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractCouplingDeviceDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractInjectionDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractInjectionDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractInjectionDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/AbstractInjectionDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusbarDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusbarDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusbarDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/BusbarDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/GeneratorDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/GeneratorDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/GeneratorDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/GeneratorDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/HvdcLineDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/HvdcLineDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/HvdcLineDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/HvdcLineDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LineDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LineDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LineDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LineDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LoadDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LoadDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LoadDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/LoadDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/ShuntDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/ShuntDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/ShuntDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/ShuntDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SvcDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SvcDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SvcDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SvcDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SwitchDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SwitchDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SwitchDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/SwitchDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/TransformerDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/TransformerDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/TransformerDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/TransformerDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/VoltageLevelDiagramDataImporter.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/VoltageLevelDiagramDataImporter.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/VoltageLevelDiagramDataImporter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/java/com/powsybl/sld/cgmes/dl/conversion/importers/VoltageLevelDiagramDataImporter.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/resources/CGMES-DL.sparql b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/resources/CGMES-DL.sparql similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/resources/CGMES-DL.sparql rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/main/resources/CGMES-DL.sparql diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/AbstractCgmesDLTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessorTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessorTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessorTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImportPostProcessorTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLImporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModelTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModelTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModelTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/CgmesDLModelTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractCouplingDeviceDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractCouplingDeviceDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractCouplingDeviceDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractCouplingDeviceDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractInjectionDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractInjectionDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractInjectionDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractInjectionDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractNodeLineDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractNodeLineDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractNodeLineDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractNodeLineDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractVoltageLevelDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractVoltageLevelDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractVoltageLevelDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/AbstractVoltageLevelDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusbarDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusbarDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusbarDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/BusbarDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/DanglingLineDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/DanglingLineDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/DanglingLineDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/DanglingLineDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/GeneratorDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/GeneratorDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/GeneratorDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/GeneratorDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/HvdcLineDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/HvdcLineDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/HvdcLineDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/HvdcLineDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LineDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LineDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LineDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LineDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LoadDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LoadDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LoadDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/LoadDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/ShuntDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/ShuntDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/ShuntDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/ShuntDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SvcDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SvcDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SvcDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SvcDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SwitchDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SwitchDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SwitchDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/SwitchDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/Transformer3WDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/Transformer3WDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/Transformer3WDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/Transformer3WDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/TransformerDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/TransformerDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/TransformerDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/TransformerDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/VoltageLevelDiagramDataExporterTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/VoltageLevelDiagramDataExporterTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/VoltageLevelDiagramDataExporterTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-conversion/src/test/java/com/powsybl/sld/cgmes/dl/conversion/exporters/VoltageLevelDiagramDataExporterTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/pom.xml b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/pom.xml similarity index 98% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/pom.xml rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/pom.xml index e84ae7b82..32a4d1f4a 100644 --- a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/pom.xml +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/pom.xml @@ -12,7 +12,7 @@ com.powsybl powsybl-single-line-diagram-cgmes - 2.14.0-SNAPSHOT + 3.0.0-SNAPSHOT powsybl-single-line-diagram-cgmes-iidm-extensions diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/CouplingDeviceDiagramData.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/CouplingDeviceDiagramData.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/CouplingDeviceDiagramData.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/CouplingDeviceDiagramData.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramPoint.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramPoint.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramPoint.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramPoint.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramTerminal.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramTerminal.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramTerminal.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DiagramTerminal.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/InjectionDiagramData.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/InjectionDiagramData.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/InjectionDiagramData.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/InjectionDiagramData.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramData.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramData.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramData.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramData.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramData.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramData.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramData.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramData.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NodeDiagramData.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NodeDiagramData.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NodeDiagramData.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NodeDiagramData.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramData.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramData.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramData.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramData.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramData.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramData.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramData.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/main/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramData.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractCouplingDeviceDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractCouplingDeviceDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractCouplingDeviceDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractCouplingDeviceDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractInjectionDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractInjectionDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractInjectionDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractInjectionDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractLineDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractLineDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractLineDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractLineDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractNodeDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractNodeDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractNodeDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/AbstractNodeDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusbarDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusbarDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusbarDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/BusbarDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DanglingLineDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DanglingLineDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DanglingLineDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/DanglingLineDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/GeneratorDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/GeneratorDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/GeneratorDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/GeneratorDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/HvdcLineDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/HvdcLineDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/HvdcLineDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/HvdcLineDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LineDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LoadDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LoadDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LoadDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/LoadDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/NetworkDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/Networks.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/Networks.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/Networks.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/Networks.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ShuntDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ShuntDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ShuntDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ShuntDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/StaticVarCompensatorDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/StaticVarCompensatorDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/StaticVarCompensatorDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/StaticVarCompensatorDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/SwitchDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/SwitchDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/SwitchDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/SwitchDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/ThreeWindingsTransformerDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/TransformerDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/TransformerDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/TransformerDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/TransformerDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramDataTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramDataTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramDataTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-dl-iidm-extensions/src/test/java/com/powsybl/sld/cgmes/dl/iidm/extensions/VoltageLevelDiagramDataTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/pom.xml b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/pom.xml similarity index 98% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/pom.xml rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/pom.xml index e240b103e..ea9027a82 100644 --- a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/pom.xml +++ b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/pom.xml @@ -15,7 +15,7 @@ com.powsybl powsybl-single-line-diagram-cgmes - 2.14.0-SNAPSHOT + 3.0.0-SNAPSHOT powsybl-single-line-diagram-cgmes-layout diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/AbstractCgmesLayout.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/AbstractCgmesLayout.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/AbstractCgmesLayout.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/AbstractCgmesLayout.java diff --git a/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 similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayout.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayout.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayoutFactory.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayoutFactory.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayoutFactory.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayoutFactory.java diff --git a/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 similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayout.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayout.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactory.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactory.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactory.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactory.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactorySmartSelector.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactorySmartSelector.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactorySmartSelector.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactorySmartSelector.java diff --git a/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 similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayout.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayout.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutFactory.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutFactory.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutFactory.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutFactory.java diff --git a/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 similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesDlExporterTool.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesDlExporterTool.java diff --git a/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 similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsConverter.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsConverter.java diff --git a/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 similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractCgmesVoltageLevelLayoutTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractCgmesVoltageLevelLayoutTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractNodeTopologyTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractNodeTopologyTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractNodeTopologyTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/AbstractNodeTopologyTest.java diff --git a/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 similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/BusTopologyTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/BusTopologyTest.java diff --git a/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 similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutTest.java diff --git a/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 similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/DoubleBusbarSectionTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/DoubleBusbarSectionTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesExtensionsTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyHorizontalBusbarTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyHorizontalBusbarTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyHorizontalBusbarTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyHorizontalBusbarTest.java diff --git a/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyVerticalBusbarTest.java b/single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyVerticalBusbarTest.java similarity index 100% rename from single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyVerticalBusbarTest.java rename to single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/test/java/com/powsybl/sld/cgmes/layout/NodeTopologyVerticalBusbarTest.java diff --git a/single-line-diagram-core/doc/CellBlockDecomposer.adoc b/single-line-diagram/single-line-diagram-core/doc/CellBlockDecomposer.adoc similarity index 100% rename from single-line-diagram-core/doc/CellBlockDecomposer.adoc rename to single-line-diagram/single-line-diagram-core/doc/CellBlockDecomposer.adoc diff --git a/single-line-diagram-core/doc/CellDetector.adoc b/single-line-diagram/single-line-diagram-core/doc/CellDetector.adoc similarity index 100% rename from single-line-diagram-core/doc/CellDetector.adoc rename to single-line-diagram/single-line-diagram-core/doc/CellDetector.adoc diff --git a/single-line-diagram-core/doc/GraphBuilderCreationRequirements.adoc b/single-line-diagram/single-line-diagram-core/doc/GraphBuilderCreationRequirements.adoc similarity index 100% rename from single-line-diagram-core/doc/GraphBuilderCreationRequirements.adoc rename to single-line-diagram/single-line-diagram-core/doc/GraphBuilderCreationRequirements.adoc diff --git a/single-line-diagram-core/doc/Index.adoc b/single-line-diagram/single-line-diagram-core/doc/Index.adoc similarity index 100% rename from single-line-diagram-core/doc/Index.adoc rename to single-line-diagram/single-line-diagram-core/doc/Index.adoc diff --git a/single-line-diagram-core/doc/PositionFinder.adoc b/single-line-diagram/single-line-diagram-core/doc/PositionFinder.adoc similarity index 100% rename from single-line-diagram-core/doc/PositionFinder.adoc rename to single-line-diagram/single-line-diagram-core/doc/PositionFinder.adoc diff --git a/single-line-diagram-core/doc/Subsections.adoc b/single-line-diagram/single-line-diagram-core/doc/Subsections.adoc similarity index 100% rename from single-line-diagram-core/doc/Subsections.adoc rename to single-line-diagram/single-line-diagram-core/doc/Subsections.adoc diff --git a/single-line-diagram-core/doc/images/CellType_INTERN.svg b/single-line-diagram/single-line-diagram-core/doc/images/CellType_INTERN.svg similarity index 100% rename from single-line-diagram-core/doc/images/CellType_INTERN.svg rename to single-line-diagram/single-line-diagram-core/doc/images/CellType_INTERN.svg diff --git a/single-line-diagram-core/doc/images/CellTypes.svg b/single-line-diagram/single-line-diagram-core/doc/images/CellTypes.svg similarity index 100% rename from single-line-diagram-core/doc/images/CellTypes.svg rename to single-line-diagram/single-line-diagram-core/doc/images/CellTypes.svg diff --git a/single-line-diagram-core/doc/images/Cells.svg b/single-line-diagram/single-line-diagram-core/doc/images/Cells.svg similarity index 100% rename from single-line-diagram-core/doc/images/Cells.svg rename to single-line-diagram/single-line-diagram-core/doc/images/Cells.svg diff --git a/single-line-diagram-core/doc/images/PowsyblLayout_HPos.svg b/single-line-diagram/single-line-diagram-core/doc/images/PowsyblLayout_HPos.svg similarity index 100% rename from single-line-diagram-core/doc/images/PowsyblLayout_HPos.svg rename to single-line-diagram/single-line-diagram-core/doc/images/PowsyblLayout_HPos.svg diff --git a/single-line-diagram-core/doc/images/busbars.svg b/single-line-diagram/single-line-diagram-core/doc/images/busbars.svg similarity index 100% rename from single-line-diagram-core/doc/images/busbars.svg rename to single-line-diagram/single-line-diagram-core/doc/images/busbars.svg diff --git a/single-line-diagram-core/doc/images/rawGraph.svg b/single-line-diagram/single-line-diagram-core/doc/images/rawGraph.svg similarity index 100% rename from single-line-diagram-core/doc/images/rawGraph.svg rename to single-line-diagram/single-line-diagram-core/doc/images/rawGraph.svg diff --git a/single-line-diagram-core/doc/images/rawGraph.svg.2019_04_01_16_43_32.0.svg b/single-line-diagram/single-line-diagram-core/doc/images/rawGraph.svg.2019_04_01_16_43_32.0.svg similarity index 100% rename from single-line-diagram-core/doc/images/rawGraph.svg.2019_04_01_16_43_32.0.svg rename to single-line-diagram/single-line-diagram-core/doc/images/rawGraph.svg.2019_04_01_16_43_32.0.svg diff --git a/single-line-diagram-core/doc/images/rawGraphExtern.svg b/single-line-diagram/single-line-diagram-core/doc/images/rawGraphExtern.svg similarity index 100% rename from single-line-diagram-core/doc/images/rawGraphExtern.svg rename to single-line-diagram/single-line-diagram-core/doc/images/rawGraphExtern.svg diff --git a/single-line-diagram-core/doc/images/rawGraphExternShunt.svg b/single-line-diagram/single-line-diagram-core/doc/images/rawGraphExternShunt.svg similarity index 100% rename from single-line-diagram-core/doc/images/rawGraphExternShunt.svg rename to single-line-diagram/single-line-diagram-core/doc/images/rawGraphExternShunt.svg diff --git a/single-line-diagram-core/doc/images/rawGraphIntern.svg b/single-line-diagram/single-line-diagram-core/doc/images/rawGraphIntern.svg similarity index 100% rename from single-line-diagram-core/doc/images/rawGraphIntern.svg rename to single-line-diagram/single-line-diagram-core/doc/images/rawGraphIntern.svg diff --git a/single-line-diagram-core/doc/images/rawPosition.svg b/single-line-diagram/single-line-diagram-core/doc/images/rawPosition.svg similarity index 100% rename from single-line-diagram-core/doc/images/rawPosition.svg rename to single-line-diagram/single-line-diagram-core/doc/images/rawPosition.svg diff --git a/single-line-diagram-core/doc/images/subsections.svg b/single-line-diagram/single-line-diagram-core/doc/images/subsections.svg similarity index 100% rename from single-line-diagram-core/doc/images/subsections.svg rename to single-line-diagram/single-line-diagram-core/doc/images/subsections.svg diff --git a/single-line-diagram-core/doc/images/verticalBusConnectionPattern.svg b/single-line-diagram/single-line-diagram-core/doc/images/verticalBusConnectionPattern.svg similarity index 100% rename from single-line-diagram-core/doc/images/verticalBusConnectionPattern.svg rename to single-line-diagram/single-line-diagram-core/doc/images/verticalBusConnectionPattern.svg diff --git a/single-line-diagram-core/pom.xml b/single-line-diagram/single-line-diagram-core/pom.xml similarity index 98% rename from single-line-diagram-core/pom.xml rename to single-line-diagram/single-line-diagram-core/pom.xml index 54dc0bdcd..40ba77f5c 100644 --- a/single-line-diagram-core/pom.xml +++ b/single-line-diagram/single-line-diagram-core/pom.xml @@ -14,7 +14,7 @@ com.powsybl powsybl-single-line-diagram - 2.14.0-SNAPSHOT + 3.0.0-SNAPSHOT powsybl-single-line-diagram-core diff --git a/single-line-diagram-core/src/main/java-templates/com/powsybl/sld/util/PowsyblSingleLineDiagramVersion.java b/single-line-diagram/single-line-diagram-core/src/main/java-templates/com/powsybl/sld/util/PowsyblSingleLineDiagramVersion.java similarity index 100% rename from single-line-diagram-core/src/main/java-templates/com/powsybl/sld/util/PowsyblSingleLineDiagramVersion.java rename to single-line-diagram/single-line-diagram-core/src/main/java-templates/com/powsybl/sld/util/PowsyblSingleLineDiagramVersion.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/AbstractSingleLineDiagramCommand.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/AbstractSingleLineDiagramCommand.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/AbstractSingleLineDiagramCommand.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/AbstractSingleLineDiagramCommand.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagram.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagram.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagramTool.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/SingleLineDiagramTool.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/GraphBuilder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/GraphBuilder.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/builders/GraphBuilder.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/GraphBuilder.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/NetworkGraphBuilder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/NetworkGraphBuilder.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/builders/NetworkGraphBuilder.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/NetworkGraphBuilder.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/RawGraphBuilder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/RawGraphBuilder.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/builders/RawGraphBuilder.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/RawGraphBuilder.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/SubstationRawBuilder.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/builders/VoltageLevelRawBuilder.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/builders/VoltageLevelRawBuilder.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractLayout.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractLayout.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractLayout.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractLayout.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractPositionFinder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractPositionFinder.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractPositionFinder.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractPositionFinder.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractSubstationLayout.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractSubstationLayout.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractSubstationLayout.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractSubstationLayout.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractVoltageLevelLayout.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractVoltageLevelLayout.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractVoltageLevelLayout.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/AbstractVoltageLevelLayout.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/BlockOrganizer.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/BlockOrganizer.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/BlockOrganizer.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/BlockOrganizer.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/BlockPositionner.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/BlockPositionner.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/BlockPositionner.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/BlockPositionner.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCellHeightBlockVisitor.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCellHeightBlockVisitor.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCellHeightBlockVisitor.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCellHeightBlockVisitor.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCoordBlockVisitor.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCoordBlockVisitor.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCoordBlockVisitor.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCoordBlockVisitor.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCoordCellVisitor.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCoordCellVisitor.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCoordCellVisitor.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CalculateCoordCellVisitor.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CellBlockDecomposer.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CellBlockDecomposer.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CellBlockDecomposer.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CellBlockDecomposer.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CellDetector.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CellDetector.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CellDetector.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/CellDetector.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/GraphRefiner.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/GraphRefiner.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/GraphRefiner.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/GraphRefiner.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/GraphTraversal.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/GraphTraversal.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/GraphTraversal.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/GraphTraversal.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalBusLane.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalBusLane.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalBusLane.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalBusLane.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalBusLaneManager.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalBusLaneManager.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalBusLaneManager.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalBusLaneManager.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayout.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayout.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayout.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayout.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayoutFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayoutFactory.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayoutFactory.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/HorizontalSubstationLayoutFactory.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/ImplicitCellDetector.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/ImplicitCellDetector.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/ImplicitCellDetector.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/ImplicitCellDetector.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesHorizontal.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesHorizontal.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesHorizontal.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesHorizontal.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesVertical.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesVertical.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesVertical.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InfosNbSnakeLinesVertical.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InternCellSide.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InternCellSide.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InternCellSide.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/InternCellSide.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LBSCluster.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LBSCluster.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LBSCluster.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LBSCluster.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/Layout.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/Layout.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/Layout.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/Layout.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutContext.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutContext.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutContext.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutContext.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutParameters.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LayoutParameters.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LegBusSet.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LegBusSet.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LegBusSet.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/LegBusSet.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionByClusterVoltageLevelLayoutFactorySmartSelector.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionByClusterVoltageLevelLayoutFactorySmartSelector.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionByClusterVoltageLevelLayoutFactorySmartSelector.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionByClusterVoltageLevelLayoutFactorySmartSelector.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionFinder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionFinder.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionFinder.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionFinder.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionFromExtensionVoltageLevelLayoutFactorySmartSelector.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionFromExtensionVoltageLevelLayoutFactorySmartSelector.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionFromExtensionVoltageLevelLayoutFactorySmartSelector.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionFromExtensionVoltageLevelLayoutFactorySmartSelector.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayout.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayout.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayout.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayout.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactory.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactory.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactory.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayout.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayout.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayout.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayout.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayoutFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayoutFactory.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayoutFactory.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/RandomVoltageLevelLayoutFactory.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactory.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactory.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactory.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/Subsection.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/Subsection.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/Subsection.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/Subsection.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/SubstationLayoutFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/SubstationLayoutFactory.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/SubstationLayoutFactory.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/SubstationLayoutFactory.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/TopologicallyConnectedNodesSet.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/TopologicallyConnectedNodesSet.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/TopologicallyConnectedNodesSet.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/TopologicallyConnectedNodesSet.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/TopologyCalculation.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/TopologyCalculation.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/TopologyCalculation.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/TopologyCalculation.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayout.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayout.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayout.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayout.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayoutFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayoutFactory.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayoutFactory.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VerticalSubstationLayoutFactory.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactory.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactory.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactory.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactorySmartSelector.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactorySmartSelector.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactorySmartSelector.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/VoltageLevelLayoutFactorySmartSelector.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/ZoneLayoutFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/ZoneLayoutFactory.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/ZoneLayoutFactory.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/ZoneLayoutFactory.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/HBLaneManagerByClustering.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/HBLaneManagerByClustering.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/HBLaneManagerByClustering.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/HBLaneManagerByClustering.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/LBSClusterSide.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/LBSClusterSide.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/LBSClusterSide.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/LBSClusterSide.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/Link.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/Link.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/Link.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/Link.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/Links.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/Links.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/Links.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/Links.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/PositionByClustering.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/PositionByClustering.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/PositionByClustering.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionbyclustering/PositionByClustering.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionfromextension/HBLaneManagerByExtension.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionfromextension/HBLaneManagerByExtension.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionfromextension/HBLaneManagerByExtension.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionfromextension/HBLaneManagerByExtension.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionfromextension/PositionFromExtension.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionfromextension/PositionFromExtension.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionfromextension/PositionFromExtension.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/positionfromextension/PositionFromExtension.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/AnchorOrientation.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/AnchorOrientation.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/AnchorOrientation.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/AnchorOrientation.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/AnchorPoint.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/AnchorPoint.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/AnchorPoint.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/AnchorPoint.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/Component.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/Component.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/Component.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/Component.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentLibrary.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentLibrary.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentLibrary.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentLibrary.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentSize.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentSize.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentSize.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentSize.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentTypeName.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentTypeName.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentTypeName.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ComponentTypeName.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/Components.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/Components.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/Components.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/Components.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ConvergenceComponentLibrary.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ConvergenceComponentLibrary.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/ConvergenceComponentLibrary.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ConvergenceComponentLibrary.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ResourcesComponentLibrary.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ResourcesComponentLibrary.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/ResourcesComponentLibrary.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/ResourcesComponentLibrary.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/library/SubComponent.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/SubComponent.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/library/SubComponent.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/library/SubComponent.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractComposedBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractComposedBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractComposedBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractComposedBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractParallelBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractParallelBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractParallelBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractParallelBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractPrimaryBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractPrimaryBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractPrimaryBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/AbstractPrimaryBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/Block.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/Block.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/Block.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/Block.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BlockVisitor.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BlockVisitor.java similarity index 96% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BlockVisitor.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BlockVisitor.java index 646d0dea5..c33922b10 100644 --- a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BlockVisitor.java +++ b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BlockVisitor.java @@ -1,28 +1,28 @@ -/** - * 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.blocks; - -/** - * @author Benoit Jeanson - */ - -public interface BlockVisitor { - - void visit(BodyPrimaryBlock block); - - void visit(LegPrimaryBlock block); - - void visit(FeederPrimaryBlock block); - - void visit(UndefinedBlock block); - - void visit(BodyParallelBlock block); - - void visit(SerialBlock block); - - void visit(LegParallelBlock block); -} +/** + * 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.blocks; + +/** + * @author Benoit Jeanson + */ + +public interface BlockVisitor { + + void visit(BodyPrimaryBlock block); + + void visit(LegPrimaryBlock block); + + void visit(FeederPrimaryBlock block); + + void visit(UndefinedBlock block); + + void visit(BodyParallelBlock block); + + void visit(SerialBlock block); + + void visit(LegParallelBlock block); +} diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BodyParallelBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BodyParallelBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BodyParallelBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BodyParallelBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BodyPrimaryBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BodyPrimaryBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BodyPrimaryBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/BodyPrimaryBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/ComposedBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/ComposedBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/ComposedBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/ComposedBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/FeederPrimaryBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/FeederPrimaryBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/FeederPrimaryBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/FeederPrimaryBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegParallelBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegParallelBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegParallelBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegParallelBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegPrimaryBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegPrimaryBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegPrimaryBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/LegPrimaryBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/PrimaryBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/PrimaryBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/PrimaryBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/PrimaryBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/SerialBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/SerialBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/SerialBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/SerialBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/UndefinedBlock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/UndefinedBlock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/UndefinedBlock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/blocks/UndefinedBlock.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/AbstractBusCell.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/AbstractBusCell.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/AbstractBusCell.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/AbstractBusCell.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/AbstractCell.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/AbstractCell.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/AbstractCell.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/AbstractCell.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/BusCell.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/BusCell.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/BusCell.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/BusCell.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/Cell.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/Cell.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/Cell.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/Cell.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/CellVisitor.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/CellVisitor.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/CellVisitor.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/CellVisitor.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/ExternCell.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/ExternCell.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/ExternCell.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/ExternCell.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/InternCell.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/InternCell.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/InternCell.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/InternCell.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/ShuntCell.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/ShuntCell.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/ShuntCell.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/cells/ShuntCell.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Coord.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Coord.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Coord.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Coord.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Direction.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Direction.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Orientation.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Orientation.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Orientation.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Orientation.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Point.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Point.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Point.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Point.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Position.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Position.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Position.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Position.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Side.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Side.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Side.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/coordinate/Side.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/AbstractBaseGraph.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/AbstractBaseGraph.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/AbstractBaseGraph.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/AbstractBaseGraph.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/AbstractGraph.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/AbstractGraph.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/AbstractGraph.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/AbstractGraph.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/BaseGraph.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/BaseGraph.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/BaseGraph.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/BaseGraph.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/Graph.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/Graph.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/Graph.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/Graph.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/NodeFactory.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/NodeFactory.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/NodeFactory.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/NodeFactory.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/SubstationGraph.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/SubstationGraph.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/SubstationGraph.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/SubstationGraph.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelGraph.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelGraph.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelGraph.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelGraph.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelInfos.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelInfos.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelInfos.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelInfos.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/ZoneGraph.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/ZoneGraph.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/ZoneGraph.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/ZoneGraph.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/AbstractNode.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/AbstractNode.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/AbstractNode.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/AbstractNode.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/BranchEdge.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/BranchEdge.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/BranchEdge.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/BranchEdge.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/BusNode.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/BusNode.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/BusNode.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/BusNode.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/ConnectivityNode.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/ConnectivityNode.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/ConnectivityNode.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/ConnectivityNode.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Edge.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Edge.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Edge.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Edge.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/EquipmentNode.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/EquipmentNode.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/EquipmentNode.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/EquipmentNode.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Feeder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Feeder.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Feeder.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Feeder.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/FeederNode.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/FeederNode.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/FeederNode.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/FeederNode.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/FeederType.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/FeederType.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/FeederType.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/FeederType.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Middle2WTNode.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Middle2WTNode.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Middle2WTNode.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Middle2WTNode.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Middle3WTNode.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Middle3WTNode.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Middle3WTNode.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Middle3WTNode.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/MiddleTwtNode.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/MiddleTwtNode.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/MiddleTwtNode.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/MiddleTwtNode.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Node.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/Node.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/NodeSide.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/NodeSide.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/NodeSide.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/NodeSide.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/SwitchNode.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/SwitchNode.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/SwitchNode.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/SwitchNode.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/BaseFeeder.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/BaseFeeder.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/BaseFeeder.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/BaseFeeder.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederTwLeg.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederTwLeg.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederTwLeg.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederTwLeg.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederWithSides.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederWithSides.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederWithSides.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/nodes/feeders/FeederWithSides.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessor.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessor.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessor.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessor.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessorMock.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessorMock.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessorMock.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/postprocessor/GraphBuildPostProcessorMock.java diff --git a/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/AbstractDiagramLabelProvider.java similarity index 100% rename from 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/AbstractDiagramLabelProvider.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractFeederInfo.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractFeederInfo.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractFeederInfo.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/AbstractFeederInfo.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BasicStyleProvider.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BasicStyleProvider.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BusInfo.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BusInfo.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BusInfo.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/BusInfo.java diff --git a/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/DefaultDiagramLabelProvider.java similarity index 100% rename from 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/DefaultDiagramLabelProvider.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultSVGWriter.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DefaultSVGWriter.java diff --git a/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/DiagramLabelProvider.java similarity index 100% rename from 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/DiagramLabelProvider.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyleProvider.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyleProvider.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyles.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyles.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyles.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DiagramStyles.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DirectionalFeederInfo.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/DirectionalFeederInfo.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/ElectricalNodeInfo.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/ElectricalNodeInfo.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/ElectricalNodeInfo.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/ElectricalNodeInfo.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/FeederInfo.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/FeederInfo.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/FeederInfo.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/FeederInfo.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/GraphMetadata.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/GraphMetadata.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/GraphMetadata.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/GraphMetadata.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelPosition.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelPosition.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelPosition.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/LabelPosition.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/SVGWriter.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/SVGWriter.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/ValueFormatter.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/ValueFormatter.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/ValueFormatter.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/ValueFormatter.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/WireConnection.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/WireConnection.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/svg/WireConnection.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/svg/WireConnection.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/util/AbstractBaseVoltageDiagramStyleProvider.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/AbstractBaseVoltageDiagramStyleProvider.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/util/AbstractBaseVoltageDiagramStyleProvider.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/AbstractBaseVoltageDiagramStyleProvider.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/util/DomUtil.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/DomUtil.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/util/DomUtil.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/DomUtil.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/util/NominalVoltageDiagramStyleProvider.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/NominalVoltageDiagramStyleProvider.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/util/NominalVoltageDiagramStyleProvider.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/NominalVoltageDiagramStyleProvider.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/util/TopologicalStyleProvider.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/TopologicalStyleProvider.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/util/TopologicalStyleProvider.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/TopologicalStyleProvider.java diff --git a/single-line-diagram-core/src/main/java/com/powsybl/sld/util/TopologyVisitorId.java b/single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/TopologyVisitorId.java similarity index 100% rename from single-line-diagram-core/src/main/java/com/powsybl/sld/util/TopologyVisitorId.java rename to single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/util/TopologyVisitorId.java diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding1.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding1.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding1.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding1.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding2.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding2.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding2.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/2-windings-transformer-winding2.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding1.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding1.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding1.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding1.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding2.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding2.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding2.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding2.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding3.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding3.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding3.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/3-windings-transformer-winding3.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/arrow-down.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/arrow-down.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/arrow-down.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/arrow-down.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/arrow-up.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/arrow-up.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/arrow-up.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/arrow-up.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/breaker-closed.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/breaker-closed.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/breaker-closed.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/breaker-closed.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/breaker-open.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/breaker-open.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/breaker-open.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/breaker-open.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/bus_connection.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/bus_connection.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/bus_connection.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/bus_connection.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/capacitor.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/capacitor.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/capacitor.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/capacitor.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.css b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.css similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.css rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.css diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.json b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.json similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.json rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.json diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/disconnector-closed.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/disconnector-closed.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/disconnector-closed.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/disconnector-closed.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/disconnector-open.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/disconnector-open.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/disconnector-open.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/disconnector-open.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/flash.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/flash.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/flash.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/flash.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/generator.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/generator.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/generator.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/generator.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/inductor.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/inductor.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/inductor.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/inductor.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/load-break-switch-closed.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/load-break-switch-closed.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/load-break-switch-closed.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/load-break-switch-closed.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/load-break-switch-open.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/load-break-switch-open.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/load-break-switch-open.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/load-break-switch-open.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/load.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/load.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/load.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/load.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/lock.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/lock.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/lock.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/lock.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/node.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/node.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/node.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/node.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-arrow.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-arrow.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-arrow.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-arrow.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-winding1.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-winding1.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-winding1.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-winding1.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-winding2.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-winding2.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-winding2.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/phase-shifter-winding2.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/svc.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/svc.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/svc.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/svc.svg diff --git a/single-line-diagram-core/src/main/resources/ConvergenceLibrary/vsc.svg b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/vsc.svg similarity index 100% rename from single-line-diagram-core/src/main/resources/ConvergenceLibrary/vsc.svg rename to single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/vsc.svg diff --git a/single-line-diagram-core/src/main/resources/baseVoltages.css b/single-line-diagram/single-line-diagram-core/src/main/resources/baseVoltages.css similarity index 100% rename from single-line-diagram-core/src/main/resources/baseVoltages.css rename to single-line-diagram/single-line-diagram-core/src/main/resources/baseVoltages.css diff --git a/single-line-diagram-core/src/main/resources/highlightLineStates.css b/single-line-diagram/single-line-diagram-core/src/main/resources/highlightLineStates.css similarity index 100% rename from single-line-diagram-core/src/main/resources/highlightLineStates.css rename to single-line-diagram/single-line-diagram-core/src/main/resources/highlightLineStates.css diff --git a/single-line-diagram-core/src/main/resources/tautologies.css b/single-line-diagram/single-line-diagram-core/src/main/resources/tautologies.css similarity index 100% rename from single-line-diagram-core/src/main/resources/tautologies.css rename to single-line-diagram/single-line-diagram-core/src/main/resources/tautologies.css diff --git a/single-line-diagram-core/src/main/resources/topologicalBaseVoltages.css b/single-line-diagram/single-line-diagram-core/src/main/resources/topologicalBaseVoltages.css similarity index 100% rename from single-line-diagram-core/src/main/resources/topologicalBaseVoltages.css rename to single-line-diagram/single-line-diagram-core/src/main/resources/topologicalBaseVoltages.css diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/AbstractTestCase.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/AbstractTestCase.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/builders/NetworkGraphBuilderTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/builders/NetworkGraphBuilderTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/builders/NetworkGraphBuilderTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/builders/NetworkGraphBuilderTest.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/AbstractTestCaseIidm.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/AbstractTestCaseIidm.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/AbstractTestCaseIidm.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/AbstractTestCaseIidm.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/CreateNetworksUtil.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/CreateNetworksUtil.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/CreateNetworksUtil.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/CreateNetworksUtil.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase10TestBreakerToBus.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase10TestBreakerToBus.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase10TestBreakerToBus.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase10TestBreakerToBus.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase11SubstationGraph.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase11SubstationGraph.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase11SubstationGraph.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase11SubstationGraph.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase12GraphWith3WT.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase12GraphWith3WT.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase12GraphWith3WT.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase12GraphWith3WT.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase13ZoneGraph.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase13ZoneGraph.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase13ZoneGraph.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase13ZoneGraph.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase15GraphWithVoltageIndicator.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase15GraphWithVoltageIndicator.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase15GraphWithVoltageIndicator.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase15GraphWithVoltageIndicator.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1BusBreaker.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1BusBreaker.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1BusBreaker.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1BusBreaker.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1inverted.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1inverted.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1inverted.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase1inverted.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase2StackedCell.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase2StackedCell.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase2StackedCell.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase2StackedCell.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase3Coupling.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase3Coupling.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase3Coupling.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase3Coupling.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase3TripleCoupling.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase3TripleCoupling.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase3TripleCoupling.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase3TripleCoupling.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase4NotParallelel.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase4NotParallelel.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase4NotParallelel.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase4NotParallelel.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntHorizontal.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntHorizontal.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntHorizontal.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntHorizontal.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntVertical.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntVertical.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntVertical.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase5ShuntVertical.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase6CouplingNonFlatHorizontal.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase6CouplingNonFlatHorizontal.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase6CouplingNonFlatHorizontal.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase6CouplingNonFlatHorizontal.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase6InternalConnection.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase6InternalConnection.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase6InternalConnection.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase6InternalConnection.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase7CellDetectionIssue.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase7CellDetectionIssue.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase7CellDetectionIssue.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase7CellDetectionIssue.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase7DoubleDJ.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase7DoubleDJ.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase7DoubleDJ.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase7DoubleDJ.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase8JumpOverStacked.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase8JumpOverStacked.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase8JumpOverStacked.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCase8JumpOverStacked.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseConsecutiveShunts.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseConsecutiveShunts.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousBus.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseFictitiousBus.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseGraphAdaptCellHeightToContent.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseGraphAdaptCellHeightToContent.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseGraphAdaptCellHeightToContent.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseGraphAdaptCellHeightToContent.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseLoadBreakSwitch.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseLoadBreakSwitch.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseMissingBusbarPosition.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseMissingBusbarPosition.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseMissingBusbarPosition.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestCaseMissingBusbarPosition.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestDoubleForkNode.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestDoubleForkNode.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestDoubleForkNode.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestDoubleForkNode.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFeederInfos.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFeederInfos.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFlatSection.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFlatSection.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFlatSection.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestFlatSection.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesBusBreaker.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesBusBreaker.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesNodeBreaker.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestInternalBranchesNodeBreaker.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsBusBreaker.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsBusBreaker.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsNodeBreaker.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestNodeDecoratorsNodeBreaker.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSVGWriter.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSVGWriter.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSerialBlock.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSerialBlock.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSerialBlock.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSerialBlock.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSerialParallelBlock.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSerialParallelBlock.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSerialParallelBlock.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSerialParallelBlock.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSingleLineDiagramClass.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestSingleLineDiagramClass.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestTopologyCalculation.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestTopologyCalculation.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestTopologyCalculation.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestTopologyCalculation.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestUnicityNodeIdWithMutipleNetwork.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/iidm/TestUnicityNodeIdWithMutipleNetwork.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/layout/ComponentsOnBusTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/ComponentsOnBusTest.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/layout/LayoutParametersTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/LayoutParametersTest.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactoryTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactoryTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactoryTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/PositionVoltageLevelLayoutFactoryTest.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactoryTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactoryTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactoryTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/layout/SmartVoltageLevelLayoutFactoryTest.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/library/AnchorPointTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/library/AnchorPointTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/library/AnchorPointTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/library/AnchorPointTest.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/library/ComponentLibraryTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/library/ComponentLibraryTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/library/ComponentLibraryTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/library/ComponentLibraryTest.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/library/ComponentsTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/library/ComponentsTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/library/ComponentsTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/library/ComponentsTest.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/model/AddNodeGraphTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/model/AddNodeGraphTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/model/AddNodeGraphTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/model/AddNodeGraphTest.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/model/ZoneGraphTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/model/ZoneGraphTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/model/ZoneGraphTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/model/ZoneGraphTest.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/AbstractTestCaseRaw.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/AbstractTestCaseRaw.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestAddExternalComponent.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestAddExternalComponent.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase1.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase1.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase11SubstationGraph.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase11SubstationGraph.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase11SubstationGraph.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase11SubstationGraph.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase2.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase2.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase2.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase2.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase3.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase3.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase3.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase3.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase4.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase4.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase4.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase4.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase5H.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase5H.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase5H.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase5H.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase5V.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase5V.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase5V.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase5V.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase6.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase6.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase6.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase6.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase7CellDetectionIssue.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase7CellDetectionIssue.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase7CellDetectionIssue.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCase7CellDetectionIssue.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseComplexCoupling.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseComplexCoupling.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseShuntArrangement.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseShuntArrangement.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseShuntArrangement.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestCaseShuntArrangement.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestIncompleteFeederIssue.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestIncompleteFeederIssue.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestIncompleteFeederIssue.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestIncompleteFeederIssue.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInsertFictitiousNodesAtFeeder.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInsertFictitiousNodesAtFeeder.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInternCellExplicitPosition.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInternCellExplicitPosition.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInternCellExplicitPosition.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInternCellExplicitPosition.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInternCellShapes.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInternCellShapes.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInternCellShapes.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestInternCellShapes.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestLanesWithUnileg.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestLanesWithUnileg.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestLanesWithUnileg.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestLanesWithUnileg.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestOrderConsistency.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestOrderConsistency.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestOrderConsistency.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestOrderConsistency.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOnBus.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOnBus.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOnBus.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOnBus.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOrders.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOrders.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOrders.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestParallelFeedersOrders.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestSerialBlocksInternCells.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestSerialBlocksInternCells.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestSerialBlocksInternCells.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestSerialBlocksInternCells.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestUndefinedBlockExternCell.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestUndefinedBlockExternCell.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestUndefinedBlockExternCell.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestUndefinedBlockExternCell.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestUnhandledPatternInternCell.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestUnhandledPatternInternCell.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestUnhandledPatternInternCell.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/raw/TestUnhandledPatternInternCell.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/DiagramStylesTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/DiagramStylesTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/svg/DiagramStylesTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/DiagramStylesTest.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/svg/FeederInfoProviderTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/FeederInfoProviderTest.java diff --git a/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/GraphMetadataTest.java b/single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/GraphMetadataTest.java similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/svg/GraphMetadataTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/svg/GraphMetadataTest.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/util/NominalVoltageStyleTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/NominalVoltageStyleTest.java diff --git a/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 similarity index 100% rename from single-line-diagram-core/src/test/java/com/powsybl/sld/util/TopologicalStyleTest.java rename to single-line-diagram/single-line-diagram-core/src/test/java/com/powsybl/sld/util/TopologicalStyleTest.java diff --git a/single-line-diagram-core/src/test/resources/InternalBranchesBusBreaker.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreaker.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/InternalBranchesBusBreaker.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreaker.svg diff --git a/single-line-diagram-core/src/test/resources/InternalBranchesBusBreakerH.json b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreakerH.json similarity index 100% rename from single-line-diagram-core/src/test/resources/InternalBranchesBusBreakerH.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreakerH.json diff --git a/single-line-diagram-core/src/test/resources/InternalBranchesBusBreakerV.json b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreakerV.json similarity index 100% rename from single-line-diagram-core/src/test/resources/InternalBranchesBusBreakerV.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreakerV.json diff --git a/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreaker.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreaker.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/InternalBranchesNodeBreaker.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreaker.svg diff --git a/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreakerH.json b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreakerH.json similarity index 100% rename from single-line-diagram-core/src/test/resources/InternalBranchesNodeBreakerH.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreakerH.json diff --git a/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreakerV.json b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreakerV.json similarity index 100% rename from single-line-diagram-core/src/test/resources/InternalBranchesNodeBreakerV.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreakerV.json diff --git a/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusBusBreaker.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusBusBreaker.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusBusBreaker.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusBusBreaker.svg diff --git a/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusNodeBreaker.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusNodeBreaker.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusNodeBreaker.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusNodeBreaker.svg diff --git a/single-line-diagram-core/src/test/resources/NodeDecoratorsSwitches.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsSwitches.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/NodeDecoratorsSwitches.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsSwitches.svg diff --git a/single-line-diagram-core/src/test/resources/PacmanLibrary/components.css b/single-line-diagram/single-line-diagram-core/src/test/resources/PacmanLibrary/components.css similarity index 100% rename from single-line-diagram-core/src/test/resources/PacmanLibrary/components.css rename to single-line-diagram/single-line-diagram-core/src/test/resources/PacmanLibrary/components.css diff --git a/single-line-diagram-core/src/test/resources/PacmanLibrary/components.json b/single-line-diagram/single-line-diagram-core/src/test/resources/PacmanLibrary/components.json similarity index 100% rename from single-line-diagram-core/src/test/resources/PacmanLibrary/components.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/PacmanLibrary/components.json diff --git a/single-line-diagram-core/src/test/resources/PacmanLibrary/pacman.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/PacmanLibrary/pacman.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/PacmanLibrary/pacman.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/PacmanLibrary/pacman.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase1.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase1.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1.json diff --git a/single-line-diagram-core/src/test/resources/TestCase1.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase1.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase11Left3wtOrientation.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11Left3wtOrientation.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11Left3wtOrientation.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11Left3wtOrientation.json diff --git a/single-line-diagram-core/src/test/resources/TestCase11Right3wtOrientation.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11Right3wtOrientation.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11Right3wtOrientation.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11Right3wtOrientation.json diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphH.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphH.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphH.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphH.json diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHFirst.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHFirst.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHFirst.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHFirst.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHLast.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHLast.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHLast.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHLast.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHMiddle.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHMiddle.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHMiddle.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHMiddle.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHNone.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHNone.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHNone.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHNone.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHRaw.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHRaw.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHRaw.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHRaw.json diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmart.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmart.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmart.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmart.json diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmartHorizontal.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmartHorizontal.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmartHorizontal.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmartHorizontal.json diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmartVertical.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmartVertical.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmartVertical.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphSmartVertical.json diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphV.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphV.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphV.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphV.json diff --git a/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphVRaw.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphVRaw.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase11SubstationGraphVRaw.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphVRaw.json diff --git a/single-line-diagram-core/src/test/resources/TestCase12GraphVL1.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphVL1.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase12GraphVL1.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphVL1.json diff --git a/single-line-diagram-core/src/test/resources/TestCase12GraphVL2.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphVL2.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase12GraphVL2.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphVL2.json diff --git a/single-line-diagram-core/src/test/resources/TestCase12GraphVL3.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphVL3.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase12GraphVL3.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphVL3.json diff --git a/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosNominalVoltage.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosNominalVoltage.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosNominalVoltage.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosNominalVoltage.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosTopological.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosTopological.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosTopological.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosTopological.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase13ZoneGraph.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraph.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase13ZoneGraph.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraph.json diff --git a/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphNoCoords.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphNoCoords.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase13ZoneGraphNoCoords.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase13ZoneGraphNoCoords.json diff --git a/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicator.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicator.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicator.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicator.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicatorTopological.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicatorTopological.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicatorTopological.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicatorTopological.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase15GraphWithoutVoltageIndicator.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithoutVoltageIndicator.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase15GraphWithoutVoltageIndicator.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithoutVoltageIndicator.svg diff --git a/single-line-diagram-core/src/test/resources/TestCase1BusBreaker.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1BusBreaker.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase1BusBreaker.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1BusBreaker.json diff --git a/single-line-diagram-core/src/test/resources/TestCase1inverted.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1inverted.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase1inverted.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1inverted.json diff --git a/single-line-diagram-core/src/test/resources/TestCase2Stacked.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase2Stacked.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase2Stacked.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase2Stacked.json diff --git a/single-line-diagram-core/src/test/resources/TestCase2UnStackedCell.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase2UnStackedCell.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase2UnStackedCell.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase2UnStackedCell.json diff --git a/single-line-diagram-core/src/test/resources/TestCase3Coupling.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3Coupling.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase3Coupling.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3Coupling.json diff --git a/single-line-diagram-core/src/test/resources/TestCase3Coupling3Bars.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3Coupling3Bars.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase3Coupling3Bars.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3Coupling3Bars.json diff --git a/single-line-diagram-core/src/test/resources/TestCase3Coupling3Bars2Sections.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3Coupling3Bars2Sections.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase3Coupling3Bars2Sections.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3Coupling3Bars2Sections.json diff --git a/single-line-diagram-core/src/test/resources/TestCase3TripleCoupling.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3TripleCoupling.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase3TripleCoupling.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3TripleCoupling.json diff --git a/single-line-diagram-core/src/test/resources/TestCase3TripleCoupling_disconnectorOpen.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3TripleCoupling_disconnectorOpen.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase3TripleCoupling_disconnectorOpen.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase3TripleCoupling_disconnectorOpen.json diff --git a/single-line-diagram-core/src/test/resources/TestCase4NotParallelel.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase4NotParallelel.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase4NotParallelel.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase4NotParallelel.json diff --git a/single-line-diagram-core/src/test/resources/TestCase5H.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase5H.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase5H.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase5H.json diff --git a/single-line-diagram-core/src/test/resources/TestCase5V.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase5V.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase5V.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase5V.json diff --git a/single-line-diagram-core/src/test/resources/TestCase6CouplingNonFlatHorizontal.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase6CouplingNonFlatHorizontal.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase6CouplingNonFlatHorizontal.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase6CouplingNonFlatHorizontal.json diff --git a/single-line-diagram-core/src/test/resources/TestCase6InternalConnection.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase6InternalConnection.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCase6InternalConnection.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCase6InternalConnection.json diff --git a/single-line-diagram-core/src/test/resources/TestCaseComplexCoupling.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseComplexCoupling.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseComplexCoupling.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseComplexCoupling.svg diff --git a/single-line-diagram-core/src/test/resources/TestCaseFictitiousBus.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBus.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseFictitiousBus.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBus.svg diff --git a/single-line-diagram-core/src/test/resources/TestCaseFictitiousBusTopological.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBusTopological.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseFictitiousBusTopological.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBusTopological.svg diff --git a/single-line-diagram-core/src/test/resources/TestCaseGraphAdaptCellHeightToContent.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseGraphAdaptCellHeightToContent.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseGraphAdaptCellHeightToContent.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseGraphAdaptCellHeightToContent.json diff --git a/single-line-diagram-core/src/test/resources/TestCaseGraphExternCellHeightFixed.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseGraphExternCellHeightFixed.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseGraphExternCellHeightFixed.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseGraphExternCellHeightFixed.json diff --git a/single-line-diagram-core/src/test/resources/TestCaseLoadBreakSwitch.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseLoadBreakSwitch.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseLoadBreakSwitch.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseLoadBreakSwitch.svg diff --git a/single-line-diagram-core/src/test/resources/TestCaseMissingBusbarPositionBusApart.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseMissingBusbarPositionBusApart.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseMissingBusbarPositionBusApart.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseMissingBusbarPositionBusApart.json diff --git a/single-line-diagram-core/src/test/resources/TestCaseMissingBusbarPositionBusParallel.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseMissingBusbarPositionBusParallel.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseMissingBusbarPositionBusParallel.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseMissingBusbarPositionBusParallel.json diff --git a/single-line-diagram-core/src/test/resources/TestCaseShuntArrangementNo.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseShuntArrangementNo.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseShuntArrangementNo.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseShuntArrangementNo.json diff --git a/single-line-diagram-core/src/test/resources/TestCaseShuntArrangementYes.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseShuntArrangementYes.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestCaseShuntArrangementYes.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseShuntArrangementYes.json diff --git a/single-line-diagram-core/src/test/resources/TestDefaultFeedersPosition.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestDefaultFeedersPosition.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestDefaultFeedersPosition.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestDefaultFeedersPosition.json diff --git a/single-line-diagram-core/src/test/resources/TestDefaultFeedersPosition2.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestDefaultFeedersPosition2.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestDefaultFeedersPosition2.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestDefaultFeedersPosition2.json diff --git a/single-line-diagram-core/src/test/resources/TestFeederInfos.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederInfos.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestFeederInfos.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederInfos.svg diff --git a/single-line-diagram-core/src/test/resources/TestFeederOnBus.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBus.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestFeederOnBus.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBus.svg diff --git a/single-line-diagram-core/src/test/resources/TestFeederOnBusDisconnector.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBusDisconnector.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestFeederOnBusDisconnector.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBusDisconnector.svg diff --git a/single-line-diagram-core/src/test/resources/TestFormattingFeederInfos.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFormattingFeederInfos.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestFormattingFeederInfos.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestFormattingFeederInfos.svg diff --git a/single-line-diagram-core/src/test/resources/TestIncompleteFeederIssue.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestIncompleteFeederIssue.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestIncompleteFeederIssue.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestIncompleteFeederIssue.json diff --git a/single-line-diagram-core/src/test/resources/TestInternCellExplicitPosition.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestInternCellExplicitPosition.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestInternCellExplicitPosition.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestInternCellExplicitPosition.json diff --git a/single-line-diagram-core/src/test/resources/TestInternCellShapes.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestInternCellShapes.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestInternCellShapes.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestInternCellShapes.json diff --git a/single-line-diagram-core/src/test/resources/TestPacman.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestPacman.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestPacman.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestPacman.svg diff --git a/single-line-diagram-core/src/test/resources/TestShiftFeedersPosition.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestShiftFeedersPosition.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestShiftFeedersPosition.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestShiftFeedersPosition.json diff --git a/single-line-diagram-core/src/test/resources/TestSldClassSubstation.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstation.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestSldClassSubstation.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstation.svg diff --git a/single-line-diagram-core/src/test/resources/TestSldClassSubstationMetadata.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstationMetadata.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestSldClassSubstationMetadata.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstationMetadata.json diff --git a/single-line-diagram-core/src/test/resources/TestSldClassVl.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVl.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/TestSldClassVl.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVl.svg diff --git a/single-line-diagram-core/src/test/resources/TestSldClassVlMetadata.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVlMetadata.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestSldClassVlMetadata.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVlMetadata.json diff --git a/single-line-diagram-core/src/test/resources/TestUndefinedBlockExternCell.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestUndefinedBlockExternCell.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestUndefinedBlockExternCell.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestUndefinedBlockExternCell.json diff --git a/single-line-diagram-core/src/test/resources/TestUnicityNodeIdNetWork1.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestUnicityNodeIdNetWork1.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestUnicityNodeIdNetWork1.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestUnicityNodeIdNetWork1.json diff --git a/single-line-diagram-core/src/test/resources/TestUnicityNodeIdNetWork2.json b/single-line-diagram/single-line-diagram-core/src/test/resources/TestUnicityNodeIdNetWork2.json similarity index 100% rename from single-line-diagram-core/src/test/resources/TestUnicityNodeIdNetWork2.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestUnicityNodeIdNetWork2.json diff --git a/single-line-diagram-core/src/test/resources/TestWithGreyFrameBackground.css b/single-line-diagram/single-line-diagram-core/src/test/resources/TestWithGreyFrameBackground.css similarity index 100% rename from single-line-diagram-core/src/test/resources/TestWithGreyFrameBackground.css rename to single-line-diagram/single-line-diagram-core/src/test/resources/TestWithGreyFrameBackground.css diff --git a/single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/components.css b/single-line-diagram/single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/components.css similarity index 100% rename from single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/components.css rename to single-line-diagram/single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/components.css diff --git a/single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/components.json b/single-line-diagram/single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/components.json similarity index 100% rename from single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/components.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/components.json diff --git a/single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/voltage-indicator.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/voltage-indicator.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/voltage-indicator.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/VoltageIndicatorLibrary/voltage-indicator.svg diff --git a/single-line-diagram-core/src/test/resources/consecutive_shunts.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/consecutive_shunts.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/consecutive_shunts.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/consecutive_shunts.svg diff --git a/single-line-diagram-core/src/test/resources/consecutive_shunts.xiidm b/single-line-diagram/single-line-diagram-core/src/test/resources/consecutive_shunts.xiidm similarity index 100% rename from single-line-diagram-core/src/test/resources/consecutive_shunts.xiidm rename to single-line-diagram/single-line-diagram-core/src/test/resources/consecutive_shunts.xiidm diff --git a/single-line-diagram-core/src/test/resources/feederInfoTest.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/feederInfoTest.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/feederInfoTest.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/feederInfoTest.svg diff --git a/single-line-diagram-core/src/test/resources/label_on_all_nodes.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/label_on_all_nodes.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/label_on_all_nodes.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/label_on_all_nodes.svg diff --git a/single-line-diagram-core/src/test/resources/noComponentsOnBus.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/noComponentsOnBus.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/noComponentsOnBus.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/noComponentsOnBus.svg diff --git a/single-line-diagram-core/src/test/resources/nominal_voltage_style_substation.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_substation.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/nominal_voltage_style_substation.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_substation.svg diff --git a/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl2.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl2.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/nominal_voltage_style_vl2.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl2.svg diff --git a/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl3.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl3.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/nominal_voltage_style_vl3.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl3.svg diff --git a/single-line-diagram-core/src/test/resources/orderConsistencyClust1.json b/single-line-diagram/single-line-diagram-core/src/test/resources/orderConsistencyClust1.json similarity index 100% rename from single-line-diagram-core/src/test/resources/orderConsistencyClust1.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/orderConsistencyClust1.json diff --git a/single-line-diagram-core/src/test/resources/orderConsistencyClust2.json b/single-line-diagram/single-line-diagram-core/src/test/resources/orderConsistencyClust2.json similarity index 100% rename from single-line-diagram-core/src/test/resources/orderConsistencyClust2.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/orderConsistencyClust2.json diff --git a/single-line-diagram-core/src/test/resources/orderConsistencyExt1.json b/single-line-diagram/single-line-diagram-core/src/test/resources/orderConsistencyExt1.json similarity index 100% rename from single-line-diagram-core/src/test/resources/orderConsistencyExt1.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/orderConsistencyExt1.json diff --git a/single-line-diagram-core/src/test/resources/orderConsistencyExt2.json b/single-line-diagram/single-line-diagram-core/src/test/resources/orderConsistencyExt2.json similarity index 100% rename from single-line-diagram-core/src/test/resources/orderConsistencyExt2.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/orderConsistencyExt2.json diff --git a/single-line-diagram-core/src/test/resources/substDiag_metadata.json b/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_metadata.json similarity index 100% rename from single-line-diagram-core/src/test/resources/substDiag_metadata.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_metadata.json diff --git a/single-line-diagram-core/src/test/resources/substDiag_metadata_nominal_voltage_style.json b/single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_metadata_nominal_voltage_style.json similarity index 100% rename from single-line-diagram-core/src/test/resources/substDiag_metadata_nominal_voltage_style.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/substDiag_metadata_nominal_voltage_style.json diff --git a/single-line-diagram-core/src/test/resources/substation.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/substation.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/substation.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/substation.svg diff --git a/single-line-diagram-core/src/test/resources/substation_feeder_arrow_symmetry.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/substation_feeder_arrow_symmetry.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/substation_feeder_arrow_symmetry.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/substation_feeder_arrow_symmetry.svg diff --git a/single-line-diagram-core/src/test/resources/substation_no_feeder_values.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/substation_no_feeder_values.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/substation_no_feeder_values.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/substation_no_feeder_values.svg diff --git a/single-line-diagram-core/src/test/resources/substation_optimized.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/substation_optimized.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/substation_optimized.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/substation_optimized.svg diff --git a/single-line-diagram-core/src/test/resources/switchesOnBus.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/switchesOnBus.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/switchesOnBus.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/switchesOnBus.svg diff --git a/single-line-diagram-core/src/test/resources/testDoubleForkNode.json b/single-line-diagram/single-line-diagram-core/src/test/resources/testDoubleForkNode.json similarity index 100% rename from single-line-diagram-core/src/test/resources/testDoubleForkNode.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/testDoubleForkNode.json diff --git a/single-line-diagram-core/src/test/resources/testFlatSections.json b/single-line-diagram/single-line-diagram-core/src/test/resources/testFlatSections.json similarity index 100% rename from single-line-diagram-core/src/test/resources/testFlatSections.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/testFlatSections.json diff --git a/single-line-diagram-core/src/test/resources/testLanesWithUnileg.json b/single-line-diagram/single-line-diagram-core/src/test/resources/testLanesWithUnileg.json similarity index 100% rename from single-line-diagram-core/src/test/resources/testLanesWithUnileg.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/testLanesWithUnileg.json diff --git a/single-line-diagram-core/src/test/resources/testParallelFeedersOnBus.json b/single-line-diagram/single-line-diagram-core/src/test/resources/testParallelFeedersOnBus.json similarity index 100% rename from single-line-diagram-core/src/test/resources/testParallelFeedersOnBus.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/testParallelFeedersOnBus.json diff --git a/single-line-diagram-core/src/test/resources/testParallelFeedersOrders.json b/single-line-diagram/single-line-diagram-core/src/test/resources/testParallelFeedersOrders.json similarity index 100% rename from single-line-diagram-core/src/test/resources/testParallelFeedersOrders.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/testParallelFeedersOrders.json diff --git a/single-line-diagram-core/src/test/resources/testSerialBlocksInternCells.json b/single-line-diagram/single-line-diagram-core/src/test/resources/testSerialBlocksInternCells.json similarity index 100% rename from single-line-diagram-core/src/test/resources/testSerialBlocksInternCells.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/testSerialBlocksInternCells.json diff --git a/single-line-diagram-core/src/test/resources/topological_style_substation.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/topological_style_substation.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/topological_style_substation.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/topological_style_substation.svg diff --git a/single-line-diagram-core/src/test/resources/vl1.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl1.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl1.svg diff --git a/single-line-diagram-core/src/test/resources/vl1_external_css.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_external_css.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl1_external_css.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl1_external_css.svg diff --git a/single-line-diagram-core/src/test/resources/vl1_external_css_no_import.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_external_css_no_import.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl1_external_css_no_import.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl1_external_css_no_import.svg diff --git a/single-line-diagram-core/src/test/resources/vl1_multiline_tooltip.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_multiline_tooltip.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl1_multiline_tooltip.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl1_multiline_tooltip.svg diff --git a/single-line-diagram-core/src/test/resources/vl1_optimized.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_optimized.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl1_optimized.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl1_optimized.svg diff --git a/single-line-diagram-core/src/test/resources/vl1_straightWires.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_straightWires.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl1_straightWires.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl1_straightWires.svg diff --git a/single-line-diagram-core/src/test/resources/vl1_tooltip.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_tooltip.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl1_tooltip.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl1_tooltip.svg diff --git a/single-line-diagram-core/src/test/resources/vl2.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl2.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl2.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl2.svg diff --git a/single-line-diagram-core/src/test/resources/vl2_optimized.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl2_optimized.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl2_optimized.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl2_optimized.svg diff --git a/single-line-diagram-core/src/test/resources/vl3.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl3.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl3.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl3.svg diff --git a/single-line-diagram-core/src/test/resources/vl3_optimized.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl3_optimized.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/vl3_optimized.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/vl3_optimized.svg diff --git a/single-line-diagram-core/src/test/resources/vlDiag_metadata.json b/single-line-diagram/single-line-diagram-core/src/test/resources/vlDiag_metadata.json similarity index 100% rename from single-line-diagram-core/src/test/resources/vlDiag_metadata.json rename to single-line-diagram/single-line-diagram-core/src/test/resources/vlDiag_metadata.json diff --git a/single-line-diagram-core/src/test/resources/with_frame_background.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/with_frame_background.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/with_frame_background.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/with_frame_background.svg diff --git a/single-line-diagram-core/src/test/resources/zone.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/zone.svg similarity index 100% rename from single-line-diagram-core/src/test/resources/zone.svg rename to single-line-diagram/single-line-diagram-core/src/test/resources/zone.svg diff --git a/util/pom.xml b/util/pom.xml new file mode 100644 index 000000000..624d991e7 --- /dev/null +++ b/util/pom.xml @@ -0,0 +1,30 @@ + + + + 4.0.0 + + + com.powsybl + powsybl-diagram + 3.0.0-SNAPSHOT + + + pom + powsybl-diagram-util + PowSyBl diagram util + PowSyBl diagram utility classes module + + + util-forcelayout + + + diff --git a/util/util-forcelayout/pom.xml b/util/util-forcelayout/pom.xml new file mode 100644 index 000000000..02b448394 --- /dev/null +++ b/util/util-forcelayout/pom.xml @@ -0,0 +1,59 @@ + + + + 4.0.0 + + + com.powsybl + powsybl-diagram-util + 3.0.0-SNAPSHOT + + + powsybl-diagram-util-forcelayout + PowSyBl diagram util force layout + Force layout for PowSyBl Diagram + + + + + org.codehaus.mojo + templating-maven-plugin + + + org.codehaus.mojo + buildnumber-maven-plugin + + + + + + + + com.powsybl + powsybl-tools + + + org.jgrapht + jgrapht-core + + + org.slf4j + slf4j-api + + + + + junit + junit + test + + + diff --git a/util/util-forcelayout/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilForceLayoutVersion.java b/util/util-forcelayout/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilForceLayoutVersion.java new file mode 100644 index 000000000..a39ca2aa5 --- /dev/null +++ b/util/util-forcelayout/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilForceLayoutVersion.java @@ -0,0 +1,21 @@ +/** + * 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.diagram.util; + +import com.google.auto.service.AutoService; +import com.powsybl.tools.*; + +/** + * @author Florian Dupuy + */ +@AutoService(Version.class) +public class PowsyblDiagramUtilForceLayoutVersion extends AbstractVersion { + + public PowsyblDiagramUtilForceLayoutVersion() { + super("powsybl-diagram-util-forcelayout", "${project.version}", "${buildNumber}", "${scmBranch}", Long.parseLong("${timestamp}")); + } +} diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java new file mode 100644 index 000000000..d37d79d4d --- /dev/null +++ b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.diagram.util.forcelayout; + +import java.util.Collection; + +/** + * @author Mathilde Grapin + */ +public final class BoundingBox { + + private final double left; + private final double bottom; + private final double right; + private final double top; + + private BoundingBox(double left, double top, double right, double bottom) { + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + if (left > right || bottom < top) { + throw new IllegalStateException("Bounding box with negative width or height"); + } + } + + public static BoundingBox computeBoundingBox(Collection points) { + double left = points.stream().mapToDouble(p -> p.getPosition().getX()).min().orElse(-2); + double top = points.stream().mapToDouble(p -> p.getPosition().getY()).min().orElse(-2); + double right = points.stream().mapToDouble(p -> p.getPosition().getX()).max().orElse(2); + double bottom = points.stream().mapToDouble(p -> p.getPosition().getY()).max().orElse(2); + return new BoundingBox(left, top, right, bottom); + } + + public double getHeight() { + return bottom - top; + } + + public double getWidth() { + return right - left; + } + + public double getLeft() { + return left; + } + + public double getTop() { + return top; + } +} diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java new file mode 100644 index 000000000..76e268316 --- /dev/null +++ b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.diagram.util.forcelayout; + +import java.util.Objects; + +/** + * @author Mathilde Grapin + */ +public class Canvas { + private final double width; + private final double height; + private final BoundingBox boundingBox; + private final double margin; + private final double scale; + + public Canvas(BoundingBox boundingBox, double height, double margin) { + this.boundingBox = Objects.requireNonNull(boundingBox); + this.height = height; + this.scale = (height - 2 * margin) / boundingBox.getHeight(); // scale has to be computed and used without margins + this.width = boundingBox.getWidth() * scale + 2 * margin; + this.margin = margin; + } + + public Vector toScreen(Vector position) { + double screenX = (position.getX() - boundingBox.getLeft()) * scale + margin; + double screenY = (position.getY() - boundingBox.getTop()) * scale + margin; + return new Vector(screenX, screenY); + } + + public double getWidth() { + return width; + } + + public double getHeight() { + return height; + } +} diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java new file mode 100644 index 000000000..007f91ab2 --- /dev/null +++ b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java @@ -0,0 +1,360 @@ +/** + * Java transcription of Springy v2.8.0 + * + * Copyright (c) 2010-2018 Dennis Hotson + * Copyright (c) 2021 RTE (https://www.rte-france.com) + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ +package com.powsybl.diagram.util.forcelayout; + +import org.jgrapht.Graph; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.function.Function; + +/** + * The following algorithm is a force layout algorithm. + * It seeks to place the nodes of a graph in such a way that the nodes are well spaced and that there are no unnecessary crossings. + * The algorithm uses an analogy with physics where the nodes of the graph are particles with mass and the edges are springs. + * Force calculations are used to place the nodes. + * + * The algorithm is taken from: https://github.com/dhotson/springy + * + * @author Mathilde Grapin + */ +public class ForceLayout { + private static final Logger LOGGER = LoggerFactory.getLogger(ForceLayout.class); + + /** Deterministic randomness */ + private final Random random = new Random(3L); + + private static final int DEFAULT_MAX_STEPS = 1000; + private static final double DEFAULT_MIN_ENERGY_THRESHOLD = 0.001; + private static final double DEFAULT_DELTA_TIME = 1; + private static final double DEFAULT_REPULSION = 800.0; + private static final double DEFAULT_FRICTION = 500; + private static final double DEFAULT_MAX_SPEED = 100; + /** Spring repulsion is disabled by default */ + private static final double DEFAULT_SPRING_REPULSION_FACTOR = 0.0; + + private int maxSteps; + private double minEnergyThreshold; + private double deltaTime; + private double repulsion; + private double friction; + private double maxSpeed; + private double springRepulsionFactor; + /** Initial location for some nodes */ + private Map initialPoints = Collections.emptyMap(); + /** The location of these nodes should not be modified by the layout */ + private Set fixedNodes = Collections.emptySet(); + + private final Graph graph; + private final Map points = new LinkedHashMap<>(); + private final Set springs = new LinkedHashSet<>(); + + private boolean hasBeenExecuted = false; + + public ForceLayout(Graph graph) { + this.maxSteps = DEFAULT_MAX_STEPS; + this.minEnergyThreshold = DEFAULT_MIN_ENERGY_THRESHOLD; + this.deltaTime = DEFAULT_DELTA_TIME; + this.repulsion = DEFAULT_REPULSION; + this.friction = DEFAULT_FRICTION; + this.maxSpeed = DEFAULT_MAX_SPEED; + this.springRepulsionFactor = DEFAULT_SPRING_REPULSION_FACTOR; + this.graph = Objects.requireNonNull(graph); + } + + public ForceLayout setMaxSteps(int maxSteps) { + this.maxSteps = maxSteps; + return this; + } + + public ForceLayout setMinEnergyThreshold(double minEnergyThreshold) { + this.minEnergyThreshold = minEnergyThreshold; + return this; + } + + public ForceLayout setDeltaTime(double deltaTime) { + this.deltaTime = deltaTime; + return this; + } + + public ForceLayout setRepulsion(double repulsion) { + this.repulsion = repulsion; + return this; + } + + public ForceLayout setFriction(double friction) { + this.friction = friction; + return this; + } + + public ForceLayout setMaxSpeed(double maxSpeed) { + this.maxSpeed = maxSpeed; + return this; + } + + public ForceLayout setSpringRepulsionFactor(double springRepulsionFactor) { + this.springRepulsionFactor = springRepulsionFactor; + return this; + } + + public ForceLayout setInitialPoints(Map initialPoints) { + this.initialPoints = Objects.requireNonNull(initialPoints); + return this; + } + + public ForceLayout setFixedPoints(Map fixedPoints) { + this.initialPoints = Objects.requireNonNull(fixedPoints); + setFixedNodes(fixedPoints.keySet()); + return this; + } + + public ForceLayout setFixedNodes(Set fixedNodes) { + this.fixedNodes = Objects.requireNonNull(fixedNodes); + return this; + } + + private void initializePoints() { + for (V vertex : graph.vertexSet()) { + Point p; + if (initialPoints.containsKey(vertex)) { + p = initialPoints.get(vertex); + } else { + p = new Point(random.nextDouble(), random.nextDouble()); + } + points.put(vertex, p); + } + } + + private void initializeSprings() { + for (E e : graph.edgeSet()) { + Point pointSource = points.get(graph.getEdgeSource(e)); + Point pointTarget = points.get(graph.getEdgeTarget(e)); + if (pointSource != pointTarget) { // no use in force layout to add loops + springs.add(new Spring(pointSource, pointTarget, graph.getEdgeWeight(e))); + } + } + } + + public void execute() { + long start = System.nanoTime(); + + initializePoints(); + initializeSprings(); + + int i; + for (i = 0; i < maxSteps; i++) { + applyCoulombsLawToPoints(); + if (springRepulsionFactor != 0.0) { + applyCoulombsLawToSprings(); + } + applyHookesLaw(); + attractToCenter(); + updateVelocity(); + updatePosition(); + + if (isStable()) { + break; + } + } + + hasBeenExecuted = true; + + long elapsedTime = System.nanoTime() - start; + + LOGGER.info("Number of steps: {}", i); + LOGGER.info("Elapsed time: {}", elapsedTime / 1e9); + } + + private Vector coulombsForce(Vector p1, Vector p2, double repulsion) { + Vector distance = p1.subtract(p2); + Vector direction = distance.normalize(); + return direction.multiply(repulsion).divide(distance.magnitudeSquare() * 0.5 + 0.1); + } + + private void applyCoulombsLawToPoints() { + for (Point point : points.values()) { + Vector p = point.getPosition(); + for (Point otherPoint : points.values()) { + if (!point.equals(otherPoint)) { + point.applyForce(coulombsForce(p, otherPoint.getPosition(), repulsion)); + } + } + } + } + + private void applyCoulombsLawToSprings() { + for (Point point : points.values()) { + Vector p = point.getPosition(); + for (Spring spring : springs) { + Point n1 = spring.getNode1(); + Point n2 = spring.getNode2(); + if (!n1.equals(point) && !n2.equals(point)) { + Vector q1 = spring.getNode1().getPosition(); + Vector q2 = spring.getNode2().getPosition(); + Vector center = q1.add(q2.subtract(q1).multiply(0.5)); + Vector force = coulombsForce(p, center, repulsion * springRepulsionFactor); + point.applyForce(force); + n1.applyForce(force.multiply(-0.5)); + n2.applyForce(force.multiply(-0.5)); + } + } + } + for (Spring spring : springs) { + Point n1 = spring.getNode1(); + Point n2 = spring.getNode2(); + Vector p1 = spring.getNode1().getPosition(); + Vector p2 = spring.getNode2().getPosition(); + Vector center = p1.add(p2.subtract(p1).multiply(0.5)); + for (Spring otherSpring : springs) { + if (!spring.equals(otherSpring)) { + // Compute the repulsion force between centers of the springs + Vector op1 = otherSpring.getNode1().getPosition(); + Vector op2 = otherSpring.getNode2().getPosition(); + Vector otherCenter = op1.add(op2.subtract(op1).multiply(0.5)); + Vector force = coulombsForce(center, otherCenter, repulsion * springRepulsionFactor); + + // And apply it to both points of the spring + n1.applyForce(force); + n2.applyForce(force); + } + } + } + } + + private void applyHookesLaw() { + for (Spring spring : springs) { + Point point1 = spring.getNode1(); + Point point2 = spring.getNode2(); + + Vector distance = point2.getPosition().subtract(point1.getPosition()); + double displacement = spring.getLength() - distance.magnitude(); + Vector direction = distance.normalize(); + + Vector force = direction.multiply(spring.getStiffness() * displacement * 0.5); + point1.applyForce(force.multiply(-1)); + point2.applyForce(force); + } + } + + private void attractToCenter() { + for (Point point : points.values()) { + Vector direction = point.getPosition().multiply(-1); + + point.applyForce(direction.multiply(repulsion / 200.0)); + } + } + + private void updateVelocity() { + for (Point point : points.values()) { + Vector newVelocity = point.getForces().multiply((1 - Math.exp(-deltaTime * friction / point.getMass())) / friction); + point.setVelocity(newVelocity); + + if (point.getVelocity().magnitude() > maxSpeed) { + Vector velocity = point.getVelocity().normalize().multiply(maxSpeed); + point.setVelocity(velocity); + } + + point.resetForces(); + } + } + + private void updatePosition() { + // TODO do not compute forces or update velocities for fixed nodes + // We have computed forces and velocities for all nodes, even for the fixed ones + // We can optimize calculations by ignoring fixed nodes in those calculations + // Here we only update the position for the nodes that do not have fixed positions + for (Map.Entry vertexPoint : points.entrySet()) { + if (fixedNodes.contains(vertexPoint.getKey())) { + continue; + } + Point point = vertexPoint.getValue(); + Vector position = point.getPosition().add(point.getVelocity().multiply(deltaTime)); + point.setPosition(position); + } + } + + private boolean isStable() { + return points.values().stream().allMatch(p -> p.getEnergy() < minEnergyThreshold); + } + + public Vector getStablePosition(V vertex) { + if (!hasBeenExecuted) { + LOGGER.warn("Force layout has not been executed yet"); + } + return points.getOrDefault(vertex, new Point(-1, -1)).getPosition(); + } + + public Set getSprings() { + return springs; + } + + public void toSVG(Function tooltip, Path path) throws IOException { + try (Writer writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { + toSVG(tooltip, writer); + } + } + + public void toSVG(Function tooltip, Writer writer) { + if (!hasBeenExecuted) { + LOGGER.warn("Force layout has not been executed yet"); + return; + } + + BoundingBox boundingBox = BoundingBox.computeBoundingBox(points.values()); + Canvas canvas = new Canvas(boundingBox, 600, 10); + + PrintWriter printWriter = new PrintWriter(writer); + + printWriter.println(""); + printWriter.printf(Locale.US, "%n", canvas.getWidth(), canvas.getHeight()); + printWriter.println(""); + + points.forEach((vertex, point) -> point.toSVG(printWriter, canvas, tooltip, vertex)); + + for (Spring spring : springs) { + spring.toSVG(printWriter, canvas); + } + + printWriter.println(""); + + printWriter.close(); + } + +} diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java new file mode 100644 index 000000000..66ca80908 --- /dev/null +++ b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java @@ -0,0 +1,83 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.diagram.util.forcelayout; + +import java.io.PrintWriter; +import java.util.Locale; +import java.util.function.Function; + +/** + * @author Mathilde Grapin + */ +public class Point { + private static final double DEFAULT_MASS = 1.0; + + private Vector position; + private Vector velocity; + private Vector forces; + private final double mass; + + public Point(double x, double y) { + this(x, y, DEFAULT_MASS); + } + + public Point(double x, double y, double mass) { + this.position = new Vector(x, y); + this.velocity = new Vector(0, 0); + this.forces = new Vector(0, 0); + this.mass = mass; + } + + public void applyForce(Vector force) { + forces = forces.add(force); + } + + public Vector getPosition() { + return position; + } + + public Vector getVelocity() { + return velocity; + } + + public Vector getForces() { + return forces; + } + + public void setPosition(Vector position) { + this.position = position; + } + + public void setVelocity(Vector velocity) { + this.velocity = velocity; + } + + public double getEnergy() { + return 0.5 * mass * velocity.magnitudeSquare(); + } + + public double getMass() { + return this.mass; + } + + public void resetForces() { + this.forces = new Vector(0, 0); + } + + public void toSVG(PrintWriter printWriter, Canvas canvas, Function tooltip, V vertex) { + printWriter.println(""); + + printWriter.printf("%s%n", tooltip.apply(vertex)); + + Vector screenPosition = canvas.toScreen(getPosition()); + printWriter.printf(Locale.US, "%n", + screenPosition.getX(), screenPosition.getY() + ); + + printWriter.println(""); + } +} diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java new file mode 100644 index 000000000..4a9984cee --- /dev/null +++ b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.diagram.util.forcelayout; + +import java.io.PrintWriter; +import java.util.Locale; +import java.util.Objects; + +/** + * @author Mathilde Grapin + */ +public class Spring { + private static final double DEFAULT_LENGTH = 1.0; + private static final double DEFAULT_STIFFNESS = 100.0; + + private final double length; + private final double stiffness; + private final Point point1; + private final Point point2; + + public Spring(Point point1, Point point2, double length, double stiffness) { + this.length = length; + this.stiffness = stiffness; + this.point1 = Objects.requireNonNull(point1); + this.point2 = Objects.requireNonNull(point2); + } + + public Spring(Point point1, Point point2, double length) { + this(point1, point2, length, DEFAULT_STIFFNESS); + } + + public Spring(Point point1, Point point2) { + this(point1, point2, DEFAULT_LENGTH); + } + + public Point getNode1() { + return point1; + } + + public Point getNode2() { + return point2; + } + + public double getLength() { + return length; + } + + public double getStiffness() { + return stiffness; + } + + public void toSVG(PrintWriter printWriter, Canvas canvas) { + Vector screenPosition1 = canvas.toScreen(point2.getPosition()); + Vector screenPosition2 = canvas.toScreen(point1.getPosition()); + printWriter.printf(Locale.US, "%n", + screenPosition1.getX(), screenPosition1.getY(), screenPosition2.getX(), screenPosition2.getY()); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Spring spring = (Spring) o; + return point1 == spring.point1 && point2 == spring.point2 + || point1 == spring.point2 && point2 == spring.point1; + } + + @Override + public int hashCode() { + return Objects.hash(point1) + Objects.hash(point2); + } +} diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java new file mode 100644 index 000000000..4090fe9e6 --- /dev/null +++ b/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2021, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package com.powsybl.diagram.util.forcelayout; + +/** + * @author Mathilde Grapin + */ +public class Vector { + private final double x; + private final double y; + + public Vector(double x, double y) { + this.x = x; + this.y = y; + } + + public Vector add(Vector otherVector) { + return new Vector(x + otherVector.getX(), y + otherVector.getY()); + } + + public Vector subtract(Vector otherVector) { + return new Vector(x - otherVector.getX(), y - otherVector.getY()); + } + + public Vector multiply(double scalar) { + return new Vector(x * scalar, y * scalar); + } + + public Vector divide(double scalar) { + return new Vector(x / scalar, y / scalar); + } + + public double magnitude() { + return Math.sqrt(x * x + y * y); + } + + public double magnitudeSquare() { + return x * x + y * y; + } + + public Vector normalize() { + return this.divide(this.magnitude()); + } + + public double getX() { + return x; + } + + public double getY() { + return y; + } + +} From f4f3230b1b1232dbca52aeeaadeaf03fcaf5a792 Mon Sep 17 00:00:00 2001 From: Florian Dupuy Date: Tue, 15 Nov 2022 14:56:53 +0100 Subject: [PATCH 2/8] Use Junit4 instead of Junit5 to have a single testing lib Signed-off-by: Florian Dupuy --- network-area-diagram/pom.xml | 4 +- .../powsybl/nad/layout/FixedLayoutTest.java | 14 +++--- .../powsybl/nad/layout/ForceLayoutTest.java | 16 +++--- .../nad/layout/LayoutParametersTest.java | 14 +++--- .../LayoutWithInitialPositionsTest.java | 20 ++++---- .../powsybl/nad/svg/EdgeInfoLabelTest.java | 16 +++--- .../powsybl/nad/svg/EdgeInfoShiftTest.java | 12 ++--- .../powsybl/nad/svg/GraphMetadataTest.java | 31 +++++------- .../java/com/powsybl/nad/svg/HvdcTest.java | 12 ++--- .../java/com/powsybl/nad/svg/LimitsTest.java | 14 +++--- .../nad/svg/NominalVoltageStyleTest.java | 32 ++++++------ .../nad/svg/ParallelTransformerTest.java | 12 ++--- .../powsybl/nad/svg/SvgParametersTest.java | 50 +++++++++---------- .../nad/svg/ThreeWindingTransformerTest.java | 16 +++--- .../powsybl/nad/svg/TopologicalStyleTest.java | 18 +++---- .../nad/svg/VoltageLevelDescriptionTest.java | 16 +++--- pom.xml | 7 --- 17 files changed, 146 insertions(+), 158 deletions(-) diff --git a/network-area-diagram/pom.xml b/network-area-diagram/pom.xml index c84a12a21..1a13e2566 100644 --- a/network-area-diagram/pom.xml +++ b/network-area-diagram/pom.xml @@ -67,8 +67,8 @@ test - org.junit.jupiter - junit-jupiter-engine + junit + junit test diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/layout/FixedLayoutTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/layout/FixedLayoutTest.java index ff1d1ecb9..6080d26a3 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/layout/FixedLayoutTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/layout/FixedLayoutTest.java @@ -12,20 +12,20 @@ import com.powsybl.nad.model.Graph; import com.powsybl.nad.model.Point; import com.powsybl.nad.svg.NetworkTestFactory; -import org.junit.jupiter.api.Test; +import org.junit.Test; import java.util.Map; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; /** * @author Luma Zamarreno */ -class FixedLayoutTest { +public class FixedLayoutTest { @Test - void testCurrentLimits() { + public void testCurrentLimits() { Network network = NetworkTestFactory.createTwoVoltageLevels(); Map expected = Map.of( @@ -41,8 +41,8 @@ void testCurrentLimits() { Point pexpected = expected.get(k); Point pactual = actual.get(k); assertNotNull(pactual); - assertEquals(pexpected.getX(), pactual.getX()); - assertEquals(pexpected.getY(), pactual.getY()); + assertEquals(pexpected.getX(), pactual.getX(), 0); + assertEquals(pexpected.getY(), pactual.getY(), 0); }); } } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/layout/ForceLayoutTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/layout/ForceLayoutTest.java index d092d5804..9cf94e82e 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/layout/ForceLayoutTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/layout/ForceLayoutTest.java @@ -6,24 +6,24 @@ */ package com.powsybl.nad.layout; -import com.powsybl.iidm.network.*; +import com.powsybl.iidm.network.Network; import com.powsybl.nad.AbstractTest; 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.NominalVoltageStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Luma Zamarreno */ -class ForceLayoutTest extends AbstractTest { +public class ForceLayoutTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters().setTextNodesForceLayout(false)); setSvgParameters(new SvgParameters() @@ -42,14 +42,14 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void testDiamondNoSpringRepulsionFactor() { + public void testDiamondNoSpringRepulsionFactor() { assertEquals( toString("/diamond-spring-repulsion-factor-0.0.svg"), generateSvgString(LayoutNetworkFactory.createDiamond(), "/diamond-spring-repulsion-factor-0.0.svg")); } @Test - void testDiamondSmallSpringRepulsionFactor() { + public void testDiamondSmallSpringRepulsionFactor() { getLayoutParameters().setSpringRepulsionFactorForceLayout(0.2); assertEquals( toString("/diamond-spring-repulsion-factor-0.2.svg"), diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutParametersTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutParametersTest.java index 21550d878..24d33c785 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutParametersTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/layout/LayoutParametersTest.java @@ -6,17 +6,17 @@ */ package com.powsybl.nad.layout; -import org.junit.jupiter.api.Test; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Florian Dupuy */ -class LayoutParametersTest { +public class LayoutParametersTest { @Test - void test() { + public void test() { LayoutParameters layoutParameters0 = new LayoutParameters() .setTextNodesForceLayout(true) .setSpringRepulsionFactorForceLayout(1.0) @@ -25,8 +25,8 @@ void test() { LayoutParameters layoutParameters1 = new LayoutParameters(layoutParameters0); assertEquals(layoutParameters0.isTextNodesForceLayout(), layoutParameters1.isTextNodesForceLayout()); - assertEquals(layoutParameters0.getSpringRepulsionFactorForceLayout(), layoutParameters1.getSpringRepulsionFactorForceLayout()); - assertEquals(layoutParameters0.getTextNodeFixedShift().getX(), layoutParameters1.getTextNodeFixedShift().getX()); - assertEquals(layoutParameters0.getTextNodeFixedShift().getY(), layoutParameters1.getTextNodeFixedShift().getY()); + assertEquals(layoutParameters0.getSpringRepulsionFactorForceLayout(), layoutParameters1.getSpringRepulsionFactorForceLayout(), 0); + assertEquals(layoutParameters0.getTextNodeFixedShift().getX(), layoutParameters1.getTextNodeFixedShift().getX(), 0); + assertEquals(layoutParameters0.getTextNodeFixedShift().getY(), layoutParameters1.getTextNodeFixedShift().getY(), 0); } } 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 4c3630540..0aa61e6ec 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 @@ -19,8 +19,8 @@ import com.powsybl.nad.svg.SvgParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; import java.io.StringWriter; import java.util.Collections; @@ -28,14 +28,14 @@ import java.util.Set; import java.util.function.Predicate; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.Assert.*; /** * @author Luma Zamarreno */ -class LayoutWithInitialPositionsTest extends AbstractTest { +public class LayoutWithInitialPositionsTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -55,7 +55,7 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void testDiamond() { + public void testDiamond() { checkLayoutWithInitialPositions(LayoutNetworkFactory.createDiamond()); } @@ -88,8 +88,8 @@ private void checkAllInitialPositionsFixed(Network network, Map i Point expected = l.getValue(); Point actual = allPositions.get(equipmentId); assertNotNull(actual); - assertEquals(expected.getX(), actual.getX()); - assertEquals(expected.getY(), actual.getY()); + assertEquals(expected.getX(), actual.getX(), 0); + assertEquals(expected.getY(), actual.getY(), 0); } } @@ -109,8 +109,8 @@ private void checkOnlySomeInitialPositionsFixed(Network network, Map */ -class EdgeInfoLabelTest extends AbstractTest { +public class EdgeInfoLabelTest extends AbstractTest { private String internalLabel; private String externalLabel; - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -70,14 +70,14 @@ public String getArrowPathDOut() { // thinner arrow } @Test - void testMissingLabels() { + public void testMissingLabels() { Network network = NetworkTestFactory.createTwoVoltageLevels(); getSvgParameters().setArrowShift(10); assertEquals(toString("/edge_info_missing_label.svg"), generateSvgString(network, "/edge_info_missing_label.svg")); } @Test - void testPerpendicularLabels() { + public void testPerpendicularLabels() { Network network = NetworkTestFactory.createTwoVoltageLevels(); internalLabel = "int"; externalLabel = "ext"; @@ -88,7 +88,7 @@ void testPerpendicularLabels() { } @Test - void testParallelLabels() { + public void testParallelLabels() { Network network = ThreeWindingsTransformerNetworkFactory.create(); internalLabel = "243"; externalLabel = "145"; diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoShiftTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoShiftTest.java index 4135fdef7..162a22fea 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoShiftTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/EdgeInfoShiftTest.java @@ -11,17 +11,17 @@ import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Florian Dupuy */ -class EdgeInfoShiftTest extends AbstractTest { +public class EdgeInfoShiftTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -40,7 +40,7 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void testArrowShift() { + public void testArrowShift() { Network network = NetworkTestFactory.createThreeVoltageLevelsFiveBuses(); getSvgParameters().setArrowShift(20); assertEquals(toString("/edge_info_shift.svg"), generateSvgString(network, "/edge_info_shift.svg")); diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/GraphMetadataTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/GraphMetadataTest.java index 780aa655f..176167070 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/GraphMetadataTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/GraphMetadataTest.java @@ -14,10 +14,9 @@ import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.TopologicalStyleProvider; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; @@ -28,28 +27,24 @@ import java.nio.file.Path; import java.util.Objects; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Thomas Adam */ -class GraphMetadataTest extends AbstractTest { +public class GraphMetadataTest extends AbstractTest { private static final String INDENT = " "; private static final String METADATA_START_TOKEN = "\n" + " \n" + diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/HvdcTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/HvdcTest.java index a1ad637c9..1bdb9c068 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/HvdcTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/HvdcTest.java @@ -13,17 +13,17 @@ import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Luma Zamarreño */ -class HvdcTest extends AbstractTest { +public class HvdcTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -43,7 +43,7 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void testHvdcVL1Depth1() { + public void testHvdcVL1Depth1() { Network network = HvdcTestNetwork.createVsc(); debugSvg = true; assertEquals( diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/LimitsTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/LimitsTest.java index d19f581fb..ad55aec38 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/LimitsTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/LimitsTest.java @@ -11,17 +11,17 @@ import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Florian Dupuy */ -class LimitsTest extends AbstractTest { +public class LimitsTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -40,7 +40,7 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void testVoltageLimits() { + public void testVoltageLimits() { Network network = NetworkTestFactory.createTwoVoltageLevelsThreeBuses(); network.getVoltageLevel("vl1") .setHighVoltageLimit(385) @@ -52,7 +52,7 @@ void testVoltageLimits() { } @Test - void testCurrentLimits() { + public void testCurrentLimits() { Network network = NetworkTestFactory.createTwoVoltageLevels(); network.getLine("l1").newCurrentLimits1().setPermanentLimit(250).add(); network.getLine("l1").getTerminal1().setP(101).setQ(150).getBusView().getBus().setV(390); diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/NominalVoltageStyleTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/NominalVoltageStyleTest.java index 1f13aecc8..da77c4c56 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/NominalVoltageStyleTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/NominalVoltageStyleTest.java @@ -17,17 +17,17 @@ import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Florian Dupuy */ -class NominalVoltageStyleTest extends AbstractTest { +public class NominalVoltageStyleTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -47,20 +47,20 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void testIEEE30() { + public void testIEEE30() { Network network = IeeeCdfNetworkFactory.create30(); assertEquals(toString("/IEEE_30_bus.svg"), generateSvgString(network, "/IEEE_30_bus.svg")); } @Test - void testIEEE14() { + public void testIEEE14() { Network network = IeeeCdfNetworkFactory.create14(); LoadFlow.run(network); assertEquals(toString("/IEEE_14_bus.svg"), generateSvgString(network, "/IEEE_14_bus.svg")); } @Test - void testIEEE14ForceLayoutWithTextNodes() { + public void testIEEE14ForceLayoutWithTextNodes() { Network network = IeeeCdfNetworkFactory.create14(); getLayoutParameters().setTextNodesForceLayout(true); getSvgParameters().setTextNodeBackground(false); @@ -68,14 +68,14 @@ void testIEEE14ForceLayoutWithTextNodes() { } @Test - void testIEEE14FWithSvgPrefix() { + public void testIEEE14FWithSvgPrefix() { Network network = IeeeCdfNetworkFactory.create14(); getSvgParameters().setSvgPrefix("test_"); assertEquals(toString("/IEEE_14_id_prefixed.svg"), generateSvgString(network, "/IEEE_14_id_prefixed.svg")); } @Test - void testDisconnection() { + public void testDisconnection() { Network network = IeeeCdfNetworkFactory.create14(); network.getLine("L3-4-1").getTerminal1().disconnect(); network.getTwoWindingsTransformer("T4-7-1").getTerminal1().disconnect(); @@ -85,7 +85,7 @@ void testDisconnection() { } @Test - void testFictitiousVoltageLevel() { + public void testFictitiousVoltageLevel() { Network network = IeeeCdfNetworkFactory.create14(); network.getVoltageLevel("VL12").setFictitious(true); network.getVoltageLevel("VL14").setFictitious(true); @@ -93,34 +93,34 @@ void testFictitiousVoltageLevel() { } @Test - void testIEEE24() { + public void testIEEE24() { Network network = NetworkXml.read(getClass().getResourceAsStream("/IEEE_24_bus.xiidm")); assertEquals(toString("/IEEE_24_bus.svg"), generateSvgString(network, "/IEEE_24_bus.svg")); } @Test - void testEurope() { + public void testEurope() { Network network = Network.read("simple-eu.uct", getClass().getResourceAsStream("/simple-eu.uct")); LoadFlow.run(network); assertEquals(toString("/simple-eu.svg"), generateSvgString(network, "/simple-eu.svg")); } @Test - void testEuropeLoopAperture80() { + public void testEuropeLoopAperture80() { Network network = Network.read("simple-eu.uct", getClass().getResourceAsStream("/simple-eu.uct")); getSvgParameters().setLoopEdgesAperture(80); assertEquals(toString("/simple-eu-loop80.svg"), generateSvgString(network, "/simple-eu-loop80.svg")); } @Test - void testEuropeLoopAperture100() { + public void testEuropeLoopAperture100() { Network network = Network.read("simple-eu.uct", getClass().getResourceAsStream("/simple-eu.uct")); getSvgParameters().setLoopEdgesAperture(100); assertEquals(toString("/simple-eu-loop100.svg"), generateSvgString(network, "/simple-eu-loop100.svg")); } @Test - void testHvdc() { + public void testHvdc() { Network network = FourSubstationsNodeBreakerFactory.create(); assertEquals(toString("/hvdc.svg"), generateSvgString(network, "/hvdc.svg")); } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/ParallelTransformerTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/ParallelTransformerTest.java index d8b458db0..c35193b20 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/ParallelTransformerTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/ParallelTransformerTest.java @@ -11,17 +11,17 @@ import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Florian Dupuy */ -class ParallelTransformerTest extends AbstractTest { +public class ParallelTransformerTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -40,7 +40,7 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void test() { + public void test() { Network network = NetworkTestFactory.createTwoVoltageLevelsTwoTransformers(); assertEquals(toString("/parallel_transformers.svg"), generateSvgString(network, "/parallel_transformers.svg")); } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SvgParametersTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SvgParametersTest.java index 47fdeb74b..3a0b64308 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/SvgParametersTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/SvgParametersTest.java @@ -6,17 +6,17 @@ */ package com.powsybl.nad.svg; -import org.junit.jupiter.api.Test; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Florian Dupuy */ -class SvgParametersTest { +public class SvgParametersTest { @Test - void test() { + public void test() { SvgParameters svgParameters0 = new SvgParameters() .setDiagramPadding(new Padding(5)) .setInsertNameDesc(false) @@ -50,37 +50,37 @@ void test() { SvgParameters svgParameters1 = new SvgParameters(svgParameters0); - assertEquals(svgParameters0.getDiagramPadding().getLeft(), svgParameters1.getDiagramPadding().getLeft()); - assertEquals(svgParameters0.getDiagramPadding().getTop(), svgParameters1.getDiagramPadding().getTop()); - assertEquals(svgParameters0.getDiagramPadding().getRight(), svgParameters1.getDiagramPadding().getRight()); - assertEquals(svgParameters0.getDiagramPadding().getBottom(), svgParameters1.getDiagramPadding().getBottom()); + assertEquals(svgParameters0.getDiagramPadding().getLeft(), svgParameters1.getDiagramPadding().getLeft(), 0); + assertEquals(svgParameters0.getDiagramPadding().getTop(), svgParameters1.getDiagramPadding().getTop(), 0); + assertEquals(svgParameters0.getDiagramPadding().getRight(), svgParameters1.getDiagramPadding().getRight(), 0); + assertEquals(svgParameters0.getDiagramPadding().getBottom(), svgParameters1.getDiagramPadding().getBottom(), 0); assertEquals(svgParameters0.isInsertNameDesc(), svgParameters1.isInsertNameDesc()); assertEquals(svgParameters0.isSvgWidthAndHeightAdded(), svgParameters1.isSvgWidthAndHeightAdded()); assertEquals(svgParameters0.getCssLocation(), svgParameters1.getCssLocation()); assertEquals(svgParameters0.getFixedWidth(), svgParameters1.getFixedWidth()); assertEquals(svgParameters0.getFixedHeight(), svgParameters1.getFixedHeight()); - assertEquals(svgParameters0.getFixedScale(), svgParameters1.getFixedScale()); + assertEquals(svgParameters0.getFixedScale(), svgParameters1.getFixedScale(), 0); assertEquals(svgParameters0.getSizeConstraint(), svgParameters1.getSizeConstraint()); - assertEquals(svgParameters0.getArrowShift(), svgParameters1.getArrowShift()); - assertEquals(svgParameters0.getArrowLabelShift(), svgParameters1.getArrowLabelShift()); - assertEquals(svgParameters0.getConverterStationWidth(), svgParameters1.getConverterStationWidth()); - assertEquals(svgParameters0.getVoltageLevelCircleRadius(), svgParameters1.getVoltageLevelCircleRadius()); - assertEquals(svgParameters0.getFictitiousVoltageLevelCircleRadius(), svgParameters1.getFictitiousVoltageLevelCircleRadius()); - assertEquals(svgParameters0.getTransformerCircleRadius(), svgParameters1.getTransformerCircleRadius()); - assertEquals(svgParameters0.getNodeHollowWidth(), svgParameters1.getNodeHollowWidth()); - assertEquals(svgParameters0.getEdgesForkLength(), svgParameters1.getEdgesForkLength()); - assertEquals(svgParameters0.getEdgesForkAperture(), svgParameters1.getEdgesForkAperture()); - assertEquals(svgParameters0.getEdgeStartShift(), svgParameters1.getEdgeStartShift()); - assertEquals(svgParameters0.getUnknownBusNodeExtraRadius(), svgParameters1.getUnknownBusNodeExtraRadius()); - assertEquals(svgParameters0.getLoopDistance(), svgParameters1.getLoopDistance()); - assertEquals(svgParameters0.getLoopEdgesAperture(), svgParameters1.getLoopEdgesAperture()); - assertEquals(svgParameters0.getLoopControlDistance(), svgParameters1.getLoopControlDistance()); + assertEquals(svgParameters0.getArrowShift(), svgParameters1.getArrowShift(), 0); + assertEquals(svgParameters0.getArrowLabelShift(), svgParameters1.getArrowLabelShift(), 0); + assertEquals(svgParameters0.getConverterStationWidth(), svgParameters1.getConverterStationWidth(), 0); + assertEquals(svgParameters0.getVoltageLevelCircleRadius(), svgParameters1.getVoltageLevelCircleRadius(), 0); + assertEquals(svgParameters0.getFictitiousVoltageLevelCircleRadius(), svgParameters1.getFictitiousVoltageLevelCircleRadius(), 0); + assertEquals(svgParameters0.getTransformerCircleRadius(), svgParameters1.getTransformerCircleRadius(), 0); + assertEquals(svgParameters0.getNodeHollowWidth(), svgParameters1.getNodeHollowWidth(), 0); + assertEquals(svgParameters0.getEdgesForkLength(), svgParameters1.getEdgesForkLength(), 0); + assertEquals(svgParameters0.getEdgesForkAperture(), svgParameters1.getEdgesForkAperture(), 0); + assertEquals(svgParameters0.getEdgeStartShift(), svgParameters1.getEdgeStartShift(), 0); + assertEquals(svgParameters0.getUnknownBusNodeExtraRadius(), svgParameters1.getUnknownBusNodeExtraRadius(), 0); + assertEquals(svgParameters0.getLoopDistance(), svgParameters1.getLoopDistance(), 0); + assertEquals(svgParameters0.getLoopEdgesAperture(), svgParameters1.getLoopEdgesAperture(), 0); + assertEquals(svgParameters0.getLoopControlDistance(), svgParameters1.getLoopControlDistance(), 0); assertEquals(svgParameters0.isTextNodeBackground(), svgParameters1.isTextNodeBackground()); assertEquals(svgParameters0.isEdgeInfoAlongEdge(), svgParameters1.isEdgeInfoAlongEdge()); - assertEquals(svgParameters0.getInterAnnulusSpace(), svgParameters1.getInterAnnulusSpace()); + assertEquals(svgParameters0.getInterAnnulusSpace(), svgParameters1.getInterAnnulusSpace(), 0); assertEquals(svgParameters0.getSvgPrefix(), svgParameters1.getSvgPrefix()); assertEquals(svgParameters0.isIdDisplayed(), svgParameters1.isIdDisplayed()); assertEquals(svgParameters0.isSubstationDescriptionDisplayed(), svgParameters1.isSubstationDescriptionDisplayed()); - assertEquals(svgParameters0.getArrowHeight(), svgParameters1.getArrowHeight()); + assertEquals(svgParameters0.getArrowHeight(), svgParameters1.getArrowHeight(), 0); } } diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/ThreeWindingTransformerTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/ThreeWindingTransformerTest.java index e0acf387e..3f5078ce2 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/ThreeWindingTransformerTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/ThreeWindingTransformerTest.java @@ -14,19 +14,19 @@ import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; import java.util.Collections; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Florian Dupuy */ -class ThreeWindingTransformerTest extends AbstractTest { +public class ThreeWindingTransformerTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -46,13 +46,13 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void test3wt() { + public void test3wt() { Network network = ThreeWindingsTransformerNetworkFactory.create(); assertEquals(toString("/3wt.svg"), generateSvgString(network, "/3wt.svg")); } @Test - void testDisconnected3wt() { + public void testDisconnected3wt() { Network network = ThreeWindingsTransformerNetworkFactory.create(); network.getThreeWindingsTransformer("3WT").getTerminal(ThreeWindingsTransformer.Side.TWO).disconnect(); network.getLoad("LOAD_33").remove(); @@ -60,7 +60,7 @@ void testDisconnected3wt() { } @Test - void testPartial3wt() { + public void testPartial3wt() { Network network = ThreeWindingsTransformerNetworkFactory.create(); VoltageLevelFilter filter = VoltageLevelFilter.createVoltageLevelsFilter(network, Collections.singletonList("VL_11")); assertEquals(toString("/3wt_partial.svg"), generateSvgString(network, filter, "/3wt_partial.svg")); diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/TopologicalStyleTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/TopologicalStyleTest.java index fe7842e14..0d06c5141 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/TopologicalStyleTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/TopologicalStyleTest.java @@ -13,19 +13,19 @@ import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.TopologicalStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; import java.util.Arrays; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Florian Dupuy */ -class TopologicalStyleTest extends AbstractTest { +public class TopologicalStyleTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -45,26 +45,26 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void testIEEE57() { + public void testIEEE57() { Network network = IeeeCdfNetworkFactory.create57(); assertEquals(toString("/IEEE_57_bus.svg"), generateSvgString(network, "/IEEE_57_bus.svg")); } @Test - void testIEEE118() { + public void testIEEE118() { Network network = IeeeCdfNetworkFactory.create118(); assertEquals(toString("/IEEE_118_bus.svg"), generateSvgString(network, "/IEEE_118_bus.svg")); } @Test - void testIEEE118PartialGraph() { + public void testIEEE118PartialGraph() { Network network = IeeeCdfNetworkFactory.create118(); VoltageLevelFilter vlDepthFilter = VoltageLevelFilter.createVoltageLevelDepthFilter(network, "VL54", 2); assertEquals(toString("/IEEE_118_bus_partial.svg"), generateSvgString(network, vlDepthFilter, "/IEEE_118_bus_partial.svg")); } @Test - void testIEEE118PartialNonConnectedGraph() { + public void testIEEE118PartialNonConnectedGraph() { Network network = IeeeCdfNetworkFactory.create118(); VoltageLevelFilter vlDepthFilter = VoltageLevelFilter.createVoltageLevelsDepthFilter(network, Arrays.asList("VL32", "VL38"), 1); assertEquals(toString("/IEEE_118_bus_partial_non_connected.svg"), generateSvgString(network, vlDepthFilter, "/IEEE_118_bus_partial_non_connected.svg")); diff --git a/network-area-diagram/src/test/java/com/powsybl/nad/svg/VoltageLevelDescriptionTest.java b/network-area-diagram/src/test/java/com/powsybl/nad/svg/VoltageLevelDescriptionTest.java index 3a2fa9318..d9a42267b 100644 --- a/network-area-diagram/src/test/java/com/powsybl/nad/svg/VoltageLevelDescriptionTest.java +++ b/network-area-diagram/src/test/java/com/powsybl/nad/svg/VoltageLevelDescriptionTest.java @@ -11,17 +11,17 @@ import com.powsybl.nad.layout.LayoutParameters; import com.powsybl.nad.svg.iidm.DefaultLabelProvider; import com.powsybl.nad.svg.iidm.NominalVoltageStyleProvider; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.Before; +import org.junit.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.Assert.assertEquals; /** * @author Florian Dupuy */ -class VoltageLevelDescriptionTest extends AbstractTest { +public class VoltageLevelDescriptionTest extends AbstractTest { - @BeforeEach + @Before public void setup() { setLayoutParameters(new LayoutParameters()); setSvgParameters(new SvgParameters() @@ -40,21 +40,21 @@ protected LabelProvider getLabelProvider(Network network) { } @Test - void testVlId() { + public void testVlId() { Network network = NetworkTestFactory.createTwoVoltageLevels(); getSvgParameters().setIdDisplayed(true); assertEquals(toString("/vl_description_id.svg"), generateSvgString(network, "/vl_description_id.svg")); } @Test - void testSubstationDescription() { + public void testSubstationDescription() { Network network = NetworkTestFactory.createTwoVoltageLevels(); getSvgParameters().setSubstationDescriptionDisplayed(true); assertEquals(toString("/vl_description_substation.svg"), generateSvgString(network, "/vl_description_substation.svg")); } @Test - void testSubstationId() { + public void testSubstationId() { Network network = NetworkTestFactory.createTwoVoltageLevels(); getSvgParameters().setSubstationDescriptionDisplayed(true).setIdDisplayed(true); assertEquals(toString("/vl_description_substation_id.svg"), generateSvgString(network, "/vl_description_substation_id.svg")); diff --git a/pom.xml b/pom.xml index 3bce7019e..c5f4f6d39 100644 --- a/pom.xml +++ b/pom.xml @@ -74,7 +74,6 @@ 5.0.0-RC1 - 5.8.1 0.23.0 @@ -155,12 +154,6 @@ test-jar test - - org.junit.jupiter - junit-jupiter-engine - ${junit-jupiter.version} - test - com.powsybl powsybl-iidm-impl From 606e8ea06c8971ac0967e3cb9fc2b502e29ba0a8 Mon Sep 17 00:00:00 2001 From: Florian Dupuy Date: Tue, 15 Nov 2022 16:19:04 +0100 Subject: [PATCH 3/8] Single util module Signed-off-by: Florian Dupuy --- distribution-diagram/pom.xml | 2 +- network-area-diagram/pom.xml | 2 +- pom.xml | 2 +- .../single-line-diagram-core/pom.xml | 1 - util/pom.xml | 43 +++++++++++--- .../PowsyblDiagramUtilVersion.java} | 6 +- .../diagram/util/forcelayout/BoundingBox.java | 0 .../diagram/util/forcelayout/Canvas.java | 0 .../diagram/util/forcelayout/ForceLayout.java | 0 .../diagram/util/forcelayout/Point.java | 0 .../diagram/util/forcelayout/Spring.java | 0 .../diagram/util/forcelayout/Vector.java | 0 util/util-forcelayout/pom.xml | 59 ------------------- 13 files changed, 42 insertions(+), 73 deletions(-) rename util/{util-forcelayout/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilForceLayoutVersion.java => src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java} (64%) rename util/{util-forcelayout => }/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java (100%) rename util/{util-forcelayout => }/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java (100%) rename util/{util-forcelayout => }/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java (100%) rename util/{util-forcelayout => }/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java (100%) rename util/{util-forcelayout => }/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java (100%) rename util/{util-forcelayout => }/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java (100%) delete mode 100644 util/util-forcelayout/pom.xml diff --git a/distribution-diagram/pom.xml b/distribution-diagram/pom.xml index 630c14c01..0dbeeb924 100644 --- a/distribution-diagram/pom.xml +++ b/distribution-diagram/pom.xml @@ -30,7 +30,7 @@ ${project.groupId} - powsybl-diagram-util-forcelayout + powsybl-diagram-util ${project.groupId} diff --git a/network-area-diagram/pom.xml b/network-area-diagram/pom.xml index 1a13e2566..7ecdcc7b6 100644 --- a/network-area-diagram/pom.xml +++ b/network-area-diagram/pom.xml @@ -39,7 +39,7 @@ com.powsybl - powsybl-diagram-util-forcelayout + powsybl-diagram-util diff --git a/pom.xml b/pom.xml index c5f4f6d39..9ab065d91 100644 --- a/pom.xml +++ b/pom.xml @@ -142,7 +142,7 @@ com.powsybl - powsybl-diagram-util-forcelayout + powsybl-diagram-util ${project.version} diff --git a/single-line-diagram/single-line-diagram-core/pom.xml b/single-line-diagram/single-line-diagram-core/pom.xml index 40ba77f5c..2b411a290 100644 --- a/single-line-diagram/single-line-diagram-core/pom.xml +++ b/single-line-diagram/single-line-diagram-core/pom.xml @@ -67,7 +67,6 @@ com.powsybl powsybl-iidm-extensions - ${powsybl-core.version} diff --git a/util/pom.xml b/util/pom.xml index 624d991e7..a6557933d 100644 --- a/util/pom.xml +++ b/util/pom.xml @@ -7,8 +7,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - 4.0.0 @@ -18,13 +17,43 @@ 3.0.0-SNAPSHOT - pom powsybl-diagram-util PowSyBl diagram util - PowSyBl diagram utility classes module + Force layout for PowSyBl Diagram - - util-forcelayout - + + + + org.codehaus.mojo + templating-maven-plugin + + + org.codehaus.mojo + buildnumber-maven-plugin + + + + + + + com.powsybl + powsybl-tools + + + org.jgrapht + jgrapht-core + + + org.slf4j + slf4j-api + + + + + junit + junit + test + + diff --git a/util/util-forcelayout/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilForceLayoutVersion.java b/util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java similarity index 64% rename from util/util-forcelayout/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilForceLayoutVersion.java rename to util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java index a39ca2aa5..e4902444f 100644 --- a/util/util-forcelayout/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilForceLayoutVersion.java +++ b/util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java @@ -13,9 +13,9 @@ * @author Florian Dupuy */ @AutoService(Version.class) -public class PowsyblDiagramUtilForceLayoutVersion extends AbstractVersion { +public class PowsyblDiagramUtilVersion extends AbstractVersion { - public PowsyblDiagramUtilForceLayoutVersion() { - super("powsybl-diagram-util-forcelayout", "${project.version}", "${buildNumber}", "${scmBranch}", Long.parseLong("${timestamp}")); + public PowsyblDiagramUtilVersion() { + super("powsybl-diagram-util", "${project.version}", "${buildNumber}", "${scmBranch}", Long.parseLong("${timestamp}")); } } diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java b/util/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java similarity index 100% rename from util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java rename to util/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java b/util/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java similarity index 100% rename from util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java rename to util/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java b/util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java similarity index 100% rename from util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java rename to util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java b/util/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java similarity index 100% rename from util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java rename to util/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java b/util/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java similarity index 100% rename from util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java rename to util/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java diff --git a/util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java b/util/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java similarity index 100% rename from util/util-forcelayout/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java rename to util/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java diff --git a/util/util-forcelayout/pom.xml b/util/util-forcelayout/pom.xml deleted file mode 100644 index 02b448394..000000000 --- a/util/util-forcelayout/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - 4.0.0 - - - com.powsybl - powsybl-diagram-util - 3.0.0-SNAPSHOT - - - powsybl-diagram-util-forcelayout - PowSyBl diagram util force layout - Force layout for PowSyBl Diagram - - - - - org.codehaus.mojo - templating-maven-plugin - - - org.codehaus.mojo - buildnumber-maven-plugin - - - - - - - - com.powsybl - powsybl-tools - - - org.jgrapht - jgrapht-core - - - org.slf4j - slf4j-api - - - - - junit - junit - test - - - From 323eea06a95b19ae17712ad82aacb5a3d586ffc8 Mon Sep 17 00:00:00 2001 From: Florian Dupuy Date: Tue, 15 Nov 2022 16:48:26 +0100 Subject: [PATCH 4/8] Replace Verdana font-family with serif generic font-family Signed-off-by: Florian Dupuy --- .github/diagram-demo.svg | 4 ++-- .github/diagram_example.svg | 4 ++-- .github/example_n.svg | 4 ++-- .github/partial_diagram_example_1_25.svg | 4 ++-- .github/partial_diagram_example_25.svg | 4 ++-- network-area-diagram/src/main/resources/nominalStyle.css | 4 ++-- .../src/main/resources/topologicalStyle.css | 4 ++-- network-area-diagram/src/test/resources/3wt.svg | 4 ++-- .../src/test/resources/3wt_disconnected.svg | 4 ++-- network-area-diagram/src/test/resources/3wt_partial.svg | 4 ++-- network-area-diagram/src/test/resources/IEEE_118_bus.svg | 4 ++-- .../src/test/resources/IEEE_118_bus_partial.svg | 4 ++-- .../test/resources/IEEE_118_bus_partial_non_connected.svg | 4 ++-- network-area-diagram/src/test/resources/IEEE_14_bus.svg | 4 ++-- .../src/test/resources/IEEE_14_bus_disconnection.svg | 4 ++-- .../src/test/resources/IEEE_14_bus_fictitious.svg | 4 ++-- .../src/test/resources/IEEE_14_bus_text_nodes.svg | 4 ++-- .../src/test/resources/IEEE_14_id_prefixed.svg | 4 ++-- network-area-diagram/src/test/resources/IEEE_24_bus.svg | 4 ++-- network-area-diagram/src/test/resources/IEEE_30_bus.svg | 4 ++-- network-area-diagram/src/test/resources/IEEE_57_bus.svg | 4 ++-- network-area-diagram/src/test/resources/current_limits.svg | 4 ++-- .../test/resources/diamond-spring-repulsion-factor-0.0.svg | 4 ++-- .../test/resources/diamond-spring-repulsion-factor-0.2.svg | 4 ++-- .../src/test/resources/edge_info_double_labels.svg | 4 ++-- .../src/test/resources/edge_info_missing_label.svg | 4 ++-- .../src/test/resources/edge_info_perpendicular_label.svg | 4 ++-- network-area-diagram/src/test/resources/edge_info_shift.svg | 4 ++-- network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg | 4 ++-- network-area-diagram/src/test/resources/hvdc.svg | 4 ++-- .../src/test/resources/parallel_transformers.svg | 4 ++-- .../src/test/resources/simple-eu-loop100.svg | 4 ++-- .../src/test/resources/simple-eu-loop80.svg | 4 ++-- network-area-diagram/src/test/resources/simple-eu.svg | 4 ++-- .../src/test/resources/vl_description_id.svg | 4 ++-- .../src/test/resources/vl_description_substation.svg | 4 ++-- .../src/test/resources/vl_description_substation_id.svg | 4 ++-- network-area-diagram/src/test/resources/voltage_limits.svg | 4 ++-- .../src/main/resources/ConvergenceLibrary/components.css | 6 +++--- .../src/test/resources/InternalBranchesBusBreaker.svg | 6 +++--- .../src/test/resources/InternalBranchesNodeBreaker.svg | 6 +++--- .../test/resources/NodeDecoratorsBranchStatusBusBreaker.svg | 6 +++--- .../resources/NodeDecoratorsBranchStatusNodeBreaker.svg | 6 +++--- .../src/test/resources/NodeDecoratorsSwitches.svg | 6 +++--- .../src/test/resources/TestCase1.svg | 6 +++--- .../src/test/resources/TestCase11SubstationGraphHFirst.svg | 6 +++--- .../src/test/resources/TestCase11SubstationGraphHLast.svg | 6 +++--- .../src/test/resources/TestCase11SubstationGraphHMiddle.svg | 6 +++--- .../src/test/resources/TestCase11SubstationGraphHNone.svg | 6 +++--- .../TestCase12GraphWithNodesInfosNominalVoltage.svg | 6 +++--- .../resources/TestCase12GraphWithNodesInfosTopological.svg | 6 +++--- .../test/resources/TestCase15GraphWithVoltageIndicator.svg | 6 +++--- .../TestCase15GraphWithVoltageIndicatorTopological.svg | 6 +++--- .../resources/TestCase15GraphWithoutVoltageIndicator.svg | 6 +++--- .../src/test/resources/TestCaseComplexCoupling.svg | 6 +++--- .../src/test/resources/TestCaseFictitiousBus.svg | 6 +++--- .../src/test/resources/TestCaseFictitiousBusTopological.svg | 6 +++--- .../src/test/resources/TestCaseLoadBreakSwitch.svg | 6 +++--- .../src/test/resources/TestFeederInfos.svg | 6 +++--- .../src/test/resources/TestFeederOnBus.svg | 6 +++--- .../src/test/resources/TestFeederOnBusDisconnector.svg | 6 +++--- .../src/test/resources/TestFormattingFeederInfos.svg | 6 +++--- .../src/test/resources/TestPacman.svg | 6 +++--- .../src/test/resources/TestSldClassSubstation.svg | 6 +++--- .../src/test/resources/TestSldClassVl.svg | 6 +++--- .../src/test/resources/consecutive_shunts.svg | 6 +++--- .../src/test/resources/feederInfoTest.svg | 6 +++--- .../src/test/resources/label_on_all_nodes.svg | 6 +++--- .../src/test/resources/noComponentsOnBus.svg | 6 +++--- .../src/test/resources/nominal_voltage_style_substation.svg | 6 +++--- .../src/test/resources/nominal_voltage_style_vl2.svg | 6 +++--- .../src/test/resources/nominal_voltage_style_vl3.svg | 6 +++--- .../src/test/resources/substation.svg | 6 +++--- .../src/test/resources/substation_feeder_arrow_symmetry.svg | 6 +++--- .../src/test/resources/substation_no_feeder_values.svg | 6 +++--- .../src/test/resources/substation_optimized.svg | 6 +++--- .../src/test/resources/switchesOnBus.svg | 6 +++--- .../src/test/resources/topological_style_substation.svg | 6 +++--- .../single-line-diagram-core/src/test/resources/vl1.svg | 6 +++--- .../src/test/resources/vl1_multiline_tooltip.svg | 6 +++--- .../src/test/resources/vl1_optimized.svg | 6 +++--- .../src/test/resources/vl1_straightWires.svg | 6 +++--- .../src/test/resources/vl1_tooltip.svg | 6 +++--- .../single-line-diagram-core/src/test/resources/vl2.svg | 6 +++--- .../src/test/resources/vl2_optimized.svg | 6 +++--- .../single-line-diagram-core/src/test/resources/vl3.svg | 6 +++--- .../src/test/resources/vl3_optimized.svg | 6 +++--- .../src/test/resources/with_frame_background.svg | 6 +++--- .../single-line-diagram-core/src/test/resources/zone.svg | 6 +++--- 89 files changed, 229 insertions(+), 229 deletions(-) diff --git a/.github/diagram-demo.svg b/.github/diagram-demo.svg index c9cc43bcf..33c899410 100644 --- a/.github/diagram-demo.svg +++ b/.github/diagram-demo.svg @@ -119,8 +119,8 @@ /* Stroke none & fill: --sld-vl-color */ .sld-node-infos {stroke: none; fill: var(--sld-vl-color, black)} /* Stroke none & fill: black */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-graph-label {stroke: none; fill: black; font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-graph-label {stroke: none; fill: black; font: 12px serif} .sld-node {stroke: none; fill: black} .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} diff --git a/.github/diagram_example.svg b/.github/diagram_example.svg index e9c8d0da8..7f31c8235 100644 --- a/.github/diagram_example.svg +++ b/.github/diagram_example.svg @@ -17,8 +17,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 0.25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 0.2px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 0.1; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 0.25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 0.2px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 0.1; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/.github/example_n.svg b/.github/example_n.svg index 83f1954c2..47eb3cac5 100644 --- a/.github/example_n.svg +++ b/.github/example_n.svg @@ -119,8 +119,8 @@ /* Stroke none & fill: --sld-vl-color */ .sld-node-infos {stroke: none; fill: var(--sld-vl-color, black)} /* Stroke none & fill: black */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-graph-label {stroke: none; fill: black; font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-graph-label {stroke: none; fill: black; font: 12px serif} .sld-node {stroke: none; fill: black} .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} diff --git a/.github/partial_diagram_example_1_25.svg b/.github/partial_diagram_example_1_25.svg index 170b5dd4e..9009065e9 100644 --- a/.github/partial_diagram_example_1_25.svg +++ b/.github/partial_diagram_example_1_25.svg @@ -17,8 +17,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 0.25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 0.2px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 0.1; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 0.25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 0.2px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 0.1; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/.github/partial_diagram_example_25.svg b/.github/partial_diagram_example_25.svg index df913729a..a1ee508be 100644 --- a/.github/partial_diagram_example_25.svg +++ b/.github/partial_diagram_example_25.svg @@ -17,8 +17,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 0.25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 0.2px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 0.1; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 0.25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 0.2px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 0.1; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/main/resources/nominalStyle.css b/network-area-diagram/src/main/resources/nominalStyle.css index 21109c4d9..4ede0392d 100644 --- a/network-area-diagram/src/main/resources/nominalStyle.css +++ b/network-area-diagram/src/main/resources/nominalStyle.css @@ -12,8 +12,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/main/resources/topologicalStyle.css b/network-area-diagram/src/main/resources/topologicalStyle.css index 5598aa8a3..9e3bfddc1 100644 --- a/network-area-diagram/src/main/resources/topologicalStyle.css +++ b/network-area-diagram/src/main/resources/topologicalStyle.css @@ -12,8 +12,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-disconnected {--nad-vl-color: #808080} diff --git a/network-area-diagram/src/test/resources/3wt.svg b/network-area-diagram/src/test/resources/3wt.svg index e47384134..60fa2589c 100644 --- a/network-area-diagram/src/test/resources/3wt.svg +++ b/network-area-diagram/src/test/resources/3wt.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/3wt_disconnected.svg b/network-area-diagram/src/test/resources/3wt_disconnected.svg index 6b7e6ecd7..bf3637242 100644 --- a/network-area-diagram/src/test/resources/3wt_disconnected.svg +++ b/network-area-diagram/src/test/resources/3wt_disconnected.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/3wt_partial.svg b/network-area-diagram/src/test/resources/3wt_partial.svg index bbb5a8c22..2f7917125 100644 --- a/network-area-diagram/src/test/resources/3wt_partial.svg +++ b/network-area-diagram/src/test/resources/3wt_partial.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus.svg b/network-area-diagram/src/test/resources/IEEE_118_bus.svg index c181728fc..07686bd05 100644 --- a/network-area-diagram/src/test/resources/IEEE_118_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_118_bus.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-disconnected {--nad-vl-color: #808080} diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg b/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg index 1b035e833..88b459a2a 100644 --- a/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg +++ b/network-area-diagram/src/test/resources/IEEE_118_bus_partial.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-disconnected {--nad-vl-color: #808080} diff --git a/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg b/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg index 1fc16553a..86208e01b 100644 --- a/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg +++ b/network-area-diagram/src/test/resources/IEEE_118_bus_partial_non_connected.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-disconnected {--nad-vl-color: #808080} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus.svg b/network-area-diagram/src/test/resources/IEEE_14_bus.svg index ffd83fd0c..c8a459102 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg index d94baa599..237c96042 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_disconnection.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg index 4ef8aa595..ba18de329 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_fictitious.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg b/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg index fb4ec530d..f9c45a9a1 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_bus_text_nodes.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg b/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg index 6dae12818..cda5ddd74 100644 --- a/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg +++ b/network-area-diagram/src/test/resources/IEEE_14_id_prefixed.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/IEEE_24_bus.svg b/network-area-diagram/src/test/resources/IEEE_24_bus.svg index 1be2aebc1..0673c3101 100644 --- a/network-area-diagram/src/test/resources/IEEE_24_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_24_bus.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/IEEE_30_bus.svg b/network-area-diagram/src/test/resources/IEEE_30_bus.svg index 518e90dac..23e2c9267 100644 --- a/network-area-diagram/src/test/resources/IEEE_30_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_30_bus.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/IEEE_57_bus.svg b/network-area-diagram/src/test/resources/IEEE_57_bus.svg index 79d7282f2..45c1d4005 100644 --- a/network-area-diagram/src/test/resources/IEEE_57_bus.svg +++ b/network-area-diagram/src/test/resources/IEEE_57_bus.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-disconnected {--nad-vl-color: #808080} diff --git a/network-area-diagram/src/test/resources/current_limits.svg b/network-area-diagram/src/test/resources/current_limits.svg index 14ee76c8d..0cb0d3070 100644 --- a/network-area-diagram/src/test/resources/current_limits.svg +++ b/network-area-diagram/src/test/resources/current_limits.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg index 6067defe3..dcc6e7ae1 100644 --- a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg +++ b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.0.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg index e8c6c455e..db3d3950b 100644 --- a/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg +++ b/network-area-diagram/src/test/resources/diamond-spring-repulsion-factor-0.2.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/edge_info_double_labels.svg b/network-area-diagram/src/test/resources/edge_info_double_labels.svg index 4bb04fc40..0cd9fcd8d 100644 --- a/network-area-diagram/src/test/resources/edge_info_double_labels.svg +++ b/network-area-diagram/src/test/resources/edge_info_double_labels.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/edge_info_missing_label.svg b/network-area-diagram/src/test/resources/edge_info_missing_label.svg index 335256ac8..56e4a9655 100644 --- a/network-area-diagram/src/test/resources/edge_info_missing_label.svg +++ b/network-area-diagram/src/test/resources/edge_info_missing_label.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg b/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg index 7b49ebdb1..ccf602f67 100644 --- a/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg +++ b/network-area-diagram/src/test/resources/edge_info_perpendicular_label.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/edge_info_shift.svg b/network-area-diagram/src/test/resources/edge_info_shift.svg index 2808ff403..7c07b9e3c 100644 --- a/network-area-diagram/src/test/resources/edge_info_shift.svg +++ b/network-area-diagram/src/test/resources/edge_info_shift.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg b/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg index 615a11114..97ba7984f 100644 --- a/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg +++ b/network-area-diagram/src/test/resources/hvdc-vl-depth-1.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/hvdc.svg b/network-area-diagram/src/test/resources/hvdc.svg index f1bcd1672..1da5e5de6 100644 --- a/network-area-diagram/src/test/resources/hvdc.svg +++ b/network-area-diagram/src/test/resources/hvdc.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/parallel_transformers.svg b/network-area-diagram/src/test/resources/parallel_transformers.svg index 42b3b6934..a6e596a96 100644 --- a/network-area-diagram/src/test/resources/parallel_transformers.svg +++ b/network-area-diagram/src/test/resources/parallel_transformers.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/simple-eu-loop100.svg b/network-area-diagram/src/test/resources/simple-eu-loop100.svg index e40b87a67..f40cf9579 100644 --- a/network-area-diagram/src/test/resources/simple-eu-loop100.svg +++ b/network-area-diagram/src/test/resources/simple-eu-loop100.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/simple-eu-loop80.svg b/network-area-diagram/src/test/resources/simple-eu-loop80.svg index 438f515bc..f50abd446 100644 --- a/network-area-diagram/src/test/resources/simple-eu-loop80.svg +++ b/network-area-diagram/src/test/resources/simple-eu-loop80.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/simple-eu.svg b/network-area-diagram/src/test/resources/simple-eu.svg index e37e73c59..7193a4eb3 100644 --- a/network-area-diagram/src/test/resources/simple-eu.svg +++ b/network-area-diagram/src/test/resources/simple-eu.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/vl_description_id.svg b/network-area-diagram/src/test/resources/vl_description_id.svg index 2a0282c3e..49edc88f6 100644 --- a/network-area-diagram/src/test/resources/vl_description_id.svg +++ b/network-area-diagram/src/test/resources/vl_description_id.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/vl_description_substation.svg b/network-area-diagram/src/test/resources/vl_description_substation.svg index 1e2ea18b2..a67bebaf0 100644 --- a/network-area-diagram/src/test/resources/vl_description_substation.svg +++ b/network-area-diagram/src/test/resources/vl_description_substation.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/vl_description_substation_id.svg b/network-area-diagram/src/test/resources/vl_description_substation_id.svg index 144e2f5ca..b2b982e8d 100644 --- a/network-area-diagram/src/test/resources/vl_description_substation_id.svg +++ b/network-area-diagram/src/test/resources/vl_description_substation_id.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/network-area-diagram/src/test/resources/voltage_limits.svg b/network-area-diagram/src/test/resources/voltage_limits.svg index 9ae92faf9..c99a7fdb0 100644 --- a/network-area-diagram/src/test/resources/voltage_limits.svg +++ b/network-area-diagram/src/test/resources/voltage_limits.svg @@ -15,8 +15,8 @@ .nad-reactive {visibility: hidden} .nad-reactive path {stroke: none; fill: #0277bd} .nad-text-background {flood-color: #90a4aeaa} -.nad-text-nodes {font: 25px "Verdana"; fill: black; dominant-baseline: central} -.nad-edge-infos text {font: 20px "Verdana"; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} +.nad-text-nodes {font: 25px serif; fill: black; dominant-baseline: central} +.nad-edge-infos text {font: 20px serif; dominant-baseline:middle; stroke: #FFFFFFAA; stroke-width: 10; stroke-linejoin:round; paint-order: stroke} .nad-edge-infos .nad-state-in text {fill: #b71c1c} .nad-edge-infos .nad-state-out text {fill: #2e7d32} .nad-vl0to30 {--nad-vl-color: #AFB42B} diff --git a/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.css b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.css index 0422ae765..94536e456 100644 --- a/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.css +++ b/single-line-diagram/single-line-diagram-core/src/main/resources/ConvergenceLibrary/components.css @@ -30,9 +30,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreaker.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreaker.svg index a3de04aec..60559a0c4 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreaker.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesBusBreaker.svg @@ -58,9 +58,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreaker.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreaker.svg index 5245ed841..5e8d44065 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreaker.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/InternalBranchesNodeBreaker.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusBusBreaker.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusBusBreaker.svg index c1249502a..64fbb9c8f 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusBusBreaker.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusBusBreaker.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusNodeBreaker.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusNodeBreaker.svg index b86103559..b86d0f074 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusNodeBreaker.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsBranchStatusNodeBreaker.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsSwitches.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsSwitches.svg index cd4eeba62..eef623aea 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsSwitches.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/NodeDecoratorsSwitches.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1.svg index 76e1e1da2..5cc23b777 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase1.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHFirst.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHFirst.svg index c65625373..0ca39ab6c 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHFirst.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHFirst.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHLast.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHLast.svg index 58592bbcc..d6528f0c3 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHLast.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHLast.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHMiddle.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHMiddle.svg index f0175bb83..6dd628da5 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHMiddle.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHMiddle.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHNone.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHNone.svg index c65625373..0ca39ab6c 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHNone.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase11SubstationGraphHNone.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosNominalVoltage.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosNominalVoltage.svg index 6e3eb1202..f982d661e 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosNominalVoltage.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosNominalVoltage.svg @@ -58,9 +58,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosTopological.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosTopological.svg index 87d8e86a2..2c64403c9 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosTopological.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase12GraphWithNodesInfosTopological.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicator.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicator.svg index b40a53984..e5f573a35 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicator.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicator.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicatorTopological.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicatorTopological.svg index c5744b2cf..eb8c5e83e 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicatorTopological.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithVoltageIndicatorTopological.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithoutVoltageIndicator.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithoutVoltageIndicator.svg index 46f606623..4d295b1f2 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithoutVoltageIndicator.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCase15GraphWithoutVoltageIndicator.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseComplexCoupling.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseComplexCoupling.svg index 03181681d..b4da5eba2 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseComplexCoupling.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseComplexCoupling.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBus.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBus.svg index 6838b2ee9..b115ec25a 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBus.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBus.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBusTopological.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBusTopological.svg index 401aeb52f..c747eb24c 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBusTopological.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseFictitiousBusTopological.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseLoadBreakSwitch.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseLoadBreakSwitch.svg index e72b22f62..91f62b8ed 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseLoadBreakSwitch.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestCaseLoadBreakSwitch.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederInfos.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederInfos.svg index 29ac1f6ca..2612c27fb 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederInfos.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederInfos.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBus.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBus.svg index 6b7a33dc5..7cc66bc73 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBus.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBus.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBusDisconnector.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBusDisconnector.svg index 73550946f..385ac2e47 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBusDisconnector.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFeederOnBusDisconnector.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestFormattingFeederInfos.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFormattingFeederInfos.svg index ea97f8d01..6b849ad4a 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestFormattingFeederInfos.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestFormattingFeederInfos.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestPacman.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestPacman.svg index ba850530c..baf208a94 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestPacman.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestPacman.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstation.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstation.svg index ef688836a..3e7fa3451 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstation.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassSubstation.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVl.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVl.svg index a4fea1a31..b2ba95605 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVl.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/TestSldClassVl.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/consecutive_shunts.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/consecutive_shunts.svg index 895c822d8..96e63a3d5 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/consecutive_shunts.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/consecutive_shunts.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/feederInfoTest.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/feederInfoTest.svg index fb18f821c..137618e00 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/feederInfoTest.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/feederInfoTest.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/label_on_all_nodes.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/label_on_all_nodes.svg index 882a73359..438ebb074 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/label_on_all_nodes.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/label_on_all_nodes.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/noComponentsOnBus.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/noComponentsOnBus.svg index f62707aed..9d1f26bac 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/noComponentsOnBus.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/noComponentsOnBus.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_substation.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_substation.svg index afdbc946c..6900f762c 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_substation.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_substation.svg @@ -58,9 +58,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl2.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl2.svg index 901411aad..36ed30236 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl2.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl2.svg @@ -58,9 +58,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl3.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl3.svg index b5e6acba7..889208d97 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl3.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/nominal_voltage_style_vl3.svg @@ -58,9 +58,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/substation.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/substation.svg index f7afcd44c..17cf215e8 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/substation.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/substation.svg @@ -58,9 +58,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/substation_feeder_arrow_symmetry.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/substation_feeder_arrow_symmetry.svg index b2184c135..c47879ab3 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/substation_feeder_arrow_symmetry.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/substation_feeder_arrow_symmetry.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/substation_no_feeder_values.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/substation_no_feeder_values.svg index 755dbf92d..549d93e5e 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/substation_no_feeder_values.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/substation_no_feeder_values.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/substation_optimized.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/substation_optimized.svg index ce843c728..c30a1da0d 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/substation_optimized.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/substation_optimized.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/switchesOnBus.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/switchesOnBus.svg index 2aeb9525c..b13053041 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/switchesOnBus.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/switchesOnBus.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/topological_style_substation.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/topological_style_substation.svg index 66cbe6ca3..9dda4620e 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/topological_style_substation.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/topological_style_substation.svg @@ -122,9 +122,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1.svg index 0ffeb5800..17fb29915 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_multiline_tooltip.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_multiline_tooltip.svg index 02874d712..f5acf313b 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_multiline_tooltip.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_multiline_tooltip.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_optimized.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_optimized.svg index 3544d248f..8c7bdfa95 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_optimized.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_optimized.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_straightWires.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_straightWires.svg index 6c1783d58..01d369929 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_straightWires.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_straightWires.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_tooltip.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_tooltip.svg index 16ccd9887..0eeda0108 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_tooltip.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vl1_tooltip.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vl2.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl2.svg index 835796eba..980137719 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vl2.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vl2.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vl2_optimized.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl2_optimized.svg index 96b1b8f9a..f24225c37 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vl2_optimized.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vl2_optimized.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vl3.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl3.svg index 8080504e3..b545968d6 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vl3.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vl3.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/vl3_optimized.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/vl3_optimized.svg index c0aa05d02..0cf84a4bb 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/vl3_optimized.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/vl3_optimized.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/with_frame_background.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/with_frame_background.svg index 5529ebcde..05c06be3a 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/with_frame_background.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/with_frame_background.svg @@ -61,9 +61,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} diff --git a/single-line-diagram/single-line-diagram-core/src/test/resources/zone.svg b/single-line-diagram/single-line-diagram-core/src/test/resources/zone.svg index 3c6e57c8a..a13a4813e 100644 --- a/single-line-diagram/single-line-diagram-core/src/test/resources/zone.svg +++ b/single-line-diagram/single-line-diagram-core/src/test/resources/zone.svg @@ -44,9 +44,9 @@ .sld-flash {stroke: none; fill: black} .sld-lock {stroke: none; fill: black} /* Fonts */ -.sld-label {stroke: none; fill: black; font: 8px "Verdana"} -.sld-angle, .sld-voltage {font: 10px "Verdana"} -.sld-graph-label {font: 12px "Verdana"} +.sld-label {stroke: none; fill: black; font: 8px serif} +.sld-angle, .sld-voltage {font: 10px serif} +.sld-graph-label {font: 12px serif} /* Specific */ .sld-grid {stroke: #003700; stroke-dasharray: 1,10} .sld-feeder-info.sld-active-power {fill:black} From e877505bfcf8d91ee7ead7216bc24b178353b960 Mon Sep 17 00:00:00 2001 From: Florian Dupuy Date: Wed, 16 Nov 2022 09:58:30 +0100 Subject: [PATCH 5/8] Move util to diagram-util Signed-off-by: Florian Dupuy --- {util => diagram-util}/pom.xml | 0 .../diagram/util/forcelayout/PowsyblDiagramUtilVersion.java | 0 .../java/com/powsybl/diagram/util/forcelayout/BoundingBox.java | 0 .../main/java/com/powsybl/diagram/util/forcelayout/Canvas.java | 0 .../java/com/powsybl/diagram/util/forcelayout/ForceLayout.java | 0 .../main/java/com/powsybl/diagram/util/forcelayout/Point.java | 0 .../main/java/com/powsybl/diagram/util/forcelayout/Spring.java | 0 .../main/java/com/powsybl/diagram/util/forcelayout/Vector.java | 0 pom.xml | 2 +- 9 files changed, 1 insertion(+), 1 deletion(-) rename {util => diagram-util}/pom.xml (100%) rename {util => diagram-util}/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java (100%) rename {util => diagram-util}/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java (100%) rename {util => diagram-util}/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java (100%) rename {util => diagram-util}/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java (100%) rename {util => diagram-util}/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java (100%) rename {util => diagram-util}/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java (100%) rename {util => diagram-util}/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java (100%) diff --git a/util/pom.xml b/diagram-util/pom.xml similarity index 100% rename from util/pom.xml rename to diagram-util/pom.xml diff --git a/util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java b/diagram-util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java similarity index 100% rename from util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java rename to diagram-util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java diff --git a/util/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java b/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java similarity index 100% rename from util/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java rename to diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/BoundingBox.java diff --git a/util/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java b/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java similarity index 100% rename from util/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java rename to diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/Canvas.java diff --git a/util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java b/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java similarity index 100% rename from util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java rename to diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/ForceLayout.java diff --git a/util/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java b/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java similarity index 100% rename from util/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java rename to diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/Point.java diff --git a/util/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java b/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java similarity index 100% rename from util/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java rename to diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/Spring.java diff --git a/util/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java b/diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java similarity index 100% rename from util/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java rename to diagram-util/src/main/java/com/powsybl/diagram/util/forcelayout/Vector.java diff --git a/pom.xml b/pom.xml index 9ab065d91..bbfb478f6 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ distribution-diagram network-area-diagram single-line-diagram - util + diagram-util From 611ad06d596e62ebe71def90c4e22f1e3e2c3e03 Mon Sep 17 00:00:00 2001 From: Florian Dupuy Date: Wed, 16 Nov 2022 10:14:40 +0100 Subject: [PATCH 6/8] Slight fix in README.md Signed-off-by: Florian Dupuy --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 146a6e0da..756229f17 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,7 @@ This leads to following diagram: Now let's generate the subgraph with voltage levels at a maximum distance of 2 from `"VL1"` and `"VL25"`: ```java -new NetworkAreaDiagram(network, Arrays.asList("VL1", "VL25"), 2).draw(Path.of("/tmp/partial_diagram_1_25.svg")); +new NetworkAreaDiagram(network, List.of("VL1", "VL25"), 2).draw(Path.of("/tmp/partial_diagram_1_25.svg")); ``` This gives us the diagram below. Note that nothing ensures that the parts displayed in resulting diagram are connected. From 49a7ab3175ca8a25cd23bd4ba165e90e1ebabd7e Mon Sep 17 00:00:00 2001 From: Florian Dupuy Date: Wed, 16 Nov 2022 10:39:13 +0100 Subject: [PATCH 7/8] Fix version classes Signed-off-by: Florian Dupuy --- ...ersion.java => PowsyblDiagramVersion.java} | 6 +++--- network-area-diagram/pom.xml | 16 +------------- .../PowsyblNetworkAreaDiagramVersion.java | 21 ------------------- .../single-line-diagram-core/pom.xml | 12 ++++------- .../util/PowsyblSingleLineDiagramVersion.java | 21 ------------------- 5 files changed, 8 insertions(+), 68 deletions(-) rename diagram-util/src/main/java-templates/com/powsybl/diagram/util/{forcelayout/PowsyblDiagramUtilVersion.java => PowsyblDiagramVersion.java} (67%) delete mode 100644 network-area-diagram/src/main/java-templates/com/powsybl/nad/util/PowsyblNetworkAreaDiagramVersion.java delete mode 100644 single-line-diagram/single-line-diagram-core/src/main/java-templates/com/powsybl/sld/util/PowsyblSingleLineDiagramVersion.java diff --git a/diagram-util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java b/diagram-util/src/main/java-templates/com/powsybl/diagram/util/PowsyblDiagramVersion.java similarity index 67% rename from diagram-util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java rename to diagram-util/src/main/java-templates/com/powsybl/diagram/util/PowsyblDiagramVersion.java index e4902444f..d9aa75a70 100644 --- a/diagram-util/src/main/java-templates/com/powsybl/diagram/util/forcelayout/PowsyblDiagramUtilVersion.java +++ b/diagram-util/src/main/java-templates/com/powsybl/diagram/util/PowsyblDiagramVersion.java @@ -13,9 +13,9 @@ * @author Florian Dupuy */ @AutoService(Version.class) -public class PowsyblDiagramUtilVersion extends AbstractVersion { +public class PowsyblDiagramVersion extends AbstractVersion { - public PowsyblDiagramUtilVersion() { - super("powsybl-diagram-util", "${project.version}", "${buildNumber}", "${scmBranch}", Long.parseLong("${timestamp}")); + public PowsyblDiagramVersion() { + super("powsybl-diagram", "${project.version}", "${buildNumber}", "${scmBranch}", Long.parseLong("${timestamp}")); } } diff --git a/network-area-diagram/pom.xml b/network-area-diagram/pom.xml index 7ecdcc7b6..86002efef 100644 --- a/network-area-diagram/pom.xml +++ b/network-area-diagram/pom.xml @@ -23,26 +23,12 @@ Generate the SVG corresponding to the electrical nodes graph of the whole network or of a part of the network http://www.powsybl.org - - - - org.codehaus.mojo - buildnumber-maven-plugin - - - org.codehaus.mojo - templating-maven-plugin - - - - + com.powsybl powsybl-diagram-util - - org.jgrapht jgrapht-core diff --git a/network-area-diagram/src/main/java-templates/com/powsybl/nad/util/PowsyblNetworkAreaDiagramVersion.java b/network-area-diagram/src/main/java-templates/com/powsybl/nad/util/PowsyblNetworkAreaDiagramVersion.java deleted file mode 100644 index e234a417c..000000000 --- a/network-area-diagram/src/main/java-templates/com/powsybl/nad/util/PowsyblNetworkAreaDiagramVersion.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2021, RTE (http://www.rte-france.com) - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -package com.powsybl.nad.util; - -import com.google.auto.service.AutoService; -import com.powsybl.tools.*; - -/** - * @author Florian Dupuy - */ -@AutoService(Version.class) -public class PowsyblNetworkAreaDiagramVersion extends AbstractVersion { - - public PowsyblNetworkAreaDiagramVersion() { - super("powsybl-network-area-diagram", "${project.version}", "${buildNumber}", "${scmBranch}", Long.parseLong("${timestamp}")); - } -} diff --git a/single-line-diagram/single-line-diagram-core/pom.xml b/single-line-diagram/single-line-diagram-core/pom.xml index 2b411a290..4017a55c2 100644 --- a/single-line-diagram/single-line-diagram-core/pom.xml +++ b/single-line-diagram/single-line-diagram-core/pom.xml @@ -34,19 +34,15 @@ - - org.codehaus.mojo - templating-maven-plugin - - - org.codehaus.mojo - buildnumber-maven-plugin - + + com.powsybl + powsybl-diagram-util + org.assertj assertj-core diff --git a/single-line-diagram/single-line-diagram-core/src/main/java-templates/com/powsybl/sld/util/PowsyblSingleLineDiagramVersion.java b/single-line-diagram/single-line-diagram-core/src/main/java-templates/com/powsybl/sld/util/PowsyblSingleLineDiagramVersion.java deleted file mode 100644 index 81bee713a..000000000 --- a/single-line-diagram/single-line-diagram-core/src/main/java-templates/com/powsybl/sld/util/PowsyblSingleLineDiagramVersion.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * 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.util; - -import com.google.auto.service.AutoService; -import com.powsybl.tools.*; - -/** - * @author Geoffroy Jamgotchian - */ -@AutoService(Version.class) -public class PowsyblSingleLineDiagramVersion extends AbstractVersion { - - public PowsyblSingleLineDiagramVersion() { - super("powsybl-single-line-diagram", "${project.version}", "${buildNumber}", "${scmBranch}", Long.parseLong("${timestamp}")); - } -} From 7625683b64e573df09fc7d698cda2a6b0dc266cd Mon Sep 17 00:00:00 2001 From: Florian Dupuy Date: Wed, 16 Nov 2022 10:43:52 +0100 Subject: [PATCH 8/8] Remove test-jar sld-core Signed-off-by: Florian Dupuy --- .../single-line-diagram-core/pom.xml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/single-line-diagram/single-line-diagram-core/pom.xml b/single-line-diagram/single-line-diagram-core/pom.xml index 4017a55c2..6fc6de8f3 100644 --- a/single-line-diagram/single-line-diagram-core/pom.xml +++ b/single-line-diagram/single-line-diagram-core/pom.xml @@ -21,22 +21,6 @@ Single line diagram core Single line diagram core components like graph data models, automatic layouts, SVG renderer - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - -