AbstractFaultResult.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.shortcircuit;

import com.powsybl.commons.extensions.AbstractExtendable;
import com.powsybl.security.LimitViolation;

import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @author Coline Piloquet {@literal <coline.piloquet at rte-france.com>}
 */
abstract class AbstractFaultResult extends AbstractExtendable<FaultResult> implements FaultResult {

    private final Status status;

    private final Fault fault;

    private final double shortCircuitPower;

    private final Duration timeConstant;

    private final List<FeederResult> feederResults;

    private final List<LimitViolation> limitViolations;

    private final List<ShortCircuitBusResults> shortCircuitBusResults;

    protected AbstractFaultResult(Fault fault, Status status, double shortCircuitPower, Duration timeConstant, List<FeederResult> feederResults,
                               List<LimitViolation> limitViolations, List<ShortCircuitBusResults> shortCircuitBusResults) {
        this.fault = Objects.requireNonNull(fault);
        this.shortCircuitPower = shortCircuitPower;
        this.limitViolations = new ArrayList<>();
        if (limitViolations != null) {
            this.limitViolations.addAll(limitViolations);
        }
        this.timeConstant = timeConstant;
        this.shortCircuitBusResults = new ArrayList<>();
        if (shortCircuitBusResults != null) {
            this.shortCircuitBusResults.addAll(shortCircuitBusResults);
        }
        this.feederResults = new ArrayList<>();
        if (feederResults != null) {
            this.feederResults.addAll(feederResults);
        }
        this.status = Objects.requireNonNull(status);
    }

    @Override
    public Fault getFault() {
        return fault;
    }

    @Override
    public double getShortCircuitPower() {
        return shortCircuitPower;
    }

    @Override
    public List<FeederResult> getFeederResults() {
        return feederResults;
    }

    @Override
    public List<LimitViolation> getLimitViolations() {
        return limitViolations;
    }

    @Override
    public Duration getTimeConstant() {
        return timeConstant;
    }

    @Override
    public List<ShortCircuitBusResults> getShortCircuitBusResults() {
        return shortCircuitBusResults;
    }

    @Override
    public Status getStatus() {
        return status;
    }

    @Override
    public double getFeederCurrent(String feederId) {
        for (FeederResult feederResult : feederResults) {
            if (feederResult.getConnectableId().equals(feederId)) {
                if (feederResult instanceof FortescueFeederResult fortescueFeederResult) {
                    return fortescueFeederResult.getCurrent().getPositiveMagnitude();
                } else {
                    return ((MagnitudeFaultResult) feederResult).getCurrent();
                }
            }
        }
        return Double.NaN;
    }

}