Skip to content

Commit 11601dd

Browse files
committed
Fix cyclic dependencies
Signed-off-by: Ayoub LABIDI <[email protected]>
1 parent f05dff8 commit 11601dd

19 files changed

+253
-186
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
Copyright (c) 2024, 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.configuration;
8+
9+
import com.fasterxml.jackson.databind.Module;
10+
import com.fasterxml.jackson.databind.jsontype.NamedType;
11+
import com.fasterxml.jackson.databind.module.SimpleModule;
12+
import org.gridsuite.studyconfig.server.dto.studylayout.diagramlayout.NadFromElementDiagramLayout;
13+
import org.gridsuite.studyconfig.server.dto.studylayout.diagramlayout.NetworkAreaDiagramLayout;
14+
import org.gridsuite.studyconfig.server.dto.studylayout.diagramlayout.SubstationDiagramLayout;
15+
import org.gridsuite.studyconfig.server.dto.studylayout.diagramlayout.VoltageLevelDiagramLayout;
16+
import org.springframework.context.annotation.Bean;
17+
import org.springframework.context.annotation.Configuration;
18+
19+
/**
20+
* Jackson configuration for diagram layout polymorphic serialization.
21+
* This external configuration avoids circular dependencies between the abstract base class
22+
* and its subtypes by registering the type mappings outside the class hierarchy.
23+
*/
24+
@Configuration
25+
public class DiagramLayoutJacksonConfiguration {
26+
27+
@Bean
28+
public Module diagramLayoutTypeModule() {
29+
SimpleModule module = new SimpleModule("DiagramLayoutTypeModule");
30+
31+
// Register subtypes for polymorphic serialization/deserialization
32+
// This approach avoids circular dependencies that would occur with @JsonSubTypes
33+
module.registerSubtypes(
34+
new NamedType(SubstationDiagramLayout.class, "substation"),
35+
new NamedType(VoltageLevelDiagramLayout.class, "voltage-level"),
36+
new NamedType(NetworkAreaDiagramLayout.class, "network-area-diagram"),
37+
new NamedType(NadFromElementDiagramLayout.class, "nad-from-element")
38+
);
39+
40+
return module;
41+
}
42+
}

src/main/java/org/gridsuite/studyconfig/server/dto/studylayout/StudyLayout.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import lombok.*;
44
import org.gridsuite.studyconfig.server.dto.studylayout.diagramlayout.AbstractDiagramLayout;
5-
import org.gridsuite.studyconfig.server.entities.studylayout.StudyLayoutEntity;
65

76
import java.util.List;
87

@@ -13,10 +12,4 @@
1312
@Getter
1413
public class StudyLayout {
1514
List<AbstractDiagramLayout> diagramLayoutParams;
16-
17-
public StudyLayoutEntity toEntity() {
18-
return StudyLayoutEntity.builder()
19-
.diagramGridLayoutEntityList(diagramLayoutParams.stream().map(AbstractDiagramLayout::toEntity).toList())
20-
.build();
21-
}
2215
}
Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package org.gridsuite.studyconfig.server.dto.studylayout.diagramlayout;
22

3-
import com.fasterxml.jackson.annotation.JsonSubTypes;
43
import com.fasterxml.jackson.annotation.JsonTypeInfo;
54
import lombok.AllArgsConstructor;
65
import lombok.Getter;
76
import lombok.NoArgsConstructor;
87
import lombok.Setter;
98
import lombok.experimental.SuperBuilder;
10-
import org.gridsuite.studyconfig.server.entities.studylayout.AbstractDiagramLayoutEntity;
119

1210
import java.util.Map;
1311
import java.util.UUID;
@@ -23,16 +21,8 @@
2321
property = "type",
2422
visible = true
2523
)
26-
@JsonSubTypes({
27-
@JsonSubTypes.Type(value = SubstationDiagramLayout.class, name = "substation"),
28-
@JsonSubTypes.Type(value = VoltageLevelDiagramLayout.class, name = "voltage-level"),
29-
@JsonSubTypes.Type(value = NetworkAreaDiagramLayout.class, name = "network-area-diagram"),
30-
@JsonSubTypes.Type(value = NadFromElementDiagramLayout.class, name = "nad-from-element"),
31-
})
3224
public abstract class AbstractDiagramLayout {
3325
UUID diagramUuid;
3426

3527
Map<String, DiagramGridLayout> gridLayout;
36-
37-
public abstract AbstractDiagramLayoutEntity toEntity();
3828
}

