@@ -864,20 +864,23 @@ public String getAllMapData(UUID nodeUuid, UUID rootNetworkUuid, List<String> su
864
864
}
865
865
866
866
@ Transactional
867
- public UUID rerunLoadflow (UUID studyUuid , UUID nodeUuid , UUID rootNetworkUuid , UUID loadflowResultUuid , Boolean withRatioTapChangers , String userId ) {
868
- invalidateNodeTree (studyUuid , nodeUuid , rootNetworkUuid , InvalidateNodeTreeParameters .builder ()
869
- .invalidationMode (InvalidationMode .ALL )
870
- .withBlockedNodeBuild (true )
871
- .computationsInvalidationMode (ComputationsInvalidationMode .PRESERVE_LOAD_FLOW_RESULTS )
872
- .build ());
873
-
874
- buildNode (studyUuid , nodeUuid , rootNetworkUuid , userId , RerunLoadFlowInfos .builder ()
875
- .loadflowResultUuid (loadflowResultUuid )
876
- .withRatioTapChangers (withRatioTapChangers )
877
- .userId (userId )
878
- .build ());
867
+ public void rerunLoadflow (UUID studyUuid , UUID nodeUuid , UUID rootNetworkUuid , UUID loadflowResultUuid , Boolean withRatioTapChangers , String userId ) {
868
+ boolean isSecurityNode = networkModificationTreeService .isSecurityNode (nodeUuid );
869
+ if (isSecurityNode ) {
870
+ invalidateNodeTree (studyUuid , nodeUuid , rootNetworkUuid , InvalidateNodeTreeParameters .builder ()
871
+ .invalidationMode (InvalidationMode .ALL )
872
+ .withBlockedNodeBuild (true )
873
+ .computationsInvalidationMode (ComputationsInvalidationMode .PRESERVE_LOAD_FLOW_RESULTS )
874
+ .build ());
879
875
880
- return loadflowResultUuid ;
876
+ buildNode (studyUuid , nodeUuid , rootNetworkUuid , userId , RerunLoadFlowInfos .builder ()
877
+ .loadflowResultUuid (loadflowResultUuid )
878
+ .withRatioTapChangers (withRatioTapChangers )
879
+ .userId (userId )
880
+ .build ());
881
+ } else {
882
+ handleLoadflowRequest (studyUuid , nodeUuid , rootNetworkUuid , loadflowResultUuid , withRatioTapChangers , userId );
883
+ }
881
884
}
882
885
883
886
@ Transactional
@@ -897,7 +900,7 @@ public void deleteLoadflowResult(UUID studyUuid, UUID nodeUuid, UUID rootNetwork
897
900
}
898
901
899
902
@ Transactional
900
- public UUID sendLoadflowRequest (UUID studyUuid , UUID nodeUuid , UUID rootNetworkUuid , UUID loadflowResultUuid , boolean withRatioTapChangers , boolean invalidateNodeTree , String userId ) {
903
+ public void sendLoadflowRequest (UUID studyUuid , UUID nodeUuid , UUID rootNetworkUuid , UUID loadflowResultUuid , boolean withRatioTapChangers , boolean invalidateNodeTree , String userId ) {
901
904
if (invalidateNodeTree ) {
902
905
invalidateNodeTree (studyUuid , nodeUuid , rootNetworkUuid , InvalidateNodeTreeParameters .builder ()
903
906
.invalidationMode (InvalidationMode .ONLY_CHILDREN_BUILD_STATUS )
@@ -906,19 +909,22 @@ public UUID sendLoadflowRequest(UUID studyUuid, UUID nodeUuid, UUID rootNetworkU
906
909
.build ());
907
910
}
908
911
912
+ handleLoadflowRequest (studyUuid , nodeUuid , rootNetworkUuid , loadflowResultUuid , withRatioTapChangers , userId );
913
+ }
914
+
915
+ private void handleLoadflowRequest (UUID studyUuid , UUID nodeUuid , UUID rootNetworkUuid , UUID loadflowResultUuid , boolean withRatioTapChangers , String userId ) {
909
916
StudyEntity studyEntity = studyRepository .findById (studyUuid ).orElseThrow (() -> new StudyException (STUDY_NOT_FOUND ));
910
917
UUID lfParametersUuid = loadflowService .getLoadFlowParametersOrDefaultsUuid (studyEntity );
911
918
UUID lfReportUuid = networkModificationTreeService .getComputationReports (nodeUuid , rootNetworkUuid ).getOrDefault (LOAD_FLOW .name (), UUID .randomUUID ());
912
919
UUID networkUuid = rootNetworkService .getNetworkUuid (rootNetworkUuid );
913
920
String variantId = networkModificationTreeService .getVariantId (nodeUuid , rootNetworkUuid );
914
921
922
+ boolean isSecurityNode = networkModificationTreeService .isSecurityNode (nodeUuid );
915
923
networkModificationTreeService .updateComputationReportUuid (nodeUuid , rootNetworkUuid , LOAD_FLOW , lfReportUuid );
916
- UUID result = loadflowService .runLoadFlow (new NodeReceiver (nodeUuid , rootNetworkUuid ), loadflowResultUuid , new VariantInfos (networkUuid , variantId ), lfParametersUuid , withRatioTapChangers , lfReportUuid , userId );
924
+ UUID result = loadflowService .runLoadFlow (new NodeReceiver (nodeUuid , rootNetworkUuid ), loadflowResultUuid , new VariantInfos (networkUuid , variantId ), new LoadFlowService . ParametersInfos ( lfParametersUuid , withRatioTapChangers , isSecurityNode ) , lfReportUuid , userId );
917
925
rootNetworkNodeInfoService .updateLoadflowResultUuid (nodeUuid , rootNetworkUuid , result , withRatioTapChangers );
918
926
919
- notificationService .emitStudyChanged (studyEntity .getId (), nodeUuid , rootNetworkUuid , LOAD_FLOW .getUpdateStatusType ());
920
-
921
- return result ;
927
+ notificationService .emitStudyChanged (studyUuid , nodeUuid , rootNetworkUuid , LOAD_FLOW .getUpdateStatusType ());
922
928
}
923
929
924
930
public void exportNetwork (UUID nodeUuid , UUID rootNetworkUuid , String format , String parametersJson , String fileName , HttpServletResponse exportNetworkResponse ) {
@@ -1746,9 +1752,14 @@ public void assertCanBuildNode(@NonNull UUID studyUuid, @NonNull UUID rootNetwor
1746
1752
1747
1753
@ Transactional
1748
1754
public void unbuildStudyNode (@ NonNull UUID studyUuid , @ NonNull UUID nodeUuid , @ NonNull UUID rootNetworkUuid ) {
1749
- // if loadflow was run on this node, all children node might have been impacted with loadflow modifications
1755
+ if (networkModificationTreeService .getNodeBuildStatus (nodeUuid , rootNetworkUuid ).isNotBuilt ()) {
1756
+ return ;
1757
+ }
1758
+
1759
+ // if loadflow was run on a security node, all children node might have been impacted with loadflow modifications
1750
1760
// we need to invalidate them all
1751
- if (rootNetworkNodeInfoService .isLoadflowDone (nodeUuid , rootNetworkUuid )) {
1761
+ boolean invalidateAll = networkModificationTreeService .isSecurityNode (nodeUuid ) && rootNetworkNodeInfoService .isLoadflowDone (nodeUuid , rootNetworkUuid );
1762
+ if (invalidateAll ) {
1752
1763
invalidateNodeTree (studyUuid , nodeUuid );
1753
1764
} else {
1754
1765
invalidateNode (studyUuid , nodeUuid , rootNetworkUuid );
@@ -1917,11 +1928,11 @@ private void invalidateNodeTreeWithLF(UUID studyUuid, UUID nodeUuid, Computation
1917
1928
}
1918
1929
1919
1930
private void invalidateNodeTreeWithLF (UUID studyUuid , UUID nodeUuid , UUID rootNetworkUuid , ComputationsInvalidationMode computationsInvalidationMode ) {
1920
- boolean isLFDone = rootNetworkNodeInfoService .isLoadflowDone (nodeUuid , rootNetworkUuid );
1931
+ boolean invalidateAll = networkModificationTreeService . isSecurityNode ( nodeUuid ) && rootNetworkNodeInfoService .isLoadflowDone (nodeUuid , rootNetworkUuid );
1921
1932
InvalidateNodeTreeParameters invalidateNodeTreeParameters = InvalidateNodeTreeParameters .builder ()
1922
- .invalidationMode (isLFDone ? InvalidationMode .ALL : InvalidationMode .ONLY_CHILDREN_BUILD_STATUS )
1933
+ .invalidationMode (invalidateAll ? InvalidationMode .ALL : InvalidationMode .ONLY_CHILDREN_BUILD_STATUS )
1923
1934
.withBlockedNodeBuild (true )
1924
- .computationsInvalidationMode (isLFDone ? ComputationsInvalidationMode .ALL : computationsInvalidationMode )
1935
+ .computationsInvalidationMode (invalidateAll ? ComputationsInvalidationMode .ALL : computationsInvalidationMode )
1925
1936
.build ();
1926
1937
invalidateNodeTree (studyUuid , nodeUuid , rootNetworkUuid , invalidateNodeTreeParameters );
1927
1938
}
0 commit comments