Skip to content

Commit b19a4ac

Browse files
Merge remote-tracking branch 'refs/remotes/origin/main'
Conflicts: src/test/java/org/gridsuite/study/server/ShortCircuitTest.java
2 parents 85defad + aacb8ca commit b19a4ac

File tree

9 files changed

+101
-62
lines changed

9 files changed

+101
-62
lines changed

pom.xml

+20
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@
4747
<testcontainers.version>1.18.3</testcontainers.version>
4848
<liquibase-hibernate-package>org.gridsuite.study.server</liquibase-hibernate-package>
4949
<apache.httpclient.version>5.3</apache.httpclient.version>
50+
<!-- FIXME: powsybl-network-store modules'version is overloaded in the dependencies section.The overloads and this property below have to be removed at next powsybl-ws-dependencies.version upgrade -->
51+
<powsybl-network-store.version>1.11.1</powsybl-network-store.version>
5052
</properties>
5153

5254
<build>
@@ -82,6 +84,24 @@
8284
<dependencyManagement>
8385
<dependencies>
8486
<!-- overrides of imports -->
87+
<!-- FIXME: to be removed at next powsybl-ws-dependencies upgrade -->
88+
<dependency>
89+
<groupId>com.powsybl</groupId>
90+
<artifactId>powsybl-network-store-iidm-impl</artifactId>
91+
<version>${powsybl-network-store.version}</version>
92+
</dependency>
93+
<!-- FIXME: to be removed at next powsybl-ws-dependencies upgrade -->
94+
<dependency>
95+
<groupId>com.powsybl</groupId>
96+
<artifactId>powsybl-network-store-client</artifactId>
97+
<version>${powsybl-network-store.version}</version>
98+
</dependency>
99+
<!-- FIXME: to be removed at next powsybl-ws-dependencies upgrade -->
100+
<dependency>
101+
<groupId>com.powsybl</groupId>
102+
<artifactId>powsybl-network-store-model</artifactId>
103+
<version>${powsybl-network-store.version}</version>
104+
</dependency>
85105

86106
<!-- imports -->
87107
<dependency>

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

+4-5
Original file line numberDiff line numberDiff line change
@@ -422,17 +422,16 @@ public ResponseEntity<String> getSubstationGraphics(
422422
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(studyService.getSubstationsGraphics(networkStoreService.getNetworkUuid(studyUuid), nodeUuid, substationsIds));
423423
}
424424

425-
@GetMapping(value = "/studies/{studyUuid}/nodes/{nodeUuid}/network-map/equipments-ids")
425+
@PostMapping(value = "/studies/{studyUuid}/nodes/{nodeUuid}/network-map/equipments-ids")
426426
@Operation(summary = "Get equipment ids ")
427427
@ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The list of equipment ids")})
428428
public ResponseEntity<String> getNetworkElementsIds(
429429
@PathVariable("studyUuid") UUID studyUuid,
430430
@PathVariable("nodeUuid") UUID nodeUuid,
431-
@Parameter(description = "Substations id") @RequestParam(name = "substationsIds", required = false) List<String> substationsIds,
432-
@Parameter(description = "Should get in upstream built node ?") @RequestParam(value = "inUpstreamBuiltParentNode", required = false, defaultValue = "false") boolean inUpstreamBuiltParentNode,
433-
@Parameter(description = "equipment type") @RequestParam(name = "equipmentType") String equipmentType) {
431+
@RequestBody String equipmentInfos,
432+
@Parameter(description = "Should get in upstream built node ?") @RequestParam(value = "inUpstreamBuiltParentNode", required = false, defaultValue = "false") boolean inUpstreamBuiltParentNode) {
434433

435-
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(studyService.getNetworkElementsIds(studyUuid, nodeUuid, substationsIds, inUpstreamBuiltParentNode, equipmentType));
434+
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(studyService.getNetworkElementsIds(studyUuid, nodeUuid, inUpstreamBuiltParentNode, equipmentInfos));
436435
}
437436

438437
@GetMapping(value = "/studies/{studyUuid}/nodes/{nodeUuid}/network-map/substations/{substationId}")

src/main/java/org/gridsuite/study/server/dto/ShortCircuitPredefinedConfiguration.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
1212
@Deprecated(forRemoval = true, since = "1.7.0")
1313
public enum ShortCircuitPredefinedConfiguration {
1414
ICC_MAX_WITH_NOMINAL_VOLTAGE_MAP,
15-
ICC_MAX_WITH_CEI909
15+
ICC_MAX_WITH_CEI909,
16+
ICC_MIN_WITH_NOMINAL_VOLTAGE_MAP
1617
}

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

