diff --git a/src/main/java/org/gridsuite/study/server/service/SupervisionService.java b/src/main/java/org/gridsuite/study/server/service/SupervisionService.java index b0434d0f3..b187982bf 100644 --- a/src/main/java/org/gridsuite/study/server/service/SupervisionService.java +++ b/src/main/java/org/gridsuite/study/server/service/SupervisionService.java @@ -456,7 +456,8 @@ public void deleteAllStashedElements(UUID studyId) { List notStashedModificationGroupUuids = networkModificationNodeInfos.stream() .map(NetworkModificationNodeInfoEntity::getModificationGroupUuid) .toList(); - networkModificationService.deleteStashedModificationsFromGroups(notStashedModificationGroupUuids, SUPERVISION_USER); + // the links of the remaining reference modifications to their shared modifications are kept + networkModificationService.deleteStashedModificationsFromGroups(notStashedModificationGroupUuids, false, SUPERVISION_USER); // remove stashed nodes and their modifications studyService.deleteNodes(studyId, stashedNodes.stream().map(NodeEntity::getIdNode).toList(), true, SUPERVISION_USER, false); diff --git a/src/main/java/org/gridsuite/study/server/service/networkmodification/NetworkModificationRestService.java b/src/main/java/org/gridsuite/study/server/service/networkmodification/NetworkModificationRestService.java index 498fa4b1d..b66276e0b 100644 --- a/src/main/java/org/gridsuite/study/server/service/networkmodification/NetworkModificationRestService.java +++ b/src/main/java/org/gridsuite/study/server/service/networkmodification/NetworkModificationRestService.java @@ -651,6 +651,10 @@ private String toJson(Object object) { } public void deleteStashedModificationsFromGroups(List groupUuids, String userId) { + deleteStashedModificationsFromGroups(groupUuids, true, userId); + } + + public void deleteStashedModificationsFromGroups(List groupUuids, boolean removeElementReferences, String userId) { Objects.requireNonNull(groupUuids); if (groupUuids.isEmpty()) { return; @@ -659,8 +663,11 @@ public void deleteStashedModificationsFromGroups(List groupUuids, String u headers.setContentType(MediaType.APPLICATION_JSON); headers.set(HEADER_USER_ID, userId); HttpEntity httpEntity = new HttpEntity<>(toJson(groupUuids), headers); - var path = UriComponentsBuilder.fromPath(GROUPS + "/stashed-modifications") - .toUriString(); + var uriBuilder = UriComponentsBuilder.fromPath(GROUPS + "/stashed-modifications"); + if (!removeElementReferences) { + uriBuilder.queryParam("removeElementReferences", false); + } + var path = uriBuilder.toUriString(); restTemplate.exchange(getNetworkModificationServerURI(false) + path, HttpMethod.DELETE, diff --git a/src/test/java/org/gridsuite/study/server/service/networkmodification/NetworkModificationServiceTest.java b/src/test/java/org/gridsuite/study/server/service/networkmodification/NetworkModificationServiceTest.java index aebd7f1d6..ff55799c5 100644 --- a/src/test/java/org/gridsuite/study/server/service/networkmodification/NetworkModificationServiceTest.java +++ b/src/test/java/org/gridsuite/study/server/service/networkmodification/NetworkModificationServiceTest.java @@ -165,6 +165,19 @@ void testDeleteStashedModificationsGroups() { verify(restTemplate).exchange(expectedUrl, HttpMethod.DELETE, httpEntity, new ParameterizedTypeReference>() { }); } + @Test + void testDeleteStashedModificationsGroupsKeepingElementReferences() { + UUID groupUuid = UUID.randomUUID(); + String expectedUrl = NETWORK_MODIFICATION_SERVER_URI + "/v1/groups/stashed-modifications?removeElementReferences=false"; + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set(HEADER_USER_ID, USER_ID); + networkModificationService.deleteStashedModificationsFromGroups(List.of(groupUuid), false, USER_ID); + HttpEntity httpEntity = new HttpEntity<>("[\"" + groupUuid + "\"]", headers); + verify(restTemplate).exchange(expectedUrl, HttpMethod.DELETE, httpEntity, new ParameterizedTypeReference>() { }); + } + @Test void testGetReferences() { UUID firstUuid = UUID.randomUUID();