Skip to content

Commit c1c00cf

Browse files
authored
Merge branch 'main' into nad_enrich_metadata_custom_style
2 parents d0c3c52 + 85bc1a1 commit c1c00cf

59 files changed

Lines changed: 5050 additions & 1564 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/pom.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,16 @@
6262
<artifactId>powsybl-tools-test</artifactId>
6363
<scope>test</scope>
6464
</dependency>
65-
<!-- Test with all known triple store engines -->
6665
<dependency>
6766
<groupId>com.powsybl</groupId>
6867
<artifactId>powsybl-triple-store-impl-rdf4j</artifactId>
6968
<scope>test</scope>
7069
</dependency>
70+
<dependency>
71+
<groupId>com.powsybl</groupId>
72+
<artifactId>powsybl-cgmes-conformity</artifactId>
73+
<scope>test</scope>
74+
</dependency>
7175
<dependency>
7276
<groupId>org.junit.jupiter</groupId>
7377
<artifactId>junit-jupiter</artifactId>

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/AbstractCgmesLayout.java

Lines changed: 106 additions & 62 deletions
Large diffs are not rendered by default.

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayout.java

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,9 @@
1212
import com.powsybl.sld.layout.LayoutParameters;
1313
import com.powsybl.sld.model.graphs.SubstationGraph;
1414
import com.powsybl.sld.model.graphs.VoltageLevelGraph;
15-
import com.powsybl.sld.model.nodes.MiddleTwtNode;
16-
import com.powsybl.sld.model.nodes.Node;
1715
import org.slf4j.Logger;
1816
import org.slf4j.LoggerFactory;
1917

20-
import java.util.List;
2118
import java.util.Objects;
2219

