Skip to content

Commit 541958c

Browse files
authored
Refactoring: setUp. (#736)
Signed-off-by: AAJELLAL <[email protected]> Signed-off-by: Slimane AMAR <[email protected]>
1 parent 1c1b14f commit 541958c

14 files changed

+489
-218
lines changed

src/main/java/org/gridsuite/study/server/controller/StudyController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1379,7 +1379,7 @@ public ResponseEntity<Void> deleteNode(@Parameter(description = "study uuid") @P
13791379
@ApiResponse(responseCode = "404", description = "The study or the node not found")})
13801380
public ResponseEntity<Void> stashNode(@Parameter(description = "study uuid") @PathVariable("studyUuid") UUID studyUuid,
13811381
@Parameter(description = "id of child to delete (move to trash)") @PathVariable("id") UUID nodeId,
1382-
@Parameter(description = "stashChildren") @RequestParam(value = "stashChildren", defaultValue = "false") boolean stashChildren,
1382+
@Parameter(description = "to stash a node with its children") @RequestParam(value = "stashChildren", defaultValue = "false") boolean stashChildren,
13831383
@RequestHeader(HEADER_USER_ID) String userId) {
13841384
studyService.stashNode(studyUuid, nodeId, stashChildren, userId);
13851385
return ResponseEntity.ok().build();
@@ -1513,7 +1513,7 @@ public ResponseEntity<Void> buildNode(@Parameter(description = "Study uuid") @Pa
15131513
public ResponseEntity<Void> unbuildNode(@Parameter(description = "Study uuid") @PathVariable("studyUuid") UUID studyUuid,
15141514
@Parameter(description = "rootNetworkUuid") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid,
15151515
@Parameter(description = "nodeUuid") @PathVariable("nodeUuid") UUID nodeUuid) {
1516-
studyService.unbuildNode(studyUuid, nodeUuid, rootNetworkUuid);
1516+
studyService.unbuildStudyNode(studyUuid, nodeUuid, rootNetworkUuid);
15171517
return ResponseEntity.ok().build();
15181518
}
15191519

src/main/java/org/gridsuite/study/server/controller/SupervisionController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public ResponseEntity<Void> reindexStudy(@Parameter(description = "study uuid")
150150
@Operation(summary = "Invalidate node builds for the given study")
151151
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "all built nodes for the given study have been invalidated")})
152152
public ResponseEntity<Void> invalidateAllNodesBuilds(@PathVariable("studyUuid") UUID studyUuid) {
153-
supervisionService.invalidateAllNodesBuilds(studyUuid);
153+
supervisionService.unbuildAllNodes(studyUuid);
154154
return ResponseEntity.ok().build();
155155
}
156156

src/main/java/org/gridsuite/study/server/dto/InvalidateNodeInfos.java

Lines changed: 94 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,42 +10,93 @@
1010
import lombok.NoArgsConstructor;
1111
import lombok.Setter;
1212

13-
import java.util.ArrayList;
13+
import java.util.HashSet;
1414
import java.util.List;
15+
import java.util.Set;
1516
import java.util.UUID;
1617

