Skip to content

Commit 85b6d96

Browse files
authored
Add Endpoints for processing several filters and returning Identifiables attributes List (#843)
Signed-off-by: basseche <[email protected]>
1 parent ffc5611 commit 85b6d96

File tree

5 files changed

+77
-0
lines changed

5 files changed

+77
-0
lines changed

src/main/java/org/gridsuite/study/server/controller/StudyController.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2355,6 +2355,16 @@ public ResponseEntity<String> exportFilterFromFirstRootNetwork(
23552355
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(studyService.exportFilterFromFirstRootNetwork(studyUuid, filterUuid));
23562356
}
23572357

2358+
// temporary - used by grid-explore only to prevent filter conversion from dysfunctioning since it does not have access to root networks yet
2359+
@GetMapping(value = "/studies/{studyUuid}/filters/elements")
2360+
@Operation(summary = "Evaluate filters list on first root network of study to get matched identifiables elements")
2361+
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The list of matched identifiables elements")})
2362+
public ResponseEntity<String> evaluateFiltersOnFirstRootNetwork(
2363+
@Parameter(description = "Study uuid") @PathVariable("studyUuid") UUID studyUuid,
2364+
@Parameter(description = "Filters uuid to be applied") @RequestParam(name = "filtersUuid") List<UUID> filtersUuid) {
2365+
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(studyService.evaluateFiltersFromFirstRootNetwork(studyUuid, filtersUuid));
2366+
}
2367+
23582368
@GetMapping(value = "/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/filters/elements")
23592369
@Operation(summary = "Evaluate a list of filters on root node to get matched elements")
23602370
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The list of matched elements")})

src/main/java/org/gridsuite/study/server/service/FilterService.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
public class FilterService {
3737

3838
public static final String FILTER_END_POINT_EVALUATE = "/filters/evaluate";
39+
public static final String FILTER_END_POINT_EVALUATE_IDS = "/filters/evaluate/identifiables";
3940
public static final String FILTER_END_POINT_EXPORT = "/filters/{id}/export";
4041
public static final String FILTERS_END_POINT_EXPORT = "/filters/export";
4142

@@ -109,4 +110,17 @@ public String exportFilters(UUID networkUuid, List<UUID> filtersUuid, String var
109110

110111
return restTemplate.getForObject(uriComponent.toUriString(), String.class);
111112
}
113+
114+
public String evaluateFilters(UUID networkUuid, List<UUID> filtersUuid) {
115+
Objects.requireNonNull(networkUuid);
116+
Objects.requireNonNull(filtersUuid);
117+
String endPointUrl = getBaseUri() + DELIMITER + FILTER_API_VERSION + FILTER_END_POINT_EVALUATE_IDS;
118+
119+
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromHttpUrl(endPointUrl);
120+
uriComponentsBuilder.queryParam("networkUuid", networkUuid);
121+
uriComponentsBuilder.queryParam("ids", filtersUuid);
122+
var uriComponent = uriComponentsBuilder.buildAndExpand();
123+
124+
return restTemplate.getForObject(uriComponent.toUriString(), String.class);
125+
}
112126
}

src/main/java/org/gridsuite/study/server/service/StudyService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3334,6 +3334,11 @@ public String exportFilterFromFirstRootNetwork(UUID studyUuid, UUID filterUuid)
33343334
}
33353335

