HvdcLineAdderImpl.java
/**
* Copyright (c) 2016, 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/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.iidm.network.impl;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.*;
import com.powsybl.commons.ref.Ref;
import java.util.Objects;
/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
* @author Mathieu Bague {@literal <mathieu.bague at rte-france.com>}
*/
public class HvdcLineAdderImpl extends AbstractIdentifiableAdder<HvdcLineAdderImpl> implements HvdcLineAdder {
private final NetworkImpl network;
private final String subnetwork;
private double r = Double.NaN;
private HvdcLine.ConvertersMode convertersMode;
private double nominalV = Double.NaN;
private double activePowerSetpoint = Double.NaN;
private double maxP = Double.NaN;
private String converterStationId1;
private String converterStationId2;
public HvdcLineAdderImpl(NetworkImpl network, String subnetwork) {
this.network = Objects.requireNonNull(network);
this.subnetwork = subnetwork;
}
@Override
protected NetworkImpl getNetwork() {
return network;
}
@Override
protected String getTypeDescription() {
return HvdcLineImpl.TYPE_DESCRIPTION;
}
@Override
public HvdcLineAdder setR(double r) {
this.r = r;
return this;
}
@Override
public HvdcLineAdder setConvertersMode(HvdcLine.ConvertersMode convertersMode) {
this.convertersMode = convertersMode;
return this;
}
@Override
public HvdcLineAdder setNominalV(double nominalV) {
this.nominalV = nominalV;
return this;
}
@Override
public HvdcLineAdder setActivePowerSetpoint(double activePowerSetpoint) {
this.activePowerSetpoint = activePowerSetpoint;
return this;
}
@Override
public HvdcLineAdder setMaxP(double maxP) {
this.maxP = maxP;
return this;
}
@Override
public HvdcLineAdder setConverterStationId1(String converterStationId1) {
this.converterStationId1 = converterStationId1;
return this;
}
@Override
public HvdcLineAdder setConverterStationId2(String converterStationId2) {
this.converterStationId2 = converterStationId2;
return this;
}
@Override
public HvdcLine add() {
String id = checkAndGetUniqueId();
String name = getName();
ValidationUtil.checkR(this, r);
network.setValidationLevelIfGreaterThan(ValidationUtil.checkConvertersMode(this, convertersMode, network.getMinValidationLevel(), network.getReportNodeContext().getReportNode()));
ValidationUtil.checkNominalV(this, nominalV);
network.setValidationLevelIfGreaterThan(ValidationUtil.checkHvdcActivePowerSetpoint(this, activePowerSetpoint, network.getMinValidationLevel(), network.getReportNodeContext().getReportNode()));
ValidationUtil.checkHvdcMaxP(this, maxP);
AbstractHvdcConverterStation<?> converterStation1 = network.getHvdcConverterStation(converterStationId1);
if (converterStation1 == null) {
throw new PowsyblException("Side 1 converter station " + converterStationId1 + " not found");
}
AbstractHvdcConverterStation<?> converterStation2 = network.getHvdcConverterStation(converterStationId2);
if (converterStation2 == null) {
throw new PowsyblException("Side 2 converter station " + converterStationId2 + " not found");
}
VoltageLevelExt vl1 = converterStation1.getTerminal().getVoltageLevel();
VoltageLevelExt vl2 = converterStation2.getTerminal().getVoltageLevel();
if (subnetwork != null && (!subnetwork.equals(vl1.getSubnetworkId()) || !subnetwork.equals(vl2.getSubnetworkId()))) {
throw new ValidationException(this, "The converter stations are not in the subnetwork '" +
subnetwork + "'. Create this Hvdc line from the parent network '" + getNetwork().getId() + "'");
}
Ref<NetworkImpl> networkRef = computeNetworkRef(network, vl1, vl2);
HvdcLineImpl hvdcLine = new HvdcLineImpl(id, name, isFictitious(), r, nominalV, maxP, convertersMode, activePowerSetpoint,
converterStation1, converterStation2, networkRef);
network.getIndex().checkAndAdd(hvdcLine);
network.getListeners().notifyCreation(hvdcLine);
return hvdcLine;
}
}