Skip to content

Commit 843c0cd

Browse files
authored
Feat: Manage Map Card save in layout (#69)
Signed-off-by: sBouzols <[email protected]>
1 parent 73af9a2 commit 843c0cd

File tree

7 files changed

+102
-1
lines changed

7 files changed

+102
-1
lines changed

src/main/java/org/gridsuite/studyconfig/server/dto/diagramgridlayout/diagramlayout/AbstractDiagramLayoutJsonMapper.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
@JsonSubTypes({
2020
@JsonSubTypes.Type(value = SubstationDiagramLayout.class, name = "substation"),
2121
@JsonSubTypes.Type(value = VoltageLevelDiagramLayout.class, name = "voltage-level"),
22-
@JsonSubTypes.Type(value = NetworkAreaDiagramLayout.class, name = "network-area-diagram")
22+
@JsonSubTypes.Type(value = NetworkAreaDiagramLayout.class, name = "network-area-diagram"),
23+
@JsonSubTypes.Type(value = MapLayout.class, name = "map")
24+
2325
})
2426
public interface AbstractDiagramLayoutJsonMapper {
2527
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* Copyright (c) 2025, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout;
8+
9+
import lombok.Getter;
10+
import lombok.NoArgsConstructor;
11+
import lombok.Setter;
12+
import lombok.experimental.SuperBuilder;
13+
14+
@SuperBuilder
15+
@NoArgsConstructor
16+
@Setter
17+
@Getter
18+
public class MapLayout extends AbstractDiagramLayout {
19+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* Copyright (c) 2025, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout;
8+
9+
import jakarta.persistence.*;
10+
import lombok.Getter;
11+
import lombok.NoArgsConstructor;
12+
import lombok.experimental.SuperBuilder;
13+
14+
@SuperBuilder
15+
@NoArgsConstructor
16+
@Entity
17+
@Getter
18+
@PrimaryKeyJoinColumn(foreignKey = @ForeignKey(name = "fk_map_layout_abstract"))
19+
public class MapLayoutEntity extends AbstractDiagramLayoutEntity {
20+
}

src/main/java/org/gridsuite/studyconfig/server/mapper/DiagramGridLayoutMapper.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818
import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.NetworkAreaDiagramLayout;
1919
import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.SubstationDiagramLayout;
2020
import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.VoltageLevelDiagramLayout;
21+
import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.MapLayout;
2122
import org.gridsuite.studyconfig.server.entities.diagramgridlayout.DiagramGridLayoutEntity;
2223
import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.AbstractDiagramLayoutEntity;
2324
import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.DiagramPositionEntity;
2425
import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.NetworkAreaDiagramLayoutEntity;
2526
import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.SubstationDiagramLayoutEntity;
2627
import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.VoltageLevelLayoutEntity;
28+
import org.gridsuite.studyconfig.server.entities.diagramgridlayout.diagramlayout.MapLayoutEntity;
2729

2830
public final class DiagramGridLayoutMapper {
2931

@@ -66,6 +68,10 @@ public static AbstractDiagramLayoutEntity toDiagramLayoutEntity(AbstractDiagramL
6668
.name(v.getName())
6769
.diagramPositions(convertDiagramPositionsMap(v.getDiagramPositions(), DiagramGridLayoutMapper::toDiagramPositionEntity))
6870
.build();
71+
case MapLayout m -> MapLayoutEntity.builder()
72+
.diagramUuid(m.getDiagramUuid())
73+
.diagramPositions(convertDiagramPositionsMap(m.getDiagramPositions(), DiagramGridLayoutMapper::toDiagramPositionEntity))
74+
.build();
6975
case null -> null;
7076
default -> throw new IllegalArgumentException("Unknown diagram layout DTO type: " + dto.getClass());
7177
};
@@ -91,6 +97,10 @@ public static AbstractDiagramLayout toDiagramLayoutDto(AbstractDiagramLayoutEnti
9197
.name(n.getName())
9298
.diagramPositions(convertDiagramPositionsMap(n.getDiagramPositions(), DiagramGridLayoutMapper::toDiagramPositionDto))
9399
.build();
100+
case MapLayoutEntity m -> MapLayout.builder()
101+
.diagramUuid(m.getDiagramUuid())
102+
.diagramPositions(convertDiagramPositionsMap(m.getDiagramPositions(), DiagramGridLayoutMapper::toDiagramPositionDto))
103+
.build();
94104
case null -> null;
95105
default -> throw new IllegalArgumentException("Unknown diagram layout entity type: " + entity.getClass());
96106
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
2+
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-latest.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
3+
<changeSet author="bouzolssyl (generated)" id="1754041051708-6">
4+
<createTable tableName="map_layout_entity">
5+
<column name="id" type="UUID">
6+
<constraints nullable="false" primaryKey="true" primaryKeyName="map_layout_entityPK"/>
7+
</column>
8+
</createTable>
9+
</changeSet>
10+
<changeSet author="bouzolssyl (generated)" id="1754041051708-7">
11+
<addForeignKeyConstraint baseColumnNames="id" baseTableName="map_layout_entity" constraintName="fk_map_layout_abstract" deferrable="false" initiallyDeferred="false" referencedColumnNames="id" referencedTableName="abstract_diagram_layout_entity" validate="true"/>
12+
</changeSet>
13+
</databaseChangeLog>

src/main/resources/db/changelog/db.changelog-master.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,6 @@ databaseChangeLog:
6565
- include:
6666
file: changesets/changelog_20250722T151152Z.xml
6767
relativeToChangelogFile: true
68+
- include:
69+
file: changesets/changelog_20250801T093703Z.xml
70+
relativeToChangelogFile: true

src/test/java/org/gridsuite/studyconfig/server/DiagramGridLayoutControllerTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.NetworkAreaDiagramLayout;
1414
import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.SubstationDiagramLayout;
1515
import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.VoltageLevelDiagramLayout;
16+
import org.gridsuite.studyconfig.server.dto.diagramgridlayout.diagramlayout.MapLayout;
1617
import org.gridsuite.studyconfig.server.entities.diagramgridlayout.DiagramGridLayoutEntity;
1718
import org.gridsuite.studyconfig.server.entities.diagramgridlayout.DiagramGridLayoutRepository;
1819
import org.gridsuite.studyconfig.server.mapper.DiagramGridLayoutMapper;
@@ -83,6 +84,22 @@ void testSaveDiagramGridLayout() throws Exception {
8384
assertThat(diagramGridLayoutToCheck).usingRecursiveComparison().isEqualTo(diagramGridLayoutToSave);
8485
}
8586

87+
@Test
88+
void testSaveMapGridLayout() throws Exception {
89+
DiagramGridLayout mapLayoutToSave = createMapGridLayout();
90+
91+
MvcResult mockMvcResult = mockMvc.perform(post("/v1/diagram-grid-layout")
92+
.contentType(MediaType.APPLICATION_JSON)
93+
.content(objectMapper.writeValueAsString(mapLayoutToSave)))
94+
.andExpect(status().isOk())
95+
.andReturn();
96+
97+
UUID mapGridLayoutUUID = objectMapper.readValue(mockMvcResult.getResponse().getContentAsString(), UUID.class);
98+
99+
DiagramGridLayout diagramGridLayoutToCheck = diagramGridLayoutService.getByDiagramGridLayoutUuid(mapGridLayoutUUID);
100+
assertThat(diagramGridLayoutToCheck).usingRecursiveComparison().isEqualTo(mapLayoutToSave);
101+
}
102+
86103
@Test
87104
void testUpdateDiagramGridLayout() throws Exception {
88105
DiagramGridLayoutEntity existingDiagramGridLayout = diagramGridLayoutRepository.save(DiagramGridLayoutMapper.toEntity(createDiagramGridLayout()));
@@ -149,4 +166,21 @@ private DiagramGridLayout createDiagramGridLayout() {
149166
.build())))
150167
.build();
151168
}
169+
170+
private DiagramGridLayout createMapGridLayout() {
171+
return DiagramGridLayout.builder()
172+
.diagramLayouts(new ArrayList<>(List.of(
173+
MapLayout.builder()
174+
.diagramPositions(Map.of(
175+
"lg",
176+
DiagramPosition.builder().w(1)
177+
.h(2)
178+
.x(3)
179+
.y(4)
180+
.build()
181+
))
182+
.diagramUuid(UUID.randomUUID())
183+
.build())))
184+
.build();
185+
}
152186
}

0 commit comments

Comments
 (0)