+8-6
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@
1818
import org.gridsuite.study.server.dto.InfoTypeParameters;
1919
import org.springframework.beans.factory.annotation.Autowired;
2020
import org.springframework.core.ParameterizedTypeReference;
21+
import org.springframework.http.HttpHeaders;
2122
import org.springframework.http.HttpMethod;
2223
import org.springframework.http.HttpStatus;
24+
import org.springframework.http.MediaType;
25+
import org.springframework.http.HttpEntity;
2326
import org.springframework.stereotype.Service;
2427
import org.springframework.web.client.HttpStatusCodeException;
2528
import org.springframework.web.client.RestTemplate;
@@ -158,20 +161,19 @@ public String getEquipmentsMapData(UUID networkUuid, String variantId, List<Stri
158161
return restTemplate.getForObject(networkMapServerBaseUri + url, String.class);
159162
}
160163

161-
public String getElementsIds(UUID networkUuid, String variantId, List<String> substationsIds, String elementType) {
164+
public String getElementsIds(UUID networkUuid, String variantId, String equipmentInfos) {
162165
String path = DELIMITER + NETWORK_MAP_API_VERSION + "/networks/{networkUuid}/elements-ids";
163166

164167
UriComponentsBuilder builder = UriComponentsBuilder
165168
.fromPath(path);
166-
if (substationsIds != null) {
167-
builder = builder.queryParam(QUERY_PARAM_SUBSTATIONS_IDS, substationsIds);
168-
}
169169
if (!StringUtils.isBlank(variantId)) {
170170
builder = builder.queryParam(QUERY_PARAM_VARIANT_ID, variantId);
171171
}
172-
builder = builder.queryParam(QUERY_PARAM_ELEMENT_TYPE, elementType);
173172
String url = builder.buildAndExpand(networkUuid).toUriString();
174-
return restTemplate.getForObject(networkMapServerBaseUri + url, String.class);
173+
HttpHeaders headers = new HttpHeaders();
174+
headers.setContentType(MediaType.APPLICATION_JSON);
175+
HttpEntity<String> httpEntity = new HttpEntity<>(equipmentInfos, headers);
176+
return restTemplate.postForObject(networkMapServerBaseUri + url, httpEntity, String.class);
175177
}
176178

177179
public String getEquipmentMapData(UUID networkUuid, String variantId, String equipmentPath, String equipmentId) {

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -1902,10 +1902,10 @@ public DynamicSimulationStatus getDynamicSimulationStatus(UUID nodeUuid) {
19021902

19031903
// --- Dynamic Simulation service methods END --- //
19041904

1905-
public String getNetworkElementsIds(UUID studyUuid, UUID nodeUuid, List<String> substationsIds, boolean inUpstreamBuiltParentNode, String equipmentType) {
1905+
public String getNetworkElementsIds(UUID studyUuid, UUID nodeUuid, boolean inUpstreamBuiltParentNode, String equipmentInfos) {
19061906
UUID nodeUuidToSearchIn = getNodeUuidToSearchIn(nodeUuid, inUpstreamBuiltParentNode);
19071907
return networkMapService.getElementsIds(networkStoreService.getNetworkUuid(studyUuid), networkModificationTreeService.getVariantId(nodeUuidToSearchIn),
1908-
substationsIds, equipmentType);
1908+
equipmentInfos);
19091909
}
19101910

19111911
@Transactional(readOnly = true)

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

+19-16
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@
5151
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
5252

5353
import java.io.IOException;
54-
import java.util.List;
55-
import java.util.Map;
56-
import java.util.Objects;
57-
import java.util.UUID;
54+
import java.util.*;
5855

5956
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
6057
import static org.gridsuite.study.server.StudyConstants.*;
@@ -63,6 +60,7 @@
6360
import static org.junit.Assert.assertEquals;
6461
import static org.junit.Assert.assertTrue;
6562
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
63+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
6664
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
6765
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
6866

@@ -259,8 +257,8 @@ public void testGetHvdcLinesMapServer() throws Exception {
259257

260258
//get the hvdc lines ids of a network
261259
String hvdcLineIdsAsString = List.of("hvdc-line1", "hvdc-line2", "hvdc-line3").toString();
262-
getNetworkElementsIds(studyNameUserIdUuid, rootNodeUuid, "HVDC_LINE", List.of(), hvdcLineIdsAsString);
263-
getNetworkElementsIds(studyNameUserIdUuid, rootNodeUuid, "HVDC_LINE", List.of("S1"), hvdcLineIdsAsString);
260+
getNetworkElementsIds(studyNameUserIdUuid, rootNodeUuid, hvdcLineIdsAsString, mapper.writeValueAsString(createRequestBody("HVDC_LINE", List.of())));
261+
getNetworkElementsIds(studyNameUserIdUuid, rootNodeUuid, hvdcLineIdsAsString, mapper.writeValueAsString(createRequestBody("HVDC_LINE", List.of("S1"))));
264262
}
265263

266264
@Test
@@ -280,7 +278,7 @@ public void testGet2wtMapServer() throws Exception {
280278

281279
//get the 2wt ids of a network
282280
String twtIdsAsString = List.of("twt1", "twt2", "twt3").toString();
283-
getNetworkElementsIds(studyNameUserIdUuid, rootNodeUuid, "TWO_WINDINGS_TRANSFORMER", List.of(), twtIdsAsString);
281+
getNetworkElementsIds(studyNameUserIdUuid, rootNodeUuid, twtIdsAsString, mapper.writeValueAsString(createRequestBody("TWO_WINDINGS_TRANSFORMER", List.of())));
284282
assertTrue(TestUtils.getRequestsDone(3, server).stream().anyMatch(r -> r.matches("/v1/parameters/" + LOADFLOW_PARAMETERS_UUID_STRING)));
285283
}
286284

@@ -313,7 +311,7 @@ public void testGetSubstationMapServer() throws Exception {
313311

314312
//get the substation ids of a network
315313
String substationIdsAsString = List.of("substation1", "substation2", "substation3").toString();
316-
getNetworkElementsIds(studyNameUserIdUuid, rootNodeUuid, "SUBSTATION", List.of(), substationIdsAsString);
314+
getNetworkElementsIds(studyNameUserIdUuid, rootNodeUuid, substationIdsAsString, mapper.writeValueAsString(createRequestBody("SUBSTATION", List.of())));
317315
assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.matches("/v1/parameters/" + LOADFLOW_PARAMETERS_UUID_STRING)));
318316
}
319317

@@ -516,17 +514,15 @@ private RootNode getRootNode(UUID study) throws Exception {
516514
}
517515

518516
@SneakyThrows
519-
private MvcResult getNetworkElementsIds(UUID studyUuid, UUID rootNodeUuid, String elementType, List<String> substationsIds, String responseBody) {
520-
UUID stubUuid = wireMockUtils.stubNetworkElementsIdsGet(NETWORK_UUID_STRING, elementType, responseBody);
521-
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = get("/v1/studies/{studyUuid}/nodes/{nodeUuid}/network-map/equipments-ids", studyUuid, rootNodeUuid)
522-
.queryParam(QUERY_PARAM_EQUIPMENT_TYPE, elementType);
523-
if (!substationsIds.isEmpty()) {
524-
mockHttpServletRequestBuilder.queryParam(QUERY_PARAM_SUBSTATIONS_IDS, substationsIds.stream().toArray(String[]::new));
525-
}
517+
private MvcResult getNetworkElementsIds(UUID studyUuid, UUID rootNodeUuid, String responseBody, String requestBody) {
518+
UUID stubUuid = wireMockUtils.stubNetworkElementsIdsPost(NETWORK_UUID_STRING, responseBody);
519+
520+
MockHttpServletRequestBuilder mockHttpServletRequestBuilder = post("/v1/studies/{studyUuid}/nodes/{nodeUuid}/network-map/equipments-ids", studyUuid, rootNodeUuid)
521+
.content(requestBody);
526522
MvcResult mvcResult = mockMvc.perform(mockHttpServletRequestBuilder)
527523
.andExpect(status().isOk())
528524
.andReturn();
529-
wireMockUtils.verifyNetworkElementsIdsGet(stubUuid, NETWORK_UUID_STRING, elementType);
525+
wireMockUtils.verifyNetworkElementsIdsPost(stubUuid, NETWORK_UUID_STRING, requestBody);
530526

531527
return mvcResult;
532528
}
@@ -713,6 +709,13 @@ public void testGetNominalVoltagesError() throws Exception {
713709
wireMockUtils.verifyNominalVoltagesGet(stubUuid, NETWORK_UUID_STRING);
714710
}
715711

712+
private Map<String, Object> createRequestBody(String elementType, List<String> substationsIds) {
713+
Map<String, Object> requestBody = new HashMap<>();
714+
requestBody.put("elementType", elementType);
715+
requestBody.put("substationsIds", substationsIds);
716+
return requestBody;
717+
}
718+
716719
private void cleanDB() {
717720
studyRepository.findAll().forEach(s -> networkModificationTreeService.doDeleteTree(s.getId()));
718721
studyRepository.deleteAll();

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

+6-9
Original file line numberDiff line numberDiff line change
@@ -266,18 +266,15 @@ public void testShortCircuitAnalysisParameters() throws Exception {
266266
UUID studyNameUserIdUuid = studyEntity.getId();
267267

268268
//get default ShortCircuitParameters
269-
mockMvc.perform(get("/v1/studies/{studyUuid}/short-circuit-analysis/parameters", studyNameUserIdUuid)).andExpectAll(
270-
status().isOk(),
271-
content().string(TestUtils.resourceToString("/short-circuit-parameters.json")));
269+
mockMvc.perform(get("/v1/studies/{studyUuid}/short-circuit-analysis/parameters", studyNameUserIdUuid))
270+
.andExpectAll(status().isOk(), content().string(TestUtils.resourceToString("/short-circuit-parameters.json")));
272271
assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.equals("/v1/parameters")));
273272
assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.equals("/v1/parameters/" + SHORT_CIRCUIT_ANALYSIS_PARAMETERS_UUID)));
274273

