MarginCalculationRunParameters.java

/**
 * Copyright (c) 2024, 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.margincalculation;

import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.ComputationManager;
import com.powsybl.computation.local.LocalComputationManager;

import java.util.Objects;
import java.util.function.Supplier;

/**
 * @author Laurent Issertial {@literal <laurent.issertial at rte-france.com>}
 */
public class MarginCalculationRunParameters {

    private static final Supplier<MarginCalculationParameters> DEFAULT_MC_PARAMETERS_SUPPLIER = MarginCalculationParameters::load;
    private static final Supplier<ComputationManager> DEFAULT_COMPUTATION_MANAGER_SUPPLIER = LocalComputationManager::getDefault;

    private MarginCalculationParameters marginCalculationParameters;
    private ComputationManager computationManager;
    private ReportNode reportNode = ReportNode.NO_OP;

    /**
     * Returns a {@link MarginCalculationRunParameters} instance with default value on each field.
     * @return the MarginCalculationRunParameters instance.
     */
    public static MarginCalculationRunParameters getDefault() {
        return new MarginCalculationRunParameters()
                .setMarginCalculationParameters(DEFAULT_MC_PARAMETERS_SUPPLIER.get())
                .setComputationManager(DEFAULT_COMPUTATION_MANAGER_SUPPLIER.get());
    }

    /**
     * {@link MarginCalculationParameters} getter<br>
     * If null, sets the field to its default value with {@link #DEFAULT_MC_PARAMETERS_SUPPLIER} before returning it.
     */
    public MarginCalculationParameters getMarginCalculationParameters() {
        if (marginCalculationParameters == null) {
            setMarginCalculationParameters(DEFAULT_MC_PARAMETERS_SUPPLIER.get());
        }
        return marginCalculationParameters;
    }

    /**
     * {@link ComputationManager} getter<br>
     * If null, sets the field to its default value with {@link #DEFAULT_COMPUTATION_MANAGER_SUPPLIER} before returning it.
     */
    public ComputationManager getComputationManager() {
        if (computationManager == null) {
            setComputationManager(DEFAULT_COMPUTATION_MANAGER_SUPPLIER.get());
        }
        return computationManager;
    }

    public ReportNode getReportNode() {
        return reportNode;
    }

    /**
     * Sets the security analysis parameters, see {@link MarginCalculationRunParameters}.
     */
    public MarginCalculationRunParameters setMarginCalculationParameters(MarginCalculationParameters marginCalculationParameters) {
        Objects.requireNonNull(marginCalculationParameters, "Margin calculation parameters should not be null");
        this.marginCalculationParameters = marginCalculationParameters;
        return this;
    }

    /**
     * Sets the computationManager handling command execution.
     */
    public MarginCalculationRunParameters setComputationManager(ComputationManager computationManager) {
        Objects.requireNonNull(computationManager, "ComputationManager should not be null");
        this.computationManager = computationManager;
        return this;
    }

    /**
     * Sets the reportNode used for functional logs, see {@link ReportNode}
     */
    public MarginCalculationRunParameters setReportNode(ReportNode reportNode) {
        Objects.requireNonNull(reportNode, "ReportNode should not be null");
        this.reportNode = reportNode;
        return this;
    }
}