From 8fe0d379c28f3548fe153bc30e8ca70ea76c9b99 Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Mon, 23 Feb 2026 22:37:54 +0100 Subject: [PATCH 1/2] refactor delete remote node infos Signed-off-by: SOUISSI Maissa (Externe) --- .../study/server/dto/DeleteNodeInfos.java | 74 +--------- .../study/server/dto/InvalidateNodeInfos.java | 112 +-------------- .../gridsuite/study/server/dto/NodeInfos.java | 132 ++++++++++++++++++ .../service/RootNetworkNodeInfoService.java | 17 +++ .../study/server/service/StudyService.java | 47 +++---- 5 files changed, 168 insertions(+), 214 deletions(-) create mode 100644 src/main/java/org/gridsuite/study/server/dto/NodeInfos.java diff --git a/src/main/java/org/gridsuite/study/server/dto/DeleteNodeInfos.java b/src/main/java/org/gridsuite/study/server/dto/DeleteNodeInfos.java index d9a46ca7f..fae64b37a 100644 --- a/src/main/java/org/gridsuite/study/server/dto/DeleteNodeInfos.java +++ b/src/main/java/org/gridsuite/study/server/dto/DeleteNodeInfos.java @@ -19,37 +19,13 @@ @NoArgsConstructor @Getter @Setter -public class DeleteNodeInfos { +public class DeleteNodeInfos extends NodeInfos { private List removedNodeUuids = new ArrayList<>(); private List modificationGroupUuids = new ArrayList<>(); - private List reportUuids = new ArrayList<>(); - private Map> variantIds = new HashMap<>(); - private List loadFlowResultUuids = new ArrayList<>(); - - private List securityAnalysisResultUuids = new ArrayList<>(); - - private List sensitivityAnalysisResultUuids = new ArrayList<>(); - - private List shortCircuitAnalysisResultUuids = new ArrayList<>(); - - private List oneBusShortCircuitAnalysisResultUuids = new ArrayList<>(); - - private List voltageInitResultUuids = new ArrayList<>(); - - private List dynamicSimulationResultUuids = new ArrayList<>(); - - private List dynamicSecurityAnalysisResultUuids = new ArrayList<>(); - - private List dynamicMarginCalculationResultUuids = new ArrayList<>(); - - private List stateEstimationResultUuids = new ArrayList<>(); - - private List pccMinResultUuids = new ArrayList<>(); - public void addRemovedNodeUuid(UUID removedNodeUuid) { removedNodeUuids.add(removedNodeUuid); } @@ -58,56 +34,8 @@ public void addModificationGroupUuid(UUID modificationGroupUuid) { modificationGroupUuids.add(modificationGroupUuid); } - public void addReportUuid(UUID reportUuid) { - reportUuids.add(reportUuid); - } - public void addVariantId(UUID networkUuid, String variantId) { variantIds.getOrDefault(networkUuid, new ArrayList<>()).add(variantId); } - public void addLoadFlowResultUuid(UUID loadFlowResultUuid) { - loadFlowResultUuids.add(loadFlowResultUuid); - } - - public void addSecurityAnalysisResultUuid(UUID securityAnalysisResultUuid) { - securityAnalysisResultUuids.add(securityAnalysisResultUuid); - } - - public void addDynamicSimulationResultUuid(UUID dynamicSimulationResultUuid) { - dynamicSimulationResultUuids.add(dynamicSimulationResultUuid); - } - - public void addDynamicSecurityAnalysisResultUuid(UUID dynamicSecurityAnalysisResultUuid) { - dynamicSecurityAnalysisResultUuids.add(dynamicSecurityAnalysisResultUuid); - } - - public void addDynamicMarginCalculationResultUuid(UUID dynamicMarginCalculationResultUuid) { - dynamicMarginCalculationResultUuids.add(dynamicMarginCalculationResultUuid); - } - - public void addSensitivityAnalysisResultUuid(UUID sensitivityAnalysisResultUuid) { - sensitivityAnalysisResultUuids.add(sensitivityAnalysisResultUuid); - } - - public void addShortCircuitAnalysisResultUuid(UUID shortCircuitAnalysisResultUuid) { - shortCircuitAnalysisResultUuids.add(shortCircuitAnalysisResultUuid); - } - - public void addOneBusShortCircuitAnalysisResultUuid(UUID oneBusShortCircuitAnalysisResultUuid) { - oneBusShortCircuitAnalysisResultUuids.add(oneBusShortCircuitAnalysisResultUuid); - } - - public void addVoltageInitResultUuid(UUID voltageInitResultUuid) { - voltageInitResultUuids.add(voltageInitResultUuid); - } - - public void addStateEstimationResultUuid(UUID stateEstimationResultUuid) { - stateEstimationResultUuids.add(stateEstimationResultUuid); - } - - public void addPccMinResultUuid(UUID pccMinResultUuid) { - pccMinResultUuids.add(pccMinResultUuid); - } - } diff --git a/src/main/java/org/gridsuite/study/server/dto/InvalidateNodeInfos.java b/src/main/java/org/gridsuite/study/server/dto/InvalidateNodeInfos.java index ae3c24f60..288912f85 100644 --- a/src/main/java/org/gridsuite/study/server/dto/InvalidateNodeInfos.java +++ b/src/main/java/org/gridsuite/study/server/dto/InvalidateNodeInfos.java @@ -19,29 +19,15 @@ * @author Nicolas Noir */ @NoArgsConstructor -public class InvalidateNodeInfos { +public class InvalidateNodeInfos extends NodeInfos { @Getter @Setter private UUID networkUuid; private Set nodeUuids = new HashSet<>(); private Set groupUuids = new HashSet<>(); - - private Set reportUuids = new HashSet<>(); private Set variantIds = new HashSet<>(); - private Set loadFlowResultUuids = new HashSet<>(); - private Set securityAnalysisResultUuids = new HashSet<>(); - private Set sensitivityAnalysisResultUuids = new HashSet<>(); - private Set shortCircuitAnalysisResultUuids = new HashSet<>(); - private Set oneBusShortCircuitAnalysisResultUuids = new HashSet<>(); - private Set voltageInitResultUuids = new HashSet<>(); - private Set stateEstimationResultUuids = new HashSet<>(); - private Set pccMinResultUuids = new HashSet<>(); - private Set dynamicSimulationResultUuids = new HashSet<>(); - private Set dynamicSecurityAnalysisResultUuids = new HashSet<>(); - private Set dynamicMarginCalculationResultUuids = new HashSet<>(); - public List getNodeUuids() { return nodeUuids.stream().toList(); } @@ -50,110 +36,14 @@ public List getGroupUuids() { return groupUuids.stream().toList(); } - public List getReportUuids() { - return reportUuids.stream().toList(); - } - public List getVariantIds() { return variantIds.stream().toList(); } - public List getLoadFlowResultUuids() { - return loadFlowResultUuids.stream().toList(); - } - - public List getSecurityAnalysisResultUuids() { - return securityAnalysisResultUuids.stream().toList(); - } - - public List getSensitivityAnalysisResultUuids() { - return sensitivityAnalysisResultUuids.stream().toList(); - } - - public List getShortCircuitAnalysisResultUuids() { - return shortCircuitAnalysisResultUuids.stream().toList(); - } - - public List getOneBusShortCircuitAnalysisResultUuids() { - return oneBusShortCircuitAnalysisResultUuids.stream().toList(); - } - - public List getVoltageInitResultUuids() { - return voltageInitResultUuids.stream().toList(); - } - - public List getStateEstimationResultUuids() { - return stateEstimationResultUuids.stream().toList(); - } - - public List getPccMinResultUuids() { - return pccMinResultUuids.stream().toList(); - } - - public List getDynamicSimulationResultUuids() { - return dynamicSimulationResultUuids.stream().toList(); - } - - public List getDynamicSecurityAnalysisResultUuids() { - return dynamicSecurityAnalysisResultUuids.stream().toList(); - } - - public List getDynamicMarginCalculationResultUuids() { - return dynamicMarginCalculationResultUuids.stream().toList(); - } - - public void addReportUuid(UUID reportUuid) { - reportUuids.add(reportUuid); - } - public void addVariantId(String variantId) { variantIds.add(variantId); } - public void addLoadFlowResultUuid(UUID loadFlowResultUuid) { - loadFlowResultUuids.add(loadFlowResultUuid); - } - - public void addSecurityAnalysisResultUuid(UUID securityAnalysisResultUuid) { - securityAnalysisResultUuids.add(securityAnalysisResultUuid); - } - - public void addSensitivityAnalysisResultUuid(UUID sensitivityAnalysisResultUuid) { - sensitivityAnalysisResultUuids.add(sensitivityAnalysisResultUuid); - } - - public void addShortCircuitAnalysisResultUuid(UUID shortCircuitAnalysisResultUuid) { - shortCircuitAnalysisResultUuids.add(shortCircuitAnalysisResultUuid); - } - - public void addOneBusShortCircuitAnalysisResultUuid(UUID oneBusShortCircuitAnalysisResultUuid) { - oneBusShortCircuitAnalysisResultUuids.add(oneBusShortCircuitAnalysisResultUuid); - } - - public void addVoltageInitResultUuid(UUID voltageInitResultUuid) { - voltageInitResultUuids.add(voltageInitResultUuid); - } - - public void addDynamicSimulationResultUuid(UUID dynamicSimulationResultUuid) { - dynamicSimulationResultUuids.add(dynamicSimulationResultUuid); - } - - public void addDynamicSecurityAnalysisResultUuid(UUID dynamicSecurityAnalysisResultUuid) { - dynamicSecurityAnalysisResultUuids.add(dynamicSecurityAnalysisResultUuid); - } - - public void addDynamicMarginCalculationResultUuid(UUID dynamicMarginCalculationResultUuid) { - dynamicMarginCalculationResultUuids.add(dynamicMarginCalculationResultUuid); - } - - public void addStateEstimationResultUuid(UUID stateEstimationResultUuid) { - stateEstimationResultUuids.add(stateEstimationResultUuid); - } - - public void addPccMinResultUuid(UUID pccMinResultUuid) { - pccMinResultUuids.add(pccMinResultUuid); - } - public void addGroupUuids(List groupUuids) { this.groupUuids.addAll(groupUuids); } diff --git a/src/main/java/org/gridsuite/study/server/dto/NodeInfos.java b/src/main/java/org/gridsuite/study/server/dto/NodeInfos.java new file mode 100644 index 000000000..9d5b4482c --- /dev/null +++ b/src/main/java/org/gridsuite/study/server/dto/NodeInfos.java @@ -0,0 +1,132 @@ +/** + * Copyright (c) 2026 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/. + */ +package org.gridsuite.study.server.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.*; + +/** + * @author Maissa Souissi + */ + +@NoArgsConstructor +@Getter +@Setter +public class NodeInfos { + protected Set reportUuids = new HashSet<>(); + protected Set loadFlowResultUuids = new HashSet<>(); + protected Set securityAnalysisResultUuids = new HashSet<>(); + protected Set sensitivityAnalysisResultUuids = new HashSet<>(); + protected Set shortCircuitAnalysisResultUuids = new HashSet<>(); + protected Set oneBusShortCircuitAnalysisResultUuids = new HashSet<>(); + protected Set voltageInitResultUuids = new HashSet<>(); + protected Set dynamicSimulationResultUuids = new HashSet<>(); + protected Set dynamicSecurityAnalysisResultUuids = new HashSet<>(); + protected Set dynamicMarginCalculationResultUuids = new HashSet<>(); + protected Set stateEstimationResultUuids = new HashSet<>(); + protected Set pccMinResultUuids = new HashSet<>(); + + public List getReportUuids() { + return reportUuids.stream().toList(); + } + + public List getLoadFlowResultUuids() { + return loadFlowResultUuids.stream().toList(); + } + + public List getSecurityAnalysisResultUuids() { + return securityAnalysisResultUuids.stream().toList(); + } + + public List getSensitivityAnalysisResultUuids() { + return sensitivityAnalysisResultUuids.stream().toList(); + } + + public List getShortCircuitAnalysisResultUuids() { + return shortCircuitAnalysisResultUuids.stream().toList(); + } + + public List getOneBusShortCircuitAnalysisResultUuids() { + return oneBusShortCircuitAnalysisResultUuids.stream().toList(); + } + + public List getVoltageInitResultUuids() { + return voltageInitResultUuids.stream().toList(); + } + + public List getStateEstimationResultUuids() { + return stateEstimationResultUuids.stream().toList(); + } + + public List getPccMinResultUuids() { + return pccMinResultUuids.stream().toList(); + } + + public List getDynamicSimulationResultUuids() { + return dynamicSimulationResultUuids.stream().toList(); + } + + public List getDynamicSecurityAnalysisResultUuids() { + return dynamicSecurityAnalysisResultUuids.stream().toList(); + } + + public List getDynamicMarginCalculationResultUuids() { + return dynamicMarginCalculationResultUuids.stream().toList(); + } + + public void addReportUuid(UUID reportUuid) { + reportUuids.add(reportUuid); + } + + public void addLoadFlowResultUuid(UUID loadFlowResultUuid) { + loadFlowResultUuids.add(loadFlowResultUuid); + } + + public void addSecurityAnalysisResultUuid(UUID securityAnalysisResultUuid) { + securityAnalysisResultUuids.add(securityAnalysisResultUuid); + } + + public void addDynamicSimulationResultUuid(UUID dynamicSimulationResultUuid) { + dynamicSimulationResultUuids.add(dynamicSimulationResultUuid); + } + + public void addDynamicSecurityAnalysisResultUuid(UUID dynamicSecurityAnalysisResultUuid) { + dynamicSecurityAnalysisResultUuids.add(dynamicSecurityAnalysisResultUuid); + } + + public void addDynamicMarginCalculationResultUuid(UUID dynamicMarginCalculationResultUuid) { + dynamicMarginCalculationResultUuids.add(dynamicMarginCalculationResultUuid); + } + + public void addSensitivityAnalysisResultUuid(UUID sensitivityAnalysisResultUuid) { + sensitivityAnalysisResultUuids.add(sensitivityAnalysisResultUuid); + } + + public void addShortCircuitAnalysisResultUuid(UUID shortCircuitAnalysisResultUuid) { + shortCircuitAnalysisResultUuids.add(shortCircuitAnalysisResultUuid); + } + + public void addOneBusShortCircuitAnalysisResultUuid(UUID oneBusShortCircuitAnalysisResultUuid) { + oneBusShortCircuitAnalysisResultUuids.add(oneBusShortCircuitAnalysisResultUuid); + } + + public void addVoltageInitResultUuid(UUID voltageInitResultUuid) { + voltageInitResultUuids.add(voltageInitResultUuid); + } + + public void addStateEstimationResultUuid(UUID stateEstimationResultUuid) { + stateEstimationResultUuids.add(stateEstimationResultUuid); + } + + public void addPccMinResultUuid(UUID pccMinResultUuid) { + pccMinResultUuids.add(pccMinResultUuid); + } + +} 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 43d192701..022ca4733 100644 --- a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java +++ b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java @@ -245,6 +245,23 @@ public void fillDeleteNodeInfo(UUID nodeUuid, DeleteNodeInfos deleteNodeInfos) { }); } + public CompletableFuture runRemoteDeletions(NodeInfos infos) { + return CompletableFuture.allOf( + studyServerExecutionService.runAsync(() -> reportService.deleteReports(infos.getReportUuids())), + studyServerExecutionService.runAsync(() -> loadFlowService.deleteLoadFlowResults(infos.getLoadFlowResultUuids())), + studyServerExecutionService.runAsync(() -> securityAnalysisService.deleteSecurityAnalysisResults(infos.getSecurityAnalysisResultUuids())), + studyServerExecutionService.runAsync(() -> sensitivityAnalysisService.deleteSensitivityAnalysisResults(infos.getSensitivityAnalysisResultUuids())), + studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(infos.getShortCircuitAnalysisResultUuids())), + studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(infos.getOneBusShortCircuitAnalysisResultUuids())), + studyServerExecutionService.runAsync(() -> voltageInitService.deleteVoltageInitResults(infos.getVoltageInitResultUuids())), + studyServerExecutionService.runAsync(() -> dynamicSimulationService.deleteResults(infos.getDynamicSimulationResultUuids())), + studyServerExecutionService.runAsync(() -> dynamicSecurityAnalysisService.deleteResults(infos.getDynamicSecurityAnalysisResultUuids())), + studyServerExecutionService.runAsync(() -> dynamicMarginCalculationService.deleteResults(infos.getDynamicMarginCalculationResultUuids())), + studyServerExecutionService.runAsync(() -> stateEstimationService.deleteStateEstimationResults(infos.getStateEstimationResultUuids())), + studyServerExecutionService.runAsync(() -> pccMinService.deletePccMinResults(infos.getPccMinResultUuids())) + ); + } + public InvalidateNodeInfos invalidateRootNetworkNode(UUID nodeUuid, UUID rootNetworUuid, InvalidateNodeTreeParameters invalidateTreeParameters) { RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(nodeUuid, rootNetworUuid).orElseThrow(() -> new StudyException(NOT_FOUND, "Root network not found")); return invalidateRootNetworkNode(rootNetworkNodeInfoEntity, invalidateTreeParameters); 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 a31716c63..1e42004d3 100644 --- a/src/main/java/org/gridsuite/study/server/service/StudyService.java +++ b/src/main/java/org/gridsuite/study/server/service/StudyService.java @@ -2348,41 +2348,28 @@ public void deleteNodes(UUID studyUuid, List nodeIds, boolean deleteChildr // /!\ Do not wait completion and do not throw exception private CompletableFuture deleteInvalidationInfos(InvalidateNodeInfos invalidateNodeInfos) { return CompletableFuture.allOf( - studyServerExecutionService.runAsync(() -> networkStoreService.deleteVariants(invalidateNodeInfos.getNetworkUuid(), invalidateNodeInfos.getVariantIds())), - studyServerExecutionService.runAsync(() -> networkModificationService.deleteIndexedModifications(invalidateNodeInfos.getGroupUuids(), invalidateNodeInfos.getNetworkUuid())), - studyServerExecutionService.runAsync(() -> reportService.deleteReports(invalidateNodeInfos.getReportUuids())), - studyServerExecutionService.runAsync(() -> loadflowService.deleteLoadFlowResults(invalidateNodeInfos.getLoadFlowResultUuids())), - studyServerExecutionService.runAsync(() -> securityAnalysisService.deleteSecurityAnalysisResults(invalidateNodeInfos.getSecurityAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> sensitivityAnalysisService.deleteSensitivityAnalysisResults(invalidateNodeInfos.getSensitivityAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(invalidateNodeInfos.getShortCircuitAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(invalidateNodeInfos.getOneBusShortCircuitAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> voltageInitService.deleteVoltageInitResults(invalidateNodeInfos.getVoltageInitResultUuids())), - studyServerExecutionService.runAsync(() -> dynamicSimulationService.deleteResults(invalidateNodeInfos.getDynamicSimulationResultUuids())), - studyServerExecutionService.runAsync(() -> dynamicSecurityAnalysisService.deleteResults(invalidateNodeInfos.getDynamicSecurityAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> dynamicMarginCalculationService.deleteResults(invalidateNodeInfos.getDynamicMarginCalculationResultUuids())), - studyServerExecutionService.runAsync(() -> stateEstimationService.deleteStateEstimationResults(invalidateNodeInfos.getStateEstimationResultUuids())), - studyServerExecutionService.runAsync(() -> pccMinService.deletePccMinResults(invalidateNodeInfos.getPccMinResultUuids())) + studyServerExecutionService.runAsync(() -> + networkStoreService.deleteVariants(invalidateNodeInfos.getNetworkUuid(), invalidateNodeInfos.getVariantIds()) + ), + studyServerExecutionService.runAsync(() -> + networkModificationService.deleteIndexedModifications(invalidateNodeInfos.getGroupUuids(), invalidateNodeInfos.getNetworkUuid()) + ), + rootNetworkNodeInfoService.runRemoteDeletions(invalidateNodeInfos) ); } - // /!\ Do not wait completion and do not throw exception private void deleteNodesInfos(DeleteNodeInfos deleteNodeInfos) { CompletableFuture.allOf( - studyServerExecutionService.runAsync(() -> deleteNodeInfos.getVariantIds().forEach(networkStoreService::deleteVariants)), - studyServerExecutionService.runAsync(() -> deleteNodeInfos.getModificationGroupUuids().forEach(networkModificationService::deleteModifications)), - studyServerExecutionService.runAsync(() -> deleteNodeInfos.getRemovedNodeUuids().forEach(dynamicSimulationEventService::deleteEventsByNodeId)), - studyServerExecutionService.runAsync(() -> reportService.deleteReports(deleteNodeInfos.getReportUuids())), - studyServerExecutionService.runAsync(() -> loadflowService.deleteLoadFlowResults(deleteNodeInfos.getLoadFlowResultUuids())), - studyServerExecutionService.runAsync(() -> securityAnalysisService.deleteSecurityAnalysisResults(deleteNodeInfos.getSecurityAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> sensitivityAnalysisService.deleteSensitivityAnalysisResults(deleteNodeInfos.getSensitivityAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(deleteNodeInfos.getShortCircuitAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(deleteNodeInfos.getOneBusShortCircuitAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> voltageInitService.deleteVoltageInitResults(deleteNodeInfos.getVoltageInitResultUuids())), - studyServerExecutionService.runAsync(() -> dynamicSimulationService.deleteResults(deleteNodeInfos.getDynamicSimulationResultUuids())), - studyServerExecutionService.runAsync(() -> dynamicSecurityAnalysisService.deleteResults(deleteNodeInfos.getDynamicSecurityAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> dynamicMarginCalculationService.deleteResults(deleteNodeInfos.getDynamicMarginCalculationResultUuids())), - studyServerExecutionService.runAsync(() -> stateEstimationService.deleteStateEstimationResults(deleteNodeInfos.getStateEstimationResultUuids())), - studyServerExecutionService.runAsync(() -> pccMinService.deletePccMinResults(deleteNodeInfos.getPccMinResultUuids())) + studyServerExecutionService.runAsync(() -> + deleteNodeInfos.getVariantIds().forEach(networkStoreService::deleteVariants) + ), + studyServerExecutionService.runAsync(() -> + deleteNodeInfos.getModificationGroupUuids().forEach(networkModificationService::deleteModifications) + ), + studyServerExecutionService.runAsync(() -> + deleteNodeInfos.getRemovedNodeUuids().forEach(dynamicSimulationEventService::deleteEventsByNodeId) + ), + rootNetworkNodeInfoService.runRemoteDeletions(deleteNodeInfos) // <--- reused ); } From 5341e75c8bb39afad543305797e75461115b17c5 Mon Sep 17 00:00:00 2001 From: "SOUISSI Maissa (Externe)" Date: Tue, 24 Feb 2026 00:43:13 +0100 Subject: [PATCH 2/2] refactoring Signed-off-by: SOUISSI Maissa (Externe) --- .../study/server/dto/InvalidateNodeInfos.java | 17 +++++ .../study/server/dto/RootNetworkNodeInfo.java | 4 +- .../service/RootNetworkNodeInfoService.java | 75 +++++++++++-------- .../study/server/service/StudyService.java | 33 +++----- .../server/rootnetworks/RootNetworkTest.java | 5 +- 5 files changed, 73 insertions(+), 61 deletions(-) diff --git a/src/main/java/org/gridsuite/study/server/dto/InvalidateNodeInfos.java b/src/main/java/org/gridsuite/study/server/dto/InvalidateNodeInfos.java index 288912f85..546aa68b5 100644 --- a/src/main/java/org/gridsuite/study/server/dto/InvalidateNodeInfos.java +++ b/src/main/java/org/gridsuite/study/server/dto/InvalidateNodeInfos.java @@ -71,4 +71,21 @@ public void add(InvalidateNodeInfos invalidateNodeInfos) { dynamicSecurityAnalysisResultUuids.addAll(invalidateNodeInfos.getDynamicSecurityAnalysisResultUuids()); dynamicMarginCalculationResultUuids.addAll(invalidateNodeInfos.getDynamicMarginCalculationResultUuids()); } + + public NodeInfos toNodeInfos(InvalidateNodeInfos invalidateNodeInfos) { + NodeInfos infos = new NodeInfos(); + infos.setReportUuids(new HashSet<>(invalidateNodeInfos.getReportUuids())); + infos.setLoadFlowResultUuids(new HashSet<>(invalidateNodeInfos.getLoadFlowResultUuids())); + infos.setSecurityAnalysisResultUuids(new HashSet<>(invalidateNodeInfos.getSecurityAnalysisResultUuids())); + infos.setSensitivityAnalysisResultUuids(new HashSet<>(invalidateNodeInfos.getSensitivityAnalysisResultUuids())); + infos.setShortCircuitAnalysisResultUuids(new HashSet<>(invalidateNodeInfos.getShortCircuitAnalysisResultUuids())); + infos.setOneBusShortCircuitAnalysisResultUuids(new HashSet<>(invalidateNodeInfos.getOneBusShortCircuitAnalysisResultUuids())); + infos.setVoltageInitResultUuids(new HashSet<>(invalidateNodeInfos.getVoltageInitResultUuids())); + infos.setDynamicSimulationResultUuids(new HashSet<>(invalidateNodeInfos.getDynamicSimulationResultUuids())); + infos.setDynamicSecurityAnalysisResultUuids(new HashSet<>(invalidateNodeInfos.getDynamicSecurityAnalysisResultUuids())); + infos.setDynamicMarginCalculationResultUuids(new HashSet<>(invalidateNodeInfos.getDynamicMarginCalculationResultUuids())); + infos.setStateEstimationResultUuids(new HashSet<>(invalidateNodeInfos.getStateEstimationResultUuids())); + infos.setPccMinResultUuids(new HashSet<>(invalidateNodeInfos.getPccMinResultUuids())); + return infos; + } } diff --git a/src/main/java/org/gridsuite/study/server/dto/RootNetworkNodeInfo.java b/src/main/java/org/gridsuite/study/server/dto/RootNetworkNodeInfo.java index b166b231d..7c15c1de1 100644 --- a/src/main/java/org/gridsuite/study/server/dto/RootNetworkNodeInfo.java +++ b/src/main/java/org/gridsuite/study/server/dto/RootNetworkNodeInfo.java @@ -13,9 +13,7 @@ import org.gridsuite.study.server.networkmodificationtree.entities.NodeExportEmbeddable; import org.gridsuite.study.server.networkmodificationtree.entities.RootNetworkNodeInfoEntity; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; /** * @author Kevin Le Saulnier 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 022ca4733..28ccae491 100644 --- a/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java +++ b/src/main/java/org/gridsuite/study/server/service/RootNetworkNodeInfoService.java @@ -245,23 +245,6 @@ public void fillDeleteNodeInfo(UUID nodeUuid, DeleteNodeInfos deleteNodeInfos) { }); } - public CompletableFuture runRemoteDeletions(NodeInfos infos) { - return CompletableFuture.allOf( - studyServerExecutionService.runAsync(() -> reportService.deleteReports(infos.getReportUuids())), - studyServerExecutionService.runAsync(() -> loadFlowService.deleteLoadFlowResults(infos.getLoadFlowResultUuids())), - studyServerExecutionService.runAsync(() -> securityAnalysisService.deleteSecurityAnalysisResults(infos.getSecurityAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> sensitivityAnalysisService.deleteSensitivityAnalysisResults(infos.getSensitivityAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(infos.getShortCircuitAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(infos.getOneBusShortCircuitAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> voltageInitService.deleteVoltageInitResults(infos.getVoltageInitResultUuids())), - studyServerExecutionService.runAsync(() -> dynamicSimulationService.deleteResults(infos.getDynamicSimulationResultUuids())), - studyServerExecutionService.runAsync(() -> dynamicSecurityAnalysisService.deleteResults(infos.getDynamicSecurityAnalysisResultUuids())), - studyServerExecutionService.runAsync(() -> dynamicMarginCalculationService.deleteResults(infos.getDynamicMarginCalculationResultUuids())), - studyServerExecutionService.runAsync(() -> stateEstimationService.deleteStateEstimationResults(infos.getStateEstimationResultUuids())), - studyServerExecutionService.runAsync(() -> pccMinService.deletePccMinResults(infos.getPccMinResultUuids())) - ); - } - public InvalidateNodeInfos invalidateRootNetworkNode(UUID nodeUuid, UUID rootNetworUuid, InvalidateNodeTreeParameters invalidateTreeParameters) { RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoRepository.findByNodeInfoIdAndRootNetworkId(nodeUuid, rootNetworUuid).orElseThrow(() -> new StudyException(NOT_FOUND, "Root network not found")); return invalidateRootNetworkNode(rootNetworkNodeInfoEntity, invalidateTreeParameters); @@ -598,22 +581,48 @@ public void updateRootNetworkNode(UUID nodeUuid, UUID rootNetworkUuid, RootNetwo } } - public void deleteRootNetworkNodeRemoteInfos(List rootNetworkNodeInfo) { - CompletableFuture.allOf( - studyServerExecutionService.runAsync(() -> reportService.deleteReports(rootNetworkNodeInfo.stream().map(this::getReportUuids).flatMap(Collection::stream).toList())), - studyServerExecutionService.runAsync(() -> loadFlowService.deleteLoadFlowResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getLoadFlowResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> securityAnalysisService.deleteSecurityAnalysisResults(rootNetworkNodeInfo.stream() - .map(RootNetworkNodeInfo::getSecurityAnalysisResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> sensitivityAnalysisService.deleteSensitivityAnalysisResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getSensitivityAnalysisResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getShortCircuitAnalysisResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getOneBusShortCircuitAnalysisResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> voltageInitService.deleteVoltageInitResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getVoltageInitResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> dynamicSimulationService.deleteResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getDynamicSimulationResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> dynamicSecurityAnalysisService.deleteResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getDynamicSecurityAnalysisResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> dynamicMarginCalculationService.deleteResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getDynamicMarginCalculationResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> stateEstimationService.deleteStateEstimationResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getStateEstimationResultUuid).filter(Objects::nonNull).toList())), - studyServerExecutionService.runAsync(() -> pccMinService.deletePccMinResults(rootNetworkNodeInfo.stream().map(RootNetworkNodeInfo::getPccMinResultUuid).filter(Objects::nonNull).toList())) - ); + public List> runRemoteDeletions(NodeInfos infos) { + List> futures = new ArrayList<>(); + futures.add(studyServerExecutionService.runAsync(() -> reportService.deleteReports(infos.getReportUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> loadFlowService.deleteLoadFlowResults(infos.getLoadFlowResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> securityAnalysisService.deleteSecurityAnalysisResults(infos.getSecurityAnalysisResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> sensitivityAnalysisService.deleteSensitivityAnalysisResults(infos.getSensitivityAnalysisResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(infos.getShortCircuitAnalysisResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> shortCircuitService.deleteShortCircuitAnalysisResults(infos.getOneBusShortCircuitAnalysisResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> voltageInitService.deleteVoltageInitResults(infos.getVoltageInitResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> dynamicSimulationService.deleteResults(infos.getDynamicSimulationResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> dynamicSecurityAnalysisService.deleteResults(infos.getDynamicSecurityAnalysisResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> dynamicMarginCalculationService.deleteResults(infos.getDynamicMarginCalculationResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> stateEstimationService.deleteStateEstimationResults(infos.getStateEstimationResultUuids()))); + futures.add(studyServerExecutionService.runAsync(() -> pccMinService.deletePccMinResults(infos.getPccMinResultUuids()))); + + return futures; + } + + public NodeInfos getNodeInfos(List rootNetworkNodeInfos) { + NodeInfos infos = new NodeInfos(); + infos.setReportUuids(rootNetworkNodeInfos.stream().map(this::getReportUuids).flatMap(Collection::stream).collect(Collectors.toSet())); + infos.setLoadFlowResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getLoadFlowResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setSecurityAnalysisResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getSecurityAnalysisResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setSensitivityAnalysisResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getSensitivityAnalysisResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setShortCircuitAnalysisResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getShortCircuitAnalysisResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setOneBusShortCircuitAnalysisResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getOneBusShortCircuitAnalysisResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setVoltageInitResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getVoltageInitResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setDynamicSimulationResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getDynamicSimulationResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setDynamicSecurityAnalysisResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getDynamicSecurityAnalysisResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setDynamicMarginCalculationResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getDynamicMarginCalculationResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setStateEstimationResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getStateEstimationResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + infos.setPccMinResultUuids(rootNetworkNodeInfos.stream().map(RootNetworkNodeInfo::getPccMinResultUuid).filter(Objects::nonNull).collect(Collectors.toSet())); + return infos; + } + + public void deleteRootNetworkNodeRemoteInfos(List rootNetworkNodeInfos) { + if (rootNetworkNodeInfos == null || rootNetworkNodeInfos.isEmpty()) { + return; + } + NodeInfos infos = getNodeInfos(rootNetworkNodeInfos); + List> futures = runRemoteDeletions(infos); + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); } @Transactional 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 1e42004d3..8bb586155 100644 --- a/src/main/java/org/gridsuite/study/server/service/StudyService.java +++ b/src/main/java/org/gridsuite/study/server/service/StudyService.java @@ -2345,32 +2345,21 @@ public void deleteNodes(UUID studyUuid, List nodeIds, boolean deleteChildr notificationService.emitElementUpdated(studyUuid, userId); } - // /!\ Do not wait completion and do not throw exception private CompletableFuture deleteInvalidationInfos(InvalidateNodeInfos invalidateNodeInfos) { - return CompletableFuture.allOf( - studyServerExecutionService.runAsync(() -> - networkStoreService.deleteVariants(invalidateNodeInfos.getNetworkUuid(), invalidateNodeInfos.getVariantIds()) - ), - studyServerExecutionService.runAsync(() -> - networkModificationService.deleteIndexedModifications(invalidateNodeInfos.getGroupUuids(), invalidateNodeInfos.getNetworkUuid()) - ), - rootNetworkNodeInfoService.runRemoteDeletions(invalidateNodeInfos) - ); + List> futures = new ArrayList<>(); + futures.add(studyServerExecutionService.runAsync(() -> networkStoreService.deleteVariants(invalidateNodeInfos.getNetworkUuid(), invalidateNodeInfos.getVariantIds()))); + futures.add(studyServerExecutionService.runAsync(() -> networkModificationService.deleteIndexedModifications(invalidateNodeInfos.getGroupUuids(), invalidateNodeInfos.getNetworkUuid()))); + futures.addAll(rootNetworkNodeInfoService.runRemoteDeletions(invalidateNodeInfos.toNodeInfos(invalidateNodeInfos))); + return CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); } private void deleteNodesInfos(DeleteNodeInfos deleteNodeInfos) { - CompletableFuture.allOf( - studyServerExecutionService.runAsync(() -> - deleteNodeInfos.getVariantIds().forEach(networkStoreService::deleteVariants) - ), - studyServerExecutionService.runAsync(() -> - deleteNodeInfos.getModificationGroupUuids().forEach(networkModificationService::deleteModifications) - ), - studyServerExecutionService.runAsync(() -> - deleteNodeInfos.getRemovedNodeUuids().forEach(dynamicSimulationEventService::deleteEventsByNodeId) - ), - rootNetworkNodeInfoService.runRemoteDeletions(deleteNodeInfos) // <--- reused - ); + List> futures = new ArrayList<>(); + futures.add(studyServerExecutionService.runAsync(() -> deleteNodeInfos.getVariantIds().forEach(networkStoreService::deleteVariants))); + futures.add(studyServerExecutionService.runAsync(() -> deleteNodeInfos.getModificationGroupUuids().forEach(networkModificationService::deleteModifications))); + futures.add(studyServerExecutionService.runAsync(() -> deleteNodeInfos.getRemovedNodeUuids().forEach(dynamicSimulationEventService::deleteEventsByNodeId))); + futures.addAll(rootNetworkNodeInfoService.runRemoteDeletions(deleteNodeInfos)); + CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); } @Transactional diff --git a/src/test/java/org/gridsuite/study/server/rootnetworks/RootNetworkTest.java b/src/test/java/org/gridsuite/study/server/rootnetworks/RootNetworkTest.java index 243d9bb2e..b0b2674d7 100644 --- a/src/test/java/org/gridsuite/study/server/rootnetworks/RootNetworkTest.java +++ b/src/test/java/org/gridsuite/study/server/rootnetworks/RootNetworkTest.java @@ -62,8 +62,7 @@ import static org.gridsuite.study.server.StudyConstants.*; import static org.gridsuite.study.server.utils.TestUtils.createModificationNodeInfo; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.springframework.http.MediaType.APPLICATION_JSON; @@ -550,7 +549,7 @@ void testDeleteRootNetwork() throws Exception { verify(dynamicSecurityAnalysisService, times(1)).deleteResults(List.of(DYNAMIC_SECURITY_ANALYSIS_RESULT_UUID)); verify(dynamicMarginCalculationService, times(1)).deleteResults(List.of(DYNAMIC_MARGIN_CALCULATION_RESULT_UUID)); // check LOADFLOW_RESULT_UUID2 is also deleted - verify(loadFlowService, times(1)).deleteLoadFlowResults(List.of(LOADFLOW_RESULT_UUID, LOADFLOW_RESULT_UUID2)); + verify(loadFlowService, times(1)).deleteLoadFlowResults(argThat(list -> new HashSet<>(list).equals(Set.of(LOADFLOW_RESULT_UUID, LOADFLOW_RESULT_UUID2)))); verify(securityAnalysisService, times(1)).deleteSecurityAnalysisResults(List.of(SECURITY_ANALYSIS_RESULT_UUID)); verify(shortCircuitService, times(1)).deleteShortCircuitAnalysisResults(List.of(SHORT_CIRCUIT_ANALYSIS_RESULT_UUID)); verify(shortCircuitService, times(1)).deleteShortCircuitAnalysisResults(List.of(ONE_BUS_SHORT_CIRCUIT_ANALYSIS_RESULT_UUID));