Skip to content

Commit 6e8c22f

Browse files
committed
moves some NAD svg parameters checking from svgwriter to the LabelProvider
Signed-off-by: Christian Biasuzzi <christian.biasuzzi@soft.it>
1 parent bb60a71 commit 6e8c22f

4 files changed

Lines changed: 68 additions & 54 deletions

File tree

network-area-diagram/src/main/java/com/powsybl/nad/svg/SvgWriter.java

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,7 @@ private void drawHighlightBranchEdges(Graph graph, XMLStreamWriter writer) throw
158158
writer.writeEndElement();
159159
}
160160

161-
private void drawEdgeLabel(XMLStreamWriter writer, BranchEdge edge) throws XMLStreamException {
162-
163-
String edgeLabel = labelProvider.getLabel(edge);
161+
private void drawEdgeLabel(XMLStreamWriter writer, BranchEdge edge, String edgeLabel) throws XMLStreamException {
164162

165163
if (edgeLabel == null || edgeLabel.isEmpty()) {
166164
return;
@@ -204,7 +202,8 @@ private void drawEdgeCenter(XMLStreamWriter writer, BranchEdge edge) throws XMLS
204202
if (BranchEdge.DANGLING_LINE_EDGE.equals(edge.getType())) {
205203
return;
206204
}
207-
if (!BranchEdge.LINE_EDGE.equals(edge.getType()) || svgParameters.isEdgeNameDisplayed()) {
205+
String edgeLabel = labelProvider.getLabel(edge);
206+
if (!BranchEdge.LINE_EDGE.equals(edge.getType()) || !StringUtils.isEmpty(edgeLabel)) {
208207
writer.writeStartElement(GROUP_ELEMENT_NAME);
209208
switch (edge.getType()) {
210209
case BranchEdge.PST_EDGE:
@@ -217,9 +216,7 @@ private void drawEdgeCenter(XMLStreamWriter writer, BranchEdge edge) throws XMLS
217216
default:
218217
break;
219218
}
220-
if (svgParameters.isEdgeNameDisplayed()) {
221-
drawEdgeLabel(writer, edge);
222-
}
219+
drawEdgeLabel(writer, edge, edgeLabel);
223220
writer.writeEndElement();
224221
}
225222
}
@@ -662,14 +659,19 @@ private void writeTextNode(XMLStreamWriter writer, TextNode textNode, VoltageLev
662659
}
663660

664661
List<String> content = labelProvider.getVoltageLevelDescription(vlNode);
665-
if (content.size() > 1 || svgParameters.isBusLegend() || svgParameters.isVoltageLevelDetails()) {
666-
writeDetailedTextNode(writer, textNode, vlNode, content);
662+
List<String> vlDetails = labelProvider.getVoltageLevelDetails(vlNode);
663+
boolean isBusLegend = vlNode.getBusNodeStream().anyMatch(bus -> StringUtils.isNotEmpty(labelProvider.getBusDescription(bus))) || svgParameters.isBusLegend();
664+
boolean isVldetails = !vlDetails.isEmpty() || svgParameters.isVoltageLevelDetails();
665+
666+
if (content.size() > 1 || isBusLegend || isVldetails) {
667+
writeDetailedTextNode(writer, textNode, vlNode, content, vlDetails, isBusLegend);
667668
} else {
668669
writeSimpleTextNode(writer, textNode, content);
669670
}
671+
670672
}
671673

672-
private void writeDetailedTextNode(XMLStreamWriter writer, TextNode textNode, VoltageLevelNode vlNode, List<String> content) throws XMLStreamException {
674+
private void writeDetailedTextNode(XMLStreamWriter writer, TextNode textNode, VoltageLevelNode vlNode, List<String> content, List<String> vlDetails, boolean isBusLegend) throws XMLStreamException {
673675
writer.writeStartElement(FOREIGN_OBJECT_ELEMENT_NAME);
674676
writeId(writer, textNode);
675677
writer.writeAttribute(Y_ATTRIBUTE, getFormattedValue(textNode.getY()));
@@ -686,13 +688,11 @@ private void writeDetailedTextNode(XMLStreamWriter writer, TextNode textNode, Vo
686688

687689
writeLines(content, writer);
688690

689-
if (svgParameters.isBusLegend()) {
691+
if (isBusLegend) {
690692
writeBusNodeLegend(writer, vlNode);
691693
}
692694

693-
if (svgParameters.isVoltageLevelDetails()) {
694-
writeLines(labelProvider.getVoltageLevelDetails(vlNode), writer);
695-
}
695+
writeLines(vlDetails, writer);
696696

697697
writer.writeEndElement();
698698
writer.writeEndElement();
@@ -710,16 +710,19 @@ private void writeBusNodeLegend(XMLStreamWriter writer, VoltageLevelNode vlNode)
710710
writer.writeStartElement(TABLE_ELEMENT_NAME);
711711

712712
for (BusNode busNode : vlNode.getBusNodes()) {
713-
writer.writeStartElement(TABLE_ROW_ELEMENT_NAME);
714-
writer.writeStartElement(TABLE_DATA_ELEMENT_NAME);
715-
writer.writeEmptyElement(DIV_ELEMENT_NAME);
716-
writeStyleClasses(writer, styleProvider.getBusNodeStyleClasses(busNode), StyleProvider.LEGEND_SQUARE_CLASS);
717-
writeStyleAttribute(writer, styleProvider.getBusNodeStyle(busNode));
718-
writer.writeEndElement();
719-
writer.writeStartElement(TABLE_DATA_ELEMENT_NAME);
720-
writer.writeCharacters(labelProvider.getBusDescription(busNode));
721-
writer.writeEndElement();
722-
writer.writeEndElement();
713+
String busNodeLegend = labelProvider.getBusDescription(busNode);
714+
if (!StringUtils.isEmpty(busNodeLegend)) {
715+
writer.writeStartElement(TABLE_ROW_ELEMENT_NAME);
716+
writer.writeStartElement(TABLE_DATA_ELEMENT_NAME);
717+
writer.writeEmptyElement(DIV_ELEMENT_NAME);
718+
writeStyleClasses(writer, styleProvider.getBusNodeStyleClasses(busNode), StyleProvider.LEGEND_SQUARE_CLASS);
719+
writeStyleAttribute(writer, styleProvider.getBusNodeStyle(busNode));
720+
writer.writeEndElement();
721+
writer.writeStartElement(TABLE_DATA_ELEMENT_NAME);
722+
writer.writeCharacters(busNodeLegend);
723+
writer.writeEndElement();
724+
writer.writeEndElement();
725+
}
723726
}
724727
writer.writeEndElement();
725728
}

network-area-diagram/src/main/java/com/powsybl/nad/svg/iidm/DefaultLabelProvider.java

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public Optional<EdgeInfo> getEdgeInfo(Graph graph, ThreeWtEdge edge) {
5252

5353
@Override
5454
public String getLabel(Edge edge) {
55-
return edge.getEquipmentId();
55+
return svgParameters.isEdgeNameDisplayed() ? edge.getEquipmentId() : null;
5656
}
5757

5858
private Optional<EdgeInfo> getEdgeInfo(Terminal terminal) {
@@ -86,35 +86,41 @@ public List<String> getVoltageLevelDescription(VoltageLevelNode voltageLevelNode
8686

8787
@Override
8888
public String getBusDescription(BusNode busNode) {
89-
Bus b = network.getBusView().getBus(busNode.getEquipmentId());
90-
String voltage = valueFormatter.formatVoltage(b.getV(), "kV");
91-
String angle = valueFormatter.formatAngleInDegrees(b.getAngle());
92-
return voltage + " / " + angle;
89+
if (svgParameters.isBusLegend()) {
90+
Bus b = network.getBusView().getBus(busNode.getEquipmentId());
91+
String voltage = valueFormatter.formatVoltage(b.getV(), "kV");
92+
String angle = valueFormatter.formatAngleInDegrees(b.getAngle());
93+
return voltage + " / " + angle;
94+
}
95+
return null;
9396
}
9497

9598
@Override
9699
public List<String> getVoltageLevelDetails(VoltageLevelNode vlNode) {
97100
List<String> voltageLevelDetails = new ArrayList<>();
98-
VoltageLevel voltageLevel = network.getVoltageLevel(vlNode.getEquipmentId());
99101

100-
double activeProductionValue = voltageLevel.getGeneratorStream().mapToDouble(generator -> -generator.getTerminal().getP()).filter(p -> !Double.isNaN(p)).sum();
101-
String activeProduction = activeProductionValue == 0 ? "" : valueFormatter.formatPower(activeProductionValue, "MW");
102+
if (svgParameters.isVoltageLevelDetails()) {
103+
VoltageLevel voltageLevel = network.getVoltageLevel(vlNode.getEquipmentId());
102104

103-
double reactiveProductionValue = voltageLevel.getGeneratorStream().mapToDouble(generator -> -generator.getTerminal().getQ()).filter(q -> !Double.isNaN(q)).sum();
104-
String reactiveProduction = reactiveProductionValue == 0 ? "" : valueFormatter.formatPower(reactiveProductionValue, "MVAR");
105+
double activeProductionValue = voltageLevel.getGeneratorStream().mapToDouble(generator -> -generator.getTerminal().getP()).filter(p -> !Double.isNaN(p)).sum();
106+
String activeProduction = activeProductionValue == 0 ? "" : valueFormatter.formatPower(activeProductionValue, "MW");
105107

106-
double activeConsumptionValue = voltageLevel.getLoadStream().mapToDouble(load -> load.getTerminal().getP()).filter(p -> !Double.isNaN(p)).sum();
107-
String activeConsumption = activeConsumptionValue == 0 ? "" : valueFormatter.formatPower(activeConsumptionValue, "MW");
108+
double reactiveProductionValue = voltageLevel.getGeneratorStream().mapToDouble(generator -> -generator.getTerminal().getQ()).filter(q -> !Double.isNaN(q)).sum();
109+
String reactiveProduction = reactiveProductionValue == 0 ? "" : valueFormatter.formatPower(reactiveProductionValue, "MVAR");
108110

109-
double reactiveConsumptionValue = voltageLevel.getLoadStream().mapToDouble(load -> load.getTerminal().getQ()).filter(q -> !Double.isNaN(q)).sum();
110-
String reactiveConsumption = reactiveConsumptionValue == 0 ? "" : valueFormatter.formatPower(reactiveConsumptionValue, "MVAR");
111+
double activeConsumptionValue = voltageLevel.getLoadStream().mapToDouble(load -> load.getTerminal().getP()).filter(p -> !Double.isNaN(p)).sum();
112+
String activeConsumption = activeConsumptionValue == 0 ? "" : valueFormatter.formatPower(activeConsumptionValue, "MW");
111113

112-
if (!activeProduction.isEmpty() || !reactiveProduction.isEmpty()) {
113-
voltageLevelDetails.add(String.format("~ %s / %s", activeProduction, reactiveProduction));
114-
}
114+
double reactiveConsumptionValue = voltageLevel.getLoadStream().mapToDouble(load -> load.getTerminal().getQ()).filter(q -> !Double.isNaN(q)).sum();
115+
String reactiveConsumption = reactiveConsumptionValue == 0 ? "" : valueFormatter.formatPower(reactiveConsumptionValue, "MVAR");
116+
117+
if (!activeProduction.isEmpty() || !reactiveProduction.isEmpty()) {
118+
voltageLevelDetails.add(String.format("~ %s / %s", activeProduction, reactiveProduction));
119+
}
115120

116-
if (!activeConsumption.isEmpty() || !reactiveConsumption.isEmpty()) {
117-
voltageLevelDetails.add(String.format("⌂ %s / %s", activeConsumption, reactiveConsumption));
121+
if (!activeConsumption.isEmpty() || !reactiveConsumption.isEmpty()) {
122+
voltageLevelDetails.add(String.format("⌂ %s / %s", activeConsumption, reactiveConsumption));
123+
}
118124
}
119125

120126
return voltageLevelDetails;

network-area-diagram/src/test/java/com/powsybl/nad/svg/CustomLabelProviderTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ class CustomLabelProviderTest extends AbstractTest {
3131
void setup() {
3232
setLayoutParameters(new LayoutParameters());
3333

34-
//Note: SvgParameters EdgeNameDisplayed, VoltageLevelDetails, and BusLegend must be true,
35-
// for the edge names, the VL descriptions plus VL details, and bus descriptions to be rendered
34+
//Note: sets SvgParameters EdgeNameDisplayed, VoltageLevelDetails, and BusLegend explicitly to false, to demonstrate that
35+
// the custom label provider ignores them when rendering edge names, the VL descriptions, and VL details.
3636
setSvgParameters(new SvgParameters()
3737
.setSvgWidthAndHeightAdded(true)
3838
.setFixedWidth(800)
39-
.setEdgeNameDisplayed(true)
40-
.setVoltageLevelDetails(true)
41-
.setBusLegend(true));
39+
.setEdgeNameDisplayed(false)
40+
.setVoltageLevelDetails(false)
41+
.setBusLegend(false));
4242
}
4343

4444
@Override

network-area-diagram/src/test/java/com/powsybl/nad/svg/TextNodeTest.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.junit.jupiter.api.BeforeEach;
1818
import org.junit.jupiter.api.Test;
1919

20+
import java.util.Collections;
2021
import java.util.List;
2122

2223
/**
@@ -47,12 +48,16 @@ protected LabelProvider getLabelProvider(Network network) {
4748
return new DefaultLabelProvider(network, getSvgParameters()) {
4849
@Override
4950
public List<String> getVoltageLevelDetails(VoltageLevelNode vlNode) {
50-
VoltageLevel vl = network.getVoltageLevel(vlNode.getEquipmentId());
51-
return List.of(
52-
vl.getLoadCount() + " loads",
53-
vl.getGeneratorCount() + " generators",
54-
vl.getBatteryCount() + " batteries",
55-
vl.getDanglingLineCount() + " dangling lines");
51+
if (getSvgParameters().isVoltageLevelDetails()) {
52+
VoltageLevel vl = network.getVoltageLevel(vlNode.getEquipmentId());
53+
return List.of(
54+
vl.getLoadCount() + " loads",
55+
vl.getGeneratorCount() + " generators",
56+
vl.getBatteryCount() + " batteries",
57+
vl.getDanglingLineCount() + " dangling lines");
58+
} else {
59+
return Collections.emptyList();
60+
}
5661
}
5762
};
5863
}

0 commit comments

Comments
 (0)