src/main/java/org/gridsuite/studyconfig/server/dto/studylayout/diagramlayout/DiagramGridLayout.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import lombok.AllArgsConstructor;
44
import lombok.Builder;
55
import lombok.Getter;
6-
import org.gridsuite.studyconfig.server.entities.studylayout.DiagramGridLayoutEntity;
76

87
@Builder
98
@AllArgsConstructor
@@ -13,13 +12,4 @@ public class DiagramGridLayout {
1312
Integer h;
1413
Integer x;
1514
Integer y;
16-
17-
public DiagramGridLayoutEntity toEntity() {
18-
return DiagramGridLayoutEntity.builder()
19-
.width(w)
20-
.height(h)
21-
.xPosition(x)
22-
.yPosition(y)
23-
.build();
24-
}
2515
}

src/main/java/org/gridsuite/studyconfig/server/dto/studylayout/diagramlayout/NadFromElementDiagramLayout.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,8 @@
55
import lombok.NoArgsConstructor;
66
import lombok.Setter;
77
import lombok.experimental.SuperBuilder;
8-
import org.gridsuite.studyconfig.server.entities.studylayout.NadFromElementDiagramLayoutEntity;
98

10-
import java.util.Map;
119
import java.util.UUID;
12-
import java.util.stream.Collectors;
1310

1411
@SuperBuilder
1512
@AllArgsConstructor
@@ -20,18 +17,4 @@ public class NadFromElementDiagramLayout extends AbstractDiagramLayout {
2017
String elementName;
2118
String elementType;
2219
UUID elementUuid;
23-
24-
@Override
25-
public NadFromElementDiagramLayoutEntity toEntity() {
26-
return NadFromElementDiagramLayoutEntity.builder()
27-
.diagramUuid(diagramUuid)
28-
.gridLayout(gridLayout.entrySet().stream().collect(Collectors.toMap(
29-
Map.Entry::getKey,
30-
entry -> entry.getValue().toEntity()
31-
)))
32-
.elementName(elementName)
33-
.elementType(elementType)
34-
.elementUuid(elementUuid)
35-
.build();
36-
}
3720
}

src/main/java/org/gridsuite/studyconfig/server/dto/studylayout/diagramlayout/NetworkAreaDiagramLayout.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,8 @@
55
import lombok.NoArgsConstructor;
66
import lombok.Setter;
77
import lombok.experimental.SuperBuilder;
8-
import org.gridsuite.studyconfig.server.entities.studylayout.NetworkAreaDiagramLayoutEntity;
98

109
import java.util.List;
11-
import java.util.Map;
12-
import java.util.stream.Collectors;
1310

1411
@SuperBuilder
1512
@AllArgsConstructor
@@ -19,17 +16,4 @@
1916
public class NetworkAreaDiagramLayout extends AbstractDiagramLayout {
2017
List<String> voltageLevelIds;
2118
Integer depth;
22-
23-
@Override
24-
public NetworkAreaDiagramLayoutEntity toEntity() {
25-
return NetworkAreaDiagramLayoutEntity.builder()
26-
.diagramUuid(diagramUuid)
27-
.gridLayout(gridLayout.entrySet().stream().collect(Collectors.toMap(
28-
Map.Entry::getKey,
29-
entry -> entry.getValue().toEntity()
30-
)))
31-
.voltageLevelIds(voltageLevelIds)
32-
.depth(depth)
33-
.build();
34-
}
3519
}

src/main/java/org/gridsuite/studyconfig/server/dto/studylayout/diagramlayout/SubstationDiagramLayout.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@
55
import lombok.NoArgsConstructor;
66
import lombok.Setter;
77
import lombok.experimental.SuperBuilder;
8-
import org.gridsuite.studyconfig.server.entities.studylayout.SubstationDiagramLayoutEntity;
9-
10-
import java.util.Map;
11-
import java.util.stream.Collectors;
128

