OverloadManagementSystemAdder.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.iidm.network;

/**
 * @author Olivier Perrin {@literal <olivier.perrin at rte-france.com>}
 */
public interface OverloadManagementSystemAdder extends IdentifiableAdder<OverloadManagementSystem, OverloadManagementSystemAdder> {

    interface TrippingAdder<I extends TrippingAdder<I>> {
        /**
         * Set the unique key of the tripping.
         * <p>This key is unique for a single overload management system, but it can be reused
         * for another overload management system).</p>
         * @param key the tripping key
         */
        I setKey(String key);

        /**
         * Set the name of the tripping.
         * <p>This name is facultative. It is used only for reporting purposes.</p>
         * @param name the name of the tripping
         */
        I setName(String name);

        /**
         * Set the maximum acceptable current value (in A).
         * @param currentLimit the maximum current value
         */
        I setCurrentLimit(double currentLimit);

        I setOpenAction(boolean open);

        OverloadManagementSystem.Tripping.Type getType();

        OverloadManagementSystemAdder add();
    }

    interface SwitchTrippingAdder extends TrippingAdder<SwitchTrippingAdder> {
        @Override
        default OverloadManagementSystem.Tripping.Type getType() {
            return OverloadManagementSystem.Tripping.Type.SWITCH_TRIPPING;
        }

        SwitchTrippingAdder setSwitchToOperateId(String switchId);
    }

    interface BranchTrippingAdder extends TrippingAdder<BranchTrippingAdder> {
        @Override
        default OverloadManagementSystem.Tripping.Type getType() {
            return OverloadManagementSystem.Tripping.Type.BRANCH_TRIPPING;
        }

        BranchTrippingAdder setBranchToOperateId(String branchId);

        BranchTrippingAdder setSideToOperate(TwoSides side);
    }

    interface ThreeWindingsTransformerTrippingAdder extends TrippingAdder<ThreeWindingsTransformerTrippingAdder> {
        @Override
        default OverloadManagementSystem.Tripping.Type getType() {
            return OverloadManagementSystem.Tripping.Type.THREE_WINDINGS_TRANSFORMER_TRIPPING;
        }

        ThreeWindingsTransformerTrippingAdder setThreeWindingsTransformerToOperateId(String threeWindingsTransformerId);

        ThreeWindingsTransformerTrippingAdder setSideToOperate(ThreeSides side);

    }

    @Override
    OverloadManagementSystem add();

    OverloadManagementSystemAdder setEnabled(boolean enabled);

    /**
     * Set the id of the element (branch or three windings transformer) which is monitored.
     * @param monitoredElementId the id of the monitored element
     * @return the adder
     */
    OverloadManagementSystemAdder setMonitoredElementId(String monitoredElementId);

    /**
     * Set the monitored side of the element.
     * @param monitoredElementSide the monitored side of the element
     * @return the adder
     */
    OverloadManagementSystemAdder setMonitoredElementSide(ThreeSides monitoredElementSide);

    SwitchTrippingAdder newSwitchTripping();

    BranchTrippingAdder newBranchTripping();

    ThreeWindingsTransformerTrippingAdder newThreeWindingsTransformerTripping();
}