2320
/**
@@ -31,7 +28,11 @@ public class CgmesSubstationLayout extends AbstractCgmesLayout {
3128
private final SubstationGraph graph;
3229

3330
public CgmesSubstationLayout(SubstationGraph graph, Network network) {
34-
this.network = Objects.requireNonNull(network);
31+
this(graph, network, null, DEFAULT_CGMES_SCALE_FACTOR);
32+
}
33+
34+
public CgmesSubstationLayout(SubstationGraph graph, Network network, String cgmesDiagramName, double cgmesScaleFactor) {
35+
super(network, cgmesDiagramName, cgmesScaleFactor);
3536
Objects.requireNonNull(graph);
3637
for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) {
3738
removeFictitiousNodes(vlGraph, network.getVoltageLevel(vlGraph.getVoltageLevelInfos().id()));
@@ -42,34 +43,21 @@ public CgmesSubstationLayout(SubstationGraph graph, Network network) {
4243

4344
@Override
4445
public void run(LayoutParameters layoutParam) {
45-
String diagramName = layoutParam.getCgmesDiagramName();
46-
if (checkDiagramFails(diagramName, "substation " + graph.getSubstationId())) {
46+
if (checkDiagramFails(cgmesDiagramName, "substation " + graph.getSubstationId())) {
4747
return;
4848
}
49-
LOG.info("Applying CGMES-DL layout to network {}, substation {}, diagram name {}", network.getId(), graph.getSubstationId(), diagramName);
49+
LOG.info("Applying CGMES-DL layout to network {}, substation {}, diagram name {}", network.getId(), graph.getSubstationId(), cgmesDiagramName);
5050
for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) {
5151
VoltageLevel vl = network.getVoltageLevel(vlGraph.getVoltageLevelInfos().id());
52-
setNodeCoordinates(vl, vlGraph, diagramName, layoutParam.isCgmesUseNames());
52+
setNodeCoordinates(vl, vlGraph, cgmesDiagramName);
5353
}
5454
for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) {
55-
vlGraph.getNodes().forEach(node -> shiftNodeCoordinates(node, layoutParam.getCgmesScaleFactor()));
56-
}
57-
if (layoutParam.getCgmesScaleFactor() != 1) {
58-
for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) {
59-
vlGraph.getNodes().forEach(node -> scaleNodeCoordinates(node, layoutParam.getCgmesScaleFactor()));
60-
}
61-
}
62-
for (VoltageLevelGraph vlGraph : graph.getVoltageLevels()) {
63-
setVoltageLevelCoord(vlGraph);
55+
vlGraph.getNodes().forEach(n -> shiftAndScaleNodeCoordinates(n, cgmesScaleFactor));
56+
vlGraph.addPaddingToCoord(layoutParam);
6457
}
6558

66-
setMultiNodesCoord();
67-
}
59+
setMultiNodesCoord(graph);
6860

69-
private void setMultiNodesCoord() {
70-
for (MiddleTwtNode multiNode : graph.getMultiTermNodes()) {
71-
List<Node> adjacentNodes = multiNode.getAdjacentNodes();
72-
multiNode.setCoordinates(adjacentNodes.get(0).getCoordinates());
73-
}
61+
setGraphSize(graph, layoutParam);
7462
}
7563
}

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesSubstationLayoutFactory.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,17 @@
2020
public class CgmesSubstationLayoutFactory implements SubstationLayoutFactory {
2121

2222
private final Network network;
23+
private final double cgmesScaleFactor;
24+
private final String cgmesDiagramName;
2325

24-
public CgmesSubstationLayoutFactory(Network network) {
26+
public CgmesSubstationLayoutFactory(Network network, String cgmesDiagramName, double cgmesScaleFactor) {
2527
this.network = Objects.requireNonNull(network);
28+
this.cgmesDiagramName = cgmesDiagramName;
29+
this.cgmesScaleFactor = cgmesScaleFactor;
2630
}
2731

2832
@Override
2933
public Layout create(SubstationGraph graph, VoltageLevelLayoutFactory vLayoutFactory) {
30-
return new CgmesSubstationLayout(graph, network);
34+
return new CgmesSubstationLayout(graph, network, cgmesDiagramName, cgmesScaleFactor);
3135
}
3236
}

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayout.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,27 @@ public class CgmesVoltageLevelLayout extends AbstractCgmesLayout {
2626
private final VoltageLevelGraph graph;
2727

2828
public CgmesVoltageLevelLayout(VoltageLevelGraph graph, Network network) {
29-
this.network = Objects.requireNonNull(network);
29+
this(graph, network, null, DEFAULT_CGMES_SCALE_FACTOR);
30+
}
31+
32+
public CgmesVoltageLevelLayout(VoltageLevelGraph graph, Network network, String cgmesDiagramName, double cgmesScaleFactor) {
33+
super(network, cgmesDiagramName, cgmesScaleFactor);
3034
Objects.requireNonNull(graph);
3135
this.graph = removeFictitiousNodes(graph, network.getVoltageLevel(graph.getVoltageLevelInfos().id()));
3236
}
3337

3438
@Override
3539
public void run(LayoutParameters layoutParam) {
3640
VoltageLevel vl = network.getVoltageLevel(graph.getVoltageLevelInfos().id());
37-
String diagramName = layoutParam.getCgmesDiagramName();
38-
if (checkDiagramFails(diagramName, "voltage level " + vl.getId())) {
41+
if (checkDiagramFails(cgmesDiagramName, "voltage level " + vl.getId())) {
3942
return;
4043
}
41-
LOG.info("Applying CGMES-DL layout to network {}, voltage level {}, diagram name {}", network.getId(), graph.getVoltageLevelInfos().id(), diagramName);
42-
setNodeCoordinates(vl, graph, diagramName, layoutParam.isCgmesUseNames());
43-
graph.getNodes().forEach(node -> shiftNodeCoordinates(node, layoutParam.getCgmesScaleFactor()));
44-
if (layoutParam.getCgmesScaleFactor() != 1) {
45-
graph.getNodes().forEach(node -> scaleNodeCoordinates(node, layoutParam.getCgmesScaleFactor()));
46-
}
44+
LOG.info("Applying CGMES-DL layout to network {}, voltage level {}, diagram name {}", network.getId(), graph.getVoltageLevelInfos().id(), cgmesDiagramName);
45+
setNodeCoordinates(vl, graph, cgmesDiagramName);
46+
graph.getNodes().forEach(n -> shiftAndScaleNodeCoordinates(n, cgmesScaleFactor));
47+
graph.addPaddingToCoord(layoutParam);
48+
49+
setGraphSize(graph, layoutParam);
4750
}
51+
4852
}

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactory.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@
1919
public class CgmesVoltageLevelLayoutFactory implements VoltageLevelLayoutFactory {
2020

2121
private final Network network;
22+
private final double cgmesScaleFactor;
23+
private final String cgmesDiagramName;
2224

23-
public CgmesVoltageLevelLayoutFactory(Network network) {
25+
public CgmesVoltageLevelLayoutFactory(Network network, String cgmesDiagramName, double cgmesScaleFactor) {
2426
this.network = Objects.requireNonNull(network);
27+
this.cgmesDiagramName = cgmesDiagramName;
28+
this.cgmesScaleFactor = cgmesScaleFactor;
2529
}
2630

2731
@Override
2832
public Layout create(VoltageLevelGraph graph) {
29-
return new CgmesVoltageLevelLayout(graph, network);
33+
return new CgmesVoltageLevelLayout(graph, network, cgmesDiagramName, cgmesScaleFactor);
3034
}
3135
}

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesVoltageLevelLayoutFactorySmartSelector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,6 @@ public boolean isSelectable(VoltageLevel vl) {
5050

5151
@Override
5252
public VoltageLevelLayoutFactory createFactory(Network network) {
53-
return new CgmesVoltageLevelLayoutFactory(network);
53+
return new CgmesVoltageLevelLayoutFactory(network, null, AbstractCgmesLayout.DEFAULT_CGMES_SCALE_FACTOR);
5454
}
5555
}

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayout.java

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
import com.powsybl.sld.cgmes.dl.iidm.extensions.LineDiagramData;
1616
import com.powsybl.sld.layout.LayoutParameters;
1717
import com.powsybl.sld.model.coordinate.Point;
18+
import com.powsybl.sld.model.graphs.SubstationGraph;
1819
import com.powsybl.sld.model.graphs.VoltageLevelGraph;
1920
import com.powsybl.sld.model.graphs.ZoneGraph;
2021
import com.powsybl.sld.model.nodes.BranchEdge;
2122
import org.slf4j.Logger;
2223
import org.slf4j.LoggerFactory;
2324

25+
import java.util.ArrayList;
2426
import java.util.List;
2527
import java.util.Objects;
2628

@@ -35,7 +37,11 @@ public class CgmesZoneLayout extends AbstractCgmesLayout {
3537
private final List<VoltageLevelGraph> vlGraphs;
3638

3739
public CgmesZoneLayout(ZoneGraph graph, Network network) {
38-
this.network = Objects.requireNonNull(network);
40+
this(graph, network, null, DEFAULT_CGMES_SCALE_FACTOR);
41+
}
42+
43+
public CgmesZoneLayout(ZoneGraph graph, Network network, String cgmesDiagramName, double cgmesScaleFactor) {
44+
super(network, cgmesDiagramName, cgmesScaleFactor);
3945
this.graph = Objects.requireNonNull(graph);
4046
vlGraphs = graph.getVoltageLevels();
4147
for (VoltageLevelGraph vlGraph : vlGraphs) {
@@ -50,35 +56,32 @@ public void run(LayoutParameters layoutParam) {
5056
LOG.warn("No substations in the zone: skipping coordinates assignment");
5157
return;
5258
}
53-
String diagramName = layoutParam.getCgmesDiagramName();
54-
if (checkDiagramFails(diagramName, "")) {
59+
if (checkDiagramFails(cgmesDiagramName, "")) {
5560
return;
5661
}
5762
// assign coordinates
5863
for (VoltageLevelGraph vlGraph : vlGraphs) {
5964
VoltageLevel vl = network.getVoltageLevel(vlGraph.getVoltageLevelInfos().id());
60-
setNodeCoordinates(vl, vlGraph, diagramName, layoutParam.isCgmesUseNames());
65+
setNodeCoordinates(vl, vlGraph, cgmesDiagramName);
6166
}
6267
for (BranchEdge edge : graph.getLineEdges()) {
6368
VoltageLevel vl = network.getVoltageLevel(graph.getVoltageLevelGraph(edge.getNode1()).getVoltageLevelInfos().id());
64-
setLineCoordinates(vl, edge, diagramName);
69+
setLineCoordinates(vl, edge, cgmesDiagramName);
6570
}
66-
// shift coordinates
71+
// shift and scale coordinates
6772
for (VoltageLevelGraph vlGraph : vlGraphs) {
68-
vlGraph.getNodes().forEach(node -> shiftNodeCoordinates(node, layoutParam.getCgmesScaleFactor()));
73+
vlGraph.getNodes().forEach(n -> shiftAndScaleNodeCoordinates(n, cgmesScaleFactor));
74+
vlGraph.addPaddingToCoord(layoutParam);
6975
}
7076
for (BranchEdge edge : graph.getLineEdges()) {
71-
shiftLineCoordinates(edge, layoutParam.getCgmesScaleFactor());
77+
shiftAndScaleLineCoordinates(edge, layoutParam);
7278
}
73-
// scale coordinates
74-
if (layoutParam.getCgmesScaleFactor() != 1) {
75-
for (VoltageLevelGraph vlGraph : vlGraphs) {
76-
vlGraph.getNodes().forEach(node -> scaleNodeCoordinates(node, layoutParam.getCgmesScaleFactor()));
77-
}
78-
for (BranchEdge edge : graph.getLineEdges()) {
79-
scaleLineCoordinates(edge, layoutParam.getCgmesScaleFactor());
80-
}
79+
80+
for (SubstationGraph substationGraph : graph.getSubstations()) {
81+
setMultiNodesCoord(substationGraph);
8182
}
83+
84+
setGraphSize(graph, layoutParam);
8285
}
8386

8487
private void setLineCoordinates(VoltageLevel vl, BranchEdge edge, String diagramName) {
@@ -96,11 +99,12 @@ private void setLineCoordinates(VoltageLevel vl, BranchEdge edge, String diagram
9699
LOG.warn("No CGMES-DL data for line {} name {}, diagramName {}, skipping line edge {}", line.getId(), line.getNameOrId(), diagramName, edge.getId());
97100
return;
98101
}
99-
List<Point> snakeLine = edge.getSnakeLine();
100-
lineDiagramData.getPoints(diagramName).forEach(point -> {
101-
snakeLine.add(new Point(point.x(), point.y()));
102-
setMin(point.x(), point.y());
103-
});
102+
var diagramDataPoints = lineDiagramData.getPoints(diagramName);
103+
diagramDataPoints.forEach(this::setMinMax);
104+
var snakeLine = diagramDataPoints.stream()
105+
.map(point -> new Point(point.x(), point.y()))
106+
.toList();
107+
edge.setSnakeLine(snakeLine);
104108

105109
if (TopologyKind.BUS_BREAKER.equals(line.getTerminal1().getVoltageLevel().getTopologyKind())) {
106110
// if bus breaker topology first and last point of lines are shifted
@@ -113,13 +117,16 @@ private void setLineCoordinates(VoltageLevel vl, BranchEdge edge, String diagram
113117
}
114118
}
115119

116-
private void shiftLineCoordinates(BranchEdge edge, double scaleFactor) {
117-
Point shift = new Point(-minX + (X_MARGIN / scaleFactor), -minY + (Y_MARGIN / scaleFactor));
118-
edge.getSnakeLine().forEach(p -> p.shift(shift));
119-
}
120-
121-
private void scaleLineCoordinates(BranchEdge edge, double scaleFactor) {
122-
edge.getSnakeLine().forEach(p -> p.scale(scaleFactor));
120+
private void shiftAndScaleLineCoordinates(BranchEdge edge, LayoutParameters layoutParam) {
121+
var dPadding = layoutParam.getDiagramPadding();
122+
var vlPadding = layoutParam.getVoltageLevelPadding();
123+
var snakeLine = new ArrayList<>(edge.getSnakeLine());
124+
snakeLine.forEach(point -> {
125+
point.shiftX(-minX);
126+
point.shiftY(-minY);
127+
point.scale(cgmesScaleFactor);
128+
point.shiftX(dPadding.left() + vlPadding.left());
129+
point.shiftY(dPadding.top() + vlPadding.top());
130+
});
123131
}
124-
125132
}

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/CgmesZoneLayoutFactory.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,18 @@
2222
public class CgmesZoneLayoutFactory implements ZoneLayoutFactory {
2323

2424
private final Network network;
25+
private final double cgmesScaleFactor;
26+
private final String cgmesDiagramName;
2527

26-
public CgmesZoneLayoutFactory(Network network) {
28+
public CgmesZoneLayoutFactory(Network network, String cgmesDiagramName, double cgmesScaleFactor) {
2729
this.network = Objects.requireNonNull(network);
30+
this.cgmesDiagramName = cgmesDiagramName;
31+
this.cgmesScaleFactor = cgmesScaleFactor;
2832
}
2933

3034
@Override
3135
public Layout create(ZoneGraph graph, ZoneLayoutPathFinderFactory pathFinderFactory, SubstationLayoutFactory sLayoutFactory, VoltageLevelLayoutFactory vLayoutFactory) {
32-
return new CgmesZoneLayout(graph, network);
36+
return new CgmesZoneLayout(graph, network, cgmesDiagramName, cgmesScaleFactor);
3337
}
3438

3539
}

single-line-diagram/single-line-diagram-cgmes/single-line-diagram-cgmes-layout/src/main/java/com/powsybl/sld/cgmes/layout/LayoutToCgmesDlExporterTool.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public void run(CommandLine line, ToolRunningContext context) {
124124
Network network = Network.read(inputFile);
125125

126126
context.getOutputStream().println("Generating layout for the network ...");
127-
LayoutToCgmesExtensionsConverter lTranslator = new LayoutToCgmesExtensionsConverter(sFactory, vFactory, new LayoutParameters().setCgmesUseNames(true));
127+
LayoutToCgmesExtensionsConverter lTranslator = new LayoutToCgmesExtensionsConverter(sFactory, vFactory, new LayoutParameters());
128128

129129
String diagramName = toolOptions.getValue(DIAGRAM_NAME).orElse(null);
130130
lTranslator.convertLayout(network, diagramName);

0 commit comments

Comments
 (0)