139
@SuperBuilder
1410
@AllArgsConstructor
@@ -17,16 +13,4 @@
1713
@Getter
1814
public class SubstationDiagramLayout extends AbstractDiagramLayout {
1915
String substationId;
20-
21-
@Override
22-
public SubstationDiagramLayoutEntity toEntity() {
23-
return SubstationDiagramLayoutEntity.builder()
24-
.diagramUuid(diagramUuid)
25-
.gridLayout(gridLayout.entrySet().stream().collect(Collectors.toMap(
26-
Map.Entry::getKey,
27-
entry -> entry.getValue().toEntity()
28-
)))
29-
.substationId(substationId)
30-
.build();
31-
}
3216
}

src/main/java/org/gridsuite/studyconfig/server/dto/studylayout/diagramlayout/VoltageLevelDiagramLayout.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@
55
import lombok.NoArgsConstructor;
66
import lombok.Setter;
77
import lombok.experimental.SuperBuilder;
8-
import org.gridsuite.studyconfig.server.entities.studylayout.VoltageLevelLayoutEntity;
9-
10-
import java.util.Map;
11-
import java.util.stream.Collectors;
128

139
@SuperBuilder
1410
@AllArgsConstructor
@@ -17,16 +13,4 @@
1713
@Getter
1814
public class VoltageLevelDiagramLayout extends AbstractDiagramLayout {
1915
String voltageLevelId;
20-
21-
@Override
22-
public VoltageLevelLayoutEntity toEntity() {
23-
return VoltageLevelLayoutEntity.builder()
24-
.diagramUuid(diagramUuid)
25-
.gridLayout(gridLayout.entrySet().stream().collect(Collectors.toMap(
26-
Map.Entry::getKey,
27-
entry -> entry.getValue().toEntity()
28-
)))
29-
.voltageLevelId(voltageLevelId)
30-
.build();
31-
}
3216
}

src/main/java/org/gridsuite/studyconfig/server/entities/studylayout/AbstractDiagramLayoutEntity.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import jakarta.persistence.*;
44
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
56
import lombok.NoArgsConstructor;
67
import lombok.experimental.SuperBuilder;
7-
import org.gridsuite.studyconfig.server.dto.studylayout.diagramlayout.AbstractDiagramLayout;
88

99
import java.util.Map;
1010
import java.util.UUID;
@@ -14,6 +14,7 @@
1414
@SuperBuilder
1515
@NoArgsConstructor
1616
@AllArgsConstructor
17+
@Getter
1718
public abstract class AbstractDiagramLayoutEntity {
1819
@Id
1920
@GeneratedValue(strategy = GenerationType.AUTO)
@@ -25,6 +26,4 @@ public abstract class AbstractDiagramLayoutEntity {
2526
@CollectionTable(foreignKey = @ForeignKey(name = "fk_grid_layout_abstract_diagram"))
2627
@MapKeyColumn(name = "grid_layout_key")
2728
Map<String, DiagramGridLayoutEntity> gridLayout;
28-
29-
public abstract AbstractDiagramLayout toDto();
3029
}
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
package org.gridsuite.studyconfig.server.entities.studylayout;
22

3+
import org.gridsuite.studyconfig.server.dto.studylayout.diagramlayout.DiagramGridLayout;
4+
35
import jakarta.persistence.Embeddable;
46
import lombok.AllArgsConstructor;
57
import lombok.Builder;
8+
import lombok.Getter;
69
import lombok.NoArgsConstructor;
7-
import org.gridsuite.studyconfig.server.dto.studylayout.diagramlayout.DiagramGridLayout;
810

911
@Builder
1012
@AllArgsConstructor
1113
@NoArgsConstructor
1214
@Embeddable
15+
@Getter
1316
public class DiagramGridLayoutEntity {
1417
Integer width;
1518
Integer height;
1619
Integer xPosition;
1720
Integer yPosition;
1821

19-
public DiagramGridLayout toDto() {
20-
return DiagramGridLayout.builder()
21-
.w(width)
22-
.h(height)
23-
.x(xPosition)
24-
.y(yPosition)
25-
.build();
22+
public DiagramGridLayoutEntity(DiagramGridLayout diagramGridLayout) {
23+
this.width = diagramGridLayout.getW();
24+
this.height = diagramGridLayout.getH();
25+
this.xPosition = diagramGridLayout.getX();
26+
this.yPosition = diagramGridLayout.getY();
2627
}
2728
}

0 commit comments

Comments
 (0)