OperatorStrategyResult.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/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.security.results;
import com.powsybl.commons.PowsyblException;
import com.powsybl.security.LimitViolationsResult;
import com.powsybl.security.PostContingencyComputationStatus;
import com.powsybl.security.strategy.OperatorStrategy;
import java.util.*;
/**
* An operator strategy could contain several conditional actions (also called stages). Each stage can be monitored through
* a computation status, limit violations and network results. Nevertheless, an operator strategy result always contains the
* final stage computation status, the limit violations on the final state of the network and the network result of the final state.
*
* @author Etienne Lesot {@literal <etienne.lesot@rte-france.com>}
*/
public class OperatorStrategyResult {
public static class ConditionalActionsResult {
private final String conditionalActionsId;
private final PostContingencyComputationStatus status;
private final LimitViolationsResult limitViolationsResult;
private final NetworkResult networkResult;
public ConditionalActionsResult(String conditionalActionsId, PostContingencyComputationStatus status, LimitViolationsResult limitViolationsResult,
NetworkResult networkResult) {
this.conditionalActionsId = conditionalActionsId;
this.status = Objects.requireNonNull(status);
this.limitViolationsResult = Objects.requireNonNull(limitViolationsResult);
this.networkResult = Objects.requireNonNull(networkResult);
}
public String getConditionalActionsId() {
return conditionalActionsId;
}
public PostContingencyComputationStatus getStatus() {
return status;
}
public LimitViolationsResult getLimitViolationsResult() {
return limitViolationsResult;
}
public NetworkResult getNetworkResult() {
return networkResult;
}
}
private final OperatorStrategy operatorStrategy;
private List<ConditionalActionsResult> conditionalActionsResults = new ArrayList<>();
public OperatorStrategyResult(OperatorStrategy operatorStrategy, PostContingencyComputationStatus status, LimitViolationsResult limitViolationsResult,
NetworkResult networkResult) {
this.operatorStrategy = Objects.requireNonNull(operatorStrategy);
this.conditionalActionsResults.add(new ConditionalActionsResult(operatorStrategy.getId(), status, limitViolationsResult, networkResult));
}
public OperatorStrategyResult(OperatorStrategy operatorStrategy, List<ConditionalActionsResult> conditionalActionsResults) {
this.operatorStrategy = Objects.requireNonNull(operatorStrategy);
this.conditionalActionsResults = conditionalActionsResults;
}
/**
* @return The PostContingencyComputationStatus of the operator strategy. In case of multiple stage, it represents the
* status after applying the last conditional actions.
*/
public PostContingencyComputationStatus getStatus() {
return getFinalOperatorStrategyResult().getStatus();
}
/**
* @return The LimitViolationsResult of the operator strategy. In case of multiple stage, it represents the limit
* violations monitored on the network state after applying the last conditional actions.
*/
public LimitViolationsResult getLimitViolationsResult() {
return getFinalOperatorStrategyResult().getLimitViolationsResult();
}
/**
* @return The NetworkResult of the operator strategy. In case of multiple stage, it represents the network
* result monitored on the network state after applying the last conditional actions.
*/
public NetworkResult getNetworkResult() {
return getFinalOperatorStrategyResult().getNetworkResult();
}
/**
* @return The Operator strategy associated to this result
*/
public OperatorStrategy getOperatorStrategy() {
return operatorStrategy;
}
/**
* @return The list of all ConditionalActionsResult of the associated operator strategy
*/
public List<ConditionalActionsResult> getConditionalActionsResults() {
return conditionalActionsResults;
}
/**
* @return The conditional actions result associated to the last stage of the strategy.
*/
public ConditionalActionsResult getFinalOperatorStrategyResult() {
if (!conditionalActionsResults.isEmpty()) {
return conditionalActionsResults.get(conditionalActionsResults.size() - 1);
} else {
throw new PowsyblException("No conditional action results available.");
}
}
}