@@ -788,7 +788,7 @@ public void invalidateBuild(UUID nodeUuid, UUID rootNetworkUuid, boolean invalid
788
788
changedNodes .add (nodeUuid );
789
789
UUID studyId = self .getStudyUuidForNodeId (nodeUuid );
790
790
nodesRepository .findById (nodeUuid ).ifPresent (nodeEntity -> {
791
- fillIndexedModificationsInfosToInvalidate (invalidateNodeInfos , nodeUuid , rootNetworkUuid , invalidateOnlyChildrenBuildStatus );
791
+ fillIndexedNodeInfosToInvalidate (invalidateNodeInfos , nodeUuid , rootNetworkUuid , invalidateOnlyChildrenBuildStatus );
792
792
if (rootNetworkService .exists (rootNetworkUuid )) {
793
793
if (nodeEntity .getType ().equals (NodeType .NETWORK_MODIFICATION )) {
794
794
rootNetworkNodeInfoService .invalidateRootNetworkNodeInfoProper (nodeUuid , rootNetworkUuid , invalidateNodeInfos , invalidateOnlyChildrenBuildStatus , changedNodes , deleteVoltageInitResults );
@@ -800,7 +800,7 @@ public void invalidateBuild(UUID nodeUuid, UUID rootNetworkUuid, boolean invalid
800
800
notificationService .emitNodeBuildStatusUpdated (studyId , changedNodes .stream ().distinct ().collect (Collectors .toList ()), rootNetworkUuid );
801
801
}
802
802
803
- private void fillIndexedModificationsInfosToInvalidate (InvalidateNodeInfos invalidateNodeInfos , UUID nodeUuid , UUID rootNetworkUuid , boolean invalidateOnlyChildrenBuildStatus ) {
803
+ private void fillIndexedNodeInfosToInvalidate (InvalidateNodeInfos invalidateNodeInfos , UUID nodeUuid , UUID rootNetworkUuid , boolean invalidateOnlyChildrenBuildStatus ) {
804
804
// when invalidating node
805
805
// we need to invalidate indexed modifications up to it's last built parent, not included
806
806
boolean isNodeBuilt = self .getNodeBuildStatus (nodeUuid , rootNetworkUuid ).isBuilt ();
@@ -809,10 +809,10 @@ private void fillIndexedModificationsInfosToInvalidate(InvalidateNodeInfos inval
809
809
}
810
810
811
811
if (isNodeBuilt && invalidateOnlyChildrenBuildStatus ) {
812
- fillIndexedModificationsInfosToInvalidate (nodeUuid , false , invalidateNodeInfos );
812
+ fillIndexedNodeInfosToInvalidate (nodeUuid , false , invalidateNodeInfos );
813
813
} else {
814
814
NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications (nodeUuid , rootNetworkUuid );
815
- fillIndexedModificationsInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
815
+ fillIndexedNodeInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
816
816
}
817
817
}
818
818
@@ -823,13 +823,33 @@ public InvalidateNodeInfos unbuildNode(UUID nodeUuid, UUID rootNetworkUuid) {
823
823
824
824
InvalidateNodeInfos invalidateNodeInfos = rootNetworkNodeInfoService .unbuildRootNetworkNode (nodeUuid , rootNetworkUuid );
825
825
826
- fillIndexedModificationsInfosToInvalidate (nodeEntity , rootNetworkUuid , invalidateNodeInfos );
826
+ fillIndexedNodeInfosToInvalidate (nodeEntity , rootNetworkUuid , invalidateNodeInfos );
827
827
828
828
notificationService .emitNodeBuildStatusUpdated (nodeEntity .getStudy ().getId (), List .of (nodeUuid ), rootNetworkUuid );
829
829
830
830
return invalidateNodeInfos ;
831
831
}
832
832
833
+ @ Transactional
834
+ // old name: invalidateBuild
835
+ public InvalidateNodeInfos unbuildNodeTree (UUID nodeUuid , UUID rootNetworkUuid ) {
836
+ NodeEntity nodeEntity = getNodeEntity (nodeUuid );
837
+
838
+ InvalidateNodeInfos invalidateNodeInfos = new InvalidateNodeInfos ();
839
+
840
+ // First node
841
+ if (nodeEntity .getType ().equals (NodeType .NETWORK_MODIFICATION )) {
842
+ invalidateNodeInfos = rootNetworkNodeInfoService .unbuildRootNetworkNode (nodeUuid , rootNetworkUuid );
843
+ fillIndexedNodeTreeInfosToInvalidate (nodeEntity , rootNetworkUuid , invalidateNodeInfos );
844
+ }
845
+
846
+ invalidateNodeInfos .add (unbuildChildrenNodes (nodeUuid , rootNetworkUuid ));
847
+
848
+ notificationService .emitNodeBuildStatusUpdated (nodeEntity .getStudy ().getId (), invalidateNodeInfos .getNodeUuids ().stream ().distinct ().collect (Collectors .toList ()), rootNetworkUuid );
849
+
850
+ return invalidateNodeInfos ;
851
+ }
852
+
833
853
@ Transactional
834
854
// method used when moving a node to invalidate it without impacting other nodes
835
855
public void invalidateBuildOfNodeOnly (UUID nodeUuid , UUID rootNetworkUuid , boolean invalidateOnlyChildrenBuildStatus , InvalidateNodeInfos invalidateNodeInfos , boolean deleteVoltageInitResults ) {
@@ -849,7 +869,7 @@ public void invalidateBuildOfNodeOnly(UUID nodeUuid, UUID rootNetworkUuid, boole
849
869
if (!hasAnyBuiltChildren (getNodeEntity (nodeUuid ), rootNetworkUuid )) {
850
870
// when invalidating nodes, we need to get last built parent to invalidate all its children modifications in elasticsearch
851
871
NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications (nodeUuid , rootNetworkUuid );
852
- fillIndexedModificationsInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
872
+ fillIndexedNodeInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
853
873
}
854
874
855
875
notificationService .emitNodeBuildStatusUpdated (studyId , changedNodes .stream ().distinct ().collect (Collectors .toList ()), rootNetworkUuid );
@@ -904,16 +924,48 @@ && hasAnyBuiltChildren(child, rootNetworkUuid, checkedChildren)) {
904
924
return false ;
905
925
}
906
926
907
- private void fillIndexedModificationsInfosToInvalidate (NodeEntity nodeEntity , UUID rootNetworkUuid , InvalidateNodeInfos invalidateNodeInfos ) {
927
+ private void fillIndexedNodeInfosToInvalidate (NodeEntity nodeEntity , UUID rootNetworkUuid , InvalidateNodeInfos invalidateNodeInfos ) {
908
928
// when manually invalidating a single node, if this node does not have any built children
909
929
// we need to invalidate indexed modifications up to it's last built parent, not included
910
- if (!hasAnyBuiltChildren (nodeEntity , rootNetworkUuid )) {
911
- // when invalidating nodes, we need to get last built parent to invalidate all its children modifications in elasticsearch
930
+ if (hasAnyBuiltChildren (nodeEntity , rootNetworkUuid )) {
931
+ return ;
932
+ }
933
+
934
+ // when invalidating nodes, we need to get last built parent to invalidate all its children modifications in elasticsearch
935
+ NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications (nodeEntity .getIdNode (), rootNetworkUuid );
936
+ fillIndexedNodeInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
937
+ }
938
+
939
+ // OldName: fillIndexedModificationsInfosToInvalidate
940
+ // For subTree
941
+ private void fillIndexedNodeTreeInfosToInvalidate (NodeEntity nodeEntity , UUID rootNetworkUuid , InvalidateNodeInfos invalidateNodeInfos ) {
942
+ // when invalidating node
943
+ // we need to invalidate indexed modifications up to it's last built parent, not included
944
+ boolean isNodeBuilt = self .getNodeBuildStatus (nodeEntity .getIdNode (), rootNetworkUuid ).isBuilt ();
945
+ if (!isNodeBuilt && !hasAnyBuiltChildren (getNodeEntity (nodeEntity .getIdNode ()), rootNetworkUuid )) {
946
+ return ;
947
+ }
948
+
949
+ // TODO check invalidateOnlyChildrenBuildStatus
950
+ if (isNodeBuilt ) {
951
+ fillIndexedNodeInfosToInvalidate (nodeEntity .getIdNode (), false , invalidateNodeInfos );
952
+ } else {
912
953
NodeEntity closestNodeWithParentHavingBuiltDescendent = getSubTreeToInvalidateIndexedModifications (nodeEntity .getIdNode (), rootNetworkUuid );
913
- fillIndexedModificationsInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
954
+ fillIndexedNodeInfosToInvalidate (closestNodeWithParentHavingBuiltDescendent .getIdNode (), true , invalidateNodeInfos );
914
955
}
915
956
}
916
957
958
+ // OldName: invalidateChildrenBuildStatus
959
+ private InvalidateNodeInfos unbuildChildrenNodes (UUID nodeUuid , UUID rootNetworkUuid ) {
960
+ InvalidateNodeInfos invalidateNodeInfos = new InvalidateNodeInfos ();
961
+ nodesRepository .findAllByParentNodeIdNode (nodeUuid )
962
+ .forEach (child -> {
963
+ invalidateNodeInfos .add (rootNetworkNodeInfoService .unbuildRootNetworkNode (child .getIdNode (), rootNetworkUuid ));
964
+ invalidateNodeInfos .add (unbuildChildrenNodes (child .getIdNode (), rootNetworkUuid ));
965
+ });
966
+ return invalidateNodeInfos ;
967
+ }
968
+
917
969
private void invalidateChildrenBuildStatus (UUID nodeUuid , UUID rootNetworkUuid , List <UUID > changedNodes , InvalidateNodeInfos invalidateNodeInfos ,
918
970
boolean deleteVoltageInitResults ) {
919
971
nodesRepository .findAllByParentNodeIdNode (nodeUuid )
@@ -1053,7 +1105,7 @@ public long countBuiltNodes(UUID studyUuid, UUID rootNetworkUuid) {
1053
1105
return nodes .stream ().filter (n -> self .getNodeBuildStatus (n .getIdNode (), rootNetworkUuid ).isBuilt ()).count ();
1054
1106
}
1055
1107
1056
- private void fillIndexedModificationsInfosToInvalidate (UUID parentNodeUuid , boolean includeParentNode , InvalidateNodeInfos invalidateNodeInfos ) {
1108
+ private void fillIndexedNodeInfosToInvalidate (UUID parentNodeUuid , boolean includeParentNode , InvalidateNodeInfos invalidateNodeInfos ) {
1057
1109
List <UUID > nodesToInvalidate = new ArrayList <>();
1058
1110
if (includeParentNode ) {
1059
1111
nodesToInvalidate .add (parentNodeUuid );
0 commit comments