Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'clone-network-only-with-first-variant' of https://githu…
Browse files Browse the repository at this point in the history
…b.com/gridsuite/study-server into clone-network-only-with-first-variant
souissimai committed Jan 31, 2025
2 parents c84855a + 8660fe7 commit e450ccb
Showing 6 changed files with 101 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -55,6 +55,7 @@ private StudyConstants() {
public static final String GROUP_UUID = "groupUuid";
public static final String REPORT_UUID = "reportUuid";
public static final String UUIDS = "uuids";
public static final String IDS = "ids";
public static final String QUERY_PARAM_ERROR_ON_GROUP_NOT_FOUND = "errorOnGroupNotFound";
public static final String QUERY_PARAM_REPORT_DEFAULT_NAME = "defaultName";
public static final String QUERY_PARAM_REPORT_SEVERITY_LEVEL = "severityLevels";
10 changes: 10 additions & 0 deletions src/main/java/org/gridsuite/study/server/StudyController.java
Original file line number Diff line number Diff line change
@@ -2068,6 +2068,16 @@ public ResponseEntity<String> exportFilter(
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(studyService.exportFilter(rootNetworkUuid, filterUuid));
}

@GetMapping(value = "/studies/{studyUuid}/root-networks/{rootNetworkUuid}/filters/elements")
@Operation(summary = "Evaluate a list of filters on root node to get matched elements")
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The list of matched elements")})
public ResponseEntity<String> exportFilters(
@Parameter(description = "Study uuid") @PathVariable("studyUuid") UUID studyUuid,
@Parameter(description = "Root network uuid") @PathVariable("rootNetworkUuid") UUID rootNetworkUuid,
@Parameter(description = "Filters uuid to be resolved") @RequestParam("filtersUuid") List<UUID> filtersUuid) {
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(studyService.exportFilters(rootNetworkUuid, filtersUuid));
}

@PostMapping(value = "/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/state-estimation/run")
@Operation(summary = "run state estimation on study")
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The state estimation has started")})
Original file line number Diff line number Diff line change
@@ -19,12 +19,14 @@
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

import java.util.List;
import java.util.Objects;
import java.util.UUID;

import static org.gridsuite.study.server.StudyConstants.DELIMITER;
import static org.gridsuite.study.server.StudyConstants.FILTER_API_VERSION;
import static org.gridsuite.study.server.StudyException.Type.*;
import static org.gridsuite.study.server.StudyException.Type.EVALUATE_FILTER_FAILED;
import static org.gridsuite.study.server.StudyException.Type.NETWORK_NOT_FOUND;
import static org.gridsuite.study.server.utils.StudyUtils.handleHttpError;

/**
@@ -35,6 +37,7 @@ public class FilterService {

public static final String FILTER_END_POINT_EVALUATE = "/filters/evaluate";
public static final String FILTER_END_POINT_EXPORT = "/filters/{id}/export";
public static final String FILTERS_END_POINT_EXPORT = "/filters/export";

private final RestTemplate restTemplate;

@@ -90,4 +93,17 @@ public String exportFilter(UUID networkUuid, UUID filterUuid) {

return restTemplate.getForObject(uriComponent.toUriString(), String.class);
}

public String exportFilters(UUID networkUuid, List<UUID> filtersUuid) {
Objects.requireNonNull(networkUuid);
Objects.requireNonNull(filtersUuid);
String endPointUrl = getBaseUri() + DELIMITER + FILTER_API_VERSION + FILTERS_END_POINT_EXPORT;

UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromHttpUrl(endPointUrl);
uriComponentsBuilder.queryParam("networkUuid", networkUuid);
uriComponentsBuilder.queryParam("ids", filtersUuid);
var uriComponent = uriComponentsBuilder.buildAndExpand();

return restTemplate.getForObject(uriComponent.toUriString(), String.class);
}
}
Original file line number Diff line number Diff line change
@@ -2440,6 +2440,10 @@ public String exportFilter(UUID rootNetworkUuid, UUID filterUuid) {
return filterService.exportFilter(rootNetworkService.getNetworkUuid(rootNetworkUuid), filterUuid);
}

public String exportFilters(UUID rootNetworkUuid, List<UUID> filtersUuid) {
return filterService.exportFilters(rootNetworkService.getNetworkUuid(rootNetworkUuid), filtersUuid);
}

@Transactional
public UUID runStateEstimation(UUID studyUuid, UUID nodeUuid, UUID rootNetworkUuid, String userId) {
Objects.requireNonNull(studyUuid);
51 changes: 51 additions & 0 deletions src/test/java/org/gridsuite/study/server/FilterServiceTest.java
Original file line number Diff line number Diff line change
@@ -32,7 +32,9 @@
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;

import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;

import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -53,6 +55,7 @@ class FilterServiceTest {
private static final String NETWORK_UUID_STRING = "38400000-8cf0-11bd-b23e-10b96e4ef00d";
private static final String CASE_UUID_STRING = "00000000-8cf0-11bd-b23e-10b96e4ef00d";
private static final String FILTER_UUID_STRING = "c6c15d08-81e9-47a1-9cdb-7be22f017ad5";
private static final List<String> FILTERS_UUID_STRING = List.of("fc3aa057-5fa4-4173-b1a8-16028f5eefd1", "f8773f32-f77c-4126-8c6f-a4af8bf6f788");
private static final UUID CASE_UUID = UUID.fromString(CASE_UUID_STRING);

@Autowired
@@ -262,4 +265,52 @@ void testExportFilter() throws Exception {

wireMockUtils.verifyFilterExport(stubUuid, FILTER_UUID_STRING, NETWORK_UUID_STRING);
}

@Test
void testExportFilters() throws Exception {
StudyEntity studyEntity = insertDummyStudy(UUID.fromString(NETWORK_UUID_STRING), CASE_UUID);
UUID firstRootNetworkUuid = studyTestUtils.getStudyFirstRootNetworkUuid(studyEntity.getId());
UUID studyUuid = studyEntity.getId();
String responseBody = """
[
{
"filterId":"fc3aa057-5fa4-4173-b1a8-16028f5eefd1",
"identifiableAttributes":[
{
"id":".TMP",
"type":"SUBSTATION",
"distributionKey":null
}
],
"notFoundEquipments":null
},
{
"filterId":"f8773f32-f77c-4126-8c6f-a4af8bf6f788",
"identifiableAttributes":[
{
"id":".TMP2",
"type":"SUBSTATION",
"distributionKey":null
},
{
"id":".TMP3",
"type":"SUBSTATION",
"distributionKey":null
},
],
"notFoundEquipments":null
}
]
""";
UUID stubUuid = wireMockUtils.stubFiltersExport(NETWORK_UUID_STRING, FILTERS_UUID_STRING, responseBody);

MvcResult mvcResult = mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/filters/elements?filtersUuid=" + FILTERS_UUID_STRING.stream().collect(Collectors.joining(",")),
studyUuid, firstRootNetworkUuid))
.andExpect(status().isOk())
.andReturn();
String resultAsString = mvcResult.getResponse().getContentAsString();
assertEquals(responseBody, resultAsString);

wireMockUtils.verifyFiltersExport(stubUuid, FILTERS_UUID_STRING, NETWORK_UUID_STRING);
}
}
18 changes: 18 additions & 0 deletions src/test/java/org/gridsuite/study/server/utils/WireMockUtils.java
Original file line number Diff line number Diff line change
@@ -458,8 +458,26 @@ public UUID stubFilterExport(String networkUuid, String filterUuid, String respo
).getId();
}

public UUID stubFiltersExport(String networkUuid, List<String> filtersUuid, String responseBody) {
MappingBuilder requestPatternBuilder = WireMock.get(WireMock.urlPathEqualTo("/v1/filters/export"))
.withQueryParam(NETWORK_UUID, WireMock.equalTo(networkUuid));
for (String filterUuid : filtersUuid) {
requestPatternBuilder.withQueryParam(IDS, WireMock.equalTo(filterUuid));
}
return wireMock.stubFor(requestPatternBuilder.willReturn(WireMock.ok().withBody(responseBody))).getId();
}

public void verifyFilterExport(UUID stubUuid, String filterUuid, String networkUuid) {
verifyGetRequest(stubUuid, "/v1/filters/" + filterUuid + "/export",
Map.of(NETWORK_UUID, WireMock.equalTo(networkUuid)));
}

public void verifyFiltersExport(UUID stubUuid, List<String> filtersUuid, String networkUuid) {
Map<String, StringValuePattern> queryParams = new HashMap<>();
queryParams.put(NETWORK_UUID, WireMock.equalTo(networkUuid));
for (String filterUuid : filtersUuid) {
queryParams.put(IDS, WireMock.equalTo(filterUuid));
}
verifyGetRequest(stubUuid, "/v1/filters/export", queryParams);
}
}

0 comments on commit e450ccb

Please sign in to comment.