CriticalBranchCreationContext.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.fbconstraint;

import com.powsybl.openrao.data.crac.api.Crac;
import com.powsybl.openrao.data.crac.api.InstantKind;
import com.powsybl.openrao.data.crac.io.commons.api.ImportStatus;
import com.powsybl.openrao.data.crac.io.commons.api.StandardCriticalBranchCreationContext;
import com.powsybl.openrao.data.crac.io.commons.api.stdcreationcontext.NativeBranch;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Baptiste Seguinot{@literal <baptiste.seguinot at rte-france.com>}
 */
public class CriticalBranchCreationContext extends StandardCriticalBranchCreationContext {
    CriticalBranchCreationContext(CriticalBranchReader criticalBranchReader, Crac crac) {
        super(criticalBranchReader.getCriticalBranch().getId(), criticalBranchReader.getNativeBranch(), criticalBranchReader.isBaseCase(), null, new HashMap<>(), criticalBranchReader.isInvertedInNetwork(), criticalBranchReader.getImportStatus(), criticalBranchReader.getImportStatusDetail());
        if (criticalBranchReader.isCriticialBranchValid() && criticalBranchReader.isBaseCase()) {
            this.createdCnecIds.put(crac.getPreventiveInstant().getId(), criticalBranchReader.getBaseCaseCnecId());
        } else if (criticalBranchReader.isCriticialBranchValid() && !criticalBranchReader.isBaseCase()) {
            this.createdCnecIds.put(crac.getOutageInstant().getId(), criticalBranchReader.getOutageCnecId());
            this.createdCnecIds.put(crac.getInstant(InstantKind.CURATIVE).getId(), criticalBranchReader.getCurativeCnecId());
            this.contingencyId = criticalBranchReader.getOutageReader().getOutage().getId();
        } else {
            this.isDirectionInverted = false;
        }
    }

    private CriticalBranchCreationContext(String criticalBranchId, NativeBranch nativeBranch, boolean isBaseCase, String contingencyId, Map<String, String> createdCnecIds, boolean isDirectionInverted, ImportStatus importStatus, String importStatusDetail) {
        super(criticalBranchId, nativeBranch, isBaseCase, contingencyId, createdCnecIds, isDirectionInverted, importStatus, importStatusDetail);
    }

    public static CriticalBranchCreationContext notImported(String criticalBranchId, ImportStatus importStatus, String importStatusDetail) {
        return new CriticalBranchCreationContext(criticalBranchId, null, false, null, new HashMap<>(), false, importStatus, importStatusDetail);
    }
}