HvdcLineDiagramDataImporter.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.Objects;

import com.powsybl.iidm.network.Substation;
import com.powsybl.sld.cgmes.dl.iidm.extensions.NetworkDiagramData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.powsybl.sld.cgmes.dl.iidm.extensions.DiagramPoint;
import com.powsybl.sld.cgmes.dl.iidm.extensions.LineDiagramData;
import com.powsybl.iidm.network.HvdcLine;
import com.powsybl.iidm.network.Network;
import com.powsybl.triplestore.api.PropertyBag;

/**
 *
 * @author Massimo Ferraro {@literal <massimo.ferraro@techrain.eu>}
 */
public class HvdcLineDiagramDataImporter {

    private static final Logger LOG = LoggerFactory.getLogger(HvdcLineDiagramDataImporter.class);

    private Network network;

    public HvdcLineDiagramDataImporter(Network network) {
        this.network = Objects.requireNonNull(network);
    }

    public void importDiagramData(PropertyBag hvdcLineDiagramData) {
        Objects.requireNonNull(hvdcLineDiagramData);
        String hvdcLineId = hvdcLineDiagramData.getId("identifiedObject");
        HvdcLine hvdcLine = network.getHvdcLine(hvdcLineId);
        if (hvdcLine != null) {
            LineDiagramData<HvdcLine> hvdcLineIidmDiagramData = hvdcLine.getExtension(LineDiagramData.class);
            if (hvdcLineIidmDiagramData == null) {
                hvdcLineIidmDiagramData = new LineDiagramData<>(hvdcLine);
            }
            String diagramName = hvdcLineDiagramData.get("diagramName");
            hvdcLineIidmDiagramData.addPoint(diagramName, new DiagramPoint(hvdcLineDiagramData.asDouble("x"), hvdcLineDiagramData.asDouble("y"), hvdcLineDiagramData.asInt("seq")));
            hvdcLine.addExtension(LineDiagramData.class, hvdcLineIidmDiagramData);
            NetworkDiagramData.addDiagramName(network, diagramName, hvdcLine.getConverterStation1().getTerminal().getVoltageLevel().getSubstation().map(Substation::getId).orElse(null));
            NetworkDiagramData.addDiagramName(network, diagramName, hvdcLine.getConverterStation2().getTerminal().getVoltageLevel().getSubstation().map(Substation::getId).orElse(null));
        } else {
            LOG.warn("Cannot find HVDC line {}, name {} in network {}: skipping HVDC line diagram data", hvdcLineId, hvdcLineDiagramData.get("name"), network.getId());
        }
    }

}