From 657c5c8e20bea3fbce626abc2c2e1ec9a7390415 Mon Sep 17 00:00:00 2001 From: Igor PIROG Date: Fri, 18 Jul 2025 12:49:59 +0200 Subject: [PATCH 1/5] First step in adding global filter on shortcircuit analysis panel --- .../study/server/controller/StudyController.java | 7 ++++--- .../study/server/service/ConsumerService.java | 2 +- .../server/service/RootNetworkNodeInfoService.java | 7 +++++-- .../service/shortcircuit/ShortCircuitService.java | 13 ++++++++++--- 4 files changed, 20 insertions(+), 9 deletions(-) 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 84be45bcda..e5d3e8bdfe 100644 --- a/src/main/java/org/gridsuite/study/server/controller/StudyController.java +++ b/src/main/java/org/gridsuite/study/server/controller/StudyController.java @@ -789,17 +789,18 @@ public ResponseEntity stopShortCircuitAnalysis(@Parameter(description = "S @ApiResponse(responseCode = "204", description = "No short circuit analysis has been done yet"), @ApiResponse(responseCode = "404", description = "The short circuit analysis has not been found")}) public ResponseEntity getShortCircuitResult(@Parameter(description = "study UUID") @PathVariable("studyUuid") UUID studyUuid, - @PathVariable("rootNetworkUuid") UUID rootNetworkUuid, - @Parameter(description = "nodeUuid") @PathVariable("nodeUuid") UUID nodeUuid, + @Parameter(description = "root network UUID") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid, + @Parameter(description = "node UUID") @PathVariable("nodeUuid") UUID nodeUuid, @Parameter(description = "BASIC (faults without limits and feeders), " + "FULL (faults with both), " + "WITH_LIMIT_VIOLATIONS (like FULL but only those with limit violations) or " + "NONE (no fault)") @RequestParam(name = "mode", required = false, defaultValue = "FULL") FaultResultsMode mode, @Parameter(description = "type") @RequestParam(value = "type", required = false, defaultValue = "ALL_BUSES") ShortcircuitAnalysisType type, @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, @Parameter(description = "If we wanted the paged version of the results or not") @RequestParam(name = "paged", required = false, defaultValue = "false") boolean paged, Pageable pageable) { - String result = rootNetworkNodeInfoService.getShortCircuitAnalysisResult(nodeUuid, rootNetworkUuid, mode, type, filters, paged, pageable); + String result = rootNetworkNodeInfoService.getShortCircuitAnalysisResult(rootNetworkUuid, nodeUuid, mode, type, filters, globalFilters, paged, pageable); return result != null ? ResponseEntity.ok().body(result) : ResponseEntity.noContent().build(); } diff --git a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java index af75cc2a51..9f09afdf24 100644 --- a/src/main/java/org/gridsuite/study/server/service/ConsumerService.java +++ b/src/main/java/org/gridsuite/study/server/service/ConsumerService.java @@ -530,7 +530,7 @@ public void consumeCalculationFailed(Message msg, ComputationType comput try { receiverObj = objectMapper.readValue(URLDecoder.decode(receiver, StandardCharsets.UTF_8), NodeReceiver.class); - LOGGER.info("{} failed for node '{}' with error messsage: {}", computationType.getLabel(), receiverObj.getNodeUuid(), errorMessage); + LOGGER.info("{} failed for node '{}' with error message: {}", computationType.getLabel(), receiverObj.getNodeUuid(), errorMessage); // delete computation results from the databases // ==> will probably be removed soon because it prevents the front from recovering the resultId ; or 'null' parameter will be replaced by null like in VOLTAGE_INITIALIZATION 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 1623f675cf..ed133cb9b8 100644 --- a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java +++ b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java @@ -597,10 +597,13 @@ public String getNonEvacuatedEnergyResult(UUID nodeUuid, UUID rootNetworkUuid) { } @Transactional(readOnly = true) - public String getShortCircuitAnalysisResult(UUID nodeUuid, UUID rootNetworkUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, boolean paged, Pageable pageable) { + public String getShortCircuitAnalysisResult(UUID rootNetworkUuid, UUID nodeUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { + 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, type == ShortcircuitAnalysisType.ALL_BUSES ? SHORT_CIRCUIT : SHORT_CIRCUIT_ONE_BUS); - return shortCircuitService.getShortCircuitAnalysisResult(resultUuid, mode, type, filters, paged, pageable); + return shortCircuitService.getShortCircuitAnalysisResult(networkUuid, variantId, resultUuid, mode, type, filters, globalFilters, paged, pageable); } @Transactional(readOnly = true) diff --git a/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java b/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java index f2ce16ed00..01e2092f60 100644 --- a/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java +++ b/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java @@ -11,6 +11,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.powsybl.shortcircuit.ShortCircuitParameters; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.gridsuite.study.server.RemoteServicesProperties; import org.gridsuite.study.server.StudyException; @@ -122,9 +123,9 @@ private String getShortCircuitAnalysisResultsPageResourcePath(UUID resultUuid, S return resultPath + "/paged"; } - public String getShortCircuitAnalysisResult(UUID resultUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, boolean paged, Pageable pageable) { + public String getShortCircuitAnalysisResult(UUID rootNetworkUuid, String variantId, UUID resultUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { if (paged) { - return getShortCircuitAnalysisResultsPage(resultUuid, mode, type, filters, pageable); + return getShortCircuitAnalysisResultsPage(rootNetworkUuid, variantId, resultUuid, mode, type, filters, globalFilters, pageable); } else { return getShortCircuitAnalysisResult(resultUuid, mode); } @@ -170,19 +171,25 @@ public String getShortCircuitAnalysisResult(UUID resultUuid, FaultResultsMode mo return getShortCircuitAnalysisResource(builder.build().toUri()); } - public String getShortCircuitAnalysisResultsPage(UUID resultUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, Pageable pageable) { + public String getShortCircuitAnalysisResultsPage(UUID rootNetworkUuid, String variantId, UUID resultUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, Pageable pageable) { String resultsPath = getShortCircuitAnalysisResultsPageResourcePath(resultUuid, type); if (resultsPath == null) { return null; } UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(shortCircuitServerBaseUri + resultsPath) + .queryParam("rootNetworkUuid", rootNetworkUuid) + .queryParam("variantId", variantId) .queryParam("mode", mode); if (filters != null && !filters.isEmpty()) { builder.queryParam("filters", filters); } + if (globalFilters != null && !globalFilters.isEmpty()) { + builder.queryParam("globalFilters", globalFilters); + } + addPageableToQueryParams(builder, pageable); return getShortCircuitAnalysisResource(builder.build().encode().toUri()); // need to encode because of filter JSON array From d33b8b837fd9296a996cabfef75e4a771b49621b Mon Sep 17 00:00:00 2001 From: Igor PIROG Date: Fri, 18 Jul 2025 14:34:32 +0200 Subject: [PATCH 2/5] Unused import and TU Signed-off-by: Igor PIROG --- .../study/server/service/RootNetworkNodeInfoService.java | 6 +++--- .../server/service/shortcircuit/ShortCircuitService.java | 1 - .../java/org/gridsuite/study/server/ShortCircuitTest.java | 8 ++++---- 3 files changed, 7 insertions(+), 8 deletions(-) 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 ed133cb9b8..3bfd65c966 100644 --- a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java +++ b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java @@ -598,9 +598,9 @@ public String getNonEvacuatedEnergyResult(UUID nodeUuid, UUID rootNetworkUuid) { @Transactional(readOnly = true) public String getShortCircuitAnalysisResult(UUID rootNetworkUuid, UUID nodeUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { - RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(nodeUuid, rootNetworkUuid).orElseThrow(() -> new StudyException(ROOT_NETWORK_NOT_FOUND)); - String variantId = rootNetworkNodeInfoEntity.getVariantId(); - UUID networkUuid = rootNetworkNodeInfoEntity.getRootNetwork().getNetworkUuid(); + RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(nodeUuid, rootNetworkUuid).orElse(null); + String variantId = rootNetworkNodeInfoEntity == null ? null : rootNetworkNodeInfoEntity.getVariantId(); + UUID networkUuid = rootNetworkNodeInfoEntity == null ? rootNetworkUuid : rootNetworkNodeInfoEntity.getRootNetwork().getNetworkUuid(); UUID resultUuid = getComputationResultUuid(nodeUuid, rootNetworkUuid, type == ShortcircuitAnalysisType.ALL_BUSES ? SHORT_CIRCUIT : SHORT_CIRCUIT_ONE_BUS); return shortCircuitService.getShortCircuitAnalysisResult(networkUuid, variantId, resultUuid, mode, type, filters, globalFilters, paged, pageable); diff --git a/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java b/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java index 01e2092f60..e74b351694 100644 --- a/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java +++ b/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java @@ -11,7 +11,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.powsybl.shortcircuit.ShortCircuitParameters; import lombok.Setter; -import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.gridsuite.study.server.RemoteServicesProperties; import org.gridsuite.study.server.StudyException; diff --git a/src/test/java/org/gridsuite/study/server/ShortCircuitTest.java b/src/test/java/org/gridsuite/study/server/ShortCircuitTest.java index 2b827153d2..f4b83abc42 100644 --- a/src/test/java/org/gridsuite/study/server/ShortCircuitTest.java +++ b/src/test/java/org/gridsuite/study/server/ShortCircuitTest.java @@ -223,13 +223,13 @@ public MockResponse dispatch(RecordedRequest request) { return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), SHORT_CIRCUIT_ANALYSIS_RESULT_JSON); } else if (path.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/fault-types")) { return new MockResponse(200); - } else if (path.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/fault_results/paged" + "\\?mode=FULL&page=0&size=20&sort=id,DESC")) { + } else if (path.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/fault_results/paged" + "\\?rootNetworkUuid=" + NETWORK_UUID_STRING + "&variantId=" + VARIANT_ID_2 + "&mode=FULL&page=0&size=20&sort=id,DESC")) { return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), SHORT_CIRCUIT_ANALYSIS_RESULT_JSON); } else if (path.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/csv")) { return new MockResponse.Builder().code(200).body(getBinaryAsBuffer(SHORT_CIRCUIT_ANALYSIS_CSV_RESULT)).addHeader("Content-Type", "application/json; charset=utf-8").build(); } else if (path.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID_NOT_FOUND + "/csv")) { return new MockResponse(404); - } else if (path.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/feeder_results/paged" + "\\?mode=FULL&filters=fakeFilters&page=0&size=20&sort=id,DESC")) { + } else if (path.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/feeder_results/paged" + "\\?rootNetworkUuid=" + NETWORK_UUID_STRING + "&variantId=" + VARIANT_ID_2 + "&mode=FULL&filters=fakeFilters&page=0&size=20&sort=id,DESC")) { return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), SHORT_CIRCUIT_ANALYSIS_RESULT_JSON); } else if (path.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/status")) { return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), SHORT_CIRCUIT_ANALYSIS_STATUS_JSON); @@ -502,7 +502,7 @@ void testPagedShortCircuit(final MockWebServer server) throws Exception { status().isOk(), content().string(SHORT_CIRCUIT_ANALYSIS_RESULT_JSON)); - assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/fault_results/paged\\?mode=FULL&page=0&size=20&sort=id,DESC"))); + assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/fault_results/paged\\?rootNetworkUuid=38400000-8cf0-11bd-b23e-10b96e4ef00d&variantId=variant_2&mode=FULL&page=0&size=20&sort=id,DESC"))); // get short circuit result with pagination but with unknown node mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/shortcircuit/result?paged=true&page=0&size=20", studyNameUserIdUuid, firstRootNetworkUuid, unknownModificationNodeUuid)).andExpect( @@ -588,7 +588,7 @@ void testOneBusShortCircuit(final MockWebServer server) throws Exception { status().isOk(), content().string(SHORT_CIRCUIT_ANALYSIS_RESULT_JSON)); - assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/feeder_results/paged\\?mode=FULL&filters=fakeFilters&page=0&size=20&sort=id,DESC"))); + assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/feeder_results/paged\\?rootNetworkUuid=38400000-8cf0-11bd-b23e-10b96e4ef00d&variantId=variant_2&mode=FULL&filters=fakeFilters&page=0&size=20&sort=id,DESC"))); // get one bus short circuit status mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/shortcircuit/status", studyNameUserIdUuid, firstRootNetworkUuid, modificationNode3Uuid) From ab017a5b66cdd37230d8287bb37871f09ec79175 Mon Sep 17 00:00:00 2001 From: Igor PIROG Date: Mon, 21 Jul 2025 14:28:36 +0200 Subject: [PATCH 3/5] Adjust number of parameters below the max sonar Signed-off-by: Igor PIROG --- .../server/controller/StudyController.java | 3 ++- .../service/RootNetworkNodeInfoService.java | 15 ++++++------ .../shortcircuit/ShortCircuitService.java | 15 ++++++------ .../study/server/utils/StudyParameters.java | 24 +++++++++++++++++++ 4 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 src/main/java/org/gridsuite/study/server/utils/StudyParameters.java 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 9b547882eb..7de8721247 100644 --- a/src/main/java/org/gridsuite/study/server/controller/StudyController.java +++ b/src/main/java/org/gridsuite/study/server/controller/StudyController.java @@ -46,6 +46,7 @@ import org.gridsuite.study.server.service.securityanalysis.SecurityAnalysisResultType; import org.gridsuite.study.server.service.shortcircuit.FaultResultsMode; import org.gridsuite.study.server.service.shortcircuit.ShortcircuitAnalysisType; +import org.gridsuite.study.server.utils.StudyParameters; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.util.Pair; @@ -801,7 +802,7 @@ public ResponseEntity getShortCircuitResult(@Parameter(description = "st @Parameter(description = "JSON array of global filters") @RequestParam(name = "globalFilters", required = false) String globalFilters, @Parameter(description = "If we wanted the paged version of the results or not") @RequestParam(name = "paged", required = false, defaultValue = "false") boolean paged, Pageable pageable) { - String result = rootNetworkNodeInfoService.getShortCircuitAnalysisResult(rootNetworkUuid, nodeUuid, mode, type, filters, globalFilters, paged, pageable); + String result = rootNetworkNodeInfoService.getShortCircuitAnalysisResult(new StudyParameters(rootNetworkUuid, nodeUuid), mode, type, filters, globalFilters, paged, pageable); 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 64cbd77be7..e836bdc037 100644 --- a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java +++ b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java @@ -32,6 +32,7 @@ import org.gridsuite.study.server.service.shortcircuit.FaultResultsMode; import org.gridsuite.study.server.service.shortcircuit.ShortCircuitService; import org.gridsuite.study.server.service.shortcircuit.ShortcircuitAnalysisType; +import org.gridsuite.study.server.utils.StudyParameters; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; @@ -597,13 +598,13 @@ public String getNonEvacuatedEnergyResult(UUID nodeUuid, UUID rootNetworkUuid) { } @Transactional(readOnly = true) - public String getShortCircuitAnalysisResult(UUID rootNetworkUuid, UUID nodeUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { - RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(nodeUuid, rootNetworkUuid).orElse(null); - String variantId = rootNetworkNodeInfoEntity == null ? null : rootNetworkNodeInfoEntity.getVariantId(); - UUID networkUuid = rootNetworkNodeInfoEntity == null ? rootNetworkUuid : rootNetworkNodeInfoEntity.getRootNetwork().getNetworkUuid(); - UUID resultUuid = getComputationResultUuid(nodeUuid, rootNetworkUuid, - type == ShortcircuitAnalysisType.ALL_BUSES ? SHORT_CIRCUIT : SHORT_CIRCUIT_ONE_BUS); - return shortCircuitService.getShortCircuitAnalysisResult(networkUuid, variantId, resultUuid, mode, type, filters, globalFilters, paged, pageable); + public String getShortCircuitAnalysisResult(StudyParameters studyParameters, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { + RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(studyParameters.getNodeUuid(), studyParameters.getRootNetworkUuid()).orElse(null); + studyParameters.setVariantId(rootNetworkNodeInfoEntity == null ? null : rootNetworkNodeInfoEntity.getVariantId()); + studyParameters.setNetworkUuid(rootNetworkNodeInfoEntity == null ? studyParameters.getRootNetworkUuid() : rootNetworkNodeInfoEntity.getRootNetwork().getNetworkUuid()); + studyParameters.setResultUuid(getComputationResultUuid(studyParameters.getNodeUuid(), studyParameters.getRootNetworkUuid(), + type == ShortcircuitAnalysisType.ALL_BUSES ? SHORT_CIRCUIT : SHORT_CIRCUIT_ONE_BUS)); + return shortCircuitService.getShortCircuitAnalysisResult(studyParameters, mode, type, filters, globalFilters, paged, pageable); } @Transactional(readOnly = true) diff --git a/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java b/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java index e74b351694..ff5c0f2d91 100644 --- a/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java +++ b/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java @@ -18,6 +18,7 @@ import org.gridsuite.study.server.dto.ShortCircuitStatus; import org.gridsuite.study.server.service.StudyService; import org.gridsuite.study.server.service.common.AbstractComputationService; +import org.gridsuite.study.server.utils.StudyParameters; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.http.*; @@ -122,11 +123,11 @@ private String getShortCircuitAnalysisResultsPageResourcePath(UUID resultUuid, S return resultPath + "/paged"; } - public String getShortCircuitAnalysisResult(UUID rootNetworkUuid, String variantId, UUID resultUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { + public String getShortCircuitAnalysisResult(StudyParameters studyParameters, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { if (paged) { - return getShortCircuitAnalysisResultsPage(rootNetworkUuid, variantId, resultUuid, mode, type, filters, globalFilters, pageable); + return getShortCircuitAnalysisResultsPage(studyParameters, mode, type, filters, globalFilters, pageable); } else { - return getShortCircuitAnalysisResult(resultUuid, mode); + return getShortCircuitAnalysisResult(studyParameters.getResultUuid(), mode); } } @@ -170,15 +171,15 @@ public String getShortCircuitAnalysisResult(UUID resultUuid, FaultResultsMode mo return getShortCircuitAnalysisResource(builder.build().toUri()); } - public String getShortCircuitAnalysisResultsPage(UUID rootNetworkUuid, String variantId, UUID resultUuid, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, Pageable pageable) { - String resultsPath = getShortCircuitAnalysisResultsPageResourcePath(resultUuid, type); + public String getShortCircuitAnalysisResultsPage(StudyParameters studyParameters, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, Pageable pageable) { + String resultsPath = getShortCircuitAnalysisResultsPageResourcePath(studyParameters.getResultUuid(), type); if (resultsPath == null) { return null; } UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(shortCircuitServerBaseUri + resultsPath) - .queryParam("rootNetworkUuid", rootNetworkUuid) - .queryParam("variantId", variantId) + .queryParam("rootNetworkUuid", studyParameters.getNetworkUuid()) + .queryParam("variantId", studyParameters.getVariantId()) .queryParam("mode", mode); if (filters != null && !filters.isEmpty()) { diff --git a/src/main/java/org/gridsuite/study/server/utils/StudyParameters.java b/src/main/java/org/gridsuite/study/server/utils/StudyParameters.java new file mode 100644 index 0000000000..081fb4dda0 --- /dev/null +++ b/src/main/java/org/gridsuite/study/server/utils/StudyParameters.java @@ -0,0 +1,24 @@ +package org.gridsuite.study.server.utils; + +import lombok.Getter; +import lombok.Setter; + +import java.util.UUID; + +@Getter +public class StudyParameters { + + private final UUID rootNetworkUuid; + private final UUID nodeUuid; + @Setter + private String variantId = null; + @Setter + private UUID networkUuid = null; + @Setter + private UUID resultUuid = null; + + public StudyParameters(UUID rootNetworkUuid, UUID nodeUuid) { + this.rootNetworkUuid = rootNetworkUuid; + this.nodeUuid = nodeUuid; + } +} From 0f5a345ca18aa030fa570000e3502487121743e9 Mon Sep 17 00:00:00 2001 From: Igor PIROG Date: Wed, 3 Sep 2025 14:24:38 +0200 Subject: [PATCH 4/5] Remarks ok Signed-off-by: Igor PIROG --- .../server/controller/StudyController.java | 5 ++- .../service/RootNetworkNodeInfoService.java | 18 +++++----- .../shortcircuit/ShortCircuitService.java | 16 ++++----- .../study/server/utils/ResultParameters.java | 33 +++++++++++++++++++ .../study/server/utils/StudyParameters.java | 24 -------------- .../study/server/ShortCircuitTest.java | 4 +-- 6 files changed, 55 insertions(+), 45 deletions(-) create mode 100644 src/main/java/org/gridsuite/study/server/utils/ResultParameters.java delete mode 100644 src/main/java/org/gridsuite/study/server/utils/StudyParameters.java 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 76b0d73c70..acdd8199de 100644 --- a/src/main/java/org/gridsuite/study/server/controller/StudyController.java +++ b/src/main/java/org/gridsuite/study/server/controller/StudyController.java @@ -17,7 +17,6 @@ import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; import org.gridsuite.study.server.StudyApi; -import org.gridsuite.study.server.StudyConstants.*; import org.gridsuite.study.server.StudyException; import org.gridsuite.study.server.StudyException.Type; import org.gridsuite.study.server.dto.*; @@ -46,7 +45,7 @@ import org.gridsuite.study.server.service.securityanalysis.SecurityAnalysisResultType; import org.gridsuite.study.server.service.shortcircuit.FaultResultsMode; import org.gridsuite.study.server.service.shortcircuit.ShortcircuitAnalysisType; -import org.gridsuite.study.server.utils.StudyParameters; +import org.gridsuite.study.server.utils.ResultParameters; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.util.Pair; @@ -818,7 +817,7 @@ public ResponseEntity getShortCircuitResult(@Parameter(description = "st @Parameter(description = "JSON array of global filters") @RequestParam(name = "globalFilters", required = false) String globalFilters, @Parameter(description = "If we wanted the paged version of the results or not") @RequestParam(name = "paged", required = false, defaultValue = "false") boolean paged, Pageable pageable) { - String result = rootNetworkNodeInfoService.getShortCircuitAnalysisResult(new StudyParameters(rootNetworkUuid, nodeUuid), mode, type, filters, globalFilters, paged, pageable); + String result = rootNetworkNodeInfoService.getShortCircuitAnalysisResult(new ResultParameters(rootNetworkUuid, nodeUuid), mode, type, filters, globalFilters, paged, pageable); 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 e1bfec07a6..434b9d2eab 100644 --- a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java +++ b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java @@ -33,7 +33,7 @@ import org.gridsuite.study.server.service.shortcircuit.FaultResultsMode; import org.gridsuite.study.server.service.shortcircuit.ShortCircuitService; import org.gridsuite.study.server.service.shortcircuit.ShortcircuitAnalysisType; -import org.gridsuite.study.server.utils.StudyParameters; +import org.gridsuite.study.server.utils.ResultParameters; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; @@ -604,13 +604,15 @@ public String getNonEvacuatedEnergyResult(UUID nodeUuid, UUID rootNetworkUuid) { } @Transactional(readOnly = true) - public String getShortCircuitAnalysisResult(StudyParameters studyParameters, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { - RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(studyParameters.getNodeUuid(), studyParameters.getRootNetworkUuid()).orElse(null); - studyParameters.setVariantId(rootNetworkNodeInfoEntity == null ? null : rootNetworkNodeInfoEntity.getVariantId()); - studyParameters.setNetworkUuid(rootNetworkNodeInfoEntity == null ? studyParameters.getRootNetworkUuid() : rootNetworkNodeInfoEntity.getRootNetwork().getNetworkUuid()); - studyParameters.setResultUuid(getComputationResultUuid(studyParameters.getNodeUuid(), studyParameters.getRootNetworkUuid(), - type == ShortcircuitAnalysisType.ALL_BUSES ? SHORT_CIRCUIT : SHORT_CIRCUIT_ONE_BUS)); - return shortCircuitService.getShortCircuitAnalysisResult(studyParameters, mode, type, filters, globalFilters, paged, pageable); + public String getShortCircuitAnalysisResult(ResultParameters resultParameters, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { + RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(resultParameters.getNodeUuid(), resultParameters.getRootNetworkUuid()).orElse(null); + ResultParameters resultParametersEnriched = new ResultParameters( + resultParameters.getRootNetworkUuid(), + resultParameters.getNodeUuid(), + rootNetworkNodeInfoEntity == null ? null : rootNetworkNodeInfoEntity.getVariantId(), + rootNetworkNodeInfoEntity == null ? resultParameters.getRootNetworkUuid() : rootNetworkNodeInfoEntity.getRootNetwork().getNetworkUuid(), + getComputationResultUuid(resultParameters.getNodeUuid(), resultParameters.getRootNetworkUuid(), (type == ShortcircuitAnalysisType.ALL_BUSES ? SHORT_CIRCUIT : SHORT_CIRCUIT_ONE_BUS))); + return shortCircuitService.getShortCircuitAnalysisResult(resultParametersEnriched, mode, type, filters, globalFilters, paged, pageable); } @Transactional(readOnly = true) diff --git a/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java b/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java index ff5c0f2d91..733c9a4146 100644 --- a/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java +++ b/src/main/java/org/gridsuite/study/server/service/shortcircuit/ShortCircuitService.java @@ -18,7 +18,7 @@ import org.gridsuite.study.server.dto.ShortCircuitStatus; import org.gridsuite.study.server.service.StudyService; import org.gridsuite.study.server.service.common.AbstractComputationService; -import org.gridsuite.study.server.utils.StudyParameters; +import org.gridsuite.study.server.utils.ResultParameters; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.http.*; @@ -123,11 +123,11 @@ private String getShortCircuitAnalysisResultsPageResourcePath(UUID resultUuid, S return resultPath + "/paged"; } - public String getShortCircuitAnalysisResult(StudyParameters studyParameters, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { + public String getShortCircuitAnalysisResult(ResultParameters resultParameters, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, boolean paged, Pageable pageable) { if (paged) { - return getShortCircuitAnalysisResultsPage(studyParameters, mode, type, filters, globalFilters, pageable); + return getShortCircuitAnalysisResultsPage(resultParameters, mode, type, filters, globalFilters, pageable); } else { - return getShortCircuitAnalysisResult(studyParameters.getResultUuid(), mode); + return getShortCircuitAnalysisResult(resultParameters.getResultUuid(), mode); } } @@ -171,15 +171,15 @@ public String getShortCircuitAnalysisResult(UUID resultUuid, FaultResultsMode mo return getShortCircuitAnalysisResource(builder.build().toUri()); } - public String getShortCircuitAnalysisResultsPage(StudyParameters studyParameters, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, Pageable pageable) { - String resultsPath = getShortCircuitAnalysisResultsPageResourcePath(studyParameters.getResultUuid(), type); + public String getShortCircuitAnalysisResultsPage(ResultParameters resultParameters, FaultResultsMode mode, ShortcircuitAnalysisType type, String filters, String globalFilters, Pageable pageable) { + String resultsPath = getShortCircuitAnalysisResultsPageResourcePath(resultParameters.getResultUuid(), type); if (resultsPath == null) { return null; } UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(shortCircuitServerBaseUri + resultsPath) - .queryParam("rootNetworkUuid", studyParameters.getNetworkUuid()) - .queryParam("variantId", studyParameters.getVariantId()) + .queryParam("rootNetworkUuid", resultParameters.getNetworkUuid()) + .queryParam("variantId", resultParameters.getVariantId()) .queryParam("mode", mode); if (filters != null && !filters.isEmpty()) { diff --git a/src/main/java/org/gridsuite/study/server/utils/ResultParameters.java b/src/main/java/org/gridsuite/study/server/utils/ResultParameters.java new file mode 100644 index 0000000000..59e8a98063 --- /dev/null +++ b/src/main/java/org/gridsuite/study/server/utils/ResultParameters.java @@ -0,0 +1,33 @@ +package org.gridsuite.study.server.utils; + +import lombok.Getter; + +import java.util.UUID; + +@Getter +public final class ResultParameters { + + private final UUID rootNetworkUuid; + private final UUID nodeUuid; + private final String variantId; + private final UUID networkUuid; + private final UUID resultUuid; + + /** + * Full constructor + */ + public ResultParameters(UUID rootNetworkUuid, UUID nodeUuid, String variantId, UUID networkUuid, UUID resultUuid) { + this.rootNetworkUuid = rootNetworkUuid; + this.nodeUuid = nodeUuid; + this.variantId = variantId; + this.networkUuid = networkUuid; + this.resultUuid = resultUuid; + } + + /** + * Minimal constructor + */ + public ResultParameters(UUID rootNetworkUuid, UUID nodeUuid) { + this(rootNetworkUuid, nodeUuid, null, null, null); + } +} diff --git a/src/main/java/org/gridsuite/study/server/utils/StudyParameters.java b/src/main/java/org/gridsuite/study/server/utils/StudyParameters.java deleted file mode 100644 index 081fb4dda0..0000000000 --- a/src/main/java/org/gridsuite/study/server/utils/StudyParameters.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.gridsuite.study.server.utils; - -import lombok.Getter; -import lombok.Setter; - -import java.util.UUID; - -@Getter -public class StudyParameters { - - private final UUID rootNetworkUuid; - private final UUID nodeUuid; - @Setter - private String variantId = null; - @Setter - private UUID networkUuid = null; - @Setter - private UUID resultUuid = null; - - public StudyParameters(UUID rootNetworkUuid, UUID nodeUuid) { - this.rootNetworkUuid = rootNetworkUuid; - this.nodeUuid = nodeUuid; - } -} diff --git a/src/test/java/org/gridsuite/study/server/ShortCircuitTest.java b/src/test/java/org/gridsuite/study/server/ShortCircuitTest.java index f4b83abc42..149b49d928 100644 --- a/src/test/java/org/gridsuite/study/server/ShortCircuitTest.java +++ b/src/test/java/org/gridsuite/study/server/ShortCircuitTest.java @@ -502,7 +502,7 @@ void testPagedShortCircuit(final MockWebServer server) throws Exception { status().isOk(), content().string(SHORT_CIRCUIT_ANALYSIS_RESULT_JSON)); - assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/fault_results/paged\\?rootNetworkUuid=38400000-8cf0-11bd-b23e-10b96e4ef00d&variantId=variant_2&mode=FULL&page=0&size=20&sort=id,DESC"))); + assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/fault_results/paged\\?rootNetworkUuid=" + NETWORK_UUID_STRING + "&variantId=variant_2&mode=FULL&page=0&size=20&sort=id,DESC"))); // get short circuit result with pagination but with unknown node mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/shortcircuit/result?paged=true&page=0&size=20", studyNameUserIdUuid, firstRootNetworkUuid, unknownModificationNodeUuid)).andExpect( @@ -588,7 +588,7 @@ void testOneBusShortCircuit(final MockWebServer server) throws Exception { status().isOk(), content().string(SHORT_CIRCUIT_ANALYSIS_RESULT_JSON)); - assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/feeder_results/paged\\?rootNetworkUuid=38400000-8cf0-11bd-b23e-10b96e4ef00d&variantId=variant_2&mode=FULL&filters=fakeFilters&page=0&size=20&sort=id,DESC"))); + assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/results/" + SHORT_CIRCUIT_ANALYSIS_RESULT_UUID + "/feeder_results/paged\\?rootNetworkUuid=" + NETWORK_UUID_STRING + "&variantId=variant_2&mode=FULL&filters=fakeFilters&page=0&size=20&sort=id,DESC"))); // get one bus short circuit status mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/shortcircuit/status", studyNameUserIdUuid, firstRootNetworkUuid, modificationNode3Uuid) From 0b90fe1eb9e1b3a07523f0e23d8ff41c80dc6fce Mon Sep 17 00:00:00 2001 From: Igor PIROG Date: Wed, 3 Sep 2025 14:28:32 +0200 Subject: [PATCH 5/5] Sonarlint trouble Signed-off-by: Igor PIROG --- .../study/server/service/RootNetworkNodeInfoService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c3c6d5e10a..5b047ce13e 100644 --- a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java +++ b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java @@ -611,7 +611,7 @@ public String getShortCircuitAnalysisResult(ResultParameters resultParameters, F resultParameters.getNodeUuid(), rootNetworkNodeInfoEntity == null ? null : rootNetworkNodeInfoEntity.getVariantId(), rootNetworkNodeInfoEntity == null ? resultParameters.getRootNetworkUuid() : rootNetworkNodeInfoEntity.getRootNetwork().getNetworkUuid(), - getComputationResultUuid(resultParameters.getNodeUuid(), resultParameters.getRootNetworkUuid(), (type == ShortcircuitAnalysisType.ALL_BUSES ? SHORT_CIRCUIT : SHORT_CIRCUIT_ONE_BUS))); + getComputationResultUuid(resultParameters.getNodeUuid(), resultParameters.getRootNetworkUuid(), type == ShortcircuitAnalysisType.ALL_BUSES ? SHORT_CIRCUIT : SHORT_CIRCUIT_ONE_BUS)); return shortCircuitService.getShortCircuitAnalysisResult(resultParametersEnriched, mode, type, filters, globalFilters, paged, pageable); }