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