Skip to content

Commit add6af1

Browse files
authored
Add New Filter Based Contingency List (#152)
Signed-off-by: basseche <[email protected]>
1 parent 5e152c3 commit add6af1

File tree

5 files changed

+91
-1
lines changed

5 files changed

+91
-1
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,19 @@ public ResponseEntity<Void> createIdentifierContingencyList(@PathVariable("listN
147147
return ResponseEntity.ok().build();
148148
}
149149

150+
@PostMapping(value = "/explore/filters-contingency-lists/{listName}")
151+
@Operation(summary = "create a filter based contingency list")
152+
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Filter based contingency list has been created")})
153+
@PreAuthorize("@authorizationService.isAuthorized(#userId, #parentDirectoryUuid, null, T(org.gridsuite.explore.server.dto.PermissionType).WRITE)")
154+
public ResponseEntity<Void> createFilterBasedContingencyList(@PathVariable("listName") String listName,
155+
@RequestBody(required = false) String content,
156+
@RequestParam("description") String description,
157+
@RequestParam(QUERY_PARAM_PARENT_DIRECTORY_ID) UUID parentDirectoryUuid,
158+
@RequestHeader(QUERY_PARAM_USER_ID) String userId) {
159+
exploreService.createFilterBasedContingencyList(listName, content, description, userId, parentDirectoryUuid);
160+
return ResponseEntity.ok().build();
161+
}
162+
150163
@PostMapping(value = "/explore/filters", consumes = MediaType.APPLICATION_JSON_VALUE)
151164
@Operation(summary = "create a filter")
152165
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Filter creation request delegated to filter server")})

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,16 @@ public void insertIdentifierContingencyList(UUID id, String content) {
7171
restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, httpEntity, Void.class);
7272
}
7373

74+
public void insertFilterBasedContingencyList(UUID id, String content) {
75+
String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + "/filters-contingency-lists?id={id}")
76+
.buildAndExpand(id)
77+
.toUriString();
78+
HttpHeaders headers = new HttpHeaders();
79+
headers.setContentType(MediaType.APPLICATION_JSON);
80+
HttpEntity<String> httpEntity = new HttpEntity<>(content, headers);
81+
restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, httpEntity, Void.class);
82+
}
83+
7484
public UUID duplicateFormContingencyList(UUID formContingencyListsId) {
7585
String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + "/form-contingency-lists")
7686
.queryParam(HEADER_DUPLICATE_FROM, formContingencyListsId)
@@ -87,6 +97,14 @@ public UUID duplicateIdentifierContingencyList(UUID identifierContingencyListsId
8797
return restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, null, UUID.class).getBody();
8898
}
8999

100+
public UUID duplicateFilterBasedContingencyList(UUID filterContingencyListsId) {
101+
String path = UriComponentsBuilder.fromPath(DELIMITER + ACTIONS_API_VERSION + "/filters-contingency-lists")
102+
.queryParam(HEADER_DUPLICATE_FROM, filterContingencyListsId)
103+
.buildAndExpand()
104+
.toUriString();
105+
return restTemplate.exchange(actionsServerBaseUri + path, HttpMethod.POST, null, UUID.class).getBody();
106+
}
107+
90108
@Override
91109
public List<Map<String, Object>> getMetadata(List<UUID> contingencyListsUuids) {
92110
var ids = contingencyListsUuids.stream().map(UUID::toString).collect(Collectors.joining(","));

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ public void duplicateContingencyList(UUID contingencyListsId, UUID targetDirecto
116116
UUID newId = switch (contingencyListType) {
117117
case FORM -> contingencyListService.duplicateFormContingencyList(contingencyListsId);
118118
case IDENTIFIERS -> contingencyListService.duplicateIdentifierContingencyList(contingencyListsId);
119+
case FILTERS -> contingencyListService.duplicateFilterBasedContingencyList(contingencyListsId);
119120
};
120121
directoryService.duplicateElement(contingencyListsId, newId, targetDirectoryId, userId);
121122
}
@@ -132,6 +133,12 @@ public void createIdentifierContingencyList(String listName, String content, Str
132133
directoryService.createElement(elementAttributes, parentDirectoryUuid, userId);
133134
}
134135

136+
public void createFilterBasedContingencyList(String listName, String content, String description, String userId, UUID parentDirectoryUuid) {
137+
ElementAttributes elementAttributes = new ElementAttributes(UUID.randomUUID(), listName, CONTINGENCY_LIST, userId, 0L, description);
138+
contingencyListService.insertFilterBasedContingencyList(elementAttributes.getElementUuid(), content);
139+
directoryService.createElement(elementAttributes, parentDirectoryUuid, userId);
140+
}
141+
135142
public void createFilter(String filter, String filterName, String description, UUID parentDirectoryUuid, String userId) {
136143
ElementAttributes elementAttributes = new ElementAttributes(UUID.randomUUID(), filterName, FILTER, userId, 0, description);
137144
filterService.insertFilter(filter, elementAttributes.getElementUuid(), userId);
@@ -212,6 +219,7 @@ private String getProperPath(ContingencyListType contingencyListType) {
212219
return switch (contingencyListType) {
213220
case FORM -> "/form-contingency-lists/{id}";
214221
case IDENTIFIERS -> "/identifier-contingency-lists/{id}";
222+
case FILTERS -> "/filters-contingency-lists/{id}";
215223
};
216224
}
217225

src/main/java/org/gridsuite/explore/server/utils/ContingencyListType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@
1111
*/
1212
public enum ContingencyListType {
1313
FORM,
14-
IDENTIFIERS
14+
IDENTIFIERS,
15+
FILTERS
1516
}

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@ public MockResponse dispatch(RecordedRequest request) {
314314
return new MockResponse(200);
315315
} else if (path.matches("/v1/identifier-contingency-lists/.*") && "PUT".equals(request.getMethod())) {
316316
return new MockResponse(200);
317+
} else if (path.matches("/v1/filters-contingency-lists/.*") && "PUT".equals(request.getMethod())) {
318+
return new MockResponse(200);
317319
} else if (path.matches("/v1/parameters\\?duplicateFrom=" + PARAMETERS_UUID) && "POST".equals(request.getMethod())) {
318320
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), newParametersUuidAsString);
319321
} else if (path.matches("/v1/parameters.*")) {
@@ -526,6 +528,16 @@ void testCreateIdentifierContingencyList() throws Exception {
526528
).andExpect(status().isOk());
527529
}
528530

531+
@Test
532+
void testCreateFilterBasedContingencyList() throws Exception {
533+
mockMvc.perform(post("/v1/explore/filters-contingency-lists/{listName}?parentDirectoryUuid={parentDirectoryUuid}&description={description}",
534+
"filterBasedContingencyListName", PARENT_DIRECTORY_UUID, null)
535+
.header("userId", USER1)
536+
.contentType(MediaType.APPLICATION_JSON)
537+
.content("\"Contingency list content\"")
538+
).andExpect(status().isOk());
539+
}
540+
529541
@Test
530542
void testCreateFilter() throws Exception {
531543
mockMvc.perform(post("/v1/explore/filters?name={name}&type={type}&parentDirectoryUuid={parentDirectoryUuid}&description={description}",
@@ -726,6 +738,26 @@ void testDuplicateIdentifierContingencyListInSameDirectory(final MockWebServer m
726738
checkAuthorizationRequestDoneForDuplication(mockWebServer, CONTINGENCY_LIST_UUID, CONTINGENCY_LIST_UUID);
727739
}
728740

741+
@Test
742+
void testDuplicateFilterBasedContingencyList(final MockWebServer mockWebServer) throws Exception {
743+
mockMvc.perform(post("/v1/explore/contingency-lists?duplicateFrom={contingencyListUuid}&type={contingencyListsType}&parentDirectoryUuid={parentDirectoryUuid}",
744+
CONTINGENCY_LIST_UUID, ContingencyListType.FILTERS, PARENT_DIRECTORY_UUID)
745+
.header("userId", USER1)
746+
).andExpect(status().isOk());
747+
748+
checkAuthorizationRequestDoneForDuplication(mockWebServer, CONTINGENCY_LIST_UUID, PARENT_DIRECTORY_UUID);
749+
}
750+
751+
@Test
752+
void testDuplicateFilterBasedContingencyListInSameDirectory(final MockWebServer mockWebServer) throws Exception {
753+
mockMvc.perform(post("/v1/explore/contingency-lists?duplicateFrom={contingencyListUuid}&type={contingencyListsType}",
754+
CONTINGENCY_LIST_UUID, ContingencyListType.FILTERS)
755+
.header("userId", USER1)
756+
).andExpect(status().isOk());
757+
758+
checkAuthorizationRequestDoneForDuplication(mockWebServer, CONTINGENCY_LIST_UUID, CONTINGENCY_LIST_UUID);
759+
}
760+
729761
@Test
730762
void testDuplicateStudy(final MockWebServer mockWebServer) throws Exception {
731763
mockMvc.perform(post("/v1/explore/studies?duplicateFrom={studyUuid}&parentDirectoryUuid={parentDirectoryUuid}",
@@ -840,6 +872,24 @@ void testModifyIdentifierContingencyList(final MockWebServer server) throws Exce
840872
verifyFilterOrContingencyUpdateRequests(server, "/v1/identifier-contingency-lists/", USER1);
841873
}
842874

875+
@Test
876+
void testModifyFilterContingencyList(final MockWebServer server) throws Exception {
877+
final String filters = "{\"filters\":[{\"id\":\"uuid1\",\"name\":\"TD_Sensi\",\"equipmentType\":\"TWO_WINDINGS_TRANSFORMER\"},{\"id\":\"uuid2\",\"name\":\"Ligne ARGIA\",\"equipmentType\":\"LINE\"}]}";
878+
final String name = "filter based contingencyList name";
879+
final String description = "filter based contingencyList description";
880+
mockMvc.perform(put("/v1/explore/contingency-lists/{id}",
881+
SCRIPT_ID_BASE_FORM_CONTINGENCY_LIST_UUID)
882+
.contentType(APPLICATION_JSON)
883+
.content(filters)
884+
.param("name", name)
885+
.param("contingencyListType", ContingencyListType.FILTERS.name())
886+
.param("description", description)
887+
.header("userId", USER1)
888+
).andExpect(status().isOk());
889+
890+
verifyFilterOrContingencyUpdateRequests(server, "/v1/filters-contingency-lists/", USER1);
891+
}
892+
843893
private void verifyFilterOrContingencyUpdateRequests(final MockWebServer server, String contingencyOrFilterPath, String user) {
844894
var requests = TestUtils.getRequestsWithBodyDone(3, server);
845895
assertTrue(requests.stream().anyMatch(r -> r.getPath().contains(contingencyOrFilterPath)), "elementAttributes updated");

0 commit comments

Comments
 (0)