diff --git a/src/main/java/org/gridsuite/study/server/controller/StudyController.java b/src/main/java/org/gridsuite/study/server/controller/StudyController.java index 07a899a37..4868e531d 100644 --- a/src/main/java/org/gridsuite/study/server/controller/StudyController.java +++ b/src/main/java/org/gridsuite/study/server/controller/StudyController.java @@ -1059,11 +1059,11 @@ public byte[] getSecurityAnalysisResult(@Parameter(description = "study UUID") @ @GetMapping(value = "/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/contingency-count") @Operation(summary = "Get contingency count for a list of contingency list on a study") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The contingency count")}) - public ResponseEntity getContingencyCount(@Parameter(description = "Study UUID") @PathVariable("studyUuid") UUID studyUuid, - @Parameter(description = "rootNetworkUuid") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid, - @Parameter(description = "Node UUID") @PathVariable("nodeUuid") UUID nodeUuid, - @Parameter(description = "Contingency list UUIDs") @RequestParam(name = "contingencyListIds", required = false) List contingencyListIds) { - return ResponseEntity.ok().body(CollectionUtils.isEmpty(contingencyListIds) ? 0 : studyService.getContingencyCount(studyUuid, contingencyListIds, nodeUuid, rootNetworkUuid)); + public ResponseEntity getContingencyCount(@Parameter(description = "Study UUID") @PathVariable("studyUuid") UUID studyUuid, + @Parameter(description = "rootNetworkUuid") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid, + @Parameter(description = "Node UUID") @PathVariable("nodeUuid") UUID nodeUuid, + @Parameter(description = "Contingency list UUIDs") @RequestParam(name = "contingencyListIds", required = false) List contingencyListIds) { + return ResponseEntity.ok().body(CollectionUtils.isEmpty(contingencyListIds) ? ActionsService.EMPTY_CONTINGENCY_COUNT : studyService.getContingencyCount(studyUuid, contingencyListIds, nodeUuid, rootNetworkUuid)); } @GetMapping(value = "/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/limit-violations") diff --git a/src/main/java/org/gridsuite/study/server/service/ActionsService.java b/src/main/java/org/gridsuite/study/server/service/ActionsService.java index 71b2591a3..398b8cf53 100644 --- a/src/main/java/org/gridsuite/study/server/service/ActionsService.java +++ b/src/main/java/org/gridsuite/study/server/service/ActionsService.java @@ -31,6 +31,8 @@ public class ActionsService { private static final String NETWORK_UUID = "networkUuid"; private static final String CONTINGENCY_LIST_IDS = "ids"; + public static final ContingencyCount EMPTY_CONTINGENCY_COUNT = new ContingencyCount(0, 0); + private String actionsServerBaseUri; public ActionsService(RemoteServicesProperties remoteServicesProperties, RestTemplate restTemplate) { @@ -38,7 +40,7 @@ public ActionsService(RemoteServicesProperties remoteServicesProperties, RestTem this.restTemplate = restTemplate; } - public Integer getContingencyCount(UUID networkUuid, String variantId, List contingencyListIds) { + public ContingencyCount getContingencyCount(UUID networkUuid, String variantId, List contingencyListIds) { var uriComponentsBuilder = UriComponentsBuilder .fromPath(DELIMITER + ACTIONS_API_VERSION + "/contingency-lists/count") .queryParam(CONTINGENCY_LIST_IDS, contingencyListIds) @@ -46,7 +48,12 @@ public Integer getContingencyCount(UUID networkUuid, String variantId, List} + */ +public record ContingencyCount( + int contingencies, + int notFoundElements +) { } diff --git a/src/main/java/org/gridsuite/study/server/service/StudyService.java b/src/main/java/org/gridsuite/study/server/service/StudyService.java index 2f45b21b7..7d3067688 100644 --- a/src/main/java/org/gridsuite/study/server/service/StudyService.java +++ b/src/main/java/org/gridsuite/study/server/service/StudyService.java @@ -1364,7 +1364,7 @@ private UUID handleSecurityAnalysisRequest(StudyEntity study, UUID nodeUuid, UUI return result; } - public Integer getContingencyCount(UUID studyUuid, List contingencyListIds, UUID nodeUuid, UUID rootNetworkUuid) { + public ContingencyCount getContingencyCount(UUID studyUuid, List contingencyListIds, UUID nodeUuid, UUID rootNetworkUuid) { Objects.requireNonNull(studyUuid); Objects.requireNonNull(contingencyListIds); Objects.requireNonNull(nodeUuid); diff --git a/src/test/java/org/gridsuite/study/server/rootnetworks/SecurityAnalysisTest.java b/src/test/java/org/gridsuite/study/server/rootnetworks/SecurityAnalysisTest.java index 7e494cdab..04624196d 100644 --- a/src/test/java/org/gridsuite/study/server/rootnetworks/SecurityAnalysisTest.java +++ b/src/test/java/org/gridsuite/study/server/rootnetworks/SecurityAnalysisTest.java @@ -95,7 +95,7 @@ class SecurityAnalysisTest { private static final byte[] SECURITY_ANALYSIS_NMK_CONTINGENCIES_RESULT_CSV_ZIPPED = {0x02, 0x03}; private static final byte[] SECURITY_ANALYSIS_NMK_CONSTRAINTS_RESULT_CSV_ZIPPED = {0x04, 0x03}; private static final String SECURITY_ANALYSIS_STATUS_JSON = "\"CONVERGED\""; - private static final String CONTINGENCIES_COUNT = "2"; + private static final ContingencyCount CONTINGENCIES_COUNT = new ContingencyCount(2, 0); public static final String SECURITY_ANALYSIS_DEFAULT_PARAMETERS_JSON = "{\"lowVoltageAbsoluteThreshold\":0.0,\"lowVoltageProportionalThreshold\":0.0,\"highVoltageAbsoluteThreshold\":0.0,\"highVoltageProportionalThreshold\":0.0,\"flowProportionalThreshold\":0.1}"; private static final String SECURITY_ANALYSIS_PROFILE_PARAMETERS_JSON = "{\"lowVoltageAbsoluteThreshold\":30.0,\"lowVoltageProportionalThreshold\":0.4,\"highVoltageAbsoluteThreshold\":0.0,\"highVoltageProportionalThreshold\":0.0,\"flowProportionalThreshold\":0.1}"; @@ -628,26 +628,25 @@ private void testSecurityAnalysisWithRootNetworkUuidAndNodeUuid(UUID studyUuid, computationServerStubs.verifyComputationStop(resultUuid, Map.of("receiver", WireMock.matching(".*"))); // get contingency count - securityAnalysisServerStubs.stubContingencyListCount(CONTINGENCIES_COUNT, Map.of("ids", equalTo(CONTINGENCY_LIST_ID), "networkUuid", equalTo(NETWORK_UUID_STRING))); + securityAnalysisServerStubs.stubContingencyListCount(objectMapper.writeValueAsString(CONTINGENCIES_COUNT), Map.of("ids", equalTo(CONTINGENCY_LIST_ID), "networkUuid", equalTo(NETWORK_UUID_STRING))); mvcResult = mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/contingency-count?contingencyListIds={contingencyListId}", studyUuid, rootNetworkUuid, nodeUuid, CONTINGENCY_LIST_ID)) .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - Integer integerResponse = Integer.parseInt(resultAsString); - Integer expectedResponse = Integer.parseInt(CONTINGENCIES_COUNT); - assertEquals(expectedResponse, integerResponse); + ContingencyCount count = objectMapper.readValue(resultAsString, ContingencyCount.class); + Integer expectedResponse = CONTINGENCIES_COUNT.contingencies(); + assertEquals(expectedResponse, count.contingencies()); securityAnalysisServerStubs.verifyContingencyListCount(Map.of("ids", WireMock.matching(".*"))); // get contingency count with no list - securityAnalysisServerStubs.stubContingencyListCount("0", Map.of("networkUuid", equalTo(NETWORK_UUID_STRING))); mvcResult = mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/contingency-count", studyUuid, rootNetworkUuid, nodeUuid)) .andReturn(); resultAsString = mvcResult.getResponse().getContentAsString(); - Integer integerResponse2 = Integer.parseInt(resultAsString); - assertEquals(0, integerResponse2); + ContingencyCount count2 = objectMapper.readValue(resultAsString, ContingencyCount.class); + assertEquals(0, count2.contingencies()); }