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 72a6ba376..2a8c8f831 100644 --- a/src/main/java/org/gridsuite/study/server/controller/StudyController.java +++ b/src/main/java/org/gridsuite/study/server/controller/StudyController.java @@ -1715,9 +1715,10 @@ public ResponseEntity getSensitivityAnalysisResult( @Parameter(description = "rootNetworkUuid") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid, @Parameter(description = "nodeUuid") @PathVariable("nodeUuid") UUID nodeUuid, @Parameter(description = "results selector") @RequestParam("selector") String selector, - @Parameter(description = "JSON array of filters") @RequestParam(name = "filters", required = false) String filters + @Parameter(description = "JSON array of filters") @RequestParam(name = "filters", required = false) String filters, + @Parameter(description = "JSON array of global filters") @RequestParam(name = "globalFilters", required = false) String globalFilters ) { - String result = rootNetworkNodeInfoService.getSensitivityAnalysisResult(nodeUuid, rootNetworkUuid, selector, filters); + String result = rootNetworkNodeInfoService.getSensitivityAnalysisResult(nodeUuid, rootNetworkUuid, selector, filters, globalFilters); return result != null ? ResponseEntity.ok().body(result) : ResponseEntity.noContent().build(); } diff --git a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java index cf0b1e158..1623f675c 100644 --- a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java +++ b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java @@ -570,9 +570,12 @@ public List getDynamicSimulationTimeline(UUID nodeUuid, UUID } @Transactional(readOnly = true) - public String getSensitivityAnalysisResult(UUID nodeUuid, UUID rootNetworkUuid, String selector, String filters) { + public String getSensitivityAnalysisResult(UUID nodeUuid, UUID rootNetworkUuid, String selector, String filters, String globalFilters) { + RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(nodeUuid, rootNetworkUuid).orElseThrow(() -> new StudyException(ROOT_NETWORK_NOT_FOUND)); + String variantId = rootNetworkNodeInfoEntity.getVariantId(); + UUID networkUuid = rootNetworkNodeInfoEntity.getRootNetwork().getNetworkUuid(); UUID resultUuid = getComputationResultUuid(nodeUuid, rootNetworkUuid, SENSITIVITY_ANALYSIS); - return sensitivityAnalysisService.getSensitivityAnalysisResult(resultUuid, selector, filters); + return sensitivityAnalysisService.getSensitivityAnalysisResult(resultUuid, networkUuid, variantId, selector, filters, globalFilters); } @Transactional(readOnly = true) diff --git a/src/main/java/org/gridsuite/study/server/service/SensitivityAnalysisService.java b/src/main/java/org/gridsuite/study/server/service/SensitivityAnalysisService.java index 8c234ad5a..70db17efc 100644 --- a/src/main/java/org/gridsuite/study/server/service/SensitivityAnalysisService.java +++ b/src/main/java/org/gridsuite/study/server/service/SensitivityAnalysisService.java @@ -105,7 +105,7 @@ public UUID runSensitivityAnalysis(UUID nodeUuid, UUID rootNetworkUuid, UUID net return restTemplate.exchange(sensitivityAnalysisServerBaseUri + path, HttpMethod.POST, httpEntity, UUID.class).getBody(); } - public String getSensitivityAnalysisResult(UUID resultUuid, String selector, String filters) { + public String getSensitivityAnalysisResult(UUID resultUuid, UUID networkUuid, String variantId, String selector, String filters, String globalFilters) { String result; if (resultUuid == null) { @@ -120,6 +120,13 @@ public String getSensitivityAnalysisResult(UUID resultUuid, String selector, Str if (StringUtils.isNotBlank(filters)) { uriBuilder.queryParam("filters", URLEncoder.encode(filters, StandardCharsets.UTF_8)); } + if (!StringUtils.isEmpty(globalFilters)) { + uriBuilder.queryParam("globalFilters", URLEncoder.encode(globalFilters, StandardCharsets.UTF_8)); + uriBuilder.queryParam("networkUuid", networkUuid); + if (!StringUtils.isBlank(variantId)) { + uriBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId); + } + } URI uri = uriBuilder.build().encode().toUri(); try { diff --git a/src/test/java/org/gridsuite/study/server/SensitivityAnalysisTest.java b/src/test/java/org/gridsuite/study/server/SensitivityAnalysisTest.java index 0baa80ef7..0ff94dc91 100644 --- a/src/test/java/org/gridsuite/study/server/SensitivityAnalysisTest.java +++ b/src/test/java/org/gridsuite/study/server/SensitivityAnalysisTest.java @@ -33,7 +33,6 @@ import org.gridsuite.study.server.repository.nonevacuatedenergy.NonEvacuatedEnergyParametersEntity; import org.gridsuite.study.server.repository.rootnetwork.RootNetworkNodeInfoRepository; import org.gridsuite.study.server.service.*; -import org.gridsuite.study.server.service.LoadFlowService; import org.gridsuite.study.server.utils.SendInput; import org.gridsuite.study.server.utils.TestUtils; import org.gridsuite.study.server.utils.elasticsearch.DisableElasticsearch; @@ -303,7 +302,9 @@ public MockResponse dispatch(RecordedRequest request) { } else if (path.matches("/v1/parameters") && method.equals("POST")) { return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), objectMapper.writeValueAsString(SENSITIVITY_ANALYSIS_PARAMETERS_UUID)); } else if (path.matches("/v1/parameters/default") && method.equals("POST")) { - return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), objectMapper.writeValueAsString(SENSITIVITY_ANALYSIS_PARAMETERS_UUID)); + return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), objectMapper.writeValueAsString(SENSITIVITY_ANALYSIS_PARAMETERS_UUID)); + } else if (path.matches("/v1/results/" + SENSITIVITY_ANALYSIS_RESULT_UUID + "\\?filters=.*globalFilters=.*networkUuid=.*variantId.*sort=.*")) { + return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), SENSITIVITY_ANALYSIS_RESULT_UUID); } else { LOGGER.error("Unhandled method+path: " + request.getMethod() + " " + request.getPath()); return new MockResponse.Builder().code(418).body("Unhandled method+path: " + request.getMethod() + " " + request.getPath()).build(); @@ -350,6 +351,14 @@ private void testSensitivityAnalysisWithRootNetworkUuidAndNodeUuid(final MockWeb .andExpectAll(status().isOk(), content().string(FAKE_RESULT_JSON)); assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.contains("/v1/results/" + resultUuid + "/filter-options"))); + // get result with filters , globalFilters and sort + mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/sensitivity-analysis/result?filters=lineId2&selector=subjectId&globalFilters=ss", studyUuid, rootNetworkUuid, nodeUuid)) + .andExpectAll(status().isOk(), content().string(FAKE_RESULT_JSON)); + + Set actualRequests = TestUtils.getRequestsDone(1, server); + assertTrue(actualRequests.stream().anyMatch(request -> request.contains("/v1/results/" + resultUuid) && request.contains("selector=subjectId") && request.contains("filters=lineId2") && request.contains("globalFilters=ss") + )); + // get sensitivity analysis status mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/sensitivity-analysis/status", studyUuid, rootNetworkUuid, nodeUuid)).andExpectAll( status().isOk(), @@ -414,7 +423,7 @@ void testSensitivityAnalysis(final MockWebServer server) throws Exception { mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/sensitivity-analysis/result?selector={selector}", studyNameUserIdUuid, firstRootNetworkUuid, UUID.randomUUID(), "fakeJsonSelector")) - .andExpectAll(status().isNoContent()); + .andExpectAll(status().isNotFound()); mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/sensitivity-analysis/result/filter-options?selector={selector}", studyNameUserIdUuid, firstRootNetworkUuid, UUID.randomUUID(), "fakeJsonSelector")) @@ -490,7 +499,7 @@ void testGetSensitivityResultWithWrongId() throws Exception { UUID studyUuid = studyEntity.getId(); UUID firstRootNetworkUuid = studyTestUtils.getOneRootNetworkUuid(studyUuid); mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/sensitivity-analysis/result?selector={selector}", studyUuid, firstRootNetworkUuid, UUID.randomUUID(), FAKE_RESULT_JSON)) - .andExpect(status().isNoContent()).andReturn(); + .andExpect(status().isNotFound()).andReturn(); mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/sensitivity-analysis/result/filter-options?selector={selector}", studyUuid, firstRootNetworkUuid, UUID.randomUUID(), FAKE_RESULT_JSON)) .andExpect(status().isNoContent()).andReturn();