MonitoringInput.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/.
*/
package com.powsybl.openrao.monitoring;
import com.powsybl.glsk.commons.ZonalData;
import com.powsybl.iidm.modification.scalable.Scalable;
import com.powsybl.iidm.network.Network;
import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.openrao.commons.PhysicalParameter;
import com.powsybl.openrao.data.crac.api.Crac;
import com.powsybl.openrao.data.raoresult.api.RaoResult;
import java.util.Objects;
import static java.lang.String.format;
/**
* @author Mohamed Ben Rejeb {@literal <mohamed.ben-rejeb at rte-france.com>}
*/
public class MonitoringInput {
public static final class MonitoringInputBuilder {
private static final String REQUIRED_ARGUMENT_MESSAGE = "%s is mandatory when building Monitoring input.";
private Crac crac;
private Network network;
private RaoResult raoResult;
private PhysicalParameter physicalParameter;
private ZonalData<Scalable> scalableZonalData;
MonitoringInputBuilder() {
}
public MonitoringInputBuilder withCrac(Crac crac) {
this.crac = crac;
return this;
}
public MonitoringInputBuilder withNetwork(Network network) {
this.network = network;
return this;
}
public MonitoringInputBuilder withRaoResult(RaoResult raoResult) {
this.raoResult = raoResult;
return this;
}
public MonitoringInputBuilder withPhysicalParameter(PhysicalParameter physicalParameter) {
this.physicalParameter = physicalParameter;
return this;
}
public MonitoringInputBuilder withScalableZonalData(ZonalData<Scalable> scalableZonalData) {
if (!physicalParameter.equals(PhysicalParameter.ANGLE)) {
throw new OpenRaoException("Monitoring with scalable is possible only if physicalParameter is ANGLE");
}
this.scalableZonalData = scalableZonalData;
return this;
}
public MonitoringInput build() {
MonitoringInput monitoringInput = new MonitoringInput();
monitoringInput.crac = Objects.requireNonNull(crac, format(REQUIRED_ARGUMENT_MESSAGE, "CRAC"));
monitoringInput.network = Objects.requireNonNull(network, format(REQUIRED_ARGUMENT_MESSAGE, "Network"));
monitoringInput.raoResult = Objects.requireNonNull(raoResult, format(REQUIRED_ARGUMENT_MESSAGE, "RaoResult"));
monitoringInput.physicalParameter = physicalParameter;
monitoringInput.scalableZonalData = scalableZonalData;
return monitoringInput;
}
}
private Crac crac;
private Network network;
private RaoResult raoResult;
private PhysicalParameter physicalParameter;
private ZonalData<Scalable> scalableZonalData;
public static MonitoringInputBuilder buildWithVoltage(Network network, Crac crac, RaoResult raoResult) {
return new MonitoringInputBuilder().withNetwork(network).withCrac(crac).withRaoResult(raoResult).withPhysicalParameter(PhysicalParameter.VOLTAGE);
}
public static MonitoringInputBuilder buildWithAngle(Network network, Crac crac, RaoResult raoResult, ZonalData<Scalable> scalableZonalData) {
return new MonitoringInputBuilder().withNetwork(network).withCrac(crac).withRaoResult(raoResult).withPhysicalParameter(PhysicalParameter.ANGLE).withScalableZonalData(scalableZonalData);
}
public Crac getCrac() {
return crac;
}
public Network getNetwork() {
return network;
}
public RaoResult getRaoResult() {
return raoResult;
}
public PhysicalParameter getPhysicalParameter() {
return physicalParameter;
}
public ZonalData<Scalable> getScalableZonalData() {
return scalableZonalData;
}
}