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 82025f4ec..4b051a117 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/ModificationRepository.java @@ -28,6 +28,9 @@ public interface ModificationRepository extends JpaRepository findAllBaseByGroupId(UUID uuid); + @Query(value = "SELECT new ModificationEntity(m.id, m.type, m.date, m.stashed, m.activated, m.messageType, m.messageValues) FROM ModificationEntity m WHERE m.group.id = ?1 order by m.modificationsOrder desc") + List findAllBaseByGroupIdReverse(UUID uuid); + @Query(value = "SELECT m FROM ModificationEntity m WHERE m.group.id = ?1 AND m.stashed = ?2 order by m.modificationsOrder") List findAllStashedByGroupId(@Param("groupId") UUID groupId, @Param("stashed") Boolean stashed); @@ -37,6 +40,9 @@ public interface ModificationRepository extends JpaRepository findAllByIdIn(List uuids); + @Query(value = "SELECT m FROM ModificationEntity m WHERE m.id IN (?1) ORDER BY m.modificationsOrder desc") + List findAllByIdInReverse(List uuids); + @Query(value = "SELECT cast(modifications_id AS VARCHAR) FROM tabular_modification_modifications WHERE tabular_modification_entity_id = :uuid ORDER BY modifications_order", nativeQuery = true) List findSubModificationIdsByTabularModificationIdOrderByModificationsOrder(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 a7ee29944..255403667 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -215,19 +215,19 @@ public List getModifications(UUID groupUuid, boolean onlyMeta } public List getModificationsMetadata(UUID groupUuid, boolean onlyStashed) { - Stream modificationEntityStream = modificationRepository - .findAllBaseByGroupId(getModificationGroup(groupUuid).getId()) - .stream(); if (onlyStashed) { - List stashedModification = modificationEntityStream.filter(m -> m.getStashed()) + return modificationRepository + .findAllBaseByGroupIdReverse(getModificationGroup(groupUuid).getId()) + .stream() + .filter(ModificationEntity::getStashed) .map(this::getModificationInfos) .collect(Collectors.toList()); - Collections.reverse(stashedModification); - return stashedModification; } else { - return modificationEntityStream - .map(this::getModificationInfos) - .collect(Collectors.toList()); + return modificationRepository + .findAllBaseByGroupId(getModificationGroup(groupUuid).getId()) + .stream() + .map(this::getModificationInfos) + .collect(Collectors.toList()); } } @@ -450,11 +450,10 @@ public void reorderNetworkModifications(UUID groupId, Boolean stashed) { @Transactional public void restoreNetworkModifications(@NonNull List modificationUuids, int unStashedSize) { int modificationOrder = unStashedSize; - List modifications = modificationRepository.findAllByIdIn(modificationUuids); + List modifications = modificationRepository.findAllByIdInReverse(modificationUuids); if (modifications.size() != modificationUuids.size()) { throw new NetworkModificationException(MODIFICATION_NOT_FOUND); } - Collections.reverse(modifications); for (ModificationEntity modification : modifications) { modification.setStashed(false); modification.setModificationsOrder(modificationOrder++);