275-
mockMvc.perform(
276-
post("/v1/studies/{studyUuid}/short-circuit-analysis/parameters", studyNameUserIdUuid)
274+
mockMvc.perform(post("/v1/studies/{studyUuid}/short-circuit-analysis/parameters", studyNameUserIdUuid)
277275
.header(HEADER_USER_ID, "testUserId")
278-
.contentType(MediaType.APPLICATION_JSON)
279-
.content("{\"dumb\": \"json\"}")).andExpect(
280-
status().isOk());
276+
.content("{\"dumb\": \"json\"}").contentType(MediaType.APPLICATION_JSON))
277+
.andExpect(status().isOk());
281278
assertTrue(TestUtils.getRequestsDone(1, server).stream().anyMatch(r -> r.equals("/v1/parameters")));
282279
}
283280

@@ -657,7 +654,7 @@ public void testNoResult() throws Exception {
657654
mockMvc.perform(get("/v1/studies/{studyUuid}/nodes/{nodeUuid}/shortcircuit/status", studyNameUserIdUuid, modificationNode1Uuid)).andExpectAll(
658655
status().isNoContent());
659656

660-
// stop non existing short circuit analysis
657+
// stop non-existing short circuit analysis
661658
mockMvc.perform(put("/v1/studies/{studyUuid}/nodes/{nodeUuid}/shortcircuit/stop", studyNameUserIdUuid, modificationNode1Uuid)).andExpect(status().isOk());
662659
}
663660

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

