diff --git a/src/main/java/org/gridsuite/study/server/controller/NetworkModificationController.java b/src/main/java/org/gridsuite/study/server/controller/NetworkModificationController.java index b58aa8a74..5750456ce 100644 --- a/src/main/java/org/gridsuite/study/server/controller/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/study/server/controller/NetworkModificationController.java @@ -74,6 +74,14 @@ public ResponseEntity updateNetworkModificationsMetadata(@RequestParam("uu return ResponseEntity.ok().build(); } + @PutMapping(value = "/network-modifications/{uuid}/name-and-description") + public ResponseEntity updateModificationNameAndDescription(@PathVariable UUID uuid, + @RequestHeader(HEADER_USER_ID) String userId, + @RequestBody String metadata) { + networkModificationService.updateNetworkModificationNameAndDescription(uuid, metadata, userId); + return ResponseEntity.ok().build(); + } + @GetMapping(value = "/containers/references/exists") public ResponseEntity hasModificationReferences(@RequestParam("uuids") List containerUuids) { return ResponseEntity.ok().body(networkModificationService.hasModificationReferences(containerUuids)); diff --git a/src/main/java/org/gridsuite/study/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/study/server/service/NetworkModificationService.java index 283fd336e..52983484a 100644 --- a/src/main/java/org/gridsuite/study/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/study/server/service/NetworkModificationService.java @@ -288,6 +288,15 @@ public void updateModificationsMetadata(UUID groupUUid, List modifications restTemplate.exchange(path, HttpMethod.PUT, httpEntity, Void.class); } + public void updateNetworkModificationNameAndDescription(UUID networkModificationUuid, String metadata, String userId) { + String path = UriComponentsBuilder.fromPath(NETWORK_MODIFICATIONS_PATH + DELIMITER + networkModificationUuid.toString() + DELIMITER + "name-and-description") + .build().toUriString(); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set(HEADER_USER_ID, userId); + restTemplate.exchange(getNetworkModificationServerURI(false) + path, HttpMethod.PUT, new HttpEntity<>(metadata, headers), Void.class); + } + public void restoreModifications(UUID groupUUid, List modificationsUuids, UUID studyUuid, UUID nodeUuid, String userId) { Objects.requireNonNull(groupUUid); Objects.requireNonNull(modificationsUuids); @@ -521,7 +530,8 @@ public NetworkModificationsResult insertCompositeModifications(UUID groupUuid, * @return the reference modification left in place of the composite modification, either in the group of the node * or in a parent composite */ - public ModificationReference extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, @NonNull String name) { + public ModificationReference extractCompositeModificationToShare(@NonNull UUID groupUuid, @NonNull UUID modificationUuid, @NonNull String name, String description) { + String path = UriComponentsBuilder.fromPath(COMPOSITE_PATH + "{modificationUuid}" + DELIMITER + "share") .queryParam(QUERY_PARAM_NAME, name) .queryParam(QUERY_PARAM_GROUP_UUID, groupUuid) @@ -531,7 +541,7 @@ public ModificationReference extractCompositeModificationToShare(@NonNull UUID g return restTemplate.exchange( getNetworkModificationServerURI(false) + path, HttpMethod.POST, - null, + new HttpEntity<>(description), ModificationReference.class ).getBody(); } diff --git a/src/main/java/org/gridsuite/study/server/service/StudyService.java b/src/main/java/org/gridsuite/study/server/service/StudyService.java index 0db5c499b..dcb340b40 100644 --- a/src/main/java/org/gridsuite/study/server/service/StudyService.java +++ b/src/main/java/org/gridsuite/study/server/service/StudyService.java @@ -1987,9 +1987,10 @@ public void shareCompositeNetworkModification( List childrenUuids = networkModificationTreeService.getChildrenUuids(nodeUuid); try { // the applied modifications are left unchanged : the node does not need to be rebuilt - ModificationReference newReference = networkModificationService.extractCompositeModificationToShare(groupUuid, modificationUuid, name); + ModificationReference newReference = networkModificationService.extractCompositeModificationToShare(groupUuid, modificationUuid, name, description); // the composite modification keeps its uuid when extracted, so it is shared under that same uuid - directoryService.createElement(parentDirectoryUuid, description, modificationUuid, name, DirectoryService.MODIFICATION, userId); + // description is null as it is provided by the referenced modification + directoryService.createElement(parentDirectoryUuid, null, modificationUuid, name, DirectoryService.MODIFICATION, userId); // extraction replaced the local composite by a new reference modification, in the node group or in a parent // composite: register it on the shared element directoryService.createElementsReferences(List.of(newReference), studyUuid, nodeUuid, userId); diff --git a/src/test/java/org/gridsuite/study/server/controller/NetworkModificationControllerTest.java b/src/test/java/org/gridsuite/study/server/controller/NetworkModificationControllerTest.java index bc3b9f695..0fe8ab0fe 100644 --- a/src/test/java/org/gridsuite/study/server/controller/NetworkModificationControllerTest.java +++ b/src/test/java/org/gridsuite/study/server/controller/NetworkModificationControllerTest.java @@ -12,6 +12,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; @@ -163,7 +164,32 @@ void testUpdateNetworkModificationsMetadata() throws Exception { } @Test - void testhasModificationReference() throws Exception { + void testUpdateNetworkModificationsNameAndDescription() throws Exception { + UUID modificationUuid = UUID.randomUUID(); + String userId = "user"; + String metadata = + "{\"message\":" + + "{" + + "\"name\":\"newName\"," + + "\"description\":\"newDescription\"" + + "}" + + "}"; + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.set(HEADER_USER_ID, userId); + + mockMvc.perform(put(BASE_URL + "/network-modifications/" + modificationUuid + "/name-and-description") + .headers(headers) + .content(metadata) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string("")); + + verify(networkModificationService).updateNetworkModificationNameAndDescription(modificationUuid, metadata, userId); + } + + @Test + void testHasModificationReference() throws Exception { UUID firstUuid = UUID.randomUUID(); UUID secondUuid = UUID.randomUUID(); diff --git a/src/test/java/org/gridsuite/study/server/service/NetworkModificationServiceTest.java b/src/test/java/org/gridsuite/study/server/service/NetworkModificationServiceTest.java index dc09125f5..fb38285a6 100644 --- a/src/test/java/org/gridsuite/study/server/service/NetworkModificationServiceTest.java +++ b/src/test/java/org/gridsuite/study/server/service/NetworkModificationServiceTest.java @@ -266,4 +266,14 @@ void testHasModificationReferences() { networkModificationService.hasModificationReferences(List.of(modificationUuid)); verify(restTemplate).getForObject(eq(expectedUrl), eq(Boolean.class)); } + + @Test + void testUpdateNetworkModificationsNameAndDescription() { + UUID modificationUuid = UUID.randomUUID(); + String metadata = ""; + String expectedUrl = NETWORK_MODIFICATION_SERVER_URI + "/v1/network-modifications/" + modificationUuid + "/name-and-description"; + + networkModificationService.updateNetworkModificationNameAndDescription(modificationUuid, metadata, USER_ID); + verify(restTemplate).exchange(eq(expectedUrl), eq(HttpMethod.PUT), org.mockito.ArgumentMatchers.>any(), eq(Void.class)); + } }