LoadsVariationBuilder.java
/**
* Copyright (c) 2024, 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.dynawo.margincalculation.loadsvariation;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.dynawo.builders.BuilderEquipmentsList;
import com.powsybl.dynawo.builders.BuilderReports;
import com.powsybl.dynawo.margincalculation.MarginCalculationReports;
import com.powsybl.iidm.network.IdentifiableType;
import com.powsybl.iidm.network.Load;
import com.powsybl.iidm.network.Network;
import java.util.Collection;
import java.util.Objects;
/**
* @author Laurent Issertial {@literal <laurent.issertial at rte-france.com>}
*/
public class LoadsVariationBuilder {
private final Network network;
private final ReportNode reportNode;
private boolean isInstantiable = true;
private final BuilderEquipmentsList<Load> loads;
private double variationValue = Double.NaN;
public LoadsVariationBuilder(Network network, ReportNode reportNode) {
this.network = Objects.requireNonNull(network);
this.reportNode = Objects.requireNonNull(reportNode);
this.loads = new BuilderEquipmentsList<>(IdentifiableType.LOAD, "loads");
}
public LoadsVariationBuilder loads(String... loadIds) {
loads.addEquipments(loadIds, this::getConnectedLoad);
return this;
}
public LoadsVariationBuilder loads(Collection<String> loadIds) {
loads.addEquipments(loadIds, this::getConnectedLoad);
return this;
}
private Load getConnectedLoad(String loadId) {
Load load = network.getLoad(loadId);
return load != null && load.getTerminal().isConnected() ? load : null;
}
public LoadsVariationBuilder variationValue(double variationValue) {
this.variationValue = variationValue;
return this;
}
protected void checkData() {
isInstantiable = loads.checkEquipmentData(reportNode);
if (Double.isNaN(variationValue)) {
BuilderReports.reportFieldNotSet(reportNode, "variationValue");
isInstantiable = false;
}
}
private boolean isInstantiable() {
checkData();
if (!isInstantiable) {
MarginCalculationReports.reportLoadVariationInstantiationFailure(reportNode);
}
return isInstantiable;
}
public LoadsVariation build() {
return isInstantiable() ? new LoadsVariation(loads.getEquipments(), variationValue) : null;
}
}