+5-23
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder;
1414
import com.github.tomakehurst.wiremock.matching.StringValuePattern;
1515
import com.github.tomakehurst.wiremock.stubbing.ServeEvent;
16-
import lombok.NonNull;
1716

1817
import java.util.List;
1918
import java.util.Map;
@@ -88,15 +87,15 @@ public void verifyNetworkElementsInfosGet(UUID stubUuid, String networkUuid, Str
8887
QUERY_PARAM_INFO_TYPE, WireMock.equalTo(infoType)));
8988
}
9089

91-
public UUID stubNetworkElementsIdsGet(String networkUuid, String elementType, String responseBody) {
92-
return wireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo(URI_NETWORK_DATA + DELIMITER + networkUuid + DELIMITER + "elements-ids"))
93-
.withQueryParam(QUERY_PARAM_ELEMENT_TYPE, WireMock.equalTo(elementType))
90+
public UUID stubNetworkElementsIdsPost(String networkUuid, String responseBody) {
91+
return wireMock.stubFor(WireMock.post(WireMock.urlPathEqualTo(URI_NETWORK_DATA + DELIMITER + networkUuid + DELIMITER + "elements-ids"))
9492
.willReturn(WireMock.ok().withBody(responseBody))
9593
).getId();
9694
}
9795

