diff --git a/src/main/java/org/gridsuite/studyconfig/server/dto/diagramgridlayout/diagramlayout/AbstractDiagramLayoutJsonMapper.java b/src/main/java/org/gridsuite/studyconfig/server/dto/diagramgridlayout/diagramlayout/AbstractDiagramLayoutJsonMapper.java index 15d51fc..909b836 100644 --- a/src/main/java/org/gridsuite/studyconfig/server/dto/diagramgridlayout/diagramlayout/AbstractDiagramLayoutJsonMapper.java +++ b/src/main/java/org/gridsuite/studyconfig/server/dto/diagramgridlayout/diagramlayout/AbstractDiagramLayoutJsonMapper.java @@ -19,7 +19,9 @@ @JsonSubTypes({ @JsonSubTypes.Type(value = SubstationDiagramLayout.class, name = "substation"), @JsonSubTypes.Type(value = VoltageLevelDiagramLayout.class, name = "voltage-level"), - @JsonSubTypes.Type(value = NetworkAreaDiagramLayout.class, name = "network-area-diagram") + @JsonSubTypes.Type(value = NetworkAreaDiagramLayout.class, name = "network-area-diagram"), + @JsonSubTypes.Type(value = MapLayout.class, name = "map") + }) public interface AbstractDiagramLayoutJsonMapper { } diff --git a/src/main/java/org/gridsuite/studyconfig/server/dto/diagramgridlayout/diagramlayout/MapLayout.java b/src/main/java/org/gridsuite/studyconfig/server/dto/diagramgridlayout/diagramlayout/MapLayout.java new file mode 100644 index 0000000..6fb653a --- /dev/null +++ b/src/main/java/org/gridsuite/studyconfig/server/dto/diagramgridlayout/diagramlayout/MapLayout.java @@ -0,0 +1,19 @@ +/** + * 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.diagramgridlayout.diagramlayout; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@NoArgsConstructor +@Setter +@Getter +public class MapLayout extends AbstractDiagramLayout { +} diff --git a/src/main/java/org/gridsuite/studyconfig/server/entities/diagramgridlayout/diagramlayout/MapLayoutEntity.java b/src/main/java/org/gridsuite/studyconfig/server/entities/diagramgridlayout/diagramlayout/MapLayoutEntity.java new file mode 100644 index 0000000..5ea0919 --- /dev/null +++ b/src/main/java/org/gridsuite/studyconfig/server/entities/diagramgridlayout/diagramlayout/MapLayoutEntity.java @@ -0,0 +1,20 @@ +/** + * 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.entities.diagramgridlayout.diagramlayout; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@SuperBuilder +@NoArgsConstructor +@Entity +@Getter +@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "fk_map_layout_abstract")) +public class MapLayoutEntity extends AbstractDiagramLayoutEntity { +} diff --git a/src/main/java/org/gridsuite/studyconfig/server/mapper/DiagramGridLayoutMapper.java b/src/main/java/org/gridsuite/studyconfig/server/mapper/DiagramGridLayoutMapper.java index eba37d3..a129e12 100644 --- a/src/main/java/org/gridsuite/studyconfig/server/mapper/DiagramGridLayoutMapper.java +++ b/src/main/java/org/gridsuite/studyconfig/server/mapper/DiagramGridLayoutMapper.java @@ -18,12 +18,14 @@ import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.NetworkAreaDiagramLayout; import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.SubstationDiagramLayout; import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.VoltageLevelDiagramLayout; +import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.MapLayout; import org.gridsuite.studyconfig.server.entities.diagramgridlayout.DiagramGridLayoutEntity; import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.AbstractDiagramLayoutEntity; import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.DiagramPositionEntity; import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.NetworkAreaDiagramLayoutEntity; import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.SubstationDiagramLayoutEntity; import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.VoltageLevelLayoutEntity; +import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.MapLayoutEntity; public final class DiagramGridLayoutMapper { @@ -66,6 +68,10 @@ public static AbstractDiagramLayoutEntity toDiagramLayoutEntity(AbstractDiagramL .name(v.getName()) .diagramPositions(convertDiagramPositionsMap(v.getDiagramPositions(), DiagramGridLayoutMapper::toDiagramPositionEntity)) .build(); + case MapLayout m -> MapLayoutEntity.builder() + .diagramUuid(m.getDiagramUuid()) + .diagramPositions(convertDiagramPositionsMap(m.getDiagramPositions(), DiagramGridLayoutMapper::toDiagramPositionEntity)) + .build(); case null -> null; default -> throw new IllegalArgumentException("Unknown diagram layout DTO type: " + dto.getClass()); }; @@ -91,6 +97,10 @@ public static AbstractDiagramLayout toDiagramLayoutDto(AbstractDiagramLayoutEnti .name(n.getName()) .diagramPositions(convertDiagramPositionsMap(n.getDiagramPositions(), DiagramGridLayoutMapper::toDiagramPositionDto)) .build(); + case MapLayoutEntity m -> MapLayout.builder() + .diagramUuid(m.getDiagramUuid()) + .diagramPositions(convertDiagramPositionsMap(m.getDiagramPositions(), DiagramGridLayoutMapper::toDiagramPositionDto)) + .build(); case null -> null; default -> throw new IllegalArgumentException("Unknown diagram layout entity type: " + entity.getClass()); }; diff --git a/src/main/resources/db/changelog/changesets/changelog_20250801T093703Z.xml b/src/main/resources/db/changelog/changesets/changelog_20250801T093703Z.xml new file mode 100644 index 0000000..d9ea55a --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20250801T093703Z.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 3752796..94bb910 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -65,3 +65,6 @@ databaseChangeLog: - include: file: changesets/changelog_20250722T151152Z.xml relativeToChangelogFile: true + - include: + file: changesets/changelog_20250801T093703Z.xml + relativeToChangelogFile: true diff --git a/src/test/java/org/gridsuite/studyconfig/server/DiagramGridLayoutControllerTest.java b/src/test/java/org/gridsuite/studyconfig/server/DiagramGridLayoutControllerTest.java index 6a1cda3..7b4a933 100644 --- a/src/test/java/org/gridsuite/studyconfig/server/DiagramGridLayoutControllerTest.java +++ b/src/test/java/org/gridsuite/studyconfig/server/DiagramGridLayoutControllerTest.java @@ -13,6 +13,7 @@ import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.NetworkAreaDiagramLayout; import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.SubstationDiagramLayout; import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.VoltageLevelDiagramLayout; +import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.MapLayout; import org.gridsuite.studyconfig.server.entities.diagramgridlayout.DiagramGridLayoutEntity; import org.gridsuite.studyconfig.server.entities.diagramgridlayout.DiagramGridLayoutRepository; import org.gridsuite.studyconfig.server.mapper.DiagramGridLayoutMapper; @@ -83,6 +84,22 @@ void testSaveDiagramGridLayout() throws Exception { assertThat(diagramGridLayoutToCheck).usingRecursiveComparison().isEqualTo(diagramGridLayoutToSave); } + @Test + void testSaveMapGridLayout() throws Exception { + DiagramGridLayout mapLayoutToSave = createMapGridLayout(); + + MvcResult mockMvcResult = mockMvc.perform(post("/v1/diagram-grid-layout") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(mapLayoutToSave))) + .andExpect(status().isOk()) + .andReturn(); + + UUID mapGridLayoutUUID = objectMapper.readValue(mockMvcResult.getResponse().getContentAsString(), UUID.class); + + DiagramGridLayout diagramGridLayoutToCheck = diagramGridLayoutService.getByDiagramGridLayoutUuid(mapGridLayoutUUID); + assertThat(diagramGridLayoutToCheck).usingRecursiveComparison().isEqualTo(mapLayoutToSave); + } + @Test void testUpdateDiagramGridLayout() throws Exception { DiagramGridLayoutEntity existingDiagramGridLayout = diagramGridLayoutRepository.save(DiagramGridLayoutMapper.toEntity(createDiagramGridLayout())); @@ -149,4 +166,21 @@ private DiagramGridLayout createDiagramGridLayout() { .build()))) .build(); } + + private DiagramGridLayout createMapGridLayout() { + return DiagramGridLayout.builder() + .diagramLayouts(new ArrayList<>(List.of( + MapLayout.builder() + .diagramPositions(Map.of( + "lg", + DiagramPosition.builder().w(1) + .h(2) + .x(3) + .y(4) + .build() + )) + .diagramUuid(UUID.randomUUID()) + .build()))) + .build(); + } }