1718
/**
1819
* @author Nicolas Noir <nicolas.noir at rte-france.com>
1920
*/
20-
2121
@NoArgsConstructor
22-
@Getter
23-
@Setter
2422
public class InvalidateNodeInfos {
23+
@Getter
24+
@Setter
2525
private UUID networkUuid;
2626

27-
private List<UUID> reportUuids = new ArrayList<>();
27+
private Set<UUID> nodeUuids = new HashSet<>();
28+
private Set<UUID> groupUuids = new HashSet<>();
29+
30+
private Set<UUID> reportUuids = new HashSet<>();
31+
private Set<String> variantIds = new HashSet<>();
32+
33+
private Set<UUID> loadFlowResultUuids = new HashSet<>();
34+
private Set<UUID> securityAnalysisResultUuids = new HashSet<>();
35+
private Set<UUID> sensitivityAnalysisResultUuids = new HashSet<>();
36+
private Set<UUID> nonEvacuatedEnergyResultUuids = new HashSet<>();
37+
private Set<UUID> shortCircuitAnalysisResultUuids = new HashSet<>();
38+
private Set<UUID> oneBusShortCircuitAnalysisResultUuids = new HashSet<>();
39+
private Set<UUID> voltageInitResultUuids = new HashSet<>();
40+
private Set<UUID> stateEstimationResultUuids = new HashSet<>();
41+
42+
private Set<UUID> dynamicSimulationResultUuids = new HashSet<>();
43+
private Set<UUID> dynamicSecurityAnalysisResultUuids = new HashSet<>();
44+
45+
public List<UUID> getNodeUuids() {
46+
return nodeUuids.stream().toList();
47+
}
48+
49+
public List<UUID> getGroupUuids() {
50+
return groupUuids.stream().toList();
51+
}
2852

29-
private List<String> variantIds = new ArrayList<>();
53+
public List<UUID> getReportUuids() {
54+
return reportUuids.stream().toList();
55+
}
56+
57+
public List<String> getVariantIds() {
58+
return variantIds.stream().toList();
59+
}
60+
61+
public List<UUID> getLoadFlowResultUuids() {
62+
return loadFlowResultUuids.stream().toList();
63+
}
64+
65+
public List<UUID> getSecurityAnalysisResultUuids() {
66+
return securityAnalysisResultUuids.stream().toList();
67+
}
3068

31-
private List<UUID> loadFlowResultUuids = new ArrayList<>();
69+
public List<UUID> getSensitivityAnalysisResultUuids() {
70+
return sensitivityAnalysisResultUuids.stream().toList();
71+
}
3272

33-
private List<UUID> securityAnalysisResultUuids = new ArrayList<>();
73+
public List<UUID> getNonEvacuatedEnergyResultUuids() {
74+
return nonEvacuatedEnergyResultUuids.stream().toList();
75+
}
3476

35-
private List<UUID> sensitivityAnalysisResultUuids = new ArrayList<>();
36-
private List<UUID> nonEvacuatedEnergyResultUuids = new ArrayList<>();
77+
public List<UUID> getShortCircuitAnalysisResultUuids() {
78+
return shortCircuitAnalysisResultUuids.stream().toList();
79+
}
3780

38-
private List<UUID> shortCircuitAnalysisResultUuids = new ArrayList<>();
39-
private List<UUID> oneBusShortCircuitAnalysisResultUuids = new ArrayList<>();
81+
public List<UUID> getOneBusShortCircuitAnalysisResultUuids() {
82+
return oneBusShortCircuitAnalysisResultUuids.stream().toList();
83+
}
4084

41-
private List<UUID> voltageInitResultUuids = new ArrayList<>();
85+
public List<UUID> getVoltageInitResultUuids() {
86+
return voltageInitResultUuids.stream().toList();
87+
}
4288

43-
private List<UUID> dynamicSimulationResultUuids = new ArrayList<>();
44-
private List<UUID> dynamicSecurityAnalysisResultUuids = new ArrayList<>();
89+
public List<UUID> getStateEstimationResultUuids() {
90+
return stateEstimationResultUuids.stream().toList();
91+
}
4592

46-
private List<UUID> stateEstimationResultUuids = new ArrayList<>();
93+
public List<UUID> getDynamicSimulationResultUuids() {
94+
return dynamicSimulationResultUuids.stream().toList();
95+
}
4796

48-
private List<UUID> groupUuids = new ArrayList<>();
97+
public List<UUID> getDynamicSecurityAnalysisResultUuids() {
98+
return dynamicSecurityAnalysisResultUuids.stream().toList();
99+
}
49100

50101
public void addReportUuid(UUID reportUuid) {
51102
reportUuids.add(reportUuid);
@@ -56,7 +107,7 @@ public void addVariantId(String variantId) {
56107
}
57108

58109
public void addLoadFlowResultUuid(UUID loadFlowResultUuid) {
59-
getLoadFlowResultUuids().add(loadFlowResultUuid);
110+
loadFlowResultUuids.add(loadFlowResultUuid);
60111
}
61112

62113
public void addSecurityAnalysisResultUuid(UUID securityAnalysisResultUuid) {
@@ -95,7 +146,31 @@ public void addStateEstimationResultUuid(UUID stateEstimationResultUuid) {
95146
stateEstimationResultUuids.add(stateEstimationResultUuid);
96147
}
97148

98-
public void addGroupUuid(List<UUID> groupUuids) {
149+
public void addGroupUuids(List<UUID> groupUuids) {
99150
this.groupUuids.addAll(groupUuids);
100151
}
152+
153+
public void addNodeUuid(UUID nodeUuid) {
154+
this.nodeUuids.add(nodeUuid);
155+
}
156+
157+
public void add(InvalidateNodeInfos invalidateNodeInfos) {
158+
nodeUuids.addAll(invalidateNodeInfos.getNodeUuids());
159+
groupUuids.addAll(invalidateNodeInfos.getGroupUuids());
160+
161+
reportUuids.addAll(invalidateNodeInfos.getReportUuids());
162+
variantIds.addAll(invalidateNodeInfos.getVariantIds());
163+
164+
loadFlowResultUuids.addAll(invalidateNodeInfos.getLoadFlowResultUuids());
165+
securityAnalysisResultUuids.addAll(invalidateNodeInfos.getSecurityAnalysisResultUuids());
166+
sensitivityAnalysisResultUuids.addAll(invalidateNodeInfos.getSensitivityAnalysisResultUuids());
167+
nonEvacuatedEnergyResultUuids.addAll(invalidateNodeInfos.getNonEvacuatedEnergyResultUuids());
168+
shortCircuitAnalysisResultUuids.addAll(invalidateNodeInfos.getShortCircuitAnalysisResultUuids());
169+
oneBusShortCircuitAnalysisResultUuids.addAll(invalidateNodeInfos.getOneBusShortCircuitAnalysisResultUuids());
170+
voltageInitResultUuids.addAll(invalidateNodeInfos.getVoltageInitResultUuids());
171+
stateEstimationResultUuids.addAll(invalidateNodeInfos.getStateEstimationResultUuids());
172+
173+
dynamicSimulationResultUuids.addAll(invalidateNodeInfos.getDynamicSimulationResultUuids());
174+
dynamicSecurityAnalysisResultUuids.addAll(invalidateNodeInfos.getDynamicSecurityAnalysisResultUuids());
175+
}
101176
}

src/main/java/org/gridsuite/study/server/notification/NotificationService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ public void emitSubtreeInserted(UUID studyUuid, UUID parentNodeSubtreeInserted,
326326
}
327327

328328
@PostCompletion
329-
public void emitNodeBuildStatusUpdated(UUID studyUuid, Collection<UUID> nodes, UUID rootNetworkUuid) {
329+
public void emitNodeBuildStatusUpdated(UUID studyUuid, List<UUID> nodes, UUID rootNetworkUuid) {
330330
sendStudyUpdateMessage(studyUuid, NODE_BUILD_STATUS_UPDATED, MessageBuilder.withPayload("")
331331
.setHeader(HEADER_NODES, nodes)
332332
.setHeader(HEADER_ROOT_NETWORK_UUID, rootNetworkUuid)

src/main/java/org/gridsuite/study/server/service/NetworkModificationTreeService.java

Lines changed: 84 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,7 @@ public void invalidateBuild(UUID nodeUuid, UUID rootNetworkUuid, boolean invalid
793793
changedNodes.add(nodeUuid);
794794
UUID studyId = self.getStudyUuidForNodeId(nodeUuid);
795795
nodesRepository.findById(nodeUuid).ifPresent(nodeEntity -> {
796-
fillIndexedModificationsInfosToInvalidate(invalidateNodeInfos, nodeUuid, rootNetworkUuid, invalidateOnlyChildrenBuildStatus);
796+
fillIndexedNodeInfosToInvalidate(invalidateNodeInfos, nodeUuid, rootNetworkUuid, invalidateOnlyChildrenBuildStatus);
797797
if (rootNetworkService.exists(rootNetworkUuid)) {
798798
if (nodeEntity.getType().equals(NodeType.NETWORK_MODIFICATION)) {
799799
rootNetworkNodeInfoService.invalidateRootNetworkNodeInfoProper(nodeUuid, rootNetworkUuid, invalidateNodeInfos, invalidateOnlyChildrenBuildStatus, changedNodes, deleteVoltageInitResults);
@@ -802,10 +802,10 @@ public void invalidateBuild(UUID nodeUuid, UUID rootNetworkUuid, boolean invalid
802802
}
803803
});
804804

805-
notificationService.emitNodeBuildStatusUpdated(studyId, changedNodes.stream().distinct().collect(Collectors.toList()), rootNetworkUuid);
805+
notificationService.emitNodeBuildStatusUpdated(studyId, changedNodes.stream().distinct().toList(), rootNetworkUuid);
806806
}
807807

808-
private void fillIndexedModificationsInfosToInvalidate(InvalidateNodeInfos invalidateNodeInfos, UUID nodeUuid, UUID rootNetworkUuid, boolean invalidateOnlyChildrenBuildStatus) {
808+
private void fillIndexedNodeInfosToInvalidate(InvalidateNodeInfos invalidateNodeInfos, UUID nodeUuid, UUID rootNetworkUuid, boolean invalidateOnlyChildrenBuildStatus) {
809809
// when invalidating node
810810
// we need to invalidate indexed modifications up to it's last built parent, not included
811811
boolean isNodeBuilt = self.getNodeBuildStatus(nodeUuid, rootNetworkUuid).isBuilt();
@@ -814,13 +814,47 @@ private void fillIndexedModificationsInfosToInvalidate(InvalidateNodeInfos inval
814814
}
815815

816816
if (isNodeBuilt && invalidateOnlyChildrenBuildStatus) {
817-
fillIndexedModificationsInfosToInvalidate(nodeUuid, false, invalidateNodeInfos);
817+
fillIndexedNodeInfosToInvalidate(nodeUuid, false, invalidateNodeInfos);
818818
} else {
819819
NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications(nodeUuid, rootNetworkUuid);
820-
fillIndexedModificationsInfosToInvalidate(closestNodeWithParentHavingBuiltDescendent.getIdNode(), true, invalidateNodeInfos);
820+
fillIndexedNodeInfosToInvalidate(closestNodeWithParentHavingBuiltDescendent.getIdNode(), true, invalidateNodeInfos);
821821
}
822822
}
823823

824+
@Transactional
825+
public InvalidateNodeInfos invalidateNode(UUID nodeUuid, UUID rootNetworkUuid) {
826+
NodeEntity nodeEntity = getNodeEntity(nodeUuid);
827+
828+
InvalidateNodeInfos invalidateNodeInfos = rootNetworkNodeInfoService.invalidateRootNetworkNode(nodeUuid, rootNetworkUuid, true);
829+
830+
fillIndexedNodeInfosToInvalidate(nodeEntity, rootNetworkUuid, invalidateNodeInfos);
831+
832+
notificationService.emitNodeBuildStatusUpdated(nodeEntity.getStudy().getId(), List.of(nodeUuid), rootNetworkUuid);
833+
834+
return invalidateNodeInfos;
835+
}
836+
837+
@Transactional
838+
public InvalidateNodeInfos invalidateNodeTree(UUID nodeUuid, UUID rootNetworkUuid, boolean invalidateOnlyChildrenBuildStatus) {
839+
NodeEntity nodeEntity = getNodeEntity(nodeUuid);
840+
841+
InvalidateNodeInfos invalidateNodeInfos = new InvalidateNodeInfos();
842+
843+
// First node
844+
if (nodeEntity.getType().equals(NodeType.NETWORK_MODIFICATION)) {
845+
invalidateNodeInfos = rootNetworkNodeInfoService.invalidateRootNetworkNode(nodeUuid, rootNetworkUuid, !invalidateOnlyChildrenBuildStatus);
846+
fillIndexedNodeTreeInfosToInvalidate(nodeEntity, rootNetworkUuid, invalidateNodeInfos);
847+
}
848+
849+
invalidateNodeInfos.add(invalidateChildrenNodes(nodeUuid, rootNetworkUuid));
850+
851+
if (!invalidateNodeInfos.getNodeUuids().isEmpty()) {
852+
notificationService.emitNodeBuildStatusUpdated(nodeEntity.getStudy().getId(), invalidateNodeInfos.getNodeUuids().stream().toList(), rootNetworkUuid);
853+
}
854+
855+
return invalidateNodeInfos;
856+
}
857+
824858
@Transactional
825859
// method used when moving a node to invalidate it without impacting other nodes
826860
public void invalidateBuildOfNodeOnly(UUID nodeUuid, UUID rootNetworkUuid, boolean invalidateOnlyChildrenBuildStatus, InvalidateNodeInfos invalidateNodeInfos, boolean deleteVoltageInitResults) {
@@ -840,10 +874,10 @@ public void invalidateBuildOfNodeOnly(UUID nodeUuid, UUID rootNetworkUuid, boole
840874
if (!hasAnyBuiltChildren(getNodeEntity(nodeUuid), rootNetworkUuid)) {
841875
// when invalidating nodes, we need to get last built parent to invalidate all its children modifications in elasticsearch
842876
NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications(nodeUuid, rootNetworkUuid);
843-
fillIndexedModificationsInfosToInvalidate(closestNodeWithParentHavingBuiltDescendent.getIdNode(), true, invalidateNodeInfos);
877+
fillIndexedNodeInfosToInvalidate(closestNodeWithParentHavingBuiltDescendent.getIdNode(), true, invalidateNodeInfos);
844878
}
845879

846-
notificationService.emitNodeBuildStatusUpdated(studyId, changedNodes.stream().distinct().collect(Collectors.toList()), rootNetworkUuid);
880+
notificationService.emitNodeBuildStatusUpdated(studyId, changedNodes.stream().distinct().toList(), rootNetworkUuid);
847881
}
848882

849883
/**
@@ -895,6 +929,46 @@ && hasAnyBuiltChildren(child, rootNetworkUuid, checkedChildren)) {
895929
return false;
896930
}
897931

932+
private void fillIndexedNodeInfosToInvalidate(NodeEntity nodeEntity, UUID rootNetworkUuid, InvalidateNodeInfos invalidateNodeInfos) {
933+
// when manually invalidating a single node, if this node does not have any built children
934+
// we need to invalidate indexed modifications up to it's last built parent, not included
935+
if (hasAnyBuiltChildren(nodeEntity, rootNetworkUuid)) {
936+
return;
937+
}
938+
939+
// when invalidating nodes, we need to get last built parent to invalidate all its children modifications in elasticsearch
940+
NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications(nodeEntity.getIdNode(), rootNetworkUuid);
941+
fillIndexedNodeInfosToInvalidate(closestNodeWithParentHavingBuiltDescendent.getIdNode(), true, invalidateNodeInfos);
942+
}
943+
944+
// For subTree
945+
private void fillIndexedNodeTreeInfosToInvalidate(NodeEntity nodeEntity, UUID rootNetworkUuid, InvalidateNodeInfos invalidateNodeInfos) {
946+
// when invalidating node
947+
// we need to invalidate indexed modifications up to it's last built parent, not included
948+
boolean isNodeBuilt = self.getNodeBuildStatus(nodeEntity.getIdNode(), rootNetworkUuid).isBuilt();
949+
if (!isNodeBuilt && !hasAnyBuiltChildren(getNodeEntity(nodeEntity.getIdNode()), rootNetworkUuid)) {
950+
return;
951+
}
952+
953+
// TODO check invalidateOnlyChildrenBuildStatus
954+
if (isNodeBuilt) {
955+
fillIndexedNodeInfosToInvalidate(nodeEntity.getIdNode(), false, invalidateNodeInfos);
956+
} else {
957+
NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications(nodeEntity.getIdNode(), rootNetworkUuid);
958+
fillIndexedNodeInfosToInvalidate(closestNodeWithParentHavingBuiltDescendent.getIdNode(), true, invalidateNodeInfos);
959+
}
960+
}
961+
962+
private InvalidateNodeInfos invalidateChildrenNodes(UUID nodeUuid, UUID rootNetworkUuid) {
963+
InvalidateNodeInfos invalidateNodeInfos = new InvalidateNodeInfos();
964+
nodesRepository.findAllByParentNodeIdNode(nodeUuid)
965+
.forEach(child -> {
966+
invalidateNodeInfos.add(rootNetworkNodeInfoService.invalidateRootNetworkNode(child.getIdNode(), rootNetworkUuid, true));
967+
invalidateNodeInfos.add(invalidateChildrenNodes(child.getIdNode(), rootNetworkUuid));
968+
});
969+
return invalidateNodeInfos;
970+
}
971+
898972
private void invalidateChildrenBuildStatus(UUID nodeUuid, UUID rootNetworkUuid, List<UUID> changedNodes, InvalidateNodeInfos invalidateNodeInfos,
899973
boolean deleteVoltageInitResults) {
900974
nodesRepository.findAllByParentNodeIdNode(nodeUuid)
@@ -906,7 +980,6 @@ private void invalidateChildrenBuildStatus(UUID nodeUuid, UUID rootNetworkUuid,
906980

907981
@Transactional
908982
public void updateNodeBuildStatus(UUID nodeUuid, UUID rootNetworkUuid, NodeBuildStatus nodeBuildStatus) {
909-
List<UUID> changedNodes = new ArrayList<>();
910983
UUID studyId = self.getStudyUuidForNodeId(nodeUuid);
911984
RootNetworkNodeInfoEntity rootNetworkNodeInfoEntity = rootNetworkNodeInfoService.getRootNetworkNodeInfo(nodeUuid, rootNetworkUuid).orElseThrow(() -> new StudyException(ROOT_NETWORK_NOT_FOUND));
912985
NodeEntity nodeEntity = getNodeEntity(nodeUuid);
@@ -932,8 +1005,7 @@ public void updateNodeBuildStatus(UUID nodeUuid, UUID rootNetworkUuid, NodeBuild
9321005
}
9331006

9341007
rootNetworkNodeInfoEntity.setNodeBuildStatus(newNodeStatus);
935-
changedNodes.add(nodeUuid);
936-
notificationService.emitNodeBuildStatusUpdated(studyId, changedNodes, rootNetworkUuid);
1008+
notificationService.emitNodeBuildStatusUpdated(studyId, List.of(nodeUuid), rootNetworkUuid);
9371009
}
9381010

9391011
@Transactional(readOnly = true)
@@ -1034,13 +1106,13 @@ public long countBuiltNodes(UUID studyUuid, UUID rootNetworkUuid) {
10341106
return nodes.stream().filter(n -> self.getNodeBuildStatus(n.getIdNode(), rootNetworkUuid).isBuilt()).count();
10351107
}
10361108

1037-
private void fillIndexedModificationsInfosToInvalidate(UUID parentNodeUuid, boolean includeParentNode, InvalidateNodeInfos invalidateNodeInfos) {
1109+
private void fillIndexedNodeInfosToInvalidate(UUID parentNodeUuid, boolean includeParentNode, InvalidateNodeInfos invalidateNodeInfos) {
10381110
List<UUID> nodesToInvalidate = new ArrayList<>();
10391111
if (includeParentNode) {
10401112
nodesToInvalidate.add(parentNodeUuid);
10411113
}
10421114
nodesToInvalidate.addAll(getChildren(parentNodeUuid));
1043-
invalidateNodeInfos.addGroupUuid(
1115+
invalidateNodeInfos.addGroupUuids(
10441116
networkModificationNodeInfoRepository.findAllById(nodesToInvalidate).stream()
10451117
.map(NetworkModificationNodeInfoEntity::getModificationGroupUuid).toList()
10461118
);

0 commit comments

Comments
 (0)