diff --git a/pom.xml b/pom.xml
index ed57a8ed0..12f30e107 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,7 +52,7 @@
gridsuite
org.gridsuite:network-modification-server
- 0.72.0
+ 0.73.0-SNAPSHOT
1.39.0
diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineCreationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineCreationEntity.java
index b943e217d..fd3a5d306 100644
--- a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineCreationEntity.java
+++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineCreationEntity.java
@@ -9,12 +9,16 @@
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.gridsuite.modification.dto.LineCreationInfos;
+import org.gridsuite.modification.dto.LineSegmentInfos;
import org.gridsuite.modification.dto.ModificationInfos;
import jakarta.persistence.*;
import org.gridsuite.modification.server.entities.equipment.modification.FreePropertyEntity;
import org.springframework.util.CollectionUtils;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* @author Sylvain Bouzols
*/
@@ -37,6 +41,13 @@ public class LineCreationEntity extends BranchCreationEntity {
@Column(name = "b2")
private Double b2;
+ @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+ @JoinTable(
+ joinColumns = @JoinColumn(name = "line_id"), foreignKey = @ForeignKey(name = "line_id_fk"),
+ inverseJoinColumns = @JoinColumn(name = "line_segments_id"), inverseForeignKey = @ForeignKey(name = "line_segments_id_fk"),
+ uniqueConstraints = @UniqueConstraint(name = "line_creation_line_segments_uk", columnNames = {"line_segments_id"}))
+ private List lineSegments;
+
public LineCreationEntity(LineCreationInfos lineCreationInfos) {
super(lineCreationInfos);
assignAttributes(lineCreationInfos);
@@ -54,6 +65,19 @@ private void assignAttributes(LineCreationInfos lineCreationInfos) {
b1 = lineCreationInfos.getB1();
g2 = lineCreationInfos.getG2();
b2 = lineCreationInfos.getB2();
+ lineSegments = assignLineSegments(lineCreationInfos.getLineSegments());
+ }
+
+ private List assignLineSegments(List lineSegmentInfos) {
+ List updatedLineSegments = lineSegments;
+
+ if (updatedLineSegments == null) {
+ updatedLineSegments = new ArrayList<>();
+ } else {
+ updatedLineSegments.clear();
+ }
+ updatedLineSegments.addAll(LineSegmentEntity.toLineSegmentEntities(lineSegmentInfos));
+ return updatedLineSegments;
}
@Override
@@ -62,7 +86,7 @@ public LineCreationInfos toModificationInfos() {
}
private LineCreationInfos.LineCreationInfosBuilder, ?> toLineCreationInfosBuilder() {
- LineCreationInfos.LineCreationInfosBuilder, ?> builder = LineCreationInfos
+ return LineCreationInfos
.builder()
.uuid(getId())
.date(getDate())
@@ -98,9 +122,8 @@ public LineCreationInfos toModificationInfos() {
getProperties().stream()
.map(FreePropertyEntity::toInfos)
.toList())
- .operationalLimitsGroups(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups()));
-
- return builder;
+ .operationalLimitsGroups(OperationalLimitsGroupEntity.fromOperationalLimitsGroupsEntities(getOperationalLimitsGroups()))
+ .lineSegments(LineSegmentEntity.fromLineSegmentsEntity(getLineSegments()));
}
}
diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineSegmentEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineSegmentEntity.java
new file mode 100644
index 000000000..46c727359
--- /dev/null
+++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/creation/LineSegmentEntity.java
@@ -0,0 +1,80 @@
+package org.gridsuite.modification.server.entities.equipment.creation;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.gridsuite.modification.dto.LineSegmentInfos;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author El Cheikh Bassel
+ */
+
+@NoArgsConstructor
+@Getter
+@Entity
+@Table(name = "line_segments")
+@AllArgsConstructor
+public class LineSegmentEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name = "uuid")
+ private UUID uuid;
+
+ @Column(name = "segment_type_id")
+ private String segmentTypeId;
+
+ @Column(name = "segment_distance_value")
+ private Integer segmentDistanceValue;
+
+ @Column(name = "area")
+ private String area;
+
+ @Column(name = "temperature")
+ private String temperature;
+
+ @Column(name = "shape_factor")
+ private Integer shapeFactor;
+
+ public static List toLineSegmentEntities(List lineSegmentInfos) {
+ List lineSegments = new ArrayList<>();
+ if (CollectionUtils.isEmpty(lineSegmentInfos)) {
+ return lineSegments;
+ }
+ for (LineSegmentInfos segment : lineSegmentInfos) {
+ lineSegments.add(new LineSegmentEntity(null,
+ segment.segmentTypeId(),
+ segment.segmentDistanceValue(),
+ segment.area(),
+ segment.temperature(),
+ segment.shapeFactor()));
+ }
+ return lineSegments;
+ }
+
+ public static List fromLineSegmentsEntity(List lineSegmentEntities) {
+ List lineSegments = new ArrayList<>();
+ if (CollectionUtils.isEmpty(lineSegmentEntities)) {
+ return lineSegments;
+ }
+ for (LineSegmentEntity entity : lineSegmentEntities) {
+ lineSegments.add(
+ new LineSegmentInfos(entity.segmentTypeId,
+ entity.segmentDistanceValue,
+ entity.area, entity.temperature,
+ entity.shapeFactor));
+ }
+ return lineSegments;
+ }
+}
diff --git a/src/main/resources/db/changelog/changesets/changelog_20260324T101024Z.xml b/src/main/resources/db/changelog/changesets/changelog_20260324T101024Z.xml
new file mode 100644
index 000000000..fdc13c280
--- /dev/null
+++ b/src/main/resources/db/changelog/changesets/changelog_20260324T101024Z.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml
index b42aafbb4..69db75af9 100644
--- a/src/main/resources/db/changelog/db.changelog-master.yaml
+++ b/src/main/resources/db/changelog/db.changelog-master.yaml
@@ -462,4 +462,6 @@ databaseChangeLog:
- include:
file: changesets/changelog_20260304T143540Z.xml
relativeToChangelogFile: true
-
+ - include:
+ file: changesets/changelog_20260324T101024Z.xml
+ relativeToChangelogFile: true