ParameterDefaultValueConfig.java
/**
* Copyright (c) 2016, All partners of the iTesla project (http://www.itesla-project.eu/consortium)
* 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.commons.parameters;
import com.powsybl.commons.config.ModuleConfig;
import com.powsybl.commons.config.PlatformConfig;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiFunction;
/**
* To override programmatic default value.
*
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
public class ParameterDefaultValueConfig {
private static final String MODULE_NAME = "import-export-parameters-default-value";
public static final ParameterDefaultValueConfig INSTANCE = new ParameterDefaultValueConfig();
private PlatformConfig platformConfig;
private boolean init = false;
private ModuleConfig configCache;
public ParameterDefaultValueConfig() {
this(null);
}
public ParameterDefaultValueConfig(PlatformConfig platformConfig) {
this.platformConfig = platformConfig;
}
private synchronized ModuleConfig getModuleConfig() {
if (!init) {
if (platformConfig == null) {
platformConfig = PlatformConfig.defaultConfig();
}
configCache = platformConfig.getOptionalModuleConfig(MODULE_NAME).orElse(null);
init = true;
}
return configCache;
}
public Object getValue(String prefix, Parameter parameter) {
Objects.requireNonNull(parameter);
switch (parameter.getType()) {
case BOOLEAN:
return getBooleanValue(prefix, parameter);
case STRING:
return getStringValue(prefix, parameter);
case STRING_LIST:
return getStringListValue(prefix, parameter);
case DOUBLE:
return getDoubleValue(prefix, parameter);
case INTEGER:
return getIntegerValue(prefix, parameter);
default:
throw new IllegalStateException("Unsupported parameter type: " + parameter.getType());
}
}
public boolean getBooleanValue(String prefix, Parameter parameter) {
return getValue(prefix, (Boolean) parameter.getDefaultValue(), parameter, ModuleConfig::getOptionalBooleanProperty);
}
public String getStringValue(String prefix, Parameter parameter) {
return getValue(prefix, (String) parameter.getDefaultValue(), parameter, ModuleConfig::getOptionalStringProperty);
}
public List<String> getStringListValue(String prefix, Parameter parameter) {
return getValue(prefix, (List<String>) parameter.getDefaultValue(), parameter, ModuleConfig::getOptionalStringListProperty);
}
public double getDoubleValue(String prefix, Parameter parameter) {
return getValue(prefix, (Double) parameter.getDefaultValue(), parameter,
(moduleConfig, name) -> moduleConfig.getOptionalDoubleProperty(name).stream().boxed().findFirst());
}
public int getIntegerValue(String prefix, Parameter parameter) {
return getValue(prefix, (Integer) parameter.getDefaultValue(), parameter,
(moduleConfig, name) -> moduleConfig.getOptionalIntProperty(name).stream().boxed().findFirst());
}
private <T> T getValue(String prefix, T defaultValue, Parameter parameter, BiFunction<ModuleConfig, String, Optional<T>> valueSupplier) {
Objects.requireNonNull(prefix);
Objects.requireNonNull(parameter);
ModuleConfig moduleConfig = getModuleConfig();
if (moduleConfig != null) {
for (String name : parameter.getNames()) {
T value = valueSupplier.apply(moduleConfig, name)
.orElseGet(() -> valueSupplier.apply(moduleConfig, prefix + "_" + name).orElse(null));
if (value != null) {
return value;
}
}
}
return defaultValue;
}
}