From 8e55fbefa4b21306301fdc808815a925c78b3060 Mon Sep 17 00:00:00 2001 From: Slimane Amar <63394973+SlimaneAmar@users.noreply.github.com> Date: Wed, 29 Jan 2025 15:40:01 +0100 Subject: [PATCH] Migrate to new network modifications endpoints (network root) (#88) Co-authored-by: Slimane AMAR --- .../dto/VoltageInitModificationInfos.java | 13 ++++------- .../service/NetworkModificationService.java | 23 +++++++++++-------- .../server/VoltageInitControllerTest.java | 13 ++++++----- 3 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/main/java/org/gridsuite/voltageinit/server/dto/VoltageInitModificationInfos.java b/src/main/java/org/gridsuite/voltageinit/server/dto/VoltageInitModificationInfos.java index a16f2ffa..4d0f4244 100644 --- a/src/main/java/org/gridsuite/voltageinit/server/dto/VoltageInitModificationInfos.java +++ b/src/main/java/org/gridsuite/voltageinit/server/dto/VoltageInitModificationInfos.java @@ -6,9 +6,9 @@ */ package org.gridsuite.voltageinit.server.dto; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.JsonTypeName; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import java.util.ArrayList; import java.util.List; @@ -19,12 +19,9 @@ @NoArgsConstructor @Getter @Setter -@JsonTypeInfo( - use = JsonTypeInfo.Id.NAME, - property = "type" -) -@JsonTypeName("VOLTAGE_INIT_MODIFICATION") public class VoltageInitModificationInfos { + private String type = "VOLTAGE_INIT_MODIFICATION"; + private List generators = new ArrayList<>(); private List transformers = new ArrayList<>(); diff --git a/src/main/java/org/gridsuite/voltageinit/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/voltageinit/server/service/NetworkModificationService.java index 5673b354..9a1ac6b9 100644 --- a/src/main/java/org/gridsuite/voltageinit/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/voltageinit/server/service/NetworkModificationService.java @@ -17,6 +17,7 @@ import com.powsybl.iidm.network.Terminal; import com.powsybl.iidm.network.TwoWindingsTransformer; import com.powsybl.openreac.parameters.output.OpenReacResult; +import com.powsybl.ws.commons.computation.service.UuidGeneratorService; import org.gridsuite.voltageinit.server.dto.BusModificationInfos; import org.gridsuite.voltageinit.server.dto.GeneratorModificationInfos; import org.gridsuite.voltageinit.server.dto.ShuntCompensatorModificationInfos; @@ -35,10 +36,7 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.concurrent.atomic.AtomicReference; import static com.powsybl.iidm.network.IdentifiableType.TWO_WINDINGS_TRANSFORMER; @@ -51,6 +49,8 @@ public class NetworkModificationService { private static final String NETWORK_MODIFICATION_API_VERSION = "v1"; private static final String DELIMITER = "/"; private static final String GROUP_PATH = "groups" + DELIMITER + "{groupUuid}"; + private static final String NETWORK_MODIFICATIONS_PATH = "network-modifications"; + private static final String QUERY_PARAM_GROUP_UUID = "groupUuid"; public static final String QUERY_PARAM_ERROR_ON_GROUP_NOT_FOUND = "errorOnGroupNotFound"; private String networkModificationServerBaseUri; @@ -59,10 +59,13 @@ public class NetworkModificationService { private final ObjectMapper objectMapper; + private final UuidGeneratorService uuidGeneratorService; + NetworkModificationService(@Value("${gridsuite.services.network-modification-server.base-uri:http://network-modification-server/}") String networkModificationServerBaseUri, - ObjectMapper objectMapper) { + ObjectMapper objectMapper, UuidGeneratorService uuidGeneratorService) { this.networkModificationServerBaseUri = networkModificationServerBaseUri; this.objectMapper = objectMapper; + this.uuidGeneratorService = uuidGeneratorService; } public void setNetworkModificationServerBaseUri(String networkModificationServerBaseUri) { @@ -92,7 +95,7 @@ private Optional getRegulatingBus(Terminal terminal) { } public UUID createVoltageInitModificationGroup(Network network, OpenReacResult result, boolean isUpdateBusVoltage) { - UUID modificationsGroupUuid; + UUID modificationsGroupUuid = uuidGeneratorService.generate(); try { VoltageInitModificationInfos voltageInitModificationInfos = new VoltageInitModificationInfos(); @@ -193,7 +196,8 @@ public UUID createVoltageInitModificationGroup(Network network, OpenReacResult r }); } var uriComponentsBuilder = UriComponentsBuilder - .fromUriString(getNetworkModificationServerURI() + "groups" + DELIMITER + "modification"); + .fromUriString(getNetworkModificationServerURI() + NETWORK_MODIFICATIONS_PATH) + .queryParam(QUERY_PARAM_GROUP_UUID, modificationsGroupUuid); var path = uriComponentsBuilder .buildAndExpand() .toUriString(); @@ -201,10 +205,9 @@ public UUID createVoltageInitModificationGroup(Network network, OpenReacResult r HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = new HttpEntity<>(objectMapper.writeValueAsString(voltageInitModificationInfos), headers); + HttpEntity httpEntity = new HttpEntity<>(objectMapper.writeValueAsString(org.springframework.data.util.Pair.of(voltageInitModificationInfos, List.of())), headers); - modificationsGroupUuid = restTemplate.exchange(path, HttpMethod.POST, httpEntity, UUID.class) - .getBody(); + restTemplate.exchange(path, HttpMethod.POST, httpEntity, Void.class); } catch (JsonProcessingException e) { throw new PowsyblException("Error generating json modifications", e); } catch (HttpStatusCodeException e) { diff --git a/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java b/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java index 9b070162..e9ef39f6 100644 --- a/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java +++ b/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java @@ -100,13 +100,14 @@ @ContextHierarchy({@ContextConfiguration(classes = {VoltageInitApplication.class, TestChannelBinderConfiguration.class})}) class VoltageInitControllerTest { + private static final UUID GENEREATED_RANDOM_UUID = UUID.randomUUID(); private static final UUID NETWORK_UUID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e4"); private static final UUID OTHER_NETWORK_UUID = UUID.fromString("06824085-db85-4883-9458-8c5c9f1585d6"); - private static final UUID RESULT_UUID = UUID.fromString("0c8de370-3e6c-4d72-b292-d355a97e0d5d"); + private static final UUID RESULT_UUID = GENEREATED_RANDOM_UUID; private static final UUID REPORT_UUID = UUID.fromString("0c4de370-3e6a-4d72-b292-d355a97e0d53"); private static final UUID OTHER_RESULT_UUID = UUID.fromString("0c8de370-3e6c-4d72-b292-d355a97e0d5a"); private static final Map INDICATORS = Map.of("defaultPmax", "1000.000000", "defaultQmax", "300.000000", "minimalQPrange", "1.000000"); - private static final UUID MODIFICATIONS_GROUP_UUID = UUID.fromString("33333333-aaaa-bbbb-cccc-dddddddddddd"); + private static final UUID MODIFICATIONS_GROUP_UUID = GENEREATED_RANDOM_UUID; private static final String FILTER_EQUIPMENT_JSON = "[{\"filterId\":\"cf399ef3-7f14-4884-8c82-1c90300da329\",\"identifiableAttributes\":[{\"id\":\"VL1\",\"type\":\"VOLTAGE_LEVEL\"}],\"notFoundEquipments\":[]}]"; private static final String VARIANT_1_ID = "variant_1"; private static final String VARIANT_2_ID = "variant_2"; @@ -262,8 +263,8 @@ void setUp(final MockWebServer server) { completableFutureResultsTask = CompletableFutureTask.runAsync(() -> openReacResult, ForkJoinPool.commonPool()); - // UUID service mocking to always generate the same result UUID - given(uuidGeneratorService.generate()).willReturn(RESULT_UUID); + // UUID service mocking to always generate the same result UUID and group UUID + given(uuidGeneratorService.generate()).willReturn(GENEREATED_RANDOM_UUID); final Dispatcher dispatcher = new Dispatcher() { @SneakyThrows @@ -272,8 +273,8 @@ public MockResponse dispatch(RecordedRequest request) { String path = Objects.requireNonNull(request.getPath()); if (path.matches("/v1/groups/.*") && request.getMethod().equals("DELETE")) { return new MockResponse(200); - } else if (path.matches("/v1/groups/modification") && request.getMethod().equals("POST")) { - return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), "\"" + MODIFICATIONS_GROUP_UUID + "\""); + } else if (path.matches("/v1/network-modifications\\?groupUuid=.*") && request.getMethod().equals("POST")) { + return new MockResponse(200); } else if (path.matches("/v1/filters/export\\?networkUuid=" + NETWORK_UUID + "&variantId=" + VARIANT_2_ID + "&ids=.*")) { return new MockResponse(200, Headers.of(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE), FILTER_EQUIPMENT_JSON); }