OperationalLimitsGroup.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;
import java.util.Optional;

import static com.powsybl.iidm.network.util.LoadingLimitsUtil.initializeFromLoadingLimits;

/**
 * @author Pauline Jean-Marie {@literal <pauline.jean-marie at artelys.com>}
 */
public interface OperationalLimitsGroup {

    String getId();

    Optional<CurrentLimits> getCurrentLimits();

    Optional<ActivePowerLimits> getActivePowerLimits();

    Optional<ApparentPowerLimits> getApparentPowerLimits();

    CurrentLimitsAdder newCurrentLimits();

    ActivePowerLimitsAdder newActivePowerLimits();

    ApparentPowerLimitsAdder newApparentPowerLimits();

    default CurrentLimitsAdder newCurrentLimits(CurrentLimits currentLimits) {
        CurrentLimitsAdder currentLimitsAdder = newCurrentLimits();
        return initializeFromLoadingLimits(currentLimitsAdder, currentLimits);
    }

    default ActivePowerLimitsAdder newActivePowerLimits(ActivePowerLimits activePowerLimits) {
        ActivePowerLimitsAdder activePowerLimitsAdder = newActivePowerLimits();
        return initializeFromLoadingLimits(activePowerLimitsAdder, activePowerLimits);
    }

    default ApparentPowerLimitsAdder newApparentPowerLimits(ApparentPowerLimits apparentPowerLimits) {
        ApparentPowerLimitsAdder apparentPowerLimitsAdder = newApparentPowerLimits();
        return initializeFromLoadingLimits(apparentPowerLimitsAdder, apparentPowerLimits);
    }

    void removeCurrentLimits();

    void removeActivePowerLimits();

    void removeApparentPowerLimits();

    boolean isEmpty();
}