ValidationType.java

/**
 * Copyright (c) 2017-2018, 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.loadflow.validation;

import java.io.IOException;
import java.nio.file.Path;
import java.util.Objects;

import com.powsybl.iidm.network.Network;
import com.powsybl.loadflow.validation.io.ValidationWriter;

/**
 *
 * @author Massimo Ferraro {@literal <massimo.ferraro@techrain.eu>}
 */
public enum ValidationType {
    FLOWS("branches_flows.csv"),
    GENERATORS("generators.csv"),
    BUSES("buses.csv"),
    SVCS("svcs.csv"),
    SHUNTS("shunts.csv"),
    TWTS("twt.csv"),
    TWTS3W("twt3w.csv");

    private final String file;

    ValidationType(String file) {
        this.file = Objects.requireNonNull(file);
    }

    private static final String UNEXPECTED_VALIDATION_TYPE_VALUE = "Unexpected ValidationType value: ";

    public boolean check(Network network, ValidationConfig config, Path folder) throws IOException {
        Objects.requireNonNull(network);
        Objects.requireNonNull(config);
        Objects.requireNonNull(folder);
        switch (this) {
            case FLOWS:
                return FlowsValidation.INSTANCE.checkFlows(network, config, folder.resolve(file));
            case GENERATORS:
                return GeneratorsValidation.INSTANCE.checkGenerators(network, config, folder.resolve(file));
            case BUSES:
                return BusesValidation.INSTANCE.checkBuses(network, config, folder.resolve(file));
            case SVCS:
                return StaticVarCompensatorsValidation.INSTANCE.checkSVCs(network, config, folder.resolve(file));
            case SHUNTS:
                return ShuntCompensatorsValidation.INSTANCE.checkShunts(network, config, folder.resolve(file));
            case TWTS:
                return TransformersValidation.INSTANCE.checkTransformers(network, config, folder.resolve(file));
            case TWTS3W:
                return Transformers3WValidation.INSTANCE.checkTransformers(network, config, folder.resolve(file));
            default:
                throw new IllegalStateException(UNEXPECTED_VALIDATION_TYPE_VALUE + this);
        }
    }

    public boolean check(Network network, ValidationConfig config, ValidationWriter validationWriter) {
        Objects.requireNonNull(network);
        Objects.requireNonNull(config);
        Objects.requireNonNull(validationWriter);
        switch (this) {
            case FLOWS:
                return FlowsValidation.INSTANCE.checkFlows(network, config, validationWriter);
            case GENERATORS:
                return GeneratorsValidation.INSTANCE.checkGenerators(network, config, validationWriter);
            case BUSES:
                return BusesValidation.INSTANCE.checkBuses(network, config, validationWriter);
            case SVCS:
                return StaticVarCompensatorsValidation.INSTANCE.checkSVCs(network, config, validationWriter);
            case SHUNTS:
                return ShuntCompensatorsValidation.INSTANCE.checkShunts(network, config, validationWriter);
            case TWTS:
                return TransformersValidation.INSTANCE.checkTransformers(network, config, validationWriter);
            case TWTS3W:
                return Transformers3WValidation.INSTANCE.checkTransformers(network, config, validationWriter);
            default:
                throw new IllegalStateException(UNEXPECTED_VALIDATION_TYPE_VALUE + this);
        }
    }

    public Path getOutputFile(Path folder) {
        return folder.resolve(file);
    }

}