98-
public void verifyNetworkElementsIdsGet(UUID stubUuid, String networkUuid, String elementType) {
99-
verifyGetRequest(stubUuid, URI_NETWORK_DATA + DELIMITER + networkUuid + DELIMITER + "elements-ids", Map.of(QUERY_PARAM_ELEMENT_TYPE, WireMock.equalTo(elementType)));
96+
public void verifyNetworkElementsIdsPost(UUID stubUuid, String networkUuid, String requestBody) {
97+
verifyPostRequest(stubUuid, URI_NETWORK_DATA + DELIMITER + networkUuid + DELIMITER + "elements-ids", false,
98+
Map.of(), requestBody);
10099
}
101100

102101
public UUID stubNetworkEquipmentsInfosGet(String networkUuid, String equipmentPath, String responseBody) {
@@ -109,17 +108,6 @@ public void verifyNetworkEquipmentsInfosGet(UUID stubUuid, String networkUuid, S
109108
verifyGetRequest(stubUuid, URI_NETWORK_DATA + DELIMITER + networkUuid + DELIMITER + equipmentPath, Map.of());
110109
}
111110

112-
public UUID stubNetworkEquipmentsInfosGet(String networkUuid, String infoTypePath, String equipmentType, String responseBody) {
113-
return wireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo(URI_NETWORK_DATA + DELIMITER + networkUuid + DELIMITER + infoTypePath))
114-
.withQueryParam(QUERY_PARAM_EQUIPMENT_TYPE, WireMock.equalTo(equipmentType))
115-
.willReturn(WireMock.ok().withBody(responseBody))
116-
).getId();
117-
}
118-
119-
public void verifyNetworkEquipmentsInfosGet(UUID stubUuid, String networkUuid, String infoTypePath, String equipmentType) {
120-
verifyGetRequest(stubUuid, URI_NETWORK_DATA + DELIMITER + networkUuid + DELIMITER + infoTypePath, Map.of(QUERY_PARAM_EQUIPMENT_TYPE, WireMock.equalTo(equipmentType)));
121-
}
122-
123111
public UUID stubNetworkEquipmentInfosGet(String networkUuid, String infoTypePath, String equipmentId, String responseBody) {
124112
return wireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo(URI_NETWORK_DATA + DELIMITER + networkUuid + DELIMITER + infoTypePath + DELIMITER + equipmentId))
125113
.willReturn(WireMock.ok().withBody(responseBody))
@@ -353,12 +341,6 @@ public void verifyDisableCaseExpiration(UUID stubUuid, String caseUuid) {
353341
verifyPutRequest(stubUuid, "/v1/cases/" + caseUuid + "/disableExpiration", false, Map.of(), null);
354342
}
355343

356-
public void verifyActuatorHealth(@NonNull final String serviceName, final UUID stubUuid, final int nbServer) {
357-
RequestPatternBuilder requestBuilder = WireMock.getRequestedFor(WireMock.urlPathEqualTo("/" + serviceName + "/actuator/health"));
358-
wireMock.verify(nbServer, requestBuilder);
359-
removeRequestForStub(stubUuid, nbServer);
360-
}
361-
362344
public UUID stubCountriesGet(String networkUuid, String responseBody) {
363345
return wireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/v1/networks/" + networkUuid + "/countries"))
364346
.willReturn(WireMock.ok().withBody(responseBody))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"predefinedParameters":"ICC_MIN_WITH_NOMINAL_VOLTAGE_MAP",
3+
"parameters":{
4+
"version":"1.3",
5+
"withLimitViolations":true,
6+
"withVoltageResult":false,
7+
"withFeederResult":true,
8+
"studyType":"TRANSIENT",
9+
"minVoltageDropProportionalThreshold":20.0,
10+
"withFortescueResult":false,
11+
"withLoads":false,
12+
"withShuntCompensators":false,
13+
"withVSCConverterStations":false,
14+
"withNeutralPosition":true,
15+
"initialVoltageProfileMode":"NOMINAL",
16+
"detailedReport":true
17+
},
18+
"cei909VoltageRanges":[
19+
{
20+
"minimumNominalVoltage":10.0,
21+
"maximumNominalVoltage":199.99,
22+
"voltageRangeCoefficient":1.1
23+
},
24+
{
25+
"minimumNominalVoltage":200.0,
26+
"maximumNominalVoltage":299.99,
27+
"voltageRangeCoefficient":1.09
28+
},
29+
{
30+
"minimumNominalVoltage":300.0,
31+
"maximumNominalVoltage":500.0,
32+
"voltageRangeCoefficient":1.05
33+
}
34+
]
35+
}

0 commit comments

Comments
 (0)