TransformerDiagramDataImporter.java
/**
* Copyright (c) 2019-2020, 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.cgmes.dl.conversion.importers;
import java.util.Map;
import java.util.Objects;
import com.powsybl.iidm.network.Substation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.ThreeWindingsTransformer;
import com.powsybl.iidm.network.TwoWindingsTransformer;
import com.powsybl.sld.cgmes.dl.conversion.CgmesDLModel;
import com.powsybl.sld.cgmes.dl.iidm.extensions.CouplingDeviceDiagramData;
import com.powsybl.sld.cgmes.dl.iidm.extensions.DiagramPoint;
import com.powsybl.sld.cgmes.dl.iidm.extensions.DiagramTerminal;
import com.powsybl.sld.cgmes.dl.iidm.extensions.NetworkDiagramData;
import com.powsybl.sld.cgmes.dl.iidm.extensions.ThreeWindingsTransformerDiagramData;
import com.powsybl.triplestore.api.PropertyBag;
import com.powsybl.triplestore.api.PropertyBags;
/**
*
* @author Massimo Ferraro {@literal <massimo.ferraro@techrain.eu>}
*/
public class TransformerDiagramDataImporter extends AbstractCouplingDeviceDiagramDataImporter {
private static final Logger LOG = LoggerFactory.getLogger(TransformerDiagramDataImporter.class);
public TransformerDiagramDataImporter(Network network, Map<String, PropertyBags> terminalsDiagramData) {
super(network, terminalsDiagramData);
}
public void importDiagramData(PropertyBag transformersDiagramData) {
Objects.requireNonNull(transformersDiagramData);
String diagramName = transformersDiagramData.get(CgmesDLModel.DIAGRAM_NAME);
String transformerId = transformersDiagramData.getId("identifiedObject");
TwoWindingsTransformer transformer = network.getTwoWindingsTransformer(transformerId);
if (transformer != null) {
CouplingDeviceDiagramData<TwoWindingsTransformer> transformerIidmDiagramData = transformer.getExtension(CouplingDeviceDiagramData.class);
if (transformerIidmDiagramData == null) {
transformerIidmDiagramData = new CouplingDeviceDiagramData<>(transformer);
}
CouplingDeviceDiagramData<TwoWindingsTransformer>.CouplingDeviceDiagramDetails diagramDetails = transformerIidmDiagramData.new CouplingDeviceDiagramDetails(new DiagramPoint(transformersDiagramData.asDouble("x"), transformersDiagramData.asDouble("y"), transformersDiagramData.asInt("seq")),
transformersDiagramData.asDouble("rotation"));
addTerminalPoints(transformerId, transformer.getNameOrId(), diagramName, DiagramTerminal.TERMINAL1, "1", diagramDetails);
addTerminalPoints(transformerId, transformer.getNameOrId(), diagramName, DiagramTerminal.TERMINAL2, "2", diagramDetails);
transformerIidmDiagramData.addData(diagramName, diagramDetails);
transformer.addExtension(CouplingDeviceDiagramData.class, transformerIidmDiagramData);
NetworkDiagramData.addDiagramName(network, diagramName, transformer.getSubstation().map(Substation::getId).orElse(null));
} else {
ThreeWindingsTransformer transformer3w = network.getThreeWindingsTransformer(transformerId);
if (transformer3w != null) {
ThreeWindingsTransformerDiagramData transformerIidmDiagramData = transformer3w.getExtension(ThreeWindingsTransformerDiagramData.class);
if (transformerIidmDiagramData == null) {
transformerIidmDiagramData = new ThreeWindingsTransformerDiagramData(transformer3w);
}
ThreeWindingsTransformerDiagramData.ThreeWindingsTransformerDiagramDataDetails diagramDetails = transformerIidmDiagramData.new ThreeWindingsTransformerDiagramDataDetails(new DiagramPoint(transformersDiagramData.asDouble("x"), transformersDiagramData.asDouble("y"), transformersDiagramData.asInt("seq")),
transformersDiagramData.asDouble("rotation"));
addTerminalPoints(transformerId, transformer3w.getNameOrId(), diagramName, DiagramTerminal.TERMINAL1, "1", diagramDetails);
addTerminalPoints(transformerId, transformer3w.getNameOrId(), diagramName, DiagramTerminal.TERMINAL2, "2", diagramDetails);
addTerminalPoints(transformerId, transformer3w.getNameOrId(), diagramName, DiagramTerminal.TERMINAL3, "3", diagramDetails);
transformerIidmDiagramData.addData(diagramName, diagramDetails);
transformer3w.addExtension(ThreeWindingsTransformerDiagramData.class, transformerIidmDiagramData);
NetworkDiagramData.addDiagramName(network, diagramName, transformer3w.getSubstation().map(Substation::getId).orElse(null));
} else {
LOG.warn("Cannot find transformer {}, name {} in network {}: skipping transformer diagram data", transformerId, transformersDiagramData.get("name"), network.getId());
}
}
}
private void addTerminalPoints(String transformerId, String transformerName, String diagram, DiagramTerminal terminal, String terminalSide, ThreeWindingsTransformerDiagramData.ThreeWindingsTransformerDiagramDataDetails diagramDetails) {
String terminalKey = diagram + "_" + transformerId + "_" + terminalSide;
if (terminalsDiagramData.containsKey(terminalKey)) {
PropertyBags equipmentTerminalsDiagramData = terminalsDiagramData.get(terminalKey);
equipmentTerminalsDiagramData.forEach(terminalDiagramData ->
diagramDetails.addTerminalPoint(terminal, new DiagramPoint(terminalDiagramData.asDouble("x"), terminalDiagramData.asDouble("y"), terminalDiagramData.asInt("seq")))
);
} else {
LOG.warn("Cannot find terminal diagram data of transformer {}, name {}, terminal {}", transformerId, transformerName, terminal);
}
}
}