Skip to content

Commit 2979c4d

Browse files
NAD Depth refactor (#788)
NAD Depth refactor --------- Signed-off-by: BOUTIER Charly <[email protected]>
1 parent 4be4bf6 commit 2979c4d

File tree

5 files changed

+46
-102
lines changed

5 files changed

+46
-102
lines changed

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

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,30 +1162,15 @@ public ResponseEntity<String> getSubstationDiagramAndMetadata(
11621162
ResponseEntity.noContent().build();
11631163
}
11641164

1165-
@PostMapping(value = "/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
1165+
@PostMapping(value = "/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram", produces = MediaType.APPLICATION_JSON_VALUE)
11661166
@Operation(summary = "get the network area diagram for the given network and voltage levels")
11671167
@ApiResponse(responseCode = "200", description = "The svg")
11681168
public ResponseEntity<String> getNetworkAreaDiagram(
11691169
@PathVariable("studyUuid") UUID studyUuid,
11701170
@PathVariable("rootNetworkUuid") UUID rootNetworkUuid,
11711171
@PathVariable("nodeUuid") UUID nodeUuid,
1172-
@RequestBody List<String> voltageLevelsIds,
1173-
@Parameter(description = "depth") @RequestParam(name = "depth", defaultValue = "0") int depth,
1174-
@Parameter(description = "Initialize NAD with Geographical Data") @RequestParam(name = "withGeoData", defaultValue = "true") boolean withGeoData) {
1175-
String result = studyService.getNetworkAreaDiagram(nodeUuid, rootNetworkUuid, voltageLevelsIds, depth, withGeoData);
1176-
return result != null ? ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(result) :
1177-
ResponseEntity.noContent().build();
1178-
}
1179-
1180-
@GetMapping(value = "/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram")
1181-
@Operation(summary = "get a network area diagram for the given network using a config or a filter")
1182-
@ApiResponse(responseCode = "200", description = "The svg")
1183-
public ResponseEntity<String> getNetworkAreaDiagram(
1184-
@PathVariable("studyUuid") UUID studyUuid,
1185-
@PathVariable("rootNetworkUuid") UUID rootNetworkUuid,
1186-
@PathVariable("nodeUuid") UUID nodeUuid,
1187-
@Parameter(description = "Element parameters") @RequestParam(name = "elementParams") String elementParams) {
1188-
String result = studyService.getNetworkAreaDiagram(nodeUuid, rootNetworkUuid, elementParams);
1172+
@RequestBody String nadRequestInfos) {
1173+
String result = studyService.getNetworkAreaDiagram(nodeUuid, rootNetworkUuid, nadRequestInfos);
11891174
return result != null ? ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON).body(result) :
11901175
ResponseEntity.noContent().build();
11911176
}

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

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616
import static org.gridsuite.study.server.StudyConstants.SINGLE_LINE_DIAGRAM_API_VERSION;
1717
import static org.gridsuite.study.server.StudyException.Type.SVG_NOT_FOUND;
1818

19-
import java.net.URLEncoder;
20-
import java.nio.charset.StandardCharsets;
2119
import java.util.List;
2220
import java.util.UUID;
2321

@@ -26,8 +24,7 @@
2624
import org.gridsuite.study.server.dto.DiagramParameters;
2725
import org.springframework.beans.factory.annotation.Value;
2826
import org.springframework.core.ParameterizedTypeReference;
29-
import org.springframework.http.HttpMethod;
30-
import org.springframework.http.HttpStatus;
27+
import org.springframework.http.*;
3128
import org.springframework.stereotype.Service;
3229
import org.springframework.web.client.HttpStatusCodeException;
3330
import org.springframework.web.client.RestTemplate;
@@ -170,51 +167,29 @@ public String getSubstationSvgAndMetadata(UUID networkUuid, String variantId, St
170167
return result;
171168
}
172169

173-
public String getNetworkAreaDiagram(UUID networkUuid, String variantId, List<String> voltageLevelsIds, int depth, boolean withGeoData) {
170+
public String getNetworkAreaDiagram(UUID networkUuid, String variantId, String nadRequestInfos) {
174171
var uriComponentsBuilder = UriComponentsBuilder.fromPath(DELIMITER + SINGLE_LINE_DIAGRAM_API_VERSION +
175-
"/network-area-diagram/{networkUuid}")
176-
.queryParam(QUERY_PARAM_DEPTH, depth)
177-
.queryParam(QUERY_PARAM_INIT_WITH_GEO_DATA, withGeoData);
172+
"/network-area-diagram/{networkUuid}");
178173
if (!StringUtils.isBlank(variantId)) {
179174
uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId);
180175
}
181176
var path = uriComponentsBuilder
182177
.buildAndExpand(networkUuid)
183178
.toUriString();
184-
String result;
185-
try {
186-
result = restTemplate.postForObject(singleLineDiagramServerBaseUri + path, voltageLevelsIds, String.class);
187-
} catch (HttpStatusCodeException e) {
188-
if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
189-
throw new StudyException(SVG_NOT_FOUND, VOLTAGE_LEVEL + voltageLevelsIds + NOT_FOUND);
190-
} else {
191-
throw e;
192-
}
193-
}
194-
return result;
195-
}
196179

197-
public String getNetworkAreaDiagram(UUID networkUuid, String variantId, String elementParams) {
198-
var uriComponentsBuilder = UriComponentsBuilder.fromPath(DELIMITER + SINGLE_LINE_DIAGRAM_API_VERSION +
199-
"/network-area-diagram/{networkUuid}")
200-
.queryParam(QUERY_PARAM_ELEMENT_PARAMS, URLEncoder.encode(elementParams, StandardCharsets.UTF_8));
201-
if (!StringUtils.isBlank(variantId)) {
202-
uriComponentsBuilder.queryParam(QUERY_PARAM_VARIANT_ID, variantId);
203-
}
204-
var path = uriComponentsBuilder
205-
.buildAndExpand(networkUuid)
206-
.toUriString();
207-
String result;
180+
var headers = new HttpHeaders();
181+
headers.setContentType(MediaType.APPLICATION_JSON);
182+
HttpEntity<String> request = new HttpEntity<>(nadRequestInfos, headers);
183+
208184
try {
209-
result = restTemplate.getForObject(singleLineDiagramServerBaseUri + path, String.class);
185+
return restTemplate.postForObject(singleLineDiagramServerBaseUri + path, request, String.class);
210186
} catch (HttpStatusCodeException e) {
211187
if (HttpStatus.NOT_FOUND.equals(e.getStatusCode())) {
212-
throw new StudyException(SVG_NOT_FOUND, ELEMENT + NOT_FOUND);
188+
throw new StudyException(SVG_NOT_FOUND, VOLTAGE_LEVEL + NOT_FOUND);
213189
} else {
214190
throw e;
215191
}
216192
}
217-
return result;
218193
}
219194

220195
public void setSingleLineDiagramServerBaseUri(String singleLineDiagramServerBaseUri) {

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

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,27 +1358,14 @@ public String getSubstationSvgAndMetadata(String substationId, DiagramParameters
13581358
}
13591359
}
13601360

1361-
public String getNetworkAreaDiagram(UUID nodeUuid, UUID rootNetworkUuid, List<String> voltageLevelsIds, int depth, boolean withGeoData) {
1361+
public String getNetworkAreaDiagram(UUID nodeUuid, UUID rootNetworkUuid, String nadRequestInfos) {
13621362
UUID networkUuid = rootNetworkService.getNetworkUuid(rootNetworkUuid);
13631363
if (networkUuid == null) {
13641364
throw new StudyException(ROOT_NETWORK_NOT_FOUND);
13651365
}
13661366
String variantId = networkModificationTreeService.getVariantId(nodeUuid, rootNetworkUuid);
13671367
if (networkStoreService.existVariant(networkUuid, variantId)) {
1368-
return singleLineDiagramService.getNetworkAreaDiagram(networkUuid, variantId, voltageLevelsIds, depth, withGeoData);
1369-
} else {
1370-
return null;
1371-
}
1372-
}
1373-
1374-
public String getNetworkAreaDiagram(UUID nodeUuid, UUID rootNetworkUuid, String elementParams) {
1375-
UUID networkUuid = rootNetworkService.getNetworkUuid(rootNetworkUuid);
1376-
if (networkUuid == null) {
1377-
throw new StudyException(ROOT_NETWORK_NOT_FOUND);
1378-
}
1379-
String variantId = networkModificationTreeService.getVariantId(nodeUuid, rootNetworkUuid);
1380-
if (networkStoreService.existVariant(networkUuid, variantId)) {
1381-
return singleLineDiagramService.getNetworkAreaDiagram(networkUuid, variantId, elementParams);
1368+
return singleLineDiagramService.getNetworkAreaDiagram(networkUuid, variantId, nadRequestInfos);
13821369
} else {
13831370
return null;
13841371
}

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

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@
1919
import org.springframework.http.MediaType;
2020
import org.springframework.test.web.servlet.MockMvc;
2121

22-
import java.net.URLEncoder;
2322
import java.util.List;
2423
import java.util.Map;
2524
import java.util.UUID;
26-
import java.nio.charset.StandardCharsets;
2725

26+
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
2827
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
2928
import static org.mockito.Mockito.when;
30-
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
29+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
3130
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
3231
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
3332

@@ -57,10 +56,9 @@ class NetworkAreaDiagramTest {
5756
private static final String SINGLE_LINE_DIAGRAM_SERVER_BASE_URL = "/v1/network-area-diagram/";
5857
private static final String USER1 = "user1";
5958
private static final UUID NETWORK_UUID = UUID.randomUUID();
60-
private static final UUID ELEMENT_UUID = UUID.randomUUID();
6159
private static final UUID ROOTNETWORK_UUID = UUID.randomUUID();
6260
private static final UUID NODE_UUID = UUID.randomUUID();
63-
private static final String ELEMENT_PARAMETERS = "{\"elementType\":\"DIAGRAM_CONFIG\",\"elementUuid\":\"" + ELEMENT_UUID + "\"}";
61+
private static final String BODY_CONTENT = "bodyContent";
6462

6563
@BeforeEach
6664
void setUp() {
@@ -76,57 +74,57 @@ void setUp() {
7674

7775
@Test
7876
void testGetNetworkAreaDiagramFromConfig() throws Exception {
79-
UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlPathMatching(SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + ".*"))
77+
UUID stubId = wireMockServer.stubFor(WireMock.post(WireMock.urlPathMatching(SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + ".*"))
78+
.withRequestBody(equalTo(BODY_CONTENT))
8079
.willReturn(WireMock.ok()
8180
.withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
8281
.withBody("nad-svg-from-config")
8382
)).getId();
8483

85-
mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram",
84+
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram",
8685
NETWORK_UUID, ROOTNETWORK_UUID, NODE_UUID)
87-
.param("elementParams", ELEMENT_PARAMETERS)
86+
.content(BODY_CONTENT).contentType(MediaType.APPLICATION_JSON)
8887
.header("userId", USER1))
8988
.andExpectAll(status().isOk(), content().string("nad-svg-from-config"))
9089
.andReturn();
91-
92-
wireMockUtils.verifyGetRequest(stubId, SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + NETWORK_UUID, Map.of(
93-
"elementParams", WireMock.equalTo(URLEncoder.encode(ELEMENT_PARAMETERS, StandardCharsets.UTF_8)),
94-
"variantId", WireMock.equalTo(VariantManagerConstants.INITIAL_VARIANT_ID)));
90+
wireMockUtils.verifyPostRequest(
91+
stubId,
92+
SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + NETWORK_UUID,
93+
Map.of("variantId", WireMock.equalTo(VariantManagerConstants.INITIAL_VARIANT_ID)));
9594
}
9695

9796
@Test
9897
void testGetNetworkAreaDiagramFromConfigVariantError() throws Exception {
9998
when(networkModificationTreeService.getVariantId(NODE_UUID, ROOTNETWORK_UUID)).thenReturn("Another_variant");
100-
101-
mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram",
99+
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram",
102100
NETWORK_UUID, ROOTNETWORK_UUID, NODE_UUID)
103-
.param("elementParams", ELEMENT_PARAMETERS)
101+
.content(BODY_CONTENT).contentType(MediaType.APPLICATION_JSON)
104102
.header("userId", USER1))
105103
.andExpectAll(status().isNoContent());
106104
}
107105

108106
@Test
109107
void testGetNetworkAreaDiagramFromConfigRootNetworkError() throws Exception {
110-
mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram",
108+
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram",
111109
UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID())
112-
.param("elementParams", ELEMENT_PARAMETERS)
110+
.content(BODY_CONTENT).contentType(MediaType.APPLICATION_JSON)
113111
.header("userId", USER1))
114112
.andExpectAll(status().isNotFound());
115113
}
116114

117115
@Test
118116
void testGetNetworkAreaDiagramFromConfigElementUuidNotFound() throws Exception {
119-
UUID stubId = wireMockServer.stubFor(WireMock.get(WireMock.urlPathMatching(SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + ".*"))
117+
UUID stubId = wireMockServer.stubFor(WireMock.post(WireMock.urlPathMatching(SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + ".*"))
118+
.withRequestBody(equalTo(BODY_CONTENT))
120119
.willReturn(WireMock.notFound())).getId();
121120

122-
mockMvc.perform(get("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram",
121+
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram",
123122
NETWORK_UUID, ROOTNETWORK_UUID, NODE_UUID)
124-
.param("elementParams", ELEMENT_PARAMETERS)
123+
.content(BODY_CONTENT).contentType(MediaType.APPLICATION_JSON)
125124
.header("userId", USER1))
126125
.andExpectAll(status().isNotFound());
127126

128-
wireMockUtils.verifyGetRequest(stubId, SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + NETWORK_UUID, Map.of(
129-
"elementParams", WireMock.equalTo(URLEncoder.encode(ELEMENT_PARAMETERS, StandardCharsets.UTF_8)),
130-
"variantId", WireMock.equalTo(VariantManagerConstants.INITIAL_VARIANT_ID)));
127+
wireMockUtils.verifyPostRequest(stubId, SINGLE_LINE_DIAGRAM_SERVER_BASE_URL + NETWORK_UUID, Map.of(
128+
"variantId", WireMock.equalTo(VariantManagerConstants.INITIAL_VARIANT_ID)));
131129
}
132130
}

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

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class SingleLineDiagramTest {
9090
private static final String VARIANT_ID = "variant_1";
9191
private static final String NETWORK_UUID_VARIANT_ERROR_STRING = "88400000-8cf0-11bd-b23e-10b96e4ef00d";
9292
private static final String VARIANT_ERROR_ID = "noVariant";
93+
private static final String BODY_CONTENT = "bodyContent";
9394

9495
private static final String CASE_UUID_STRING = "00000000-8cf0-11bd-b23e-10b96e4ef00d";
9596
private static final UUID CASE_UUID = UUID.fromString(CASE_UUID_STRING);
@@ -218,7 +219,7 @@ public MockResponse dispatch(RecordedRequest request) {
218219
case "/v1/substation-svg/" + NETWORK_UUID_STRING + "/substationErrorId?useName=false&centerLabel=false&diagonalLabel=false&topologicalColoring=false&substationLayout=horizontal&language=en":
219220
case "/v1/substation-svg-and-metadata/" + NETWORK_UUID_STRING + "/substationErrorId?useName=false&centerLabel=false&diagonalLabel=false&topologicalColoring=false&substationLayout=horizontal&language=en":
220221
return new MockResponse(500, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), "{\"timestamp\":\"2020-12-14T10:27:11.760+0000\",\"status\":500,\"error\":\"Internal Server Error\",\"message\":\"tmp\",\"path\":\"/v1/networks\"}");
221-
case "/v1/network-area-diagram/" + NETWORK_UUID_STRING + "?depth=0&withGeoData=true":
222+
case "/v1/network-area-diagram/" + NETWORK_UUID_STRING :
222223
return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), "nad-svg");
223224

224225
case "/v1/svg-component-libraries":
@@ -347,22 +348,20 @@ void testDiagramsAndGraphics(final MockWebServer server) throws Exception {
347348
randomUuid, randomUuid, rootNodeUuid, "substationId")).andExpect(status().isNotFound());
348349

349350
// get the network area diagram
350-
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram?&depth=0&withGeoData=true", studyNameUserIdUuid, firstRootNetworkUuid, rootNodeUuid)
351-
.content("[\"vlFr1A\"]")
352-
.contentType(MediaType.APPLICATION_JSON))
351+
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram", studyNameUserIdUuid, firstRootNetworkUuid, rootNodeUuid)
352+
.content(BODY_CONTENT).contentType(MediaType.APPLICATION_JSON))
353353
.andExpectAll(
354354
content().contentType(MediaType.APPLICATION_JSON),
355355
status().isOk(),
356356
content().string("nad-svg")
357357
);
358358

359-
assertTrue(TestUtils.getRequestsDone(1, server).contains(String.format("/v1/network-area-diagram/" + NETWORK_UUID_STRING + "?depth=0&withGeoData=true")));
359+
assertTrue(TestUtils.getRequestsDone(1, server).contains(String.format("/v1/network-area-diagram/" + NETWORK_UUID_STRING)));
360360

361361
// get the network area diagram from a study that doesn't exist
362-
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram?&depth=0&withGeoData=true", randomUuid, randomUuid, rootNodeUuid)
363-
.content("[\"vlFr1A\"]")
364-
.contentType(MediaType.APPLICATION_JSON))
365-
.andExpect(status().isNotFound());
362+
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram", randomUuid, randomUuid, rootNodeUuid)
363+
.content(BODY_CONTENT).contentType(MediaType.APPLICATION_JSON))
364+
.andExpect(status().isNotFound());
366365

367366
//get voltage levels
368367
mvcResult = getNetworkElementsInfos(studyNameUserIdUuid, firstRootNetworkUuid, rootNodeUuid, "MAP", "VOLTAGE_LEVEL", null, objectMapper.writeValueAsString(List.of()), TestUtils.resourceToString("/network-voltage-levels-infos.json"));
@@ -521,10 +520,10 @@ void testDiagramsVariantError() throws Exception {
521520
status().isNoContent());
522521

523522
//get the network area diagram on a non existing variant
524-
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram?depth=0",
523+
mockMvc.perform(post("/v1/studies/{studyUuid}/root-networks/{rootNetworkUuid}/nodes/{nodeUuid}/network-area-diagram",
525524
studyNameUserIdUuid, firstRootNetworkUuid, modificationNodeUuid)
526-
.content("[\"vlFr1A\"]")
527-
.contentType(MediaType.APPLICATION_JSON)).andExpectAll(
525+
.content(BODY_CONTENT).contentType(MediaType.APPLICATION_JSON))
526+
.andExpectAll(
528527
status().isNoContent());
529528
}
530529

0 commit comments

Comments
 (0)