Skip to content

Commit f15e59b

Browse files
SlimaneAmarSlimane AMAR
andauthored
Use solved values (#813)
Co-authored-by: Slimane AMAR <[email protected]>
1 parent 0aa588c commit f15e59b

File tree

13 files changed

+413
-197
lines changed

13 files changed

+413
-197
lines changed

src/main/java/org/gridsuite/study/server/StudyConstants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ private StudyConstants() {
5353
public static final String QUERY_PARAM_SUBSTATION_ID = "substationId";
5454
public static final String QUERY_PARAM_RESULTS_UUIDS = "resultsUuids";
5555
public static final String QUERY_PARAM_RESULT_UUID = "resultUuid";
56+
public static final String QUERY_PARAM_PARAMETERS_UUID = "parametersUuid";
5657

5758
public static final String GROUP_UUID = "groupUuid";
5859
public static final String REPORT_UUID = "reportUuid";

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,7 @@ public ResponseEntity<Void> runLoadFlow(
703703
if (prevResultUuid != null) {
704704
handleRerunLoadFlow(studyUuid, nodeUuid, rootNetworkUuid, prevResultUuid, withRatioTapChangers, userId);
705705
} else {
706-
studyService.sendLoadflowRequest(studyUuid, nodeUuid, rootNetworkUuid, null, withRatioTapChangers, true, userId);
706+
studyService.sendLoadflowRequest(studyUuid, nodeUuid, rootNetworkUuid, null, withRatioTapChangers, networkModificationTreeService.isSecurityNode(nodeUuid), userId);
707707
}
708708
return ResponseEntity.ok().build();
709709
}
@@ -712,12 +712,12 @@ public ResponseEntity<Void> runLoadFlow(
712712
* Need to have several transactions to send notifications by step
713713
* Disadvantage is that it is not atomic so need a try/catch to rollback
714714
*/
715-
private UUID handleRerunLoadFlow(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, UUID prevResultUuid, Boolean withRatioTapChangers, String userId) {
715+
private void handleRerunLoadFlow(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, UUID prevResultUuid, Boolean withRatioTapChangers, String userId) {
716716
UUID loadflowResultUuid = null;
717717
try {
718718
studyService.deleteLoadflowResult(studyUuid, nodeUuid, rootNetworkUuid, prevResultUuid);
719719
loadflowResultUuid = studyService.createLoadflowRunningStatus(studyUuid, nodeUuid, rootNetworkUuid, withRatioTapChangers);
720-
return studyService.rerunLoadflow(studyUuid, nodeUuid, rootNetworkUuid, loadflowResultUuid, withRatioTapChangers, userId);
720+
studyService.rerunLoadflow(studyUuid, nodeUuid, rootNetworkUuid, loadflowResultUuid, withRatioTapChangers, userId);
721721
} catch (Exception e) {
722722
if (loadflowResultUuid != null) {
723723
studyService.deleteLoadflowResult(studyUuid, nodeUuid, rootNetworkUuid, loadflowResultUuid);

src/main/java/org/gridsuite/study/server/networkmodificationtree/dto/NetworkModificationNode.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,8 @@ public void completeDtoFromRootNetworkNodeInfo(RootNetworkNodeInfoEntity rootNet
8787
public NodeType getType() {
8888
return NodeType.NETWORK_MODIFICATION;
8989
}
90+
91+
public boolean isSecurityNode() {
92+
return nodeType == NetworkModificationNodeType.SECURITY;
93+
}
9094
}

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,21 @@
4242
*/
4343
@Service
4444
public class LoadFlowService extends AbstractComputationService {
45+
private static final String QUERY_PARAM_APPLY_SOLVED_VALUES = "applySolvedValues";
46+
private static final String RESULT_UUID = "resultUuid";
4547

46-
static final String RESULT_UUID = "resultUuid";
4748
private static final String PARAMETERS_URI = "/parameters/{parametersUuid}";
4849
private final ObjectMapper objectMapper;
4950
private final RestTemplate restTemplate;
5051
private String loadFlowServerBaseUri;
5152

53+
public record ParametersInfos(
54+
UUID parametersUuid,
55+
boolean withRatioTapChangers,
56+
boolean applySolvedValues
57+
) {
58+
}
59+
5260
@Autowired
5361
public LoadFlowService(RemoteServicesProperties remoteServicesProperties,
5462
ObjectMapper objectMapper,
@@ -58,7 +66,8 @@ public LoadFlowService(RemoteServicesProperties remoteServicesProperties,
5866
this.restTemplate = restTemplate;
5967
}
6068

61-
public UUID runLoadFlow(NodeReceiver nodeReceiver, UUID loadflowResultUuid, VariantInfos variantInfos, UUID parametersUuid, boolean withRatioTapChangers, UUID reportUuid, String userId) {
69+
public UUID runLoadFlow(NodeReceiver nodeReceiver, UUID loadflowResultUuid,
70+
VariantInfos variantInfos, ParametersInfos parametersInfos, UUID reportUuid, String userId) {
6271
String receiver;
6372
try {
6473
receiver = URLEncoder.encode(objectMapper.writeValueAsString(nodeReceiver), StandardCharsets.UTF_8);
@@ -68,7 +77,8 @@ public UUID runLoadFlow(NodeReceiver nodeReceiver, UUID loadflowResultUuid, Vari
6877

6978
var uriComponentsBuilder = UriComponentsBuilder
7079
.fromPath(DELIMITER + LOADFLOW_API_VERSION + "/networks/{networkUuid}/run-and-save")
71-
.queryParam(QUERY_WITH_TAP_CHANGER, withRatioTapChangers)
80+
.queryParam(QUERY_WITH_TAP_CHANGER, parametersInfos.withRatioTapChangers)
81+
.queryParam(QUERY_PARAM_APPLY_SOLVED_VALUES, parametersInfos.applySolvedValues)
7282
.queryParam(QUERY_PARAM_RECEIVER, receiver)
7383
.queryParam(QUERY_PARAM_REPORT_UUID, reportUuid.toString())
7484
.queryParam(QUERY_PARAM_REPORTER_ID, nodeReceiver.getNodeUuid().toString())
@@ -77,8 +87,8 @@ public UUID runLoadFlow(NodeReceiver nodeReceiver, UUID loadflowResultUuid, Vari
7787
if (loadflowResultUuid != null) {
7888
uriComponentsBuilder.queryParam(QUERY_PARAM_RESULT_UUID, loadflowResultUuid);
7989
}
80-
if (parametersUuid != null) {
81-
uriComponentsBuilder.queryParam("parametersUuid", parametersUuid.toString());
90+
if (parametersInfos.parametersUuid != null) {
91+
uriComponentsBuilder.queryParam(QUERY_PARAM_PARAMETERS_UUID, parametersInfos.parametersUuid.toString());
8292
}
8393
if (!StringUtils.isBlank(variantInfos.getVariantId())) {
8494
uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantInfos.getVariantId());

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,9 @@ private void assertInsertNode(
610610
) {
611611

612612
if (getNodeEntity(parentNodeId).getType() == NodeType.ROOT) {
613+
if (newNodeType == NetworkModificationNodeType.CONSTRUCTION && insertMode == InsertMode.BEFORE) {
614+
throw new StudyException(NOT_ALLOWED);
615+
}
613616
if (newNodeType == NetworkModificationNodeType.SECURITY && insertMode != InsertMode.CHILD) {
614617
throw new StudyException(NOT_ALLOWED);
615618
}
@@ -635,6 +638,10 @@ public boolean isConstructionNode(UUID nodeUuid) {
635638
return getNetworkModificationNodeInfoEntity(nodeUuid).getNodeType() == NetworkModificationNodeType.CONSTRUCTION;
636639
}
637640

641+
public boolean isSecurityNode(UUID nodeUuid) {
642+
return getNetworkModificationNodeInfoEntity(nodeUuid).getNodeType() == NetworkModificationNodeType.SECURITY;
643+
}
644+
638645
public void assertCreateNode(UUID parentNodeId, NetworkModificationNodeType newNodeType, InsertMode insertMode) {
639646
assertInsertNode(parentNodeId, newNodeType, insertMode);
640647
}

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

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -864,20 +864,23 @@ public String getAllMapData(UUID nodeUuid, UUID rootNetworkUuid, List<String> su
864864
}
865865

866866
@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());
879875

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+
}
881884
}
882885

883886
@Transactional
@@ -897,7 +900,7 @@ public void deleteLoadflowResult(UUID studyUuid, UUID nodeUuid, UUID rootNetwork
897900
}
898901

899902
@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) {
901904
if (invalidateNodeTree) {
902905
invalidateNodeTree(studyUuid, nodeUuid, rootNetworkUuid, InvalidateNodeTreeParameters.builder()
903906
.invalidationMode(InvalidationMode.ONLY_CHILDREN_BUILD_STATUS)
@@ -906,19 +909,22 @@ public UUID sendLoadflowRequest(UUID studyUuid, UUID nodeUuid, UUID rootNetworkU
906909
.build());
907910
}
908911

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) {
909916
StudyEntity studyEntity = studyRepository.findById(studyUuid).orElseThrow(() -> new StudyException(STUDY_NOT_FOUND));
910917
UUID lfParametersUuid = loadflowService.getLoadFlowParametersOrDefaultsUuid(studyEntity);
911918
UUID lfReportUuid = networkModificationTreeService.getComputationReports(nodeUuid, rootNetworkUuid).getOrDefault(LOAD_FLOW.name(), UUID.randomUUID());
912919
UUID networkUuid = rootNetworkService.getNetworkUuid(rootNetworkUuid);
913920
String variantId = networkModificationTreeService.getVariantId(nodeUuid, rootNetworkUuid);
914921

922+
boolean isSecurityNode = networkModificationTreeService.isSecurityNode(nodeUuid);
915923
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);
917925
rootNetworkNodeInfoService.updateLoadflowResultUuid(nodeUuid, rootNetworkUuid, result, withRatioTapChangers);
918926

919-
notificationService.emitStudyChanged(studyEntity.getId(), nodeUuid, rootNetworkUuid, LOAD_FLOW.getUpdateStatusType());
920-
921-
return result;
927+
notificationService.emitStudyChanged(studyUuid, nodeUuid, rootNetworkUuid, LOAD_FLOW.getUpdateStatusType());
922928
}
923929

924930
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
17461752

17471753
@Transactional
17481754
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
17501760
// 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) {
17521763
invalidateNodeTree(studyUuid, nodeUuid);
17531764
} else {
17541765
invalidateNode(studyUuid, nodeUuid, rootNetworkUuid);
@@ -1917,11 +1928,11 @@ private void invalidateNodeTreeWithLF(UUID studyUuid, UUID nodeUuid, Computation
19171928
}
19181929

19191930
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);
19211932
InvalidateNodeTreeParameters invalidateNodeTreeParameters = InvalidateNodeTreeParameters.builder()
1922-
.invalidationMode(isLFDone ? InvalidationMode.ALL : InvalidationMode.ONLY_CHILDREN_BUILD_STATUS)
1933+
.invalidationMode(invalidateAll ? InvalidationMode.ALL : InvalidationMode.ONLY_CHILDREN_BUILD_STATUS)
19231934
.withBlockedNodeBuild(true)
1924-
.computationsInvalidationMode(isLFDone ? ComputationsInvalidationMode.ALL : computationsInvalidationMode)
1935+
.computationsInvalidationMode(invalidateAll ? ComputationsInvalidationMode.ALL : computationsInvalidationMode)
19251936
.build();
19261937
invalidateNodeTree(studyUuid, nodeUuid, rootNetworkUuid, invalidateNodeTreeParameters);
19271938
}

0 commit comments

Comments
 (0)