Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -713,8 +713,9 @@ private void handleInsertCompositeNetworkModifications(UUID targetStudyUuid, UUI
studyService.invalidateNodeTreeWithLF(targetStudyUuid, targetNodeUuid);
try {
studyService.insertCompositeNetworkModifications(targetStudyUuid, targetNodeUuid, modificationsToCopy, userId, action);
} finally {
} catch (Exception e) {
studyService.unblockNodeTree(targetStudyUuid, targetNodeUuid);
throw e;
}
}

Expand All @@ -723,8 +724,9 @@ private void handleDuplicateNetworkModifications(UUID targetStudyUuid, UUID targ
studyService.invalidateNodeTreeWithLF(targetStudyUuid, targetNodeUuid);
try {
studyService.duplicateNetworkModifications(targetStudyUuid, targetNodeUuid, originNodeUuid, modificationsToCopyUuidList, userId);
} finally {
} catch (Exception e) {
studyService.unblockNodeTree(targetStudyUuid, targetNodeUuid);
throw e;
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* 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.modification;

import java.util.List;
import java.util.UUID;

/**
* @author Ayoub LABIDI <ayoub.labidi_externe at rte-france.com>
*/
public record ModificationReceiver(
UUID studyUuid,
UUID nodeUuid,
UUID originNodeUuid,
List<UUID> rootNetworkUuids
) { }
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
import org.gridsuite.study.server.dto.*;
import org.gridsuite.study.server.dto.caseimport.CaseImportAction;
import org.gridsuite.study.server.dto.caseimport.CaseImportReceiver;
import org.gridsuite.study.server.dto.modification.ModificationReceiver;
import org.gridsuite.study.server.dto.modification.NetworkModificationResult;
import org.gridsuite.study.server.dto.modification.NetworkModificationsResult;
import org.gridsuite.study.server.dto.networkexport.ExportNetworkStatus;
import org.gridsuite.study.server.dto.networkexport.NetworkExportReceiver;
import org.gridsuite.study.server.dto.networkexport.NodeExportInfos;
Expand Down Expand Up @@ -213,6 +215,39 @@ private void handleBuildCanceledOrFailedWorkflow(UUID studyUuid, UUID nodeUuid,
}
}

@Bean
public Consumer<Message<NetworkModificationsResult>> consumeApplicationResult() {
return message -> {
String receiver = message.getHeaders().get(HEADER_RECEIVER, String.class);
if (receiver != null) {
try {
ModificationReceiver receiverObj = objectMapper.readValue(
URLDecoder.decode(receiver, StandardCharsets.UTF_8), ModificationReceiver.class);
studyService.handleApplicationResult(receiverObj, message.getPayload());
} catch (Exception e) {
LOGGER.error(e.toString());
}
Comment thread
ayolab marked this conversation as resolved.
}
};
}

@Bean
public Consumer<Message<String>> consumeApplicationFailed() {
return message -> {
String receiver = message.getHeaders().get(HEADER_RECEIVER, String.class);
if (receiver != null) {
try {
ModificationReceiver receiverObj = objectMapper.readValue(
URLDecoder.decode(receiver, StandardCharsets.UTF_8), ModificationReceiver.class);
LOGGER.warn("Modification application failed for node '{}'", receiverObj.nodeUuid());
studyService.handleApplicationFailed(receiverObj);
} catch (Exception e) {
LOGGER.error(e.toString());
}
}
};
}

@Bean
public Consumer<Message<String>> consumeCaseImportSucceeded() {
return message -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
import org.gridsuite.study.server.dto.BuildInfos;
import org.gridsuite.study.server.dto.NodeReceiver;
import org.gridsuite.study.server.dto.modification.ModificationApplicationContext;
import org.gridsuite.study.server.dto.modification.ModificationReceiver;
import org.gridsuite.study.server.dto.modification.NetworkModificationMetadata;
import org.gridsuite.study.server.dto.modification.NetworkModificationsResult;
import org.gridsuite.study.server.dto.workflow.AbstractWorkflowInfos;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
Expand Down Expand Up @@ -134,13 +134,16 @@ public void deleteModifications(UUID groupUuid, List<UUID> modificationsUuids) {
restTemplate.delete(path);
}

public NetworkModificationsResult createModification(UUID groupUuid,
Pair<String, List<ModificationApplicationContext>> modificationContextInfos) {
public List<UUID> createModification(UUID groupUuid, ModificationReceiver receiver,
Pair<String, List<ModificationApplicationContext>> modificationContextInfos) {
Objects.requireNonNull(modificationContextInfos);

var uriComponentsBuilder = UriComponentsBuilder
.fromUriString(getNetworkModificationServerURI(false) + NETWORK_MODIFICATIONS_PATH)
.queryParam(GROUP_UUID, groupUuid);
if (receiver != null) {
uriComponentsBuilder.queryParam(QUERY_PARAM_RECEIVER, buildModificationReceiver(receiver));
}

var path = uriComponentsBuilder
.buildAndExpand()
Expand All @@ -150,7 +153,7 @@ public NetworkModificationsResult createModification(UUID groupUuid,
headers.setContentType(MediaType.APPLICATION_JSON);

HttpEntity<String> httpEntity = new HttpEntity<>(getModificationContextJsonString(objectMapper, modificationContextInfos), headers);
return restTemplate.exchange(path, HttpMethod.POST, httpEntity, NetworkModificationsResult.class).getBody();
return restTemplate.exchange(path, HttpMethod.POST, httpEntity, new ParameterizedTypeReference<List<UUID>>() { }).getBody();
}

public void updateModification(String createEquipmentAttributes, UUID modificationUuid) {
Expand Down Expand Up @@ -257,14 +260,18 @@ public void stopBuild(@NonNull UUID nodeUuid, @NonNull UUID rootNetworkUuid) {
restTemplate.put(getNetworkModificationServerURI(false) + path, null);
}

public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID targetGroupUuid, UUID beforeUuid, Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos, boolean buildTargetNode) {
public List<UUID> moveModifications(UUID originGroupUuid, UUID targetGroupUuid, UUID beforeUuid,
ModificationReceiver receiver,
Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
var path = UriComponentsBuilder.fromPath(GROUP_PATH)
.queryParam(QUERY_PARAM_ACTION, ModificationsActionType.MOVE.name())
.queryParam("originGroupUuid", originGroupUuid)
.queryParam("build", buildTargetNode);
.queryParam("originGroupUuid", originGroupUuid);
if (beforeUuid != null) {
path.queryParam("before", beforeUuid);
}
if (receiver != null) {
path.queryParam(QUERY_PARAM_RECEIVER, buildModificationReceiver(receiver));
}

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
Expand All @@ -274,19 +281,23 @@ public NetworkModificationsResult moveModifications(UUID originGroupUuid, UUID t
getNetworkModificationServerURI(false) + path.buildAndExpand(targetGroupUuid).toUriString(),
HttpMethod.PUT,
httpEntity,
NetworkModificationsResult.class).getBody();
new ParameterizedTypeReference<List<UUID>>() { }).getBody();
}

public NetworkModificationsResult duplicateModifications(UUID groupUuid,
Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
return handleModifications(groupUuid, null, ModificationsActionType.COPY, modificationContextInfos);
public List<UUID> duplicateModifications(UUID groupUuid, ModificationReceiver receiver,
Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
return handleModifications(groupUuid, null, ModificationsActionType.COPY, receiver, modificationContextInfos);
}

public NetworkModificationsResult insertCompositeModifications(UUID groupUuid,
CompositeModificationsActionType action,
Pair<List<Pair<UUID, String>>, List<ModificationApplicationContext>> modificationContextInfos) {
public List<UUID> insertCompositeModifications(UUID groupUuid,
CompositeModificationsActionType action,
ModificationReceiver receiver,
Pair<List<Pair<UUID, String>>, List<ModificationApplicationContext>> modificationContextInfos) {
var path = UriComponentsBuilder.fromPath(COMPOSITE_PATH + GROUP_PATH)
.queryParam(QUERY_PARAM_ACTION, action.name());
if (receiver != null) {
path.queryParam(QUERY_PARAM_RECEIVER, buildModificationReceiver(receiver));
}

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
Expand All @@ -296,18 +307,22 @@ public NetworkModificationsResult insertCompositeModifications(UUID groupUuid,
getNetworkModificationServerURI(false) + path.buildAndExpand(groupUuid).toUriString(),
HttpMethod.PUT,
httpEntity,
NetworkModificationsResult.class
new ParameterizedTypeReference<List<UUID>>() { }
).getBody();
}

private NetworkModificationsResult handleModifications(UUID groupUuid, UUID originGroupUuid, ModificationsActionType action,
Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
private List<UUID> handleModifications(UUID groupUuid, UUID originGroupUuid, ModificationsActionType action,
ModificationReceiver receiver,
Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
var path = UriComponentsBuilder.fromPath(GROUP_PATH)
.queryParam(QUERY_PARAM_ACTION, action.name());

if (originGroupUuid != null) {
path.queryParam("originGroupUuid", originGroupUuid);
}
if (receiver != null) {
path.queryParam(QUERY_PARAM_RECEIVER, buildModificationReceiver(receiver));
}

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
Expand All @@ -317,7 +332,7 @@ private NetworkModificationsResult handleModifications(UUID groupUuid, UUID orig
getNetworkModificationServerURI(false) + path.buildAndExpand(groupUuid).toUriString(),
HttpMethod.PUT,
httpEntity,
NetworkModificationsResult.class
new ParameterizedTypeReference<List<UUID>>() { }
).getBody();
}

Expand All @@ -341,14 +356,19 @@ public Map<UUID, UUID> duplicateModificationsGroup(UUID sourceGroupUuid, UUID gr
).getBody();
}

public NetworkModificationsResult duplicateModificationsFromGroup(UUID groupUuid, UUID originGroupUuid, Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
return handleModifications(groupUuid, originGroupUuid, StudyConstants.ModificationsActionType.COPY, modificationContextInfos);
public List<UUID> duplicateModificationsFromGroup(UUID groupUuid, UUID originGroupUuid, ModificationReceiver receiver,
Pair<List<UUID>, List<ModificationApplicationContext>> modificationContextInfos) {
return handleModifications(groupUuid, originGroupUuid, StudyConstants.ModificationsActionType.COPY, receiver, modificationContextInfos);
}

private String buildReceiver(UUID nodeUuid, UUID rootNetworkUuid) {
return URLEncoder.encode(toJson(new NodeReceiver(nodeUuid, rootNetworkUuid)), StandardCharsets.UTF_8);
}

private String buildModificationReceiver(ModificationReceiver receiver) {
return URLEncoder.encode(toJson(receiver), StandardCharsets.UTF_8);
}

private String toJson(Object object) {
String json;
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,9 @@ private void handleCreateNetworkModification(UUID studyUuid, UUID nodeUuid, Stri
studyService.invalidateNodeTreeWithLF(studyUuid, nodeUuid);
try {
studyService.createNetworkModification(studyUuid, nodeUuid, modificationAttributes, userId);
} finally {
} catch (Exception e) {
studyService.unblockNodeTree(studyUuid, nodeUuid);
throw e;
}
}

Expand Down Expand Up @@ -121,11 +122,12 @@ private void handleMoveNetworkModifications(UUID studyUuid, UUID targetNodeUuid,
boolean isTargetInDifferentNodeTree = studyService.invalidateNodeTreeWhenMoveModifications(studyUuid, targetNodeUuid, originNodeUuid);
try {
studyService.moveNetworkModifications(studyUuid, targetNodeUuid, originNodeUuid, modificationsToCopyUuidList, null, isTargetInDifferentNodeTree, userId);
} finally {
} catch (Exception e) {
studyService.unblockNodeTree(studyUuid, originNodeUuid);
if (isTargetInDifferentNodeTree) {
studyService.unblockNodeTree(studyUuid, targetNodeUuid);
}
throw e;
}
}

Expand Down
Loading
Loading