diff --git a/pom.xml b/pom.xml index 93b4ce701..06ec1526f 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ gridsuite org.gridsuite:network-modification-server - 0.42.0 + 0.43.0-SNAPSHOT 1.31.0 2.14.1 diff --git a/src/main/java/org/gridsuite/modification/server/entities/EntityRegistry.java b/src/main/java/org/gridsuite/modification/server/entities/EntityRegistry.java index a3a61c8ee..ae45b7142 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/EntityRegistry.java +++ b/src/main/java/org/gridsuite/modification/server/entities/EntityRegistry.java @@ -10,6 +10,7 @@ import java.util.Map; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.*; import org.gridsuite.modification.server.entities.equipment.creation.*; import org.gridsuite.modification.server.entities.equipment.deletion.*; import org.gridsuite.modification.server.entities.equipment.modification.*; @@ -20,8 +21,7 @@ import org.gridsuite.modification.server.entities.equipment.modification.attribute.IntegerEquipmentAttributeModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.attribute.StringEquipmentAttributeModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.byfilter.*; -import org.gridsuite.modification.server.entities.tabular.TabularCreationEntity; -import org.gridsuite.modification.server.entities.tabular.TabularModificationEntity; +import org.gridsuite.modification.server.entities.tabular.TabularModificationsEntity; /** * @author Ayoub LABIDI @@ -50,7 +50,6 @@ private EntityRegistry() { register(ConverterStationCreationInfos.class, ConverterStationCreationEntity.class); register(LccCreationInfos.class, LccCreationEntity.class); register(LccConverterStationCreationInfos.class, LccConverterStationCreationEntity.class); - register(TabularCreationInfos.class, TabularCreationEntity.class); register(CreateVoltageLevelSectionInfos.class, CreateVoltageLevelSectionEntity.class); // // modification @@ -64,8 +63,6 @@ private EntityRegistry() { register(ShuntCompensatorModificationInfos.class, ShuntCompensatorModificationEntity.class); register(VscModificationInfos.class, VscModificationEntity.class); register(ConverterStationModificationInfos.class, ConverterStationModificationEntity.class); - register(TabularModificationInfos.class, TabularModificationEntity.class); - register(LimitSetsTabularModificationInfos.class, TabularModificationEntity.class); register(ByFormulaModificationInfos.class, ByFormulaModificationEntity.class); register(ModificationByAssignmentInfos.class, ModificationByAssignmentEntity.class); register(EquipmentAttributeModificationInfos.class, EquipmentAttributeModificationEntity.class); @@ -76,6 +73,11 @@ private EntityRegistry() { register(CreateVoltageLevelTopologyInfos.class, CreateVoltageLevelTopologyEntity.class); register(MoveVoltageLevelFeederBaysInfos.class, MoveVoltageLevelFeederBaysEntity.class); + // tabular + register(TabularCreationInfos.class, TabularModificationsEntity.class); + register(TabularModificationInfos.class, TabularModificationsEntity.class); + register(LimitSetsTabularModificationInfos.class, TabularModificationsEntity.class); + // // attatching and splitting register(LineAttachToVoltageLevelInfos.class, LineAttachToVoltageLevelEntity.class); register(LineSplitWithVoltageLevelInfos.class, LineSplitWithVoltageLevelEntity.class); diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/EquipmentModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/EquipmentModificationEntity.java index 050d0be72..c157b5fbe 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/EquipmentModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/EquipmentModificationEntity.java @@ -43,16 +43,14 @@ public void update(ModificationInfos modificationInfos) { private void assignAttributes(EquipmentModificationInfos equipmentModificationInfos) { equipmentId = equipmentModificationInfos.getEquipmentId(); - List newProperties = equipmentModificationInfos.getProperties() == null ? null : + List newProperties = equipmentModificationInfos.getProperties() == null ? List.of() : equipmentModificationInfos.getProperties().stream() .map(FreePropertyEntity::new) .toList(); if (this.properties != null) { // update using the same reference with clear/add (to avoid JPA exception) this.properties.clear(); - if (newProperties != null) { - this.properties.addAll(newProperties); - } + this.properties.addAll(newProperties); } else { this.properties = newProperties; } diff --git a/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularBaseEntity.java b/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularBaseEntity.java deleted file mode 100644 index 9f350afdf..000000000 --- a/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularBaseEntity.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - Copyright (c) 2021, 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/. - */ -package org.gridsuite.modification.server.entities.tabular; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.MappedSuperclass; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OrderColumn; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.gridsuite.modification.dto.ModificationInfos; -import org.gridsuite.modification.dto.TabularBaseInfos; -import org.gridsuite.modification.server.entities.ModificationEntity; - -import java.util.List; - -/** - * @author Franck Lecuyer - */ -@NoArgsConstructor -@Getter -@MappedSuperclass -public class TabularBaseEntity extends ModificationEntity { - - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) - @JoinColumn(name = "tabular_modification_id") - @OrderColumn(name = "insert_position") - private List properties; - - private String csvFilename; - - protected TabularBaseEntity(TabularBaseInfos tabularBaseInfos) { - super(tabularBaseInfos); - assignAttributes(tabularBaseInfos); - } - - @Override - public void update(ModificationInfos modificationInfos) { - super.update(modificationInfos); - assignAttributes((TabularBaseInfos) modificationInfos); - } - - private void assignAttributes(TabularBaseInfos tabularBaseInfos) { - List newProperties = tabularBaseInfos.getProperties() == null ? null : - tabularBaseInfos.getProperties().stream() - .map(TabularPropertyEntity::new) - .toList(); - if (this.properties != null) { - this.properties.clear(); - if (newProperties != null) { - this.properties.addAll(newProperties); - } - } else { - this.properties = newProperties; - } - this.csvFilename = tabularBaseInfos.getCsvFilename(); - } -} diff --git a/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularCreationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularCreationEntity.java deleted file mode 100644 index dbd5abc30..000000000 --- a/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularCreationEntity.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright (c) 2024, 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/. - */ -package org.gridsuite.modification.server.entities.tabular; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OrderColumn; -import jakarta.persistence.Table; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.NonNull; -import lombok.Setter; -import org.gridsuite.modification.ModificationType; -import org.gridsuite.modification.dto.ModificationInfos; -import org.gridsuite.modification.dto.TabularCreationInfos; -import org.gridsuite.modification.server.entities.ModificationEntity; -import org.springframework.util.CollectionUtils; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * @author Franck Lecuyer - */ -@NoArgsConstructor -@Getter -@Setter -@Entity -@Table(name = "tabular_creation") -public class TabularCreationEntity extends TabularBaseEntity { - - @Column(name = "creationType") - @Enumerated(EnumType.STRING) - private ModificationType creationType; - - @OneToMany(cascade = CascadeType.ALL) - @OrderColumn - private List creations; - - public TabularCreationEntity(@NonNull TabularCreationInfos tabularCreationInfos) { - super(tabularCreationInfos); - assignAttributes(tabularCreationInfos); - } - - @Override - public TabularCreationInfos toModificationInfos() { - List creationsInfos = creations.stream().map(ModificationEntity::toModificationInfos).collect(Collectors.toList()); - return TabularCreationInfos.builder() - .date(getDate()) - .uuid(getId()) - .stashed(getStashed()) - .activated(getActivated()) - .creationType(creationType) - .creations(creationsInfos) - .properties(CollectionUtils.isEmpty(getProperties()) ? null : getProperties().stream() - .map(TabularPropertyEntity::toInfos) - .toList()) - .csvFilename(getCsvFilename()) - .build(); - } - - @Override - public void update(@NonNull ModificationInfos modificationInfos) { - super.update(modificationInfos); - assignAttributes((TabularCreationInfos) modificationInfos); - } - - private void assignAttributes(TabularCreationInfos tabularCreationInfos) { - creationType = tabularCreationInfos.getCreationType(); - if (creations == null) { - creations = tabularCreationInfos.getCreations().stream() - .map(ModificationEntity::fromDTO) - .toList(); - } else { - creations.clear(); - creations.addAll(tabularCreationInfos.getCreations().stream() - .map(ModificationEntity::fromDTO) - .toList()); - } - } -} diff --git a/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularModificationEntity.java deleted file mode 100644 index c9af5f86b..000000000 --- a/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularModificationEntity.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright (c) 2023, 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/. - */ -package org.gridsuite.modification.server.entities.tabular; - -import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.NonNull; -import lombok.Setter; - -import java.util.List; -import java.util.stream.Collectors; - -import org.gridsuite.modification.ModificationType; -import org.gridsuite.modification.dto.*; -import org.gridsuite.modification.server.entities.ModificationEntity; -import org.springframework.util.CollectionUtils; - -/** - * @author Etienne Homer - */ -@NoArgsConstructor -@Getter -@Setter -@Entity -@Table(name = "tabular_modification") -public class TabularModificationEntity extends TabularBaseEntity { - - @Column(name = "modificationType") - @Enumerated(EnumType.STRING) - private ModificationType modificationType; - - @OneToMany(cascade = CascadeType.ALL) - @OrderColumn - private List modifications; - - public TabularModificationEntity(@NonNull TabularModificationInfos tabularModificationInfos) { - super(tabularModificationInfos); - assignAttributes(tabularModificationInfos); - } - - public TabularModificationEntity(@NonNull LimitSetsTabularModificationInfos tabularModificationInfos) { - super(tabularModificationInfos); - assignAttributes(tabularModificationInfos); - } - - @Override - public TabularModificationInfos toModificationInfos() { - List modificationsInfos = modifications.stream().map(ModificationEntity::toModificationInfos).collect(Collectors.toList()); - return TabularModificationInfos.builder() - .date(getDate()) - .uuid(getId()) - .stashed(getStashed()) - .activated(getActivated()) - .modificationType(modificationType) - .modifications(modificationsInfos) - .properties(CollectionUtils.isEmpty(getProperties()) ? null : getProperties().stream() - .map(TabularPropertyEntity::toInfos) - .toList()) - .csvFilename(getCsvFilename()) - .build(); - } - - @Override - public void update(@NonNull ModificationInfos modificationInfos) { - super.update(modificationInfos); - assignAttributes((TabularModificationInfos) modificationInfos); - } - - private void assignAttributes(TabularModificationInfos tabularModificationInfos) { - modificationType = tabularModificationInfos.getModificationType(); - if (modifications == null) { - modifications = tabularModificationInfos.getModifications().stream() - .map(ModificationEntity::fromDTO) - .collect(Collectors.toList()); - } else { - modifications.clear(); - modifications.addAll(tabularModificationInfos.getModifications().stream() - .map(ModificationEntity::fromDTO) - .toList()); - } - } -} diff --git a/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularModificationsEntity.java b/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularModificationsEntity.java new file mode 100644 index 000000000..cd60c3b36 --- /dev/null +++ b/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularModificationsEntity.java @@ -0,0 +1,100 @@ +/* + Copyright (c) 2025, 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/. + */ +package org.gridsuite.modification.server.entities.tabular; + +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.NonNull; +import lombok.Setter; +import org.gridsuite.modification.ModificationType; +import org.gridsuite.modification.dto.ModificationInfos; +import org.gridsuite.modification.dto.tabular.*; +import org.gridsuite.modification.server.entities.ModificationEntity; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author David Braquart + */ +@NoArgsConstructor +@Getter +@Setter +@Entity +@Table(name = "tabular_modifications") +public class TabularModificationsEntity extends ModificationEntity { + + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) + @JoinColumn(name = "tabular_modification_id") + @OrderColumn(name = "insert_position") + private List properties; + + private String csvFilename; + + @Enumerated(EnumType.STRING) + private ModificationType modificationType; + + @OneToMany(cascade = CascadeType.ALL) + @OrderColumn + private List modifications; + + public TabularModificationsEntity(@NonNull TabularModificationInfos tabularModificationInfos) { + super(tabularModificationInfos); + assignAttributes(tabularModificationInfos); + } + + public TabularModificationsEntity(@NonNull LimitSetsTabularModificationInfos tabularModificationInfos) { + super(tabularModificationInfos); + assignAttributes(tabularModificationInfos); + } + + public TabularModificationsEntity(@NonNull TabularCreationInfos tabularCreationInfos) { + super(tabularCreationInfos); + assignAttributes(tabularCreationInfos); + } + + @Override + public void update(ModificationInfos modificationInfos) { + super.update(modificationInfos); + assignAttributes((TabularBaseInfos) modificationInfos); + } + + @Override + public TabularBaseInfos toModificationInfos() { + throw new UnsupportedOperationException("Tabular DTO must be retrieved with NetworkModificationRepository::getModificationInfos"); + } + + private void assignAttributes(TabularBaseInfos tabularBaseInfos) { + this.csvFilename = tabularBaseInfos.getCsvFilename(); + modificationType = tabularBaseInfos.getModificationType(); + // properties list + List newProperties = tabularBaseInfos.getProperties() == null ? null : + tabularBaseInfos.getProperties().stream() + .map(TabularPropertyEntity::new) + .toList(); + if (this.properties != null) { + this.properties.clear(); + if (newProperties != null) { + this.properties.addAll(newProperties); + } + } else { + this.properties = newProperties; + } + // modifications list + if (modifications == null) { + modifications = tabularBaseInfos.getModifications().stream() + .map(ModificationEntity::fromDTO) + .collect(Collectors.toList()); + } else { + modifications.clear(); + modifications.addAll(tabularBaseInfos.getModifications().stream() + .map(ModificationEntity::fromDTO) + .toList()); + } + } +} diff --git a/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularPropertyEntity.java b/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularPropertyEntity.java index 397d830a2..db7da6912 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularPropertyEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/tabular/TabularPropertyEntity.java @@ -18,7 +18,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import org.gridsuite.modification.dto.TabularPropertyInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import java.util.UUID; diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java index 3d9a06003..f78c27c6e 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java @@ -17,7 +17,6 @@ import com.powsybl.network.store.client.NetworkStoreService; import com.powsybl.network.store.client.PreloadingStrategy; import lombok.Getter; -import lombok.Setter; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.modifications.AbstractModification; @@ -29,6 +28,7 @@ import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; import org.gridsuite.modification.server.entities.ModificationEntity; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; +import org.gridsuite.modification.server.repositories.NetworkModificationRepository; import org.gridsuite.modification.server.service.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -63,8 +63,9 @@ public class NetworkModificationApplicator { private final NetworkModificationObserver networkModificationObserver; + private final NetworkModificationRepository networkModificationRepository; + @Value("${impacts.collection-threshold:50}") - @Setter // TODO REMOVE when VoltageInitReportTest will no longer use NetworkModificationApplicator private Integer collectionThreshold; @Value("${naming-strategy:Default}") @@ -75,6 +76,7 @@ public NetworkModificationApplicator(NetworkStoreService networkStoreService, Eq ReportService reportService, FilterService filterService, LoadFlowService loadFlowService, NetworkModificationObserver networkModificationObserver, + NetworkModificationRepository networkModificationRepository, LargeNetworkModificationExecutionService largeNetworkModificationExecutionService) { this.networkStoreService = networkStoreService; this.equipmentInfosService = equipmentInfosService; @@ -83,6 +85,7 @@ public NetworkModificationApplicator(NetworkStoreService networkStoreService, Eq this.filterService = filterService; this.loadFlowService = loadFlowService; this.networkModificationObserver = networkModificationObserver; + this.networkModificationRepository = networkModificationRepository; this.largeNetworkModificationExecutionService = largeNetworkModificationExecutionService; } @@ -192,7 +195,7 @@ private ApplicationStatus apply(ModificationApplicationGroup modificationGroupIn .filter(ModificationEntity::getActivated) .map(m -> { listener.initModificationApplication(modificationGroupInfos.groupUuid(), m); - return apply(m.toModificationInfos(), listener.getNetwork(), reportNode); + return apply(networkModificationRepository.getModificationInfos(m), listener.getNetwork(), reportNode); }) .reduce(ApplicationStatus::max) .orElse(ApplicationStatus.ALL_OK); diff --git a/src/main/java/org/gridsuite/modification/server/repositories/GeneratorCreationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/GeneratorCreationRepository.java index 230fdc167..315d8f395 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/GeneratorCreationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/GeneratorCreationRepository.java @@ -34,20 +34,4 @@ public interface GeneratorCreationRepository extends JpaRepository subModificationIdsPart); - - @Modifying - @Query(value = "BEGIN;" + - "DELETE FROM tabular_creation_creations WHERE tabular_creation_entity_id = ?1 ;" + - "DELETE FROM modification WHERE id IN ?2 ;" + - "COMMIT;", nativeQuery = true) - // This function is generic and can work on any creation - void deleteTabularCreationCreations(UUID tabularModificationId, List subModificationIds); - - @Modifying - @Query(value = "BEGIN;" + - "DELETE FROM tabular_creation WHERE id = ?1 ;" + - "DELETE FROM modification WHERE id = ?1 ;" + - "COMMIT;", nativeQuery = true) - // This function is generic and can work on any creation - void deleteTabularCreationItself(UUID tabularModificationId); } diff --git a/src/main/java/org/gridsuite/modification/server/repositories/LineModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/LineModificationRepository.java index a0cac072f..0aa459ae1 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/LineModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/LineModificationRepository.java @@ -42,17 +42,17 @@ public interface LineModificationRepository extends JpaRepository subModificationIds); @Modifying @Query(value = "BEGIN;" + - "DELETE FROM tabular_modification WHERE id = ?1 ;" + + "DELETE FROM tabular_modifications WHERE id = ?1 ;" + "DELETE FROM modification WHERE id = ?1 ;" + "COMMIT;", nativeQuery = true) - // This function is generic and can work on any modification + // This function is generic and can work on any tabular modification/creation void deleteTabularModificationItself(UUID tabularModificationId); } diff --git a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java index 93e97849f..6ec7ec599 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java @@ -49,18 +49,12 @@ public interface ModificationRepository extends JpaRepository findAllByIdInReverse(List uuids); - @Query(value = "SELECT cast(modifications_id AS VARCHAR) FROM tabular_modification_modifications WHERE tabular_modification_entity_id = :uuid", nativeQuery = true) + @Query(value = "SELECT cast(modifications_id AS VARCHAR) FROM tabular_modifications_modifications WHERE tabular_modifications_entity_id = :uuid", nativeQuery = true) List findSubModificationIdsByTabularModificationId(UUID uuid); - @Query(value = "SELECT cast(modifications_id AS VARCHAR) FROM tabular_modification_modifications WHERE tabular_modification_entity_id = :uuid ORDER BY modifications_order", nativeQuery = true) + @Query(value = "SELECT cast(modifications_id AS VARCHAR) FROM tabular_modifications_modifications WHERE tabular_modifications_entity_id = :uuid ORDER BY modifications_order", nativeQuery = true) List findSubModificationIdsByTabularModificationIdOrderByModificationsOrder(UUID uuid); - @Query(value = "SELECT cast(creations_id AS VARCHAR) FROM tabular_creation_creations WHERE tabular_creation_entity_id = :uuid", nativeQuery = true) - List findSubModificationIdsByTabularCreationId(UUID uuid); - - @Query(value = "SELECT cast(creations_id AS VARCHAR) FROM tabular_creation_creations WHERE tabular_creation_entity_id = :uuid ORDER BY creations_order", nativeQuery = true) - List findSubModificationIdsByTabularCreationIdOrderByModificationsOrder(UUID uuid); - @Query(value = "SELECT cast(modification_id AS VARCHAR) FROM composite_modification_sub_modifications WHERE id = :uuid ORDER BY modifications_order", nativeQuery = true) List findModificationIdsByCompositeModificationId(UUID uuid); diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 14c310fb0..696851f78 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -12,13 +12,12 @@ import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.*; import org.gridsuite.modification.server.dto.ModificationMetadata; import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; import org.gridsuite.modification.server.entities.*; import org.gridsuite.modification.server.entities.equipment.modification.EquipmentModificationEntity; -import org.gridsuite.modification.server.entities.tabular.TabularBaseEntity; -import org.gridsuite.modification.server.entities.tabular.TabularCreationEntity; -import org.gridsuite.modification.server.entities.tabular.TabularModificationEntity; +import org.gridsuite.modification.server.entities.tabular.TabularModificationsEntity; import org.gridsuite.modification.server.entities.tabular.TabularPropertyEntity; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; @@ -105,20 +104,16 @@ public void deleteAll() { modificationGroupRepository.deleteAll(); } - @Transactional // To have all create in the same transaction (atomic) - // TODO Remove transaction when errors will no longer be sent to the front - // This method should be package-private and not used as API of the service as it uses ModificationEntity and - // we want to encapsulate the use of Entity related objects to this service. - // Nevertheless We have to keep it public for transactional annotation. + @Transactional + // TODO Rather than calling saveModificationsNonTransactional(), we should call saveModificationInfos() below. + // In this case, we could change this method signature to use DTOs instead of Entities. + // Note: This current method is used only by the tests. public List saveModifications(UUID groupUuid, List modifications) { return saveModificationsNonTransactional(groupUuid, modifications); } - @Transactional // To have all create in the same transaction (atomic) - // TODO Remove transaction when errors will no longer be sent to the front public List saveModificationInfos(UUID groupUuid, List modifications) { List entities = modifications.stream().map(ModificationEntity::fromDTO).toList(); - return saveModificationsNonTransactional(groupUuid, entities); } @@ -314,6 +309,24 @@ private List reorderModifications(List loadTabularModificationSubEntities(List subModificationsUuids, ModificationType modificationType) { List modifications; switch (modificationType) { + case GENERATOR_CREATION -> { + // load generator modifications with curvePoints + modifications = generatorCreationRepository.findAllReactiveCapabilityCurvePointsByIdIn(subModificationsUuids).stream().toList(); + // load properties too, it uses hibernate first-level cache to fill them up directly in modifications + generatorCreationRepository.findAllPropertiesByIdIn(subModificationsUuids); + } + case BATTERY_CREATION -> { + // load battery modifications with curvePoints + modifications = batteryCreationRepository.findAllReactiveCapabilityCurvePointsByIdIn(subModificationsUuids).stream().toList(); + // load properties too, it uses hibernate first-level cache to fill them up directly in modifications + batteryCreationRepository.findAllPropertiesByIdIn(subModificationsUuids); + } + case LOAD_CREATION -> + // load Load modifications with properties + modifications = loadCreationRepository.findAllPropertiesByIdIn(subModificationsUuids); + case SHUNT_COMPENSATOR_CREATION -> + // load MCS modifications with properties + modifications = shuntCompensatorCreationRepository.findAllPropertiesByIdIn(subModificationsUuids); case GENERATOR_MODIFICATION -> { // load generator modifications with curvePoints modifications = generatorModificationRepository.findAllReactiveCapabilityCurvePointsByIdIn(subModificationsUuids).stream().toList(); @@ -356,87 +369,34 @@ private List loadTabularModificationSubEn return modifications; } - private TabularModificationInfos loadTabularModification(ModificationEntity modificationEntity) { - TabularModificationEntity tabularModificationEntity = (TabularModificationEntity) modificationEntity; + private TabularBaseInfos loadTabularModification(TabularModificationsEntity tabularEntity) { // fetch embedded modifications uuids only - List subModificationsUuids = modificationRepository.findSubModificationIdsByTabularModificationIdOrderByModificationsOrder(modificationEntity.getId()); + List subModificationsUuids = modificationRepository.findSubModificationIdsByTabularModificationIdOrderByModificationsOrder(tabularEntity.getId()); // optimized entities full loading, per type - List modifications = loadTabularModificationSubEntities(subModificationsUuids, tabularModificationEntity.getModificationType()); + List modifications = loadTabularModificationSubEntities(subModificationsUuids, tabularEntity.getModificationType()); // re-order the list of entities based on the ordered list of IDs List orderedModifications = reorderModifications(modifications, subModificationsUuids); - // then build DTOs - var builder = TabularModificationInfos.builder(); - if (tabularModificationEntity.getType().equals(ModificationType.LIMIT_SETS_TABULAR_MODIFICATION.name())) { - builder = LimitSetsTabularModificationInfos.builder(); - } - return builder.uuid(tabularModificationEntity.getId()) - .date(tabularModificationEntity.getDate()) - .stashed(tabularModificationEntity.getStashed()) - .activated(tabularModificationEntity.getActivated()) - .modificationType(tabularModificationEntity.getModificationType()) + var builder = switch (ModificationType.valueOf(tabularEntity.getType())) { + case ModificationType.TABULAR_CREATION -> TabularCreationInfos.builder(); + case ModificationType.LIMIT_SETS_TABULAR_MODIFICATION -> LimitSetsTabularModificationInfos.builder(); + default -> TabularModificationInfos.builder(); + }; + return builder.uuid(tabularEntity.getId()) + .date(tabularEntity.getDate()) + .stashed(tabularEntity.getStashed()) + .activated(tabularEntity.getActivated()) + .modificationType(tabularEntity.getModificationType()) .modifications(orderedModifications.stream().map(ModificationEntity::toModificationInfos).toList()) - .properties(CollectionUtils.isEmpty(tabularModificationEntity.getProperties()) ? null : tabularModificationEntity.getProperties().stream() + .properties(CollectionUtils.isEmpty(tabularEntity.getProperties()) ? null : tabularEntity.getProperties().stream() .map(TabularPropertyEntity::toInfos) .toList()) - .csvFilename(tabularModificationEntity.getCsvFilename()) + .csvFilename(tabularEntity.getCsvFilename()) .build(); } - private List loadTabularCreationSubEntities(List subModificationsUuids, ModificationType modificationType) { - List modifications; - switch (modificationType) { - case GENERATOR_CREATION -> { - // load generator modifications with curvePoints - modifications = generatorCreationRepository.findAllReactiveCapabilityCurvePointsByIdIn(subModificationsUuids).stream().toList(); - // load properties too, it uses hibernate first-level cache to fill them up directly in modifications - generatorCreationRepository.findAllPropertiesByIdIn(subModificationsUuids); - } - case BATTERY_CREATION -> { - // load battery modifications with curvePoints - modifications = batteryCreationRepository.findAllReactiveCapabilityCurvePointsByIdIn(subModificationsUuids).stream().toList(); - // load properties too, it uses hibernate first-level cache to fill them up directly in modifications - batteryCreationRepository.findAllPropertiesByIdIn(subModificationsUuids); - } - case LOAD_CREATION -> - // load Load modifications with properties - modifications = loadCreationRepository.findAllPropertiesByIdIn(subModificationsUuids); - case SHUNT_COMPENSATOR_CREATION -> - // load MCS modifications with properties - modifications = shuntCompensatorCreationRepository.findAllPropertiesByIdIn(subModificationsUuids); - default -> - throw new UnsupportedOperationException(String.format("No sub-modifications loading for creation type: %s", modificationType)); - } - return modifications; - } - - private TabularCreationInfos loadTabularCreation(ModificationEntity modificationEntity) { - TabularCreationEntity tabularCreationEntity = (TabularCreationEntity) modificationEntity; - // fetch embedded modifications uuids only - List subModificationsUuids = modificationRepository.findSubModificationIdsByTabularCreationIdOrderByModificationsOrder(modificationEntity.getId()); - // optimized entities full loading, per type - List modifications = loadTabularCreationSubEntities(subModificationsUuids, tabularCreationEntity.getCreationType()); - // re-order the list of entities based on the ordered list of IDs - List orderedModifications = reorderModifications(modifications, subModificationsUuids); - // then build DTOs - return TabularCreationInfos.builder() - .uuid(tabularCreationEntity.getId()) - .date(tabularCreationEntity.getDate()) - .stashed(tabularCreationEntity.getStashed()) - .activated(tabularCreationEntity.getActivated()) - .creationType(tabularCreationEntity.getCreationType()) - .creations(orderedModifications.stream().map(ModificationEntity::toModificationInfos).toList()) - .properties(CollectionUtils.isEmpty(tabularCreationEntity.getProperties()) ? null : tabularCreationEntity.getProperties().stream() - .map(TabularPropertyEntity::toInfos) - .toList()) - .csvFilename(tabularCreationEntity.getCsvFilename()) - .build(); - } - public ModificationInfos getModificationInfos(ModificationEntity modificationEntity) { - if (modificationEntity instanceof TabularModificationEntity) { - return loadTabularModification(modificationEntity); - } else if (modificationEntity instanceof TabularCreationEntity) { - return loadTabularCreation(modificationEntity); + if (modificationEntity instanceof TabularModificationsEntity tabularEntity) { + return loadTabularModification(tabularEntity); } return modificationEntity.toModificationInfos(); } @@ -630,14 +590,12 @@ public void updateModification(@NonNull UUID modificationUuid, @NonNull Modifica // Tabular modifications optimization: // Before updating/adding with new sub-modifications, we delete and clear existing sub-modifications manually // to avoid JPA to make a huge query to find them (no need to read them, they are going to be replaced). - if (modificationInfos.getType() == ModificationType.TABULAR_MODIFICATION || modificationInfos.getType() == ModificationType.LIMIT_SETS_TABULAR_MODIFICATION) { - TabularModificationEntity tabularModificationEntity = (TabularModificationEntity) entity; - deleteTabularModificationSubModifications(tabularModificationEntity); - tabularModificationEntity.update(modificationInfos); - } else if (modificationInfos.getType() == ModificationType.TABULAR_CREATION) { - TabularCreationEntity tabularCreationEntity = (TabularCreationEntity) entity; - deleteTabularCreationSubModifications(tabularCreationEntity); - tabularCreationEntity.update(modificationInfos); + if (modificationInfos.getType() == ModificationType.TABULAR_CREATION + || modificationInfos.getType() == ModificationType.TABULAR_MODIFICATION + || modificationInfos.getType() == ModificationType.LIMIT_SETS_TABULAR_MODIFICATION) { + TabularModificationsEntity tabularEntity = (TabularModificationsEntity) entity; + deleteTabularModificationSubModifications(tabularEntity); + tabularEntity.update(modificationInfos); } else { entity.update(modificationInfos); } @@ -681,27 +639,17 @@ private void deleteModifications(List modificationEntities) // efficient so no need to dig deeper about that for now. // delete tabular modifications/creations - List tabularModificationsToDelete = modificationEntities.stream().filter(TabularModificationEntity.class::isInstance).map(TabularModificationEntity.class::cast).toList(); + List tabularModificationsToDelete = modificationEntities.stream().filter(TabularModificationsEntity.class::isInstance).map(TabularModificationsEntity.class::cast).toList(); tabularModificationsToDelete.forEach(this::deleteTabularModification); - List tabularCreationsToDelete = modificationEntities.stream().filter(TabularCreationEntity.class::isInstance).map(TabularCreationEntity.class::cast).toList(); - tabularCreationsToDelete.forEach(this::deleteTabularCreation); // delete other modification types with "in" requests - List uuidsToDelete = modificationEntities.stream().filter(Predicate.not(TabularBaseEntity.class::isInstance)).map(ModificationEntity::getId).toList(); + List uuidsToDelete = modificationEntities.stream().filter(Predicate.not(TabularModificationsEntity.class::isInstance)).map(ModificationEntity::getId).toList(); if (!uuidsToDelete.isEmpty()) { modificationApplicationInfosService.deleteAllByModificationIds(uuidsToDelete); modificationRepository.deleteAllByIdIn(uuidsToDelete); } } - private void deleteTabularCreation(TabularCreationEntity tabularCreationEntity) { - deleteTabular(tabularCreationEntity.getCreationType(), tabularCreationEntity); - } - - private void deleteTabularModification(TabularModificationEntity tabularModificationEntity) { - deleteTabular(tabularModificationEntity.getModificationType(), tabularModificationEntity); - } - private void deleteSomeLineTabularSubModifications(List subModificationsIds) { List opLimitsGroupsIds = modificationRepository.findLineModificationOpLimitsGroupsIdsByBranchIds(subModificationsIds); List currentLimitsIds = modificationRepository.findCurrentLimitsIdsByOpLimitsGroupsIds(opLimitsGroupsIds); @@ -745,46 +693,27 @@ private void deleteAllTabularSubModificationsUsingPartition(ModificationType tab } } - private void deleteTabular(ModificationType tabularModificationType, ModificationEntity modificationEntity) { - UUID modificationUuid = modificationEntity.getId(); + private void deleteTabularModification(TabularModificationsEntity tabularEntity) { + UUID modificationUuid = tabularEntity.getId(); List modificationToCleanUuids = new ArrayList<>(); modificationToCleanUuids.add(modificationUuid); - List subModificationsIds = modificationEntity instanceof TabularModificationEntity ? - modificationRepository.findSubModificationIdsByTabularModificationId(modificationUuid) : - modificationRepository.findSubModificationIdsByTabularCreationId(modificationUuid); + List subModificationsIds = modificationRepository.findSubModificationIdsByTabularModificationId(modificationUuid); modificationToCleanUuids.addAll(subModificationsIds); - modificationApplicationInfosService.deleteAllByModificationIds(modificationToCleanUuids); tabularPropertyRepository.deleteTabularProperties(modificationUuid); - deleteAllTabularSubModificationsUsingPartition(tabularModificationType, subModificationsIds); - if (modificationEntity instanceof TabularModificationEntity) { - // line functions works for any modification case - lineModificationRepository.deleteTabularModificationModifications(modificationUuid, subModificationsIds); - lineModificationRepository.deleteTabularModificationItself(modificationUuid); - } else { - // generator functions works for any creation case - generatorCreationRepository.deleteTabularCreationCreations(modificationUuid, subModificationsIds); - generatorCreationRepository.deleteTabularCreationItself(modificationUuid); - } - } - - private void deleteTabularCreationSubModifications(TabularCreationEntity tabularCreationEntity) { - UUID modificationId = tabularCreationEntity.getId(); - List subModificationsIds = modificationRepository.findSubModificationIdsByTabularCreationId(modificationId); - tabularCreationEntity.setCreations(null); - modificationApplicationInfosService.deleteAllByModificationIds(subModificationsIds); - deleteAllTabularSubModificationsUsingPartition(tabularCreationEntity.getCreationType(), subModificationsIds); - // generator function works for any creation case - generatorCreationRepository.deleteTabularCreationCreations(modificationId, subModificationsIds); + deleteAllTabularSubModificationsUsingPartition(tabularEntity.getModificationType(), subModificationsIds); + // line functions work for any type + lineModificationRepository.deleteTabularModificationModifications(modificationUuid, subModificationsIds); + lineModificationRepository.deleteTabularModificationItself(modificationUuid); } - private void deleteTabularModificationSubModifications(TabularModificationEntity tabularModificationEntity) { + private void deleteTabularModificationSubModifications(TabularModificationsEntity tabularModificationEntity) { UUID modificationId = tabularModificationEntity.getId(); List subModificationsIds = modificationRepository.findSubModificationIdsByTabularModificationId(modificationId); tabularModificationEntity.setModifications(null); modificationApplicationInfosService.deleteAllByModificationIds(subModificationsIds); deleteAllTabularSubModificationsUsingPartition(tabularModificationEntity.getModificationType(), subModificationsIds); - // line function works for any modification case + // line function works for any type lineModificationRepository.deleteTabularModificationModifications(modificationId, subModificationsIds); } } diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index 8daf4cca9..32dbe9a22 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -191,9 +191,7 @@ public void restoreNetworkModifications(UUID groupUuid, @NonNull List modi networkModificationRepository.getModificationsCount(groupUuid, false)); } - // No transactional because we need to save modification in DB also in case of error - // Transaction made in 'saveModifications' method - // TODO Add transaction when errors will no longer be sent to the front + @Transactional public NetworkModificationsResult createNetworkModification(@NonNull UUID groupUuid, @NonNull ModificationInfos modificationInfo, @NonNull List applicationContexts) { List modificationEntities = networkModificationRepository.saveModificationInfos(groupUuid, List.of(modificationInfo)); diff --git a/src/main/resources/db/changelog/changesets/changelog_20250930T101841Z.xml b/src/main/resources/db/changelog/changesets/changelog_20250930T101841Z.xml new file mode 100644 index 000000000..73e86e60b --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20250930T101841Z.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/changesets/changelog_20250930T132326Z.xml b/src/main/resources/db/changelog/changesets/changelog_20250930T132326Z.xml new file mode 100644 index 000000000..dcbf5b3a4 --- /dev/null +++ b/src/main/resources/db/changelog/changesets/changelog_20250930T132326Z.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/changesets/migrationTabularModifications_20250930T132326Z.sql b/src/main/resources/db/changelog/changesets/migrationTabularModifications_20250930T132326Z.sql new file mode 100644 index 000000000..b1d95a7fc --- /dev/null +++ b/src/main/resources/db/changelog/changesets/migrationTabularModifications_20250930T132326Z.sql @@ -0,0 +1,27 @@ +-- tabular_modification + tabular_creation -> tabular_modifications +insert into tabular_modifications (id, modification_type, csv_filename) +select + id, + modification_type, + csv_filename +from tabular_modification; +insert into tabular_modifications (id, modification_type, csv_filename) +select + id, + creation_type, + csv_filename +from tabular_creation; + +-- tabular_modification_modifications + tabular_creation_creations -> tabular_modifications_modifications +insert into tabular_modifications_modifications (tabular_modifications_entity_id, modifications_id, modifications_order) +select + tabular_modification_entity_id, + modifications_id, + modifications_order +from tabular_modification_modifications; +insert into tabular_modifications_modifications (tabular_modifications_entity_id, modifications_id, modifications_order) +select + tabular_creation_entity_id, + creations_id, + creations_order +from tabular_creation_creations; \ No newline at end of file diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 2ac6938dc..8ad4fa74e 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -417,3 +417,10 @@ databaseChangeLog: - include: file: changesets/changelog_20250923T141508Z.xml relativeToChangelogFile: true + + - include: + file: changesets/changelog_20250930T101841Z.xml + relativeToChangelogFile: true + - include: + file: changesets/changelog_20250930T132326Z.xml + relativeToChangelogFile: true \ No newline at end of file diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 61804e764..65c64007d 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -450,8 +450,9 @@ void testNetworkModificationsWithErrorOnNetworkFlush() throws Exception { String groovyScriptInfosJson = getJsonBody(groovyScriptInfos, TEST_NETWORK_WITH_FLUSH_ERROR_ID, NetworkCreation.VARIANT_ID); mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().is5xxServerError()); - - assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, false).size()); + // TODO because creating a modification is now a unique Tx, and because network.flush() is not covered by the apply() exception catch, + // this test result has changed : the modification save is not committed because of the flush exception. + assertEquals(0, modificationRepository.getModifications(TEST_GROUP_ID, true, false).size()); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java b/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java index df946fac5..c80ea253e 100644 --- a/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java +++ b/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java @@ -13,14 +13,6 @@ import com.powsybl.commons.report.ReportNodeJsonModule; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.ThreeSides; -import com.powsybl.network.store.client.NetworkStoreService; -import com.powsybl.network.store.client.NetworkStoreServicePublic; -import com.powsybl.network.store.client.PreloadingStrategy; -import com.powsybl.network.store.client.RestClient; -import com.powsybl.network.store.iidm.impl.CachedNetworkStoreClient; -import com.powsybl.network.store.iidm.impl.OfflineNetworkStoreClient; -import io.micrometer.core.instrument.simple.SimpleMeterRegistry; -import io.micrometer.observation.ObservationRegistry; import lombok.extern.slf4j.Slf4j; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.dto.ModificationApplicationGroup; @@ -28,13 +20,11 @@ import org.gridsuite.modification.server.dto.NetworkModificationResult; import org.gridsuite.modification.server.dto.NetworkModificationResult.ApplicationStatus; import org.gridsuite.modification.server.dto.ReportInfos; -import org.gridsuite.modification.server.elasticsearch.ModificationApplicationInfosService; -import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; import org.gridsuite.modification.server.entities.ModificationEntity; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; -import org.gridsuite.modification.server.service.LargeNetworkModificationExecutionService; -import org.gridsuite.modification.server.service.NetworkModificationObserver; +import org.gridsuite.modification.server.repositories.NetworkModificationRepository; import org.gridsuite.modification.server.service.ReportService; +import org.gridsuite.modification.server.utils.elasticsearch.DisableElasticsearch; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; @@ -45,6 +35,9 @@ import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.skyscreamer.jsonassert.JSONAssert; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; import java.nio.file.Files; import java.nio.file.Paths; @@ -52,12 +45,33 @@ import java.util.List; import java.util.UUID; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.atLeast; +import static org.mockito.Mockito.verify; import static org.assertj.core.api.Assertions.assertThat; @Slf4j @TestInstance(TestInstance.Lifecycle.PER_CLASS) @ExtendWith({MockitoExtension.class}) +@SpringBootTest +@DisableElasticsearch class VoltageInitReportTest { + + @Autowired + private NetworkModificationRepository modificationRepository; + + @Autowired + private NetworkModificationApplicator networkModificationApplicator; + + @MockBean + protected ReportService reportService; + + private static final UUID NETWORK_ID = UUID.fromString("11111111-1111-1111-1111-111111111111"); + private static final UUID NODE_ID = UUID.fromString("99999999-9999-9999-9999-999999999999"); + private static final UUID REPORT_ID = UUID.fromString("88888888-8888-8888-8888-888888888888"); + private static final UUID GROUP_ID = UUID.randomUUID(); + private final ObjectMapper objectMapper = new ObjectMapper().findAndRegisterModules() .registerModule(new ReportNodeJsonModule()) .setInjectableValues(new InjectableValues.Std().addValue(ReportNodeDeserializer.DICTIONARY_VALUE_ID, null)); @@ -67,41 +81,32 @@ class VoltageInitReportTest { @ParameterizedTest(name = "result status = {0}") @DisplayName("Verifying logs after applying Voltage-Init server modifications on a network") void testVoltageInitDuplicationLogs(final ApplicationStatus resultStatus, final String logsJsonFile, final VoltageInitModificationInfos modificationInfos) throws Exception { - final ReportService reportService = Mockito.mock(ReportService.class); - final RestClient restClient = Mockito.mock(RestClient.class); - final NetworkStoreService networkStoreService = new NetworkStoreServicePublic(restClient, PreloadingStrategy.NONE, - (restClient_, preloadingStrategy, executorService) -> new CachedNetworkStoreClient(new OfflineNetworkStoreClient())); - final EquipmentInfosService equipmentInfosService = Mockito.mock(EquipmentInfosService.class); - final ModificationApplicationInfosService modificationApplicationInfosService = Mockito.mock(ModificationApplicationInfosService.class); - final NetworkModificationObserver networkModificationObserver = new NetworkModificationObserver(ObservationRegistry.NOOP, new SimpleMeterRegistry()); - final LargeNetworkModificationExecutionService modificationExecutionService = new LargeNetworkModificationExecutionService(2, networkModificationObserver); - final NetworkModificationApplicator networkModificationApplicator = new NetworkModificationApplicator(networkStoreService, equipmentInfosService, modificationApplicationInfosService, reportService, null, null, networkModificationObserver, modificationExecutionService); - networkModificationApplicator.setCollectionThreshold(5); - final Network network = Network.read(Paths.get(this.getClass().getClassLoader().getResource("fourSubstations_testsOpenReac.xiidm").toURI())); - //for internal call to reportService.sendReport(reportInfos.getReportUuid(), reporter); - final ArgumentCaptor reporterCaptor = ArgumentCaptor.forClass(ReportNode.class); - - final UUID networkUuuid = UUID.fromString("11111111-1111-1111-1111-111111111111"); - final UUID reportUuid = UUID.fromString("88888888-8888-8888-8888-888888888888"); - //simulate PUT /v1/groups/abc?action=COPY with body ModificationApplicationContext(networkUuid=0000, reportUuid=0000, reporterId=0000, variantId=0000, duplicateFrom=0000) - assertThat(networkModificationApplicator.applyModifications( - new ModificationApplicationGroup(UUID.randomUUID(), List.of(ModificationEntity.fromDTO(modificationInfos)), new ReportInfos(reportUuid, UUID.fromString("99999999-9999-9999-9999-999999999999"))), - new NetworkInfos(network, networkUuuid, true))) - .as("network modifications results") - .isNotNull() - .extracting(NetworkModificationResult::getApplicationStatus) - .isEqualTo(resultStatus); + // apply a VoltageInit modification and check status + assertThat(applyModification(network, modificationInfos)) + .as("voltage init result status") + .isEqualTo(resultStatus); - Mockito.verify(reportService, Mockito.times(1)).sendReport(Mockito.eq(reportUuid), reporterCaptor.capture()); + // check produced report json data + ArgumentCaptor reporterCaptor = ArgumentCaptor.forClass(ReportNode.class); + verify(reportService, atLeast(1)).sendReport(any(UUID.class), reporterCaptor.capture()); final ReportNode result = reporterCaptor.getValue(); - log.info("Result = {}", objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(result)); + assertNotNull(result); JSONAssert.assertEquals("voltage-init plan logs aggregated", Files.readString(Paths.get(this.getClass().getClassLoader().getResource(logsJsonFile).toURI())), objectMapper.writeValueAsString(result), false); Mockito.verifyNoMoreInteractions(reportService); - Mockito.reset(reportService); //because parametized tests haven't same lifecycle than tests + Mockito.reset(reportService); //because parameterized tests haven't same lifecycle than tests + } + + private ApplicationStatus applyModification(Network network, VoltageInitModificationInfos infos) { + List entities = modificationRepository.saveModifications(GROUP_ID, List.of(ModificationEntity.fromDTO(infos))); + List modificationInfosGroups = List.of( + new ModificationApplicationGroup(GROUP_ID, entities, new ReportInfos(REPORT_ID, NODE_ID)) + ); + NetworkModificationResult result = networkModificationApplicator.applyModifications(modificationInfosGroups, new NetworkInfos(network, NETWORK_ID, true)); + return result.getApplicationStatus(); } private static List voltageInitModifications() { diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularBatteryCreationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularBatteryCreationsTest.java index 0c54ec7f3..5eddfb415 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularBatteryCreationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularBatteryCreationsTest.java @@ -13,8 +13,8 @@ import org.gridsuite.modification.dto.BatteryCreationInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.ReactiveCapabilityCurvePointsInfos; -import org.gridsuite.modification.dto.TabularCreationInfos; -import org.gridsuite.modification.dto.TabularPropertyInfos; +import org.gridsuite.modification.dto.tabular.TabularCreationInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.utils.ModificationCreation; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -58,8 +58,8 @@ protected ModificationInfos buildModification() { .build() ); return TabularCreationInfos.builder() - .creationType(ModificationType.BATTERY_CREATION) - .creations(creations) + .modificationType(ModificationType.BATTERY_CREATION) + .modifications(creations) .properties(List.of(TabularPropertyInfos.builder().name("P1").predefined(true).selected(false).build())) .stashed(false) .build(); @@ -75,8 +75,8 @@ protected ModificationInfos buildModificationUpdate() { .build() ); return TabularCreationInfos.builder() - .creationType(ModificationType.BATTERY_CREATION) - .creations(creations) + .modificationType(ModificationType.BATTERY_CREATION) + .modifications(creations) .properties(List.of(TabularPropertyInfos.builder().name("P1").predefined(true).selected(true).build())) .stashed(false) .build(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java index 0b0608824..3e1120f6b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java @@ -12,21 +12,19 @@ import com.powsybl.iidm.network.IdentifiableType; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import jakarta.servlet.ServletException; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.GeneratorCreationInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.SubstationCreationInfos; -import org.gridsuite.modification.dto.TabularCreationInfos; -import org.gridsuite.modification.server.dto.NetworkModificationsResult; -import org.gridsuite.modification.dto.TabularPropertyInfos; +import org.gridsuite.modification.dto.tabular.*; import org.gridsuite.modification.server.impacts.AbstractBaseImpact; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; import java.util.List; import java.util.Map; @@ -111,8 +109,8 @@ protected ModificationInfos buildModification() { .build() ); return TabularCreationInfos.builder() - .creationType(ModificationType.GENERATOR_CREATION) - .creations(creations) + .modificationType(ModificationType.GENERATOR_CREATION) + .modifications(creations) .properties(List.of(TabularPropertyInfos.builder().name("P1").predefined(true).selected(true).build())) .stashed(false) .build(); @@ -145,8 +143,8 @@ protected ModificationInfos buildModificationUpdate() { .build() ); return TabularCreationInfos.builder() - .creationType(ModificationType.GENERATOR_CREATION) - .creations(creations) + .modificationType(ModificationType.GENERATOR_CREATION) + .modifications(creations) .properties(List.of(TabularPropertyInfos.builder().name("P1").predefined(true).selected(false).build())) .stashed(false) .build(); @@ -202,8 +200,8 @@ void testCheckSqlRequestsCount() throws Exception { .build() ); TabularCreationInfos creationInfos = TabularCreationInfos.builder() - .creationType(ModificationType.GENERATOR_CREATION) - .creations(creations) + .modificationType(ModificationType.GENERATOR_CREATION) + .modifications(creations) .build(); modificationUuid = saveModification(creationInfos); reset(); @@ -249,8 +247,8 @@ void testAllModificationsHaveSucceeded() throws Exception { ); ModificationInfos creationInfos = TabularCreationInfos.builder() - .creationType(ModificationType.GENERATOR_CREATION) - .creations(creations) + .modificationType(ModificationType.GENERATOR_CREATION) + .modifications(creations) .build(); String tabularCreationJson = getJsonBody(creationInfos, null); @@ -298,8 +296,8 @@ void testAllModificationsHaveFailed() throws Exception { .build() ); ModificationInfos creationInfos = TabularCreationInfos.builder() - .creationType(ModificationType.GENERATOR_CREATION) - .creations(creations) + .modificationType(ModificationType.GENERATOR_CREATION) + .modifications(creations) .build(); String tabularCreationJson = getJsonBody(creationInfos, null); @@ -335,48 +333,16 @@ void testUnsupportedTabularCreationType() throws Exception { .build() ); ModificationInfos creationInfos = TabularCreationInfos.builder() - .creationType(ModificationType.SUBSTATION_CREATION) - .creations(creations) + .modificationType(ModificationType.SUBSTATION_CREATION) + .modifications(creations) .build(); String tabularCreationJson = getJsonBody(creationInfos, null); - // creation - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); - NetworkModificationsResult result = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); - assertNotNull(result); - assertEquals(1, result.modificationUuids().size()); - UUID modifId = result.modificationUuids().get(0); - - // try to get via the group - UnsupportedOperationException exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true) - ); - assertEquals("No sub-modifications loading for creation type: SUBSTATION_CREATION", exception.getMessage()); - - // try to get via id - exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.getModificationInfo(modifId) - ); - assertEquals("No sub-modifications loading for creation type: SUBSTATION_CREATION", exception.getMessage()); - - // try to update - exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.updateModification(modifId, creationInfos) - ); - // deletion error because we try to remove the sub-modifications before updating them - assertEquals("No sub-modifications deletion method for type: SUBSTATION_CREATION", exception.getMessage()); - - // try to delete - List ids = List.of(modifId); - exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.deleteModifications(TEST_GROUP_ID, ids) + // try to create+apply a tabular creation with an unsupported type + ServletException exception = assertThrows( + ServletException.class, + () -> mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson).contentType(MediaType.APPLICATION_JSON)) ); - assertEquals("No sub-modifications deletion method for type: SUBSTATION_CREATION", exception.getMessage()); + assertEquals("No sub-modifications loading for modification type: SUBSTATION_CREATION", exception.getRootCause().getMessage()); } } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularLoadCreationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularLoadCreationsTest.java index 0de39c63d..adb793725 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularLoadCreationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularLoadCreationsTest.java @@ -14,8 +14,7 @@ import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.LoadCreationInfos; import org.gridsuite.modification.dto.ModificationInfos; -import org.gridsuite.modification.dto.TabularCreationInfos; -import org.gridsuite.modification.dto.TabularPropertyInfos; +import org.gridsuite.modification.dto.tabular.*; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; @@ -57,8 +56,8 @@ protected ModificationInfos buildModification() { .build() ); return TabularCreationInfos.builder() - .creationType(ModificationType.LOAD_CREATION) - .creations(creations) + .modificationType(ModificationType.LOAD_CREATION) + .modifications(creations) .properties(List.of(TabularPropertyInfos.builder().name("P1").predefined(true).selected(true).build())) .stashed(false) .build(); @@ -76,8 +75,8 @@ protected ModificationInfos buildModificationUpdate() { .build() ); return TabularCreationInfos.builder() - .creationType(ModificationType.LOAD_CREATION) - .creations(creations) + .modificationType(ModificationType.LOAD_CREATION) + .modifications(creations) .properties(List.of(TabularPropertyInfos.builder().name("P1").predefined(true).selected(false).build())) .stashed(false) .build(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularShuntCompensatorCreationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularShuntCompensatorCreationsTest.java index c6d1c3222..73d84034b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularShuntCompensatorCreationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularShuntCompensatorCreationsTest.java @@ -13,8 +13,7 @@ import org.gridsuite.modification.dto.FreePropertyInfos; import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.ShuntCompensatorCreationInfos; -import org.gridsuite.modification.dto.TabularCreationInfos; -import org.gridsuite.modification.dto.TabularPropertyInfos; +import org.gridsuite.modification.dto.tabular.*; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; @@ -60,8 +59,8 @@ protected ModificationInfos buildModification() { .build() ); return TabularCreationInfos.builder() - .creationType(ModificationType.SHUNT_COMPENSATOR_CREATION) - .creations(creations) + .modificationType(ModificationType.SHUNT_COMPENSATOR_CREATION) + .modifications(creations) .properties(List.of(TabularPropertyInfos.builder().name("P1").predefined(true).selected(true).build())) .stashed(false) .build(); @@ -81,8 +80,8 @@ protected ModificationInfos buildModificationUpdate() { .build() ); return TabularCreationInfos.builder() - .creationType(ModificationType.SHUNT_COMPENSATOR_CREATION) - .creations(creations) + .modificationType(ModificationType.SHUNT_COMPENSATOR_CREATION) + .modifications(creations) .properties(List.of(TabularPropertyInfos.builder().name("P1").predefined(true).selected(false).build())) .stashed(false) .build(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularBatteryModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularBatteryModificationsTest.java index d4fd67fd4..2a8c50582 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularBatteryModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularBatteryModificationsTest.java @@ -10,6 +10,8 @@ import com.powsybl.iidm.network.Network; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.TabularModificationInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java index ceb79c2a8..08f1764eb 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java @@ -10,9 +10,11 @@ import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.StaticVarCompensator; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import jakarta.servlet.ServletException; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.*; -import org.gridsuite.modification.server.dto.NetworkModificationsResult; +import org.gridsuite.modification.dto.tabular.TabularModificationInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.repositories.ModificationRepository; import org.gridsuite.modification.server.repositories.TabularPropertyRepository; @@ -24,7 +26,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; import org.testcontainers.shaded.org.apache.commons.lang3.tuple.Pair; import java.util.List; @@ -40,7 +41,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -170,7 +170,7 @@ void testSqlRequestsCountOnPostGroups() throws Exception { reset(); ApiUtils.postGroups(mockMvc, getGroupId(), targetGroupUuid); - TestUtils.assertRequestsCount(12, 9, 2, 0); // (13, 9, 2, 0) before improvements + TestUtils.assertRequestsCount(13, 9, 2, 0); // (13, 9, 2, 0) before improvements assertTabularModificationsEquals(modifications, targetGroupUuid); } @@ -181,7 +181,7 @@ void testSqlRequestsCountOnPostGroups2() throws Exception { reset(); ApiUtils.postGroups(mockMvc, getGroupId(), targetGroupUuid); - TestUtils.assertRequestsCount(20, 10, 2, 0); // (95, 10, 2, 0) before improvements, why one additional insert ? It feels batch_size is limited at 100 for insertions and is it reached for reactive_capability_curve_points + TestUtils.assertRequestsCount(21, 10, 2, 0); // (95, 10, 2, 0) before improvements, why one additional insert ? It feels batch_size is limited at 100 for insertions and is it reached for reactive_capability_curve_points assertTabularModificationsEquals(modifications, targetGroupUuid); } @@ -595,44 +595,12 @@ void testUnsupportedTabularModificationType() throws Exception { .build(); String tabularModificationJson = getJsonBody(tabularInfos, null); - // creation - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(tabularModificationJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); - NetworkModificationsResult result = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); - assertNotNull(result); - assertEquals(1, result.modificationUuids().size()); - UUID modifId = result.modificationUuids().get(0); - - // try to get via the group - UnsupportedOperationException exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true) - ); - assertEquals("No sub-modifications loading for modification type: STATIC_VAR_COMPENSATOR_CREATION", exception.getMessage()); - - // try to get via id - exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.getModificationInfo(modifId) - ); - assertEquals("No sub-modifications loading for modification type: STATIC_VAR_COMPENSATOR_CREATION", exception.getMessage()); - - // try to update - exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.updateModification(modifId, tabularInfos) - ); - // deletion error because we try to remove the sub-modifications before updating them - assertEquals("No sub-modifications deletion method for type: STATIC_VAR_COMPENSATOR_CREATION", exception.getMessage()); - - // try to delete - List ids = List.of(modifId); - exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.deleteModifications(TEST_GROUP_ID, ids) + // try to create+apply a tabular modification with an unsupported type + ServletException exception = assertThrows( + ServletException.class, + () -> mockMvc.perform(post(getNetworkModificationUri()).content(tabularModificationJson).contentType(MediaType.APPLICATION_JSON)) ); - assertEquals("No sub-modifications deletion method for type: STATIC_VAR_COMPENSATOR_CREATION", exception.getMessage()); + assertEquals("No sub-modifications loading for modification type: STATIC_VAR_COMPENSATOR_CREATION", exception.getRootCause().getMessage()); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularLineModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularLineModificationsTest.java index e69e4db03..9b8ac8298 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularLineModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularLineModificationsTest.java @@ -10,6 +10,8 @@ import com.powsybl.iidm.network.Network; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.TabularModificationInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.repositories.ModificationRepository; import org.gridsuite.modification.server.utils.ApiUtils; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularLoadModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularLoadModificationsTest.java index 2e665eaee..bdc13a86e 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularLoadModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularLoadModificationsTest.java @@ -10,6 +10,8 @@ import com.powsybl.iidm.network.Network; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.TabularModificationInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularShuntCompensatorModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularShuntCompensatorModificationsTest.java index fff9e845e..bf1ddb29b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularShuntCompensatorModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularShuntCompensatorModificationsTest.java @@ -15,8 +15,10 @@ import com.powsybl.iidm.network.ShuntCompensatorModelType; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.TabularModificationInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; -import org.gridsuite.modification.modifications.TabularModification; +import org.gridsuite.modification.modifications.tabular.TabularModification; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -130,13 +132,13 @@ void testCheckModificationConflict() { .withMessageTemplate("test") .build(); - tabularModification.checkShuntCompensatorModification(network, shuntModification, reportNode); + tabularModification.specificCheck(shuntModification, network, reportNode); shuntModification.setShuntCompensatorType(AttributeModification.toAttributeModification(ShuntCompensatorType.CAPACITOR, OperationType.SET)); - tabularModification.checkShuntCompensatorModification(network, shuntModification, reportNode); + tabularModification.specificCheck(shuntModification, network, reportNode); shuntModification.setMaxQAtNominalV(null); - tabularModification.checkShuntCompensatorModification(network, shuntModification, reportNode); + tabularModification.specificCheck(shuntModification, network, reportNode); assertEquals(TypedValue.WARN_SEVERITY, reportNode.getChildren().get(0).getValues().get(ReportConstants.SEVERITY_KEY)); } @@ -165,7 +167,7 @@ void testCheckModificationNonLinear() { .withResourceBundles("i18n.reports") .withMessageTemplate("test") .build(); - tabularModification.checkShuntCompensatorModification(network, shuntModification, reportNode); + tabularModification.specificCheck(shuntModification, network, reportNode); assertEquals(TypedValue.ERROR_SEVERITY, reportNode.getChildren().get(0).getValues().get(ReportConstants.SEVERITY_KEY)); @@ -195,7 +197,7 @@ void testCheckModificationOK() { .withMessageTemplate("test") .build(); - tabularModification.checkShuntCompensatorModification(network, shuntModification, reportNode); + tabularModification.specificCheck(shuntModification, network, reportNode); assertEquals(0, reportNode.getChildren().size()); } } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularSubstationModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularSubstationModificationsTest.java index cea05a375..19782c815 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularSubstationModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularSubstationModificationsTest.java @@ -11,6 +11,8 @@ import com.powsybl.iidm.network.Network; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.TabularModificationInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularTwoWindingsTransformerModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularTwoWindingsTransformerModificationsTest.java index 465250d54..979ee312a 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularTwoWindingsTransformerModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularTwoWindingsTransformerModificationsTest.java @@ -10,6 +10,8 @@ import com.powsybl.iidm.network.Network; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.TabularModificationInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.repositories.ModificationRepository; import org.gridsuite.modification.server.utils.ApiUtils; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularVoltageLevelModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularVoltageLevelModificationsTest.java index 13ecddf44..b290dbd72 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularVoltageLevelModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularVoltageLevelModificationsTest.java @@ -10,6 +10,8 @@ import com.powsybl.iidm.network.Network; import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.TabularModificationInfos; +import org.gridsuite.modification.dto.tabular.TabularPropertyInfos; import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java index 4a3ddb6be..9ec25805c 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java @@ -12,6 +12,7 @@ import org.gridsuite.modification.ModificationType; import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; +import org.gridsuite.modification.dto.tabular.TabularModificationInfos; import org.gridsuite.modification.server.entities.ModificationEntity; import org.gridsuite.modification.server.entities.ModificationGroupEntity; import org.gridsuite.modification.server.entities.equipment.creation.VoltageLevelCreationEntity;