diff --git a/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisWorkerService.java b/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisWorkerService.java index 6cf176d0..71f74797 100644 --- a/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisWorkerService.java +++ b/src/main/java/org/gridsuite/securityanalysis/server/service/SecurityAnalysisWorkerService.java @@ -44,16 +44,14 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.client.HttpClientErrorException; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; import java.util.function.Function; +import static com.powsybl.loadflow.LoadFlowResult.ComponentResult.Status.NO_CALCULATION; import static org.gridsuite.computation.service.NotificationService.getFailedMessage; import static org.gridsuite.securityanalysis.server.service.SecurityAnalysisService.COMPUTATION_TYPE; @@ -65,7 +63,6 @@ public class SecurityAnalysisWorkerService extends AbstractWorkerService { private static final Logger LOGGER = LoggerFactory.getLogger(SecurityAnalysisWorkerService.class); private final ActionsService actionsService; - private final LimitReductionService limitReductionService; private Function securityAnalysisFactorySupplier; @@ -110,6 +107,10 @@ protected String getComputationType() { @Override protected CompletableFuture getCompletableFuture(SecurityAnalysisRunContext runContext, String provider, UUID resultUuid) { + if (runContext.getContingencies().stream().allMatch(contingencyInfos -> contingencyInfos.getContingency() == null)) { + return CompletableFuture.completedFuture( + new SecurityAnalysisResult(new LimitViolationsResult(Collections.emptyList()), NO_CALCULATION, Collections.emptyList())); + } SecurityAnalysis.Runner securityAnalysisRunner = securityAnalysisFactorySupplier.apply(provider); String variantId = runContext.getVariantId() != null ? runContext.getVariantId() : VariantManagerConstants.INITIAL_VARIANT_ID; @@ -177,6 +178,10 @@ protected void preRun(SecurityAnalysisRunContext runContext) { actionsService.getContingencyList(runContext.getParameters().contingencyListUuids(), runContext.getNetworkUuid(), runContext.getVariantId()) ); runContext.setContingencies(contingencies); + if (contingencies.stream().allMatch(contingencyInfos -> contingencyInfos.getContingency() == null)) { + logNoContingencies(runContext); + return; + } } catch (IllegalArgumentException e) { throw new SecurityAnalysisException(SecurityAnalysisBusinessErrorCode.CONTINGENCY_LIST_CONFIG_EMPTY, "The configuration does not contain any contingency."); } catch (HttpClientErrorException.NotFound e) { @@ -290,4 +295,11 @@ private void logContingencyEquipmentsNotConnected(SecurityAnalysisRunContext run }); } + private void logNoContingencies(SecurityAnalysisRunContext runContext) { + runContext.getReportNode().newReportNode() + .withMessageTemplate("security.analysis.server.noContingency") + .withSeverity(TypedValue.WARN_SEVERITY) + .add(); + } + } diff --git a/src/main/resources/org/gridsuite/securityanalysis/server/reports.properties b/src/main/resources/org/gridsuite/securityanalysis/server/reports.properties index ee8d5a57..ee105b98 100644 --- a/src/main/resources/org/gridsuite/securityanalysis/server/reports.properties +++ b/src/main/resources/org/gridsuite/securityanalysis/server/reports.properties @@ -1,4 +1,5 @@ security.analysis.server.notFoundEquipments = Equipments not found security.analysis.server.contingencyEquipmentNotFound = Cannot find the following equipments ${elementsIds} in contingency ${contingencyId} security.analysis.server.notConnectedEquipments = Equipments not connected +security.analysis.server.noContingency = The configuration does not contain any contingency. security.analysis.server.contingencyEquipmentNotConnected = The following equipments ${elementsIds} in contingency ${contingencyId} are not connected