DumpFileParameters.java
/**
* Copyright (c) 2023, 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;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.config.ModuleConfig;
import com.powsybl.commons.parameters.Parameter;
import com.powsybl.commons.parameters.ParameterType;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Function;
/**
* @author Laurent Issertial {@literal <laurent.issertial at rte-france.com>}
*/
@JsonIgnoreProperties(value = { "dumpFilePath" })
public record DumpFileParameters(boolean exportDumpFile, boolean useDumpFile, Path dumpFileFolder, String dumpFile) {
public static final boolean DEFAULT_EXPORT_DUMP = false;
public static final boolean DEFAULT_USE_DUMP = false;
public static final Path DEFAULT_DUMP_FOLDER = null;
public static final String DEFAULT_DUMP_NAME = null;
private static final DumpFileParameters DEFAULT_DUMP_FILE_PARAMETERS =
new DumpFileParameters(DEFAULT_EXPORT_DUMP, DEFAULT_USE_DUMP, DEFAULT_DUMP_FOLDER, DEFAULT_DUMP_NAME);
private static final String DUMP_EXPORT = "dump.export";
private static final String DUMP_EXPORT_FOLDER = "dump.exportFolder";
private static final String DUMP_USE_AS_INPUT = "dump.useAsInput";
private static final String DUMP_FILE_NAME = "dump.fileName";
public static final List<Parameter> SPECIFIC_PARAMETERS = List.of(
new Parameter(DUMP_EXPORT, ParameterType.BOOLEAN, "Dump file name", DEFAULT_EXPORT_DUMP),
new Parameter(DUMP_EXPORT_FOLDER, ParameterType.STRING, "Dump export folder path", DEFAULT_DUMP_FOLDER),
new Parameter(DUMP_USE_AS_INPUT, ParameterType.BOOLEAN, "Use dump file as simulation input", DEFAULT_USE_DUMP),
new Parameter(DUMP_FILE_NAME, ParameterType.STRING, "Input dump file name", DEFAULT_DUMP_NAME)
);
public DumpFileParameters {
boolean exportFolderNotFound = dumpFileFolder == null || Files.notExists(dumpFileFolder);
if (exportDumpFile && exportFolderNotFound) {
throw new PowsyblException("Folder " + dumpFileFolder + " set in 'dumpFileFolder' property cannot be found");
}
if (useDumpFile && (exportFolderNotFound || dumpFile == null || Files.notExists(dumpFileFolder.resolve(dumpFile)))) {
throw new PowsyblException("File " + dumpFile + " set in 'dumpFile' property cannot be found");
}
}
public static DumpFileParameters createDefaultDumpFileParameters() {
return DEFAULT_DUMP_FILE_PARAMETERS;
}
public static DumpFileParameters createExportDumpFileParameters(Path dumpFileFolder) {
return new DumpFileParameters(true, false, dumpFileFolder, null);
}
public static DumpFileParameters createImportDumpFileParameters(Path dumpFileFolder, String dumpFile) {
return new DumpFileParameters(false, true, dumpFileFolder, dumpFile);
}
public static DumpFileParameters createImportExportDumpFileParameters(Path dumpFileFolder, String dumpFile) {
return new DumpFileParameters(true, true, dumpFileFolder, dumpFile);
}
public static DumpFileParameters createDumpFileParametersFromConfig(ModuleConfig config, Function<String, Path> pathGetter) {
boolean exportDumpFile = config.getOptionalBooleanProperty(DUMP_EXPORT).orElse(DEFAULT_EXPORT_DUMP);
Path dumpFileFolder = config.getOptionalStringProperty(DUMP_EXPORT_FOLDER).map(pathGetter).orElse(DEFAULT_DUMP_FOLDER);
boolean useDumpFile = config.getOptionalBooleanProperty(DUMP_USE_AS_INPUT).orElse(DEFAULT_USE_DUMP);
String dumpFile = config.getOptionalStringProperty(DUMP_FILE_NAME).orElse(DEFAULT_DUMP_NAME);
return new DumpFileParameters(exportDumpFile, useDumpFile, dumpFileFolder, dumpFile);
}
public static DumpFileParameters updateDumpFileParametersFromPropertiesMap(Map<String, String> properties,
DumpFileParameters dumpFileParameters, Function<String, Path> pathGetter) {
boolean exportDumpFile = Optional.ofNullable(properties.get(DUMP_EXPORT)).map(Boolean::valueOf).orElse(dumpFileParameters.exportDumpFile);
Path dumpFileFolder = Optional.ofNullable(properties.get(DUMP_EXPORT_FOLDER)).map(pathGetter).orElse(dumpFileParameters.dumpFileFolder);
boolean useDumpFile = Optional.ofNullable(properties.get(DUMP_USE_AS_INPUT)).map(Boolean::valueOf).orElse(dumpFileParameters.useDumpFile);
String dumpFile = Optional.ofNullable(properties.get(DUMP_FILE_NAME)).orElse(dumpFileParameters.dumpFile);
return new DumpFileParameters(exportDumpFile, useDumpFile, dumpFileFolder, dumpFile);
}
public void addParametersToMap(BiConsumer<String, Object> mapAdder) {
mapAdder.accept(DUMP_EXPORT, exportDumpFile);
mapAdder.accept(DUMP_EXPORT_FOLDER, dumpFileFolder);
mapAdder.accept(DUMP_USE_AS_INPUT, useDumpFile);
mapAdder.accept(DUMP_FILE_NAME, dumpFile);
}
public Path getDumpFilePath() {
return dumpFileFolder != null ?
dumpFileFolder.resolve(dumpFile)
: null;
}
}