CimConstants.java

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

package com.powsybl.openrao.data.crac.io.cim.craccreator;

import java.util.List;
import java.util.Objects;

/**
 * @author Peter Mitri {@literal <peter.mitri at rte-france.com>}
 */
public final class CimConstants {
    private CimConstants() {
    }

    // --- GENERAL
    public static final String MEGAWATT_UNIT_SYMBOL = "MAW";
    public static final String AMPERES_UNIT_SYMBOL = "AMP";

    // --- Curve
    public static final String SEQUENTIAL_FIXED_SIZE_BLOCKS_CURVE_TYPE = "A01";
    public static final String VARIABLE_SIZED_BLOCK_CURVE = "A03";
    // --- Contingencies
    public static final String CONTINGENCY_SERIES_BUSINESS_TYPE = "B55";

    // --- Cnecs
    // ------ FlowCnecs
    public static final String CNECS_SERIES_BUSINESS_TYPE = "B57";
    public static final String CNECS_MNEC_MARKET_OBJECT_STATUS = "A49";
    public static final String CNECS_OPTIMIZED_MARKET_OBJECT_STATUS = "A52";
    public static final String CNECS_DIRECT_DIRECTION_FLOW = "A01";
    public static final String CNECS_OPPOSITE_DIRECTION_FLOW = "A02";
    public static final String CNECS_N_STATE_MEASUREMENT_TYPE = "A02";
    public static final String CNECS_OUTAGE_STATE_MEASUREMENT_TYPE = "A07";
    public static final String CNECS_AUTO_STATE_MEASUREMENT_TYPE = "A12";
    public static final String CNECS_CURATIVE_STATE_MEASUREMENT_TYPE = "A13";
    public static final String CNECS_PATL_UNIT_SYMBOL = "P1";
    // ------ AngleCnecs
    public static final String PHASE_SHIFT_ANGLE = "B87";
    public static final String DEGREE = "DD";
    public static final String IMPORTING_ELEMENT = "A46";
    public static final String EXPORTING_ELEMENT = "A47";

    // --- Remedial Actions
    public static final String REMEDIAL_ACTIONS_SERIES_BUSINESS_TYPE = "B56";
    public static final List<String> REMEDIAL_ACTION_OPTIMIZATION_STATUS = List.of("Z01", "A01", "A52", "A49");
    public static final String BUSINESS_TYPE_IN_REMEDIALACTION_SERIES = "B59";

    public enum ApplicationModeMarketObjectStatus {
        PRA("A18"),
        CRA("A19"),
        PRA_AND_CRA("A27"),
        AUTO("A20");

        private String status;

        ApplicationModeMarketObjectStatus(String status) {
            this.status = status;
        }

        public String getStatus() {
            return status;
        }
    }

    public enum AvailabilityMarketObjectStatus {
        MIGHT_BE_USED("A39"),
        SHALL_BE_USED("A38");

        private String status;

        AvailabilityMarketObjectStatus(String status) {
            this.status = status;
        }

        public String getStatus() {
            return status;
        }
    }

    public enum MarketObjectStatus {
        ABSOLUTE("A26"),
        RELATIVE_TO_INITIAL_NETWORK("A25"),
        RELATIVE_TO_PREVIOUS_INSTANT1("A51"),
        RELATIVE_TO_PREVIOUS_INSTANT2("Z01"),
        STOP("A23"),
        OPEN("A21"),
        CLOSE("A22"),
        PMODE("A43");

        private String status;

        MarketObjectStatus(String status) {
            this.status = status;
        }

        public String getStatus() {
            return status;
        }
    }

    public enum PsrType {
        TIE_LINE("A01"),
        LINE("A02"),
        GENERATION("A04"),
        LOAD("A05"),
        PST("A06"),
        CIRCUIT_BREAKER("A07"),
        TRANSFORMER("B24"),
        DEPRECATED_LINE("A12"),
        HVDC("B22");

        private String status;

        PsrType(String status) {
            this.status = status;
        }

        public String getStatus() {
            return status;
        }
    }

    // ------ PST remedial action
    public static final String PST_CAPACITY_UNIT_SYMBOL = "C62";

    public static String readOperator(String remedialActionId) {
        if (Objects.isNull(remedialActionId)) {
            return null;
        } else {
            return remedialActionId.split("-")[0];
        }
    }
}