diff --git a/src/main/java/org/gridsuite/modification/server/dto/catalog/LimitsForLineTypeInfos.java b/src/main/java/org/gridsuite/modification/server/dto/catalog/LimitsForLineTypeInfos.java index 4b40ec6ee..202a8994f 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/catalog/LimitsForLineTypeInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/catalog/LimitsForLineTypeInfos.java @@ -14,6 +14,7 @@ import lombok.Setter; import lombok.experimental.SuperBuilder; +import java.util.List; import java.util.UUID; /** @@ -36,14 +37,8 @@ public class LimitsForLineTypeInfos { @Schema(description = "Permanent limit") private Double permanentLimit; - @Schema(description = "Temporary limit value") - private Double temporaryLimitValue; - - @Schema(description = "Temporary limit acceptable duration") - private Integer temporaryLimitAcceptableDuration; - - @Schema(description = "Temporary limit name") - private String temporaryLimitName; + @Schema(description = "temporary limits list") + List temporaryLimits; @Schema(description = "Area") private String area; diff --git a/src/main/java/org/gridsuite/modification/server/dto/catalog/TemporaryLimitInfos.java b/src/main/java/org/gridsuite/modification/server/dto/catalog/TemporaryLimitInfos.java new file mode 100644 index 000000000..886db6b52 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/dto/catalog/TemporaryLimitInfos.java @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2026, 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/. + * SPDX-License-Identifier: MPL-2.0 + */ +package org.gridsuite.modification.server.dto.catalog; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.entities.catalog.TemporaryLimitEntity; + +import java.util.UUID; + +/** + * @author Etienne Lesot + */ +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +@Schema(description = "Temporary Limits infos") +public class TemporaryLimitInfos { + @Schema(description = "id") + private UUID id; + + @Schema(description = "Temporary limit value") + private Double limitValue; + + @Schema(description = "Temporary limit acceptable duration") + private Integer acceptableDuration; + + @Schema(description = "Temporary limit name") + private String name; + + public TemporaryLimitEntity toTemporaryLimitEntity() { + return TemporaryLimitEntity.builder() + .limitValue(limitValue) + .acceptableDuration(acceptableDuration) + .name(name).build(); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/catalog/LimitsForLineTypeEntity.java b/src/main/java/org/gridsuite/modification/server/entities/catalog/LimitsForLineTypeEntity.java index 28d2ee887..a89ddd456 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/catalog/LimitsForLineTypeEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/catalog/LimitsForLineTypeEntity.java @@ -13,7 +13,9 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.gridsuite.modification.server.dto.catalog.LimitsForLineTypeInfos; +import org.gridsuite.modification.server.dto.catalog.TemporaryLimitInfos; +import java.util.List; import java.util.UUID; /** @@ -38,14 +40,9 @@ public class LimitsForLineTypeEntity { @Column private Double permanentLimit; - @Column - private Double temporaryLimitValue; - - @Column - private Integer temporaryLimitAcceptableDuration; - - @Column - private String temporaryLimitName; + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "temporary_limit_id", nullable = false) + private List temporaryLimits; @Column private String area; @@ -58,9 +55,7 @@ public LimitsForLineTypeInfos toLineTypeInfos() { .id(id) .limitSetName(limitSetName) .permanentLimit(permanentLimit) - .temporaryLimitValue(temporaryLimitValue) - .temporaryLimitAcceptableDuration(temporaryLimitAcceptableDuration) - .temporaryLimitName(temporaryLimitName) + .temporaryLimits(temporaryLimits.stream().map(TemporaryLimitEntity::toTemporaryLimitInfos).toList()) .area(area) .temperature(temperature) .build(); @@ -70,9 +65,7 @@ public LimitsForLineTypeEntity(LimitsForLineTypeInfos limitsForLineTypeInfos) { this(limitsForLineTypeInfos.getId(), limitsForLineTypeInfos.getLimitSetName(), limitsForLineTypeInfos.getPermanentLimit(), - limitsForLineTypeInfos.getTemporaryLimitValue(), - limitsForLineTypeInfos.getTemporaryLimitAcceptableDuration(), - limitsForLineTypeInfos.getTemporaryLimitName(), + limitsForLineTypeInfos.getTemporaryLimits() != null ? limitsForLineTypeInfos.getTemporaryLimits().stream().map(TemporaryLimitInfos::toTemporaryLimitEntity).toList() : null, limitsForLineTypeInfos.getArea(), limitsForLineTypeInfos.getTemperature()); } diff --git a/src/main/java/org/gridsuite/modification/server/entities/catalog/TemporaryLimitEntity.java b/src/main/java/org/gridsuite/modification/server/entities/catalog/TemporaryLimitEntity.java new file mode 100644 index 000000000..28c135783 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/catalog/TemporaryLimitEntity.java @@ -0,0 +1,51 @@ +/** + * Copyright (c) 2026, 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/. + * SPDX-License-Identifier: MPL-2.0 + */ +package org.gridsuite.modification.server.entities.catalog; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.gridsuite.modification.server.dto.catalog.TemporaryLimitInfos; + +import java.util.UUID; + +/** + * @author Etienne Lesot + */ +@Getter +@NoArgsConstructor +@AllArgsConstructor +@SuperBuilder +@Entity +@Table(name = "temporary_limit_for_line_catalog") +public class TemporaryLimitEntity { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private UUID id; + + @Column + private Double limitValue; + + @Column + private Integer acceptableDuration; + + @Column + private String name; + + public TemporaryLimitInfos toTemporaryLimitInfos() { + return TemporaryLimitInfos.builder() + .id(id) + .limitValue(limitValue) + .acceptableDuration(acceptableDuration) + .name(name).build(); + } +} diff --git a/src/main/java/org/gridsuite/modification/server/service/LineTypesCatalogService.java b/src/main/java/org/gridsuite/modification/server/service/LineTypesCatalogService.java index d68b8b885..6e02b0c41 100644 --- a/src/main/java/org/gridsuite/modification/server/service/LineTypesCatalogService.java +++ b/src/main/java/org/gridsuite/modification/server/service/LineTypesCatalogService.java @@ -56,7 +56,7 @@ public void deleteLineTypesCatalog() { public void resetLineTypes(MultipartFile file) { try (GZIPInputStream gzipInputStream = new GZIPInputStream(file.getInputStream())) { - List lineTypes = mapper.readValue(gzipInputStream, new TypeReference<>() { + List lineTypes = mapper.readValue(gzipInputStream, new TypeReference>() { }); deleteLineTypesCatalog(); // remove duplicates in file diff --git a/src/main/resources/db/changelog/changesets/changelog_20260211T143540Z.xml b/src/main/resources/db/changelog/changesets/changelog_20260211T143540Z.xml new file mode 100644 index 000000000..2f110156b --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20260211T143540Z.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 22bc992fa..ffcbfe894 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -453,3 +453,6 @@ databaseChangeLog: - include: file: changesets/changelog_20251215T152152Z.xml relativeToChangelogFile: true + - include: + file: changesets/changelog_20260211T143540Z.xml + relativeToChangelogFile: true diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 4ec138b38..aa7d48f52 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -1567,9 +1567,9 @@ void testGetLineTypeWithLimitsCatalog() throws Exception { assertEquals(2, selectedLineType.getLimitsForLineType().size()); assertEquals("LimitSet1", selectedLineType.getLimitsForLineType().getFirst().getLimitSetName()); assertEquals(10.0, selectedLineType.getLimitsForLineType().getFirst().getPermanentLimit()); - assertEquals(20.0, selectedLineType.getLimitsForLineType().getFirst().getTemporaryLimitValue()); - assertEquals("TemporaryLimit1", selectedLineType.getLimitsForLineType().getFirst().getTemporaryLimitName()); - assertEquals(100, selectedLineType.getLimitsForLineType().getFirst().getTemporaryLimitAcceptableDuration()); + assertEquals(20.0, selectedLineType.getLimitsForLineType().getFirst().getTemporaryLimits().getFirst().getLimitValue()); + assertEquals("TemporaryLimit1", selectedLineType.getLimitsForLineType().getFirst().getTemporaryLimits().getFirst().getName()); + assertEquals(100, selectedLineType.getLimitsForLineType().getFirst().getTemporaryLimits().getFirst().getAcceptableDuration()); assertEquals("37", selectedLineType.getLimitsForLineType().getFirst().getTemperature()); assertEquals("1", selectedLineType.getLimitsForLineType().getFirst().getArea()); } diff --git a/src/test/resources/line_types_catalog_3.json.gz b/src/test/resources/line_types_catalog_3.json.gz index add23bba9..ea2bb3262 100644 Binary files a/src/test/resources/line_types_catalog_3.json.gz and b/src/test/resources/line_types_catalog_3.json.gz differ