CracCreationParameters.java
/*
* Copyright (c) 2021, 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.data.crac.api.parameters;
import com.powsybl.openrao.data.crac.api.RaUsageLimits;
import com.powsybl.openrao.data.crac.api.CracFactory;
import com.powsybl.iidm.network.TwoSides;
import com.google.common.base.Suppliers;
import com.powsybl.commons.config.PlatformConfig;
import com.powsybl.commons.extensions.AbstractExtendable;
import com.powsybl.commons.extensions.Extension;
import com.powsybl.commons.extensions.ExtensionConfigLoader;
import com.powsybl.commons.extensions.ExtensionProviders;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Supplier;
/**
* Parameters related to the creation of a CRAC.
*
* @author Baptiste Seguinot {@literal <baptiste.seguinot at rte-france.com>}
*/
public class CracCreationParameters extends AbstractExtendable<CracCreationParameters> {
static final String MODULE_NAME = "crac-creation-parameters";
private static final String DEFAULT_CRAC_FACTORY_NAME = CracFactory.findDefault().getName();
static final MonitoredLineSide DEFAULT_DEFAULT_MONITORED_LINE_SIDE = MonitoredLineSide.MONITOR_LINES_ON_BOTH_SIDES;
public interface ConfigLoader<E extends Extension<CracCreationParameters>> extends ExtensionConfigLoader<CracCreationParameters, E> {
}
private static final Supplier<ExtensionProviders<ConfigLoader>> PARAMETERS_EXTENSIONS_SUPPLIER =
Suppliers.memoize(() -> ExtensionProviders.createProvider(ConfigLoader.class, MODULE_NAME));
private String cracFactoryName = DEFAULT_CRAC_FACTORY_NAME;
public enum MonitoredLineSide {
MONITOR_LINES_ON_SIDE_ONE(Set.of(TwoSides.ONE)),
MONITOR_LINES_ON_SIDE_TWO(Set.of(TwoSides.TWO)),
MONITOR_LINES_ON_BOTH_SIDES(Set.of(TwoSides.ONE, TwoSides.TWO));
private final Set<TwoSides> monitoredSides;
MonitoredLineSide(Set<TwoSides> monitoredSides) {
this.monitoredSides = monitoredSides;
}
Set<TwoSides> getMonitoredSides() {
return monitoredSides;
}
}
public enum DurationThresholdsLimits {
DURATION_THRESHOLDS_LIMITS_MAX_OUTAGE_INSTANT(60),
DURATION_THRESHOLDS_LIMITS_MAX_AUTO_INSTANT(900);
private final int limit;
DurationThresholdsLimits(int limit) {
this.limit = limit;
}
public int getLimit() {
return limit;
}
}
private MonitoredLineSide defaultMonitoredLineSide = DEFAULT_DEFAULT_MONITORED_LINE_SIDE;
private Map<String, RaUsageLimits> raUsageLimitsPerInstant = new HashMap<>();
public String getCracFactoryName() {
return cracFactoryName;
}
public void setCracFactoryName(String cracFactoryName) {
this.cracFactoryName = cracFactoryName;
}
public CracFactory getCracFactory() {
return CracFactory.find(cracFactoryName);
}
public Set<TwoSides> getDefaultMonitoredSides() {
return defaultMonitoredLineSide.getMonitoredSides();
}
MonitoredLineSide getDefaultMonitoredLineSide() {
return defaultMonitoredLineSide;
}
public void setDefaultMonitoredLineSide(MonitoredLineSide defaultMonitoredLineSide) {
this.defaultMonitoredLineSide = defaultMonitoredLineSide;
}
public Map<String, RaUsageLimits> getRaUsageLimitsPerInstant() {
return this.raUsageLimitsPerInstant;
}
public void addRaUsageLimitsForInstant(String instant, RaUsageLimits raUsageLimits) {
this.raUsageLimitsPerInstant.put(instant, raUsageLimits);
}
public static CracCreationParameters load() {
return load(PlatformConfig.defaultConfig());
}
public static CracCreationParameters load(PlatformConfig platformConfig) {
Objects.requireNonNull(platformConfig);
CracCreationParameters parameters = new CracCreationParameters();
platformConfig.getOptionalModuleConfig(MODULE_NAME)
.ifPresent(config -> parameters.setCracFactoryName(config.getStringProperty("crac-factory", DEFAULT_CRAC_FACTORY_NAME)));
parameters.readExtensions(platformConfig);
return parameters;
}
private void readExtensions(PlatformConfig platformConfig) {
for (ExtensionConfigLoader provider : PARAMETERS_EXTENSIONS_SUPPLIER.get().getProviders()) {
addExtension(provider.getExtensionClass(), provider.load(platformConfig));
}
}
}