Skip to content

Commit 7c750cd

Browse files
authored
Add update methods for diagram and composite modifications & add description to update methods (#135)
Signed-off-by: Ayoub LABIDI <[email protected]>
1 parent 1cbd9d9 commit 7c750cd

File tree

9 files changed

+124
-38
lines changed

9 files changed

+124
-38
lines changed

src/main/java/org/gridsuite/explore/server/ExploreController.java

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -303,19 +303,6 @@ public ResponseEntity<Void> updateContingencyList(
303303
return ResponseEntity.ok().build();
304304
}
305305

306-
@PutMapping(value = "/explore/composite-modification/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
307-
@Operation(summary = "Modify a composite modification")
308-
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The composite modification has been modified successfully")})
309-
@PreAuthorize("@authorizationService.isAuthorized(#userId, #id, null, T(org.gridsuite.explore.server.dto.PermissionType).WRITE)")
310-
public ResponseEntity<Void> updateCompositeModification(
311-
@PathVariable UUID id,
312-
@RequestParam(name = "name") String name,
313-
@RequestHeader(QUERY_PARAM_USER_ID) String userId) {
314-
315-
exploreService.updateCompositeModification(id, userId, name);
316-
return ResponseEntity.ok().build();
317-
}
318-
319306
@PostMapping(value = "/explore/parameters", consumes = MediaType.APPLICATION_JSON_VALUE)
320307
@Operation(summary = "create parameters")
321308
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "parameters creation request delegated to corresponding server")})
@@ -354,6 +341,19 @@ public ResponseEntity<Void> duplicateDiagramConfig(@RequestParam("duplicateFrom"
354341
return ResponseEntity.ok().build();
355342
}
356343

344+
@PutMapping(value = "/explore/diagram-config/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
345+
@Operation(summary = "Modify a diagram config")
346+
@ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Diagram config has been successfully modified")})
347+
@PreAuthorize("@authorizationService.isAuthorized(#userId, #id, null, T(org.gridsuite.explore.server.dto.PermissionType).WRITE)")
348+
public ResponseEntity<Void> updateDiagramConfig(@PathVariable UUID id,
349+
@RequestBody String diagramConfig,
350+
@RequestHeader(QUERY_PARAM_USER_ID) String userId,
351+
@RequestParam(QUERY_PARAM_NAME) String name,
352+
@RequestParam(QUERY_PARAM_DESCRIPTION) String description) {
353+
exploreService.updateDiagramConfig(id, diagramConfig, userId, name, description);
354+
return ResponseEntity.noContent().build();
355+
}
356+
357357
@PutMapping(value = "/explore/parameters/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
358358
@Operation(summary = "Modify parameters")
359359
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "parameters have been successfully modified")})
@@ -362,8 +362,9 @@ public ResponseEntity<Void> updateParameters(@PathVariable UUID id,
362362
@RequestBody String parameters,
363363
@RequestParam(name = QUERY_PARAM_TYPE, defaultValue = "") ParametersType parametersType,
364364
@RequestHeader(QUERY_PARAM_USER_ID) String userId,
365-
@RequestParam("name") String name) {
366-
exploreService.updateParameters(id, parameters, parametersType, userId, name);
365+
@RequestParam(QUERY_PARAM_NAME) String name,
366+
@RequestParam(QUERY_PARAM_DESCRIPTION) String description) {
367+
exploreService.updateParameters(id, parameters, parametersType, userId, name, description);
367368
return ResponseEntity.ok().build();
368369
}
369370

@@ -425,8 +426,9 @@ public ResponseEntity<Void> createSpreadsheetConfigCollectionFromConfigIds(@Requ
425426
public ResponseEntity<Void> updateSpreadsheetConfig(@PathVariable UUID id,
426427
@RequestBody String spreadsheetConfigDto,
427428
@RequestHeader(QUERY_PARAM_USER_ID) String userId,
428-
@RequestParam("name") String name) {
429-
exploreService.updateSpreadsheetConfig(id, spreadsheetConfigDto, userId, name);
429+
@RequestParam(QUERY_PARAM_NAME) String name,
430+
@RequestParam(QUERY_PARAM_DESCRIPTION) String description) {
431+
exploreService.updateSpreadsheetConfig(id, spreadsheetConfigDto, userId, name, description);
430432
return ResponseEntity.noContent().build();
431433
}
432434

@@ -437,8 +439,9 @@ public ResponseEntity<Void> updateSpreadsheetConfig(@PathVariable UUID id,
437439
public ResponseEntity<Void> updateSpreadsheetConfigCollection(@PathVariable UUID id,
438440
@RequestBody String spreadsheetConfigCollectionDto,
439441
@RequestHeader(QUERY_PARAM_USER_ID) String userId,
440-
@RequestParam("name") String name) {
441-
exploreService.updateSpreadsheetConfigCollection(id, spreadsheetConfigCollectionDto, userId, name);
442+
@RequestParam(QUERY_PARAM_NAME) String name,
443+
@RequestParam(QUERY_PARAM_DESCRIPTION) String description) {
444+
exploreService.updateSpreadsheetConfigCollection(id, spreadsheetConfigCollectionDto, userId, name, description);
442445
return ResponseEntity.noContent().build();
443446
}
444447

@@ -477,6 +480,19 @@ public ResponseEntity<Void> createCompositeModification(@RequestBody List<UUID>
477480
return ResponseEntity.ok().build();
478481
}
479482

483+
@PutMapping(value = "/explore/composite-modifications/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
484+
@Operation(summary = "Modify a composite modification")
485+
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The composite modification has been modified successfully")})
486+
@PreAuthorize("@authorizationService.isAuthorized(#userId, #id, null, T(org.gridsuite.explore.server.dto.PermissionType).WRITE)")
487+
public ResponseEntity<Void> updateCompositeNetworkModification(@PathVariable UUID id,
488+
@RequestBody List<UUID> modificationUuids,
489+
@RequestHeader(QUERY_PARAM_USER_ID) String userId,
490+
@RequestParam(QUERY_PARAM_NAME) String name,
491+
@RequestParam(QUERY_PARAM_DESCRIPTION) String description) {
492+
exploreService.updateCompositeModification(id, modificationUuids, userId, name, description);
493+
return ResponseEntity.ok().build();
494+
}
495+
480496
@PostMapping(value = "/explore/composite-modifications", params = "duplicateFrom")
481497
@Operation(summary = "duplicate modification element")
482498
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Composite modification has been duplicated and corresponding element created in the directory")})

src/main/java/org/gridsuite/explore/server/services/ExploreService.java

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -237,21 +237,23 @@ public void updateContingencyList(UUID id, String content, String userId, String
237237
directoryService.updateElement(id, elementAttributes, userId);
238238
}
239239

240-
public void updateCompositeModification(UUID id, String userId, String name) {
241-
updateElementName(id, name, userId);
240+
public void updateCompositeModification(UUID id, List<UUID> modificationUuids, String userId, String name, String description) {
241+
networkModificationService.updateCompositeModification(id, modificationUuids);
242+
updateElementNameAndDescription(id, name, description, userId);
242243
}
243244

244245
public List<Object> getCompositeModificationContent(UUID compositeModificationId) {
245246
return networkModificationService.getCompositeModificationContent(compositeModificationId);
246247
}
247248

248-
private void updateElementName(UUID id, String name, String userId) {
249-
// if the name is empty, no need to call directory-server
250-
if (StringUtils.isNotBlank(name)) {
251-
ElementAttributes elementAttributes = new ElementAttributes();
252-
elementAttributes.setElementName(name);
253-
directoryService.updateElement(id, elementAttributes, userId);
249+
private void updateElementNameAndDescription(UUID id, String name, String description, String userId) {
250+
if (StringUtils.isBlank(name)) {
251+
return;
254252
}
253+
ElementAttributes elementAttributes = new ElementAttributes();
254+
elementAttributes.setElementName(name);
255+
elementAttributes.setDescription(description);
256+
directoryService.updateElement(id, elementAttributes, userId);
255257
}
256258

257259
private String getProperPath(ContingencyListType contingencyListType) {
@@ -268,9 +270,9 @@ public void createParameters(String parameters, ParametersType parametersType, S
268270
directoryService.createElement(elementAttributes, parentDirectoryUuid, userId);
269271
}
270272

271-
public void updateParameters(UUID id, String parameters, ParametersType parametersType, String userId, String name) {
273+
public void updateParameters(UUID id, String parameters, ParametersType parametersType, String userId, String name, String description) {
272274
parametersService.updateParameters(id, parameters, parametersType);
273-
updateElementName(id, name, userId);
275+
updateElementNameAndDescription(id, name, description, userId);
274276
}
275277

276278
public void duplicateParameters(UUID sourceId, UUID targetDirectoryId, ParametersType parametersType, String userId) {
@@ -289,6 +291,11 @@ public void duplicateDiagramConfig(UUID sourceId, UUID targetDirectoryId, String
289291
directoryService.duplicateElement(sourceId, newConfigUuid, targetDirectoryId, userId);
290292
}
291293

294+
public void updateDiagramConfig(UUID id, String diagramConfig, String userId, String name, String description) {
295+
singleLineDiagramService.updateDiagramConfig(id, diagramConfig);
296+
updateElementNameAndDescription(id, name, description, userId);
297+
}
298+
292299
public void createSpreadsheetConfig(String spreadsheetConfigDto, String configName, String description, UUID parentDirectoryUuid, String userId) {
293300
UUID spreadsheetConfigUuid = spreadsheetConfigService.createSpreadsheetConfig(spreadsheetConfigDto);
294301
ElementAttributes elementAttributes = new ElementAttributes(spreadsheetConfigUuid, configName, SPREADSHEET_CONFIG, userId, 0, description);
@@ -310,14 +317,14 @@ private void createSpreadsheetConfigCollectionElement(UUID spreadsheetConfigUuid
310317
directoryService.createElement(elementAttributes, parentDirectoryUuid, userId);
311318
}
312319

313-
public void updateSpreadsheetConfig(UUID id, String spreadsheetConfigDto, String userId, String name) {
320+
public void updateSpreadsheetConfig(UUID id, String spreadsheetConfigDto, String userId, String name, String description) {
314321
spreadsheetConfigService.updateSpreadsheetConfig(id, spreadsheetConfigDto);
315-
updateElementName(id, name, userId);
322+
updateElementNameAndDescription(id, name, description, userId);
316323
}
317324

318-
public void updateSpreadsheetConfigCollection(UUID id, String spreadsheetConfigCollectionDto, String userId, String name) {
325+
public void updateSpreadsheetConfigCollection(UUID id, String spreadsheetConfigCollectionDto, String userId, String name, String description) {
319326
spreadsheetConfigCollectionService.updateSpreadsheetConfigCollection(id, spreadsheetConfigCollectionDto);
320-
updateElementName(id, name, userId);
327+
updateElementNameAndDescription(id, name, description, userId);
321328
}
322329

323330
public void duplicateSpreadsheetConfig(UUID sourceId, UUID targetDirectoryId, String userId) {

src/main/java/org/gridsuite/explore/server/services/NetworkModificationService.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,15 @@ public UUID createCompositeModification(List<UUID> modificationUuids) {
6363
.getBody();
6464
}
6565

66+
public void updateCompositeModification(UUID compositeModificationId, List<UUID> modificationUuids) {
67+
String path = UriComponentsBuilder.fromPath(DELIMITER + NETWORK_MODIFICATION_API_VERSION + DELIMITER + NETWORK_COMPOSITE_MODIFICATIONS_PATH + DELIMITER + compositeModificationId)
68+
.buildAndExpand()
69+
.toUriString();
70+
HttpHeaders headers = new HttpHeaders();
71+
headers.setContentType(MediaType.APPLICATION_JSON);
72+
restTemplate.exchange(networkModificationServerBaseUri + path, HttpMethod.PUT, new HttpEntity<>(modificationUuids, headers), Void.class);
73+
}
74+
6675
@Override
6776
public void delete(UUID id, String userId) {
6877
String path = UriComponentsBuilder.fromPath(DELIMITER + NETWORK_MODIFICATION_API_VERSION + DELIMITER + NETWORK_MODIFICATIONS_PATH)

src/main/java/org/gridsuite/explore/server/services/SingleLineDiagramService.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,21 @@ public UUID duplicateDiagramConfig(UUID sourceUuid) {
7070
return restTemplate.exchange(singleLineDiagramServerBaseUri + path, HttpMethod.POST, new HttpEntity<>(headers), UUID.class)
7171
.getBody();
7272
}
73+
74+
public void updateDiagramConfig(UUID configUuid, String diagramConfig) {
75+
Objects.requireNonNull(configUuid);
76+
Objects.requireNonNull(diagramConfig);
77+
78+
var path = UriComponentsBuilder
79+
.fromPath(SINGLE_LINE_DIAGRAM_CONFIG_ROOT_PATH + DELIMITER + configUuid)
80+
.buildAndExpand()
81+
.toUriString();
82+
83+
HttpHeaders headers = new HttpHeaders();
84+
headers.setContentType(MediaType.APPLICATION_JSON);
85+
86+
HttpEntity<String> httpEntity = new HttpEntity<>(diagramConfig, headers);
87+
88+
restTemplate.exchange(singleLineDiagramServerBaseUri + path, HttpMethod.PUT, httpEntity, Void.class);
89+
}
7390
}

src/test/java/org/gridsuite/explore/server/ExploreTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,8 @@ public MockResponse dispatch(RecordedRequest request) {
324324
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), compositeModificationIdAsString);
325325
} else if (path.matches("/v1/root-directories") && "POST".equals(request.getMethod())) {
326326
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), GENERIC_STRING);
327+
} else if (path.matches("/v1/network-composite-modifications/.*") && "PUT".equals(request.getMethod())) {
328+
return new MockResponse(200);
327329
} else if ("GET".equals(request.getMethod())) {
328330
if (path.matches("/v1/root-directories[?]elementTypes")) {
329331
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), GENERIC_STRING);
@@ -353,8 +355,6 @@ public MockResponse dispatch(RecordedRequest request) {
353355
return new MockResponse(200,
354356
Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE),
355357
mapper.writeValueAsString(compositeModificationMetadata));
356-
} else if (path.matches("/v1/network-composite-modification/.*") && "PUT".equals(request.getMethod())) {
357-
return new MockResponse(200);
358358
} else if (path.matches("/v1/studies/metadata[?]ids=" + PRIVATE_STUDY_UUID)) {
359359
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), listOfPrivateStudyAttributesAsString.replace("elementUuid", "id"));
360360
} else if (path.matches("/v1/users/" + USER_WITH_CASE_LIMIT_EXCEEDED + "/profile/max-cases")) {
@@ -572,8 +572,8 @@ void testCreateParameters() throws Exception {
572572

573573
@Test
574574
void testUpdateParameters() throws Exception {
575-
mockMvc.perform(put("/v1/explore/parameters/{id}?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}",
576-
PARAMETERS_UUID, "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID)
575+
mockMvc.perform(put("/v1/explore/parameters/{id}?name={name}&description={description}&type={type}&parentDirectoryUuid={parentDirectoryUuid}",
576+
PARAMETERS_UUID, "", "", ParametersType.VOLTAGE_INIT_PARAMETERS.name(), PARENT_DIRECTORY_UUID)
577577
.header("userId", USER1)
578578
.contentType(MediaType.APPLICATION_JSON)
579579
.content("\"new Parameters content\"")
@@ -936,9 +936,11 @@ void testCreateNetworkCompositeModifications() throws Exception {
936936
void testModifyCompositeModifications(final MockWebServer server) throws Exception {
937937
final String name = "script name";
938938
mockMvc.perform(
939-
put("/v1/explore/composite-modification/{id}", COMPOSITE_MODIFICATION_UUID)
939+
put("/v1/explore/composite-modifications/{id}", COMPOSITE_MODIFICATION_UUID)
940940
.contentType(APPLICATION_JSON)
941+
.content(mapper.writeValueAsString(List.of(MODIFICATION_UUID, UUID.randomUUID())))
941942
.param("name", name)
943+
.param("description", "description")
942944
.header("userId", USER1)
943945
).andExpect(status().isOk());
944946
}

src/test/java/org/gridsuite/explore/server/SingleLineDiagramTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import static org.mockito.ArgumentMatchers.eq;
3030
import static org.mockito.Mockito.*;
3131
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
32+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
3233
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
3334

3435
@SpringBootTest
@@ -96,6 +97,31 @@ void testCreateDiagramConfig() throws Exception {
9697
wireMockUtils.verifyPostRequest(stubId, USER_SINGLE_LINE_DIAGRAM_SERVER_BASE_URL, Map.of(), false);
9798
}
9899

100+
@Test
101+
void testUpdateDiagramConfig() throws Exception {
102+
UUID stubId = wireMockServer.stubFor(WireMock.put(WireMock.urlPathEqualTo(USER_SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + "/" + NAD_CONFIG_UUID))
103+
.willReturn(WireMock.ok()
104+
.withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
105+
.withBody(mapper.writeValueAsString(NAD_CONFIG_UUID.toString()))
106+
)).getId();
107+
108+
when(directoryService.hasPermission(List.of(NAD_CONFIG_UUID), null, USER1, PermissionType.WRITE)).thenReturn(true);
109+
110+
mockMvc.perform(put(BASE_URL + "/" + NAD_CONFIG_UUID)
111+
.param("name", "diagram config name")
112+
.param("type", "DIAGRAM_CONFIG")
113+
.param("description", "the config description")
114+
.contentType(MediaType.APPLICATION_JSON_VALUE)
115+
.content("{\"depth\": 1}")
116+
.header("userId", USER1))
117+
.andExpect(status().isNoContent())
118+
.andReturn();
119+
120+
verify(directoryService, times(1)).updateElement(eq(NAD_CONFIG_UUID), elementAttributesCaptor.capture(), eq(USER1));
121+
verify(directoryService, times(1)).hasPermission(List.of(NAD_CONFIG_UUID), null, USER1, PermissionType.WRITE);
122+
wireMockUtils.verifyPutRequest(stubId, USER_SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + "/" + NAD_CONFIG_UUID, Map.of(), false);
123+
}
124+
99125
@Test
100126
void testDuplicateDiagramConfig() throws Exception {
101127
UUID stubId = wireMockServer.stubFor(WireMock.post(WireMock.urlPathEqualTo(USER_SINGLE_LINE_DIAGRAM_SERVER_BASE_URL))

src/test/java/org/gridsuite/explore/server/SpreadsheetConfigCollectionTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ void testUpdateSpreadsheetConfigCollection() throws Exception {
143143
.contentType(MediaType.APPLICATION_JSON)
144144
.content(spreadsheetConfigCollectionJson)
145145
.param("name", COLLECTION_NAME)
146+
.param("description", "Test Description")
146147
.header("userId", USER_ID))
147148
.andExpect(status().isNoContent());
148149
}

src/test/java/org/gridsuite/explore/server/SpreadsheetConfigTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ void testUpdateSpreadsheetConfig() throws Exception {
143143
.contentType(MediaType.APPLICATION_JSON)
144144
.content(spreadsheetConfigJson)
145145
.param("name", CONFIG_NAME)
146+
.param("description", "description")
146147
.header("userId", USER_ID))
147148
.andExpect(status().isNoContent());
148149
}

0 commit comments

Comments
 (0)