33363336
@Transactional(readOnly = true)
3337+
public String evaluateFiltersFromFirstRootNetwork(UUID studyUuid, List<UUID> filtersUuid) {
3338+
StudyEntity studyEntity = studyRepository.findById(studyUuid).orElseThrow(() -> new StudyException(STUDY_NOT_FOUND));
3339+
return filterService.evaluateFilters(studyEntity.getFirstRootNetwork().getNetworkUuid(), filtersUuid);
3340+
}
3341+
33373342
public String exportFilters(UUID rootNetworkUuid, List<UUID> filtersUuid, UUID nodeUuid, boolean inUpstreamBuiltParentNode) {
33383343
UUID nodeUuidToSearchIn = getNodeUuidToSearchIn(nodeUuid, rootNetworkUuid, inUpstreamBuiltParentNode);
33393344
String variantId = networkModificationTreeService.getVariantId(nodeUuidToSearchIn, rootNetworkUuid);

src/test/java/org/gridsuite/study/server/FilterServiceTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import org.springframework.http.MediaType;
3333
import org.springframework.test.web.servlet.MockMvc;
3434
import org.springframework.test.web.servlet.MvcResult;
35+
import org.springframework.util.LinkedMultiValueMap;
36+
import org.springframework.util.MultiValueMap;
3537

3638
import java.util.List;
3739
import java.util.UUID;
@@ -291,6 +293,35 @@ void exportFilterFromFirstRootNetwork() throws Exception {
291293
wireMockUtils.verifyFilterExport(stubUuid, FILTER_UUID_STRING, studyFirstRootNetworkUuid.toString());
292294
}
293295

296+
@Test
297+
void evaluateFiltersOnFirstRootNetworkTest() throws Exception {
298+
299+
StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID);
300+
UUID studyUuid = studyEntity.getId();
301+
UUID studyFirstRootNetworkUuid = studyTestUtils.getOneRootNetwork(studyUuid).getNetworkUuid();
302+
String responseBody = """
303+
[
304+
{"id":"MANDA7COND.41","type":"SHUNT_COMPENSATOR","distributionKey":null},
305+
{"id":"MANDA7COND.31","type":"SHUNT_COMPENSATOR","distributionKey":null}
306+
]
307+
""";
308+
List<UUID> filtersUuids = List.of(UUID.fromString(FILTER_UUID_STRING));
309+
UUID stubUuid = wireMockUtils.stubFiltersEvaluate(studyFirstRootNetworkUuid.toString(), filtersUuids, responseBody);
310+
311+
List<String> strfilterUuids = filtersUuids.stream().map(Object::toString).collect(Collectors.toList());
312+
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
313+
params.addAll("filtersUuid", strfilterUuids);
314+
MvcResult mvcResult = mockMvc.perform(get("/v1/studies/{studyUuid}/filters/elements",
315+
studyUuid).params(params).contentType(MediaType.APPLICATION_JSON))
316+
.andExpect(status().isOk())
317+
.andReturn();
318+
319+
String resultAsString = mvcResult.getResponse().getContentAsString();
320+
Assert.assertEquals(responseBody, resultAsString);
321+
322+
wireMockUtils.verifyFiltersEvaluate(stubUuid, strfilterUuids, studyFirstRootNetworkUuid.toString());
323+
}
324+
294325
@Test
295326
void testExportFilters() throws Exception {
296327
StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID);

src/test/java/org/gridsuite/study/server/utils/WireMockUtils.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,14 @@ public UUID stubFilterExport(String networkUuid, String filterUuid, String respo
550550
).getId();
551551
}
552552

553+
public UUID stubFiltersEvaluate(String networkUuid, List<UUID> filtersUuid, String responseBody) {
554+
return wireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/v1/filters/evaluate/identifiables"))
555+
.withQueryParam(NETWORK_UUID, WireMock.equalTo(networkUuid))
556+
.withQueryParam("ids", WireMock.equalTo(String.join(",", filtersUuid.stream().map(UUID::toString).toList())))
557+
.willReturn(WireMock.ok().withBody(responseBody))
558+
).getId();
559+
}
560+
553561
public UUID stubFiltersExport(String networkUuid, List<String> filtersUuid, String responseBody) {
554562
MappingBuilder requestPatternBuilder = WireMock.get(WireMock.urlPathEqualTo("/v1/filters/export"))
555563
.withQueryParam(NETWORK_UUID, WireMock.equalTo(networkUuid));
@@ -573,6 +581,15 @@ public void verifyFiltersExport(UUID stubUuid, List<String> filtersUuid, String
573581
verifyGetRequest(stubUuid, "/v1/filters/export", queryParams);
574582
}
575583

584+
public void verifyFiltersEvaluate(UUID stubUuid, List<String> filtersUuid, String networkUuid) {
585+
Map<String, StringValuePattern> queryParams = new HashMap<>();
586+
queryParams.put(NETWORK_UUID, WireMock.equalTo(networkUuid));
587+
for (String filterUuid : filtersUuid) {
588+
queryParams.put(IDS, WireMock.equalTo(filterUuid));
589+
}
590+
verifyGetRequest(stubUuid, "/v1/filters/evaluate/identifiables", queryParams);
591+
}
592+
576593
public UUID stubSearchModifications(String networkUuid, String userInput, String responseBody) {
577594
return wireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/v1/network-modifications/indexation-infos"))
578595
.withQueryParam("networkUuid", WireMock.equalTo(networkUuid))

0 commit comments

Comments
 (0)