diff --git a/src/main/java/org/gridsuite/studyconfig/server/controller/NetworkVisualizationsParamController.java b/src/main/java/org/gridsuite/studyconfig/server/controller/NetworkVisualizationsParamController.java index 18a19ed..bb6c547 100644 --- a/src/main/java/org/gridsuite/studyconfig/server/controller/NetworkVisualizationsParamController.java +++ b/src/main/java/org/gridsuite/studyconfig/server/controller/NetworkVisualizationsParamController.java @@ -19,15 +19,7 @@ import org.gridsuite.studyconfig.server.service.NetworkVisualizationsParamService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.UUID; diff --git a/src/main/java/org/gridsuite/studyconfig/server/dto/NadPositionsGenerationMode.java b/src/main/java/org/gridsuite/studyconfig/server/dto/NadPositionsGenerationMode.java new file mode 100644 index 0000000..054ce8c --- /dev/null +++ b/src/main/java/org/gridsuite/studyconfig/server/dto/NadPositionsGenerationMode.java @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2025, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.studyconfig.server.dto; + +/** + * @author AJELLAL Ali + */ +public enum NadPositionsGenerationMode { + GEOGRAPHICAL_COORDINATES, + AUTOMATIC, + CONFIGURED +} diff --git a/src/main/java/org/gridsuite/studyconfig/server/dto/NetworkAreaDiagramParamInfos.java b/src/main/java/org/gridsuite/studyconfig/server/dto/NetworkAreaDiagramParamInfos.java index 7571a8e..3981435 100644 --- a/src/main/java/org/gridsuite/studyconfig/server/dto/NetworkAreaDiagramParamInfos.java +++ b/src/main/java/org/gridsuite/studyconfig/server/dto/NetworkAreaDiagramParamInfos.java @@ -13,7 +13,6 @@ */ @Schema(name = "NetworkAreaDiagramParamDto", description = "Network area diagram parameters") public record NetworkAreaDiagramParamInfos( - - @Schema(description = "Initialize with geographical data") - Boolean initNadWithGeoData + @Schema(description = "The nad positions generation mode") + NadPositionsGenerationMode nadPositionsGenerationMode ) { } diff --git a/src/main/java/org/gridsuite/studyconfig/server/entities/NetworkVisualizationParamEntity.java b/src/main/java/org/gridsuite/studyconfig/server/entities/NetworkVisualizationParamEntity.java index ec3d4bd..b945759 100644 --- a/src/main/java/org/gridsuite/studyconfig/server/entities/NetworkVisualizationParamEntity.java +++ b/src/main/java/org/gridsuite/studyconfig/server/entities/NetworkVisualizationParamEntity.java @@ -7,11 +7,8 @@ package org.gridsuite.studyconfig.server.entities; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; + import java.util.UUID; /** @@ -58,6 +55,6 @@ public class NetworkVisualizationParamEntity { @Column(name = "component_library") private String componentLibrary = ""; - @Column(name = "init_nad_with_geo_data") - private Boolean initNadWithGeoData = true; + @Column(name = "nad_positions_generation_mode") + private String nadPositionsGenerationMode = null; } diff --git a/src/main/java/org/gridsuite/studyconfig/server/mapper/NetworkVisualizationParamMapper.java b/src/main/java/org/gridsuite/studyconfig/server/mapper/NetworkVisualizationParamMapper.java index 5ea0f42..980ba5d 100644 --- a/src/main/java/org/gridsuite/studyconfig/server/mapper/NetworkVisualizationParamMapper.java +++ b/src/main/java/org/gridsuite/studyconfig/server/mapper/NetworkVisualizationParamMapper.java @@ -6,10 +6,8 @@ */ package org.gridsuite.studyconfig.server.mapper; -import org.gridsuite.studyconfig.server.dto.MapParamInfos; -import org.gridsuite.studyconfig.server.dto.NetworkAreaDiagramParamInfos; -import org.gridsuite.studyconfig.server.dto.NetworkVisualizationParamInfos; -import org.gridsuite.studyconfig.server.dto.SingleLineDiagramParamInfos; +import org.apache.logging.log4j.util.Strings; +import org.gridsuite.studyconfig.server.dto.*; import org.gridsuite.studyconfig.server.entities.NetworkVisualizationParamEntity; /** @@ -20,7 +18,7 @@ public final class NetworkVisualizationParamMapper { private NetworkVisualizationParamMapper() { } - public static NetworkVisualizationParamInfos toDto(NetworkVisualizationParamEntity entity) { + public static NetworkVisualizationParamInfos toDto(NetworkVisualizationParamEntity entity, NadPositionsGenerationMode nadPositionsGenerationDefaultMode) { return new NetworkVisualizationParamInfos( entity.getId(), new MapParamInfos( @@ -35,10 +33,15 @@ public static NetworkVisualizationParamInfos toDto(NetworkVisualizationParamEnti entity.getSubstationLayout(), entity.getComponentLibrary() ), - new NetworkAreaDiagramParamInfos(entity.getInitNadWithGeoData()) + new NetworkAreaDiagramParamInfos(getNadPositionsGenerationMode(entity.getNadPositionsGenerationMode(), nadPositionsGenerationDefaultMode)) ); } + private static NadPositionsGenerationMode getNadPositionsGenerationMode(String nadPositionsGenerationMode, NadPositionsGenerationMode nadPositionsGenerationDefaultMode) { + return Strings.isEmpty(nadPositionsGenerationMode) ? nadPositionsGenerationDefaultMode : NadPositionsGenerationMode.valueOf(nadPositionsGenerationMode); + + } + public static NetworkVisualizationParamEntity toEntity(NetworkVisualizationParamInfos dto) { NetworkVisualizationParamEntity entity = new NetworkVisualizationParamEntity(); updateEntity(entity, dto); @@ -58,6 +61,6 @@ public static void updateEntity(NetworkVisualizationParamEntity entity, NetworkV entity.setSubstationLayout(dto.singleLineDiagramParameters().substationLayout()); entity.setComponentLibrary(dto.singleLineDiagramParameters().componentLibrary()); // NAD - entity.setInitNadWithGeoData(dto.networkAreaDiagramParameters().initNadWithGeoData()); + entity.setNadPositionsGenerationMode(dto.networkAreaDiagramParameters().nadPositionsGenerationMode().name()); } } diff --git a/src/main/java/org/gridsuite/studyconfig/server/service/NetworkVisualizationsParamService.java b/src/main/java/org/gridsuite/studyconfig/server/service/NetworkVisualizationsParamService.java index b8f1306..d6f70cd 100644 --- a/src/main/java/org/gridsuite/studyconfig/server/service/NetworkVisualizationsParamService.java +++ b/src/main/java/org/gridsuite/studyconfig/server/service/NetworkVisualizationsParamService.java @@ -8,10 +8,12 @@ import jakarta.persistence.EntityNotFoundException; import lombok.RequiredArgsConstructor; +import org.gridsuite.studyconfig.server.dto.NadPositionsGenerationMode; import org.gridsuite.studyconfig.server.dto.NetworkVisualizationParamInfos; import org.gridsuite.studyconfig.server.entities.NetworkVisualizationParamEntity; import org.gridsuite.studyconfig.server.mapper.NetworkVisualizationParamMapper; import org.gridsuite.studyconfig.server.repositories.NetworkVisualizationParamRepository; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,9 +28,13 @@ public class NetworkVisualizationsParamService { private final NetworkVisualizationParamRepository repository; + @Value("${study-config.nad-positions-generation-default-mode:}") + private NadPositionsGenerationMode nadPositionsGenerationDefaultMode; + @Transactional public UUID createDefaultParameters() { NetworkVisualizationParamEntity entity = new NetworkVisualizationParamEntity(); + entity.setNadPositionsGenerationMode(nadPositionsGenerationDefaultMode.toString()); return repository.save(entity).getId(); } @@ -54,14 +60,14 @@ public UUID duplicateParameters(UUID id) { .substationLayout(entity.getSubstationLayout()) .componentLibrary(entity.getComponentLibrary()) // NAD - .initNadWithGeoData(entity.getInitNadWithGeoData()) + .nadPositionsGenerationMode(entity.getNadPositionsGenerationMode()) .build(); return repository.save(duplicate).getId(); } @Transactional(readOnly = true) public NetworkVisualizationParamInfos getParameters(UUID id) { - return NetworkVisualizationParamMapper.toDto(findEntityById(id)); + return NetworkVisualizationParamMapper.toDto(findEntityById(id), nadPositionsGenerationDefaultMode); } @Transactional diff --git a/src/main/resources/config/application.yaml b/src/main/resources/config/application.yaml index 23d8290..90efa22 100644 --- a/src/main/resources/config/application.yaml +++ b/src/main/resources/config/application.yaml @@ -5,3 +5,6 @@ spring: powsybl-ws: database: name: studyconfig + +study-config: + nad-positions-generation-default-mode: GEOGRAPHICAL_COORDINATES diff --git a/src/main/resources/db/changelog/changesets/changelog_20250723T155729Z.xml b/src/main/resources/db/changelog/changesets/changelog_20250723T155729Z.xml new file mode 100644 index 0000000..aaabb2b --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20250723T155729Z.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 94bb910..869e6e9 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -68,3 +68,6 @@ databaseChangeLog: - include: file: changesets/changelog_20250801T093703Z.xml relativeToChangelogFile: true + - include: + file: changesets/changelog_20250723T155729Z.xml + relativeToChangelogFile: true diff --git a/src/test/java/org/gridsuite/studyconfig/server/NetworkVisualizationParamsIntegrationTest.java b/src/test/java/org/gridsuite/studyconfig/server/NetworkVisualizationParamsIntegrationTest.java index d0f21a9..75544c1 100644 --- a/src/test/java/org/gridsuite/studyconfig/server/NetworkVisualizationParamsIntegrationTest.java +++ b/src/test/java/org/gridsuite/studyconfig/server/NetworkVisualizationParamsIntegrationTest.java @@ -24,6 +24,7 @@ import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; +import static org.gridsuite.studyconfig.server.dto.NadPositionsGenerationMode.GEOGRAPHICAL_COORDINATES; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -132,6 +133,18 @@ void testDuplicateParams() throws Exception { assertThat(networkVisualizationParamRepository.existsById(duplicatedParams.id())).isTrue(); } + @Test + void testUpdateNotFoundPositionsConfigUuidParameter() throws Exception { + NetworkVisualizationParamInfos paramsToUpdate = createDto(); + saveAndReturnId(paramsToUpdate); + UUID nonExistentId = UUID.randomUUID(); + UUID updatedPositionsConfigUuid = UUID.randomUUID(); + mockMvc.perform(put(URI_NETWORK_VISUALIZATION_PARAM_BASE + "/" + nonExistentId + "/nad-positions-config-uuid") + .content("\"" + updatedPositionsConfigUuid + "\"") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isNotFound()); + } + private NetworkVisualizationParamInfos getParams(UUID paramsUuid) throws Exception { MvcResult mvcGetResult = mockMvc.perform(get(URI_NETWORK_VISUALIZATION_PARAM_BASE + "/" + paramsUuid)) .andExpect(status().isOk()) @@ -156,14 +169,14 @@ private NetworkVisualizationParamInfos createDto() { return new NetworkVisualizationParamInfos(null, new MapParamInfos(true, false, "flow", true, "base"), new SingleLineDiagramParamInfos(false, false, "layout", "lib"), - new NetworkAreaDiagramParamInfos(true)); + new NetworkAreaDiagramParamInfos(GEOGRAPHICAL_COORDINATES)); } private NetworkVisualizationParamInfos createDtoForUpdate(UUID id) { return new NetworkVisualizationParamInfos(id, new MapParamInfos(false, true, "flow2", false, "base2"), new SingleLineDiagramParamInfos(true, true, "layout2", "lib2"), - new NetworkAreaDiagramParamInfos(false)); + new NetworkAreaDiagramParamInfos(GEOGRAPHICAL_COORDINATES)); } private UUID saveAndReturnId(NetworkVisualizationParamInfos dto) {