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 java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Objects;
/**
* @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 String 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, null, DEFAULT_DUMP_NAME);
public DumpFileParameters {
if (useDumpFile) {
Objects.requireNonNull(dumpFileFolder);
Objects.requireNonNull(dumpFile);
} else if (exportDumpFile) {
Objects.requireNonNull(dumpFileFolder);
}
}
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, FileSystem fileSystem) {
boolean exportDumpFile = config.getOptionalBooleanProperty("dump.export").orElse(DumpFileParameters.DEFAULT_EXPORT_DUMP);
String exportDumpFileFolder = config.getOptionalStringProperty("dump.exportFolder").orElse(DumpFileParameters.DEFAULT_DUMP_FOLDER);
Path exportDumpFileFolderPath = exportDumpFileFolder != null ? fileSystem.getPath(exportDumpFileFolder) : null;
boolean exportFolderNotFound = exportDumpFileFolderPath == null || !Files.exists(exportDumpFileFolderPath);
if (exportDumpFile && exportFolderNotFound) {
throw new PowsyblException("Folder " + exportDumpFileFolder + " set in 'dumpFileFolder' property cannot be found");
}
boolean useDumpFile = config.getOptionalBooleanProperty("dump.useAsInput").orElse(DumpFileParameters.DEFAULT_USE_DUMP);
String dumpFile = config.getOptionalStringProperty("dump.fileName").orElse(DumpFileParameters.DEFAULT_DUMP_NAME);
if (useDumpFile && (exportFolderNotFound || dumpFile == null || !Files.exists(exportDumpFileFolderPath.resolve(dumpFile)))) {
throw new PowsyblException("File " + dumpFile + " set in 'dumpFile' property cannot be found");
}
return new DumpFileParameters(exportDumpFile, useDumpFile, exportDumpFileFolderPath, dumpFile);
}
public Path getDumpFilePath() {
return dumpFileFolder != null ?
dumpFileFolder.resolve(dumpFile)
: null;
}
}