diff --git a/src/main/java/org/gridsuite/modification/server/dto/ModificationApplicationGroup.java b/src/main/java/org/gridsuite/modification/server/dto/ModificationApplicationGroup.java index 688a8bdf4..5ff2ed379 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/ModificationApplicationGroup.java +++ b/src/main/java/org/gridsuite/modification/server/dto/ModificationApplicationGroup.java @@ -6,7 +6,7 @@ */ package org.gridsuite.modification.server.dto; -import org.gridsuite.modification.server.entities.ModificationEntity; +import org.gridsuite.modification.dto.ModificationInfos; import java.util.List; import java.util.UUID; @@ -14,5 +14,5 @@ /** * @author Slimane Amar */ -public record ModificationApplicationGroup(UUID groupUuid, List modifications, ReportInfos reportInfos) { +public record ModificationApplicationGroup(UUID groupUuid, List modifications, ReportInfos reportInfos) { } diff --git a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/ModificationApplicationInfos.java b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/ModificationApplicationInfos.java index 9b187e8e9..4bbcac8d2 100644 --- a/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/ModificationApplicationInfos.java +++ b/src/main/java/org/gridsuite/modification/server/dto/elasticsearch/ModificationApplicationInfos.java @@ -8,7 +8,6 @@ import lombok.*; import org.gridsuite.modification.server.elasticsearch.ESConfig; -import org.gridsuite.modification.server.entities.ModificationEntity; import org.gridsuite.modification.server.modifications.ImpactedEquipmentsInfos; import org.gridsuite.modification.server.modifications.IndexedImpactedEquipmentInfos; import org.springframework.data.annotation.AccessType; @@ -83,9 +82,6 @@ public void setUniqueId(String uniqueId) { @Builder.Default ImpactedEquipmentsInfos impactedEquipmentsInfos = new ImpactedEquipmentsInfos(); - @Transient - ModificationEntity modification; - public ModificationApplicationInfos flushImpactedEquipments() { createdEquipmentIds = impactedEquipmentsInfos.getCreatedEquipments().stream() .filter(IndexedImpactedEquipmentInfos::shouldIndexInModification) diff --git a/src/main/java/org/gridsuite/modification/server/elasticsearch/ModificationApplicationInfosService.java b/src/main/java/org/gridsuite/modification/server/elasticsearch/ModificationApplicationInfosService.java index e9aef1e83..573d63ce8 100644 --- a/src/main/java/org/gridsuite/modification/server/elasticsearch/ModificationApplicationInfosService.java +++ b/src/main/java/org/gridsuite/modification/server/elasticsearch/ModificationApplicationInfosService.java @@ -10,6 +10,7 @@ import org.gridsuite.modification.server.dto.elasticsearch.ModificationApplicationInfos; import org.gridsuite.modification.server.entities.ModificationApplicationEntity; import org.gridsuite.modification.server.repositories.ModificationApplicationRepository; +import org.gridsuite.modification.server.repositories.ModificationRepository; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -26,15 +27,18 @@ public class ModificationApplicationInfosService { private final ModificationApplicationInfosRepository modificationApplicationInfosRepository; private final ModificationApplicationRepository modificationApplicationRepository; + private final ModificationRepository modificationRepository; @Value("${spring.data.elasticsearch.partition-size:10000}") private int partitionSize; @Value("${spring.data.elasticsearch.partition-size-for-deletion:2048}") public int partitionSizeForDeletion; public ModificationApplicationInfosService(ModificationApplicationInfosRepository modificationApplicationInfosRepository, - ModificationApplicationRepository modificationApplicationRepository) { + ModificationApplicationRepository modificationApplicationRepository, + ModificationRepository modificationRepository) { this.modificationApplicationInfosRepository = modificationApplicationInfosRepository; this.modificationApplicationRepository = modificationApplicationRepository; + this.modificationRepository = modificationRepository; } public void addAll(List modificationApplicationInfos) { @@ -50,7 +54,9 @@ public void addAll(List modificationApplicationInf .modifiedEquipmentIds(modificationInfo.getModifiedEquipmentIds()) .deletedEquipmentIds(modificationInfo.getDeletedEquipmentIds()) .build(); - newModificationApplicationEntity.setModification(modificationInfo.getModification()); + newModificationApplicationEntity.setModification( + modificationRepository.getReferenceById(modificationInfo.getModificationUuid()) + ); return newModificationApplicationEntity; }).toList())); Lists.partition(modificationApplicationInfos, partitionSize) 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 ef7eea6b3..0c7ad89e4 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java @@ -26,7 +26,6 @@ import org.gridsuite.modification.server.dto.NetworkModificationResult.ApplicationStatus; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; 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.service.*; import org.slf4j.Logger; @@ -99,8 +98,7 @@ public NetworkModificationApplicator(NetworkStoreService networkStoreService, Eq public CompletableFuture applyModifications(ModificationApplicationGroup modificationInfosGroup, NetworkInfos networkInfos) { PreloadingStrategy preloadingStrategy = modificationInfosGroup.modifications().stream() .filter(m -> m.getActivated() && !m.getStashed()) - .map(ModificationEntity::getType) - .map(ModificationType::valueOf) + .map(ModificationInfos::getType) .reduce(ModificationType::maxStrategy) .map(ModificationType::getStrategy) .orElse(PreloadingStrategy.NONE); @@ -142,8 +140,7 @@ public NetworkModificationResult applyModifications(List m.getActivated() && !m.getStashed()) - .map(ModificationEntity::getType) - .map(ModificationType::valueOf) + .map(ModificationInfos::getType) .reduce(ModificationType::maxStrategy) .map(ModificationType::getStrategy) .orElse(PreloadingStrategy.NONE); @@ -193,10 +190,10 @@ private ApplicationStatus apply(ModificationApplicationGroup modificationGroupIn reportNode = ReportNode.NO_OP; } ApplicationStatus groupApplicationStatus = modificationGroupInfos.modifications().stream() - .filter(ModificationEntity::getActivated) + .filter(ModificationInfos::getActivated) .map(m -> { listener.initModificationApplication(modificationGroupInfos.groupUuid(), m); - return apply(m.toModificationInfos(), listener.getNetwork(), reportNode); + return apply(m, listener.getNetwork(), reportNode); }) .reduce(ApplicationStatus::max) .orElse(ApplicationStatus.ALL_OK); diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java index da23c0bc6..e813c7602 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkStoreListener.java @@ -12,13 +12,13 @@ import lombok.Getter; import org.apache.commons.collections4.CollectionUtils; import org.gridsuite.modification.NetworkModificationException; +import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.server.dto.elasticsearch.BasicEquipmentInfos; import org.gridsuite.modification.server.dto.elasticsearch.EquipmentInfos; import org.gridsuite.modification.server.dto.elasticsearch.ModificationApplicationInfos; import org.gridsuite.modification.server.dto.elasticsearch.TombstonedEquipmentInfos; import org.gridsuite.modification.server.elasticsearch.EquipmentInfosService; 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.impacts.CollectionElementImpact; import org.gridsuite.modification.server.impacts.SimpleElementImpact; @@ -249,12 +249,11 @@ public void afterRemoval(String identifiableId) { // Do nothing } - public void initModificationApplication(UUID groupUuid, ModificationEntity modification) { + public void initModificationApplication(UUID groupUuid, ModificationInfos modification) { ModificationApplicationInfos modificationApplication = ModificationApplicationInfos.builder() .groupUuid(groupUuid) - .modificationUuid(modification.getId()) + .modificationUuid(modification.getUuid()) .networkUuid(networkUuid) - .modification(modification) .build(); modificationApplicationInfosList.add(modificationApplication); } 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 dc020e0b8..b7ce98d78 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -109,13 +109,16 @@ public void deleteAll() { // 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. - public List saveModifications(UUID groupUuid, List modifications) { - return saveModificationsNonTransactional(groupUuid, modifications); + public List saveModifications(UUID groupUuid, List modifications) { + List entities = saveModificationsNonTransactional(groupUuid, modifications); + return entities.stream().map(ModificationEntity::toModificationInfos).toList(); } @Transactional - public List saveModificationInfos(UUID groupUuid, List modifications) { - return saveModificationInfosNonTransactional(groupUuid, modifications); + public List saveModificationInfos(UUID groupUuid, List modifications) { + List entities = saveModificationInfosNonTransactional(groupUuid, modifications); + // We can't return input modifications directly because it wouldn't have the IDs coming from the saved entities + return entities.stream().map(ModificationEntity::toModificationInfos).toList(); } private List saveModificationInfosNonTransactional(UUID groupUuid, @@ -129,7 +132,7 @@ public UUID createNetworkCompositeModification(@NonNull List modificationU CompositeModificationInfos compositeInfos = CompositeModificationInfos.builder().modifications(List.of()).build(); CompositeModificationEntity compositeEntity = (CompositeModificationEntity) ModificationEntity.fromDTO(compositeInfos); List copyEntities = modificationRepository.findAllByIdIn(modificationUuids).stream() - .map(this::getModificationInfos) + .map(this::toModificationsInfosOptimizedForTabular) .map(ModificationEntity::fromDTO) .toList(); compositeEntity.setModifications(copyEntities); @@ -146,7 +149,7 @@ public void updateCompositeModification(@NonNull UUID compositeUuid, @NonNull Li } List copyEntities = modificationRepository.findAllByIdIn(modificationUuids).stream() - .map(this::getModificationInfos) + .map(this::toModificationsInfosOptimizedForTabular) .map(ModificationEntity::fromDTO) .toList(); compositeEntity.getModifications().clear(); @@ -168,11 +171,9 @@ private List saveModificationsNonTransactional(UUID groupUui } @Transactional - public List moveModifications(UUID destinationGroupUuid, UUID originGroupUuid, List modificationsToMoveUUID, UUID referenceModificationUuid) { + public List moveModifications(UUID destinationGroupUuid, UUID originGroupUuid, List modificationsToMoveUUID, UUID referenceModificationUuid) { List movedModifications = moveModificationsNonTransactional(destinationGroupUuid, originGroupUuid, modificationsToMoveUUID, referenceModificationUuid); - // TODO resolve lazy initialisation exception : replace this line by loadFullModificationsEntities - movedModifications.forEach(ModificationEntity::toModificationInfos); - return movedModifications; + return movedModifications.stream().map(this::toModificationsInfosOptimizedForTabular).toList(); } private List moveModificationsNonTransactional(UUID destinationGroupUuid, UUID originGroupUuid, List modificationsToMoveUUID, UUID referenceModificationUuid) { @@ -260,7 +261,7 @@ public Map duplicateCompositeModifications(List sourceModifica // findAllById does not keep sourceModificationUuids order, but // sourceEntities, copyEntities, newEntities have the same order. List copyEntities = sourceEntities.stream() - .map(this::getModificationInfos) + .map(this::toModificationsInfosOptimizedForTabular) .map(ModificationEntity::fromDTO) .toList(); List newEntities = modificationRepository.saveAll(copyEntities); @@ -297,13 +298,13 @@ public List getModificationsMetadata(UUID groupUuid, boolean .findAllBaseByGroupIdReverse(getModificationGroup(groupUuid).getId()) .stream() .filter(ModificationEntity::getStashed) - .map(this::getModificationInfos) + .map(this::toModificationsInfosOptimizedForTabular) .collect(Collectors.toList()); } else { return modificationRepository .findAllBaseByGroupId(getModificationGroup(groupUuid).getId()) .stream() - .map(this::getModificationInfos) + .map(this::toModificationsInfosOptimizedForTabular) .collect(Collectors.toList()); } } @@ -408,7 +409,7 @@ private TabularBaseInfos loadTabularModification(TabularModificationsEntity tabu .build(); } - public ModificationInfos getModificationInfos(ModificationEntity modificationEntity) { + public ModificationInfos toModificationsInfosOptimizedForTabular(ModificationEntity modificationEntity) { if (modificationEntity instanceof TabularModificationsEntity tabularEntity) { return loadTabularModification(tabularEntity); } @@ -416,30 +417,20 @@ public ModificationInfos getModificationInfos(ModificationEntity modificationEnt } @Transactional(readOnly = true) - public List getActiveModificationsEntities(UUID groupUuid, Set modificationsToExclude) { + public List getActiveModifications(UUID groupUuid, Set modificationsToExclude) { List modificationsEntities = modificationRepository.findAllActiveModificationsByGroupId(groupUuid, emptyIfNull(modificationsToExclude)); - // TODO resolve lazy initialisation exception : replace this line by loadFullModificationsEntities - modificationsEntities.forEach(ModificationEntity::toModificationInfos); - return modificationsEntities; - } - - private void loadFullModificationsEntities(List modificationsEntities) { - // Force load subentities/collections, needed later when the transaction is closed - // Necessary for applying network modifications - // to avoid LazyInitialisationException. Maybe better to refactor to return the dto ? - // And refactor to more efficiently load the data (avoid 1+N) ? - modificationsEntities.forEach(this::getModificationInfos); + return modificationsEntities.stream().map(this::toModificationsInfosOptimizedForTabular).toList(); } private List getModificationsInfos(List groupUuids, boolean onlyStashed) { return groupUuids.stream().flatMap(this::getModificationEntityStream) .filter(m -> !onlyStashed || m.getStashed() == onlyStashed) - .map(this::getModificationInfos).toList(); + .map(this::toModificationsInfosOptimizedForTabular).toList(); } @Transactional(readOnly = true) public ModificationInfos getModificationInfo(UUID modificationUuid) { - return getModificationInfos(getModificationEntity(modificationUuid)); + return toModificationsInfosOptimizedForTabular(getModificationEntity(modificationUuid)); } public ModificationEntity getModificationEntity(UUID modificationUuid) { @@ -518,7 +509,7 @@ private List getModificationsInfosNonTransactional(List ModificationEntity::getId, Function.identity() )); - return uuids.stream().map(entities::get).filter(Objects::nonNull).map(this::getModificationInfos).toList(); + return uuids.stream().map(entities::get).filter(Objects::nonNull).map(this::toModificationsInfosOptimizedForTabular).toList(); } /** @@ -533,7 +524,7 @@ public List getBasicNetworkModificationsFromComposite(@NonNul return networkModificationsUuids.stream() .map(entitiesById::get) .filter(Objects::nonNull) - .map(this::getModificationInfos) + .map(this::toModificationsInfosOptimizedForTabular) .toList(); } @@ -562,7 +553,7 @@ public List getUnstashedModificationsInfos(@NonNull UUID grou } private List getUnstashedModificationsInfosNonTransactional(UUID groupUuid) { - return getModificationEntityStream(groupUuid).filter(m -> !m.getStashed()).map(this::getModificationInfos).toList(); + return getModificationEntityStream(groupUuid).filter(m -> !m.getStashed()).map(this::toModificationsInfosOptimizedForTabular).toList(); } @Transactional @@ -754,14 +745,18 @@ private void deleteTabularModificationSubModifications(TabularModificationsEntit } @Transactional - public List saveDuplicateModifications(@NonNull UUID targetGroupUuid, UUID originGroupUuid, @NonNull List modificationsUuids) { + public List saveDuplicateModifications(@NonNull UUID targetGroupUuid, UUID originGroupUuid, @NonNull List modificationsUuids) { List modificationInfos = originGroupUuid != null ? getUnstashedModificationsInfosNonTransactional(originGroupUuid) : getModificationsInfosNonTransactional(modificationsUuids); - return saveModificationInfosNonTransactional(targetGroupUuid, modificationInfos); + List newEntities = saveModificationInfosNonTransactional(targetGroupUuid, modificationInfos); + // We can't return modificationInfos directly because it wouldn't have the IDs coming from the new saved entities + return newEntities.stream().map(ModificationEntity::toModificationInfos).toList(); } @Transactional - public List saveCompositeModifications(@NonNull UUID targetGroupUuid, @NonNull List modificationsUuids) { + public List saveCompositeModifications(@NonNull UUID targetGroupUuid, @NonNull List modificationsUuids) { List modificationInfos = getCompositeModificationsInfosNonTransactional(modificationsUuids); - return saveModificationInfosNonTransactional(targetGroupUuid, modificationInfos); + List newEntities = saveModificationInfosNonTransactional(targetGroupUuid, modificationInfos); + // We can't return modificationInfos directly because it wouldn't have the IDs coming from the new saved entities + return newEntities.stream().map(ModificationEntity::toModificationInfos).toList(); } } 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 f225d292a..ae369f3c8 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -241,16 +241,16 @@ public void restoreNetworkModifications(UUID groupUuid, @NonNull List modi } public CompletableFuture createNetworkModification(@NonNull UUID groupUuid, @NonNull ModificationInfos modificationInfo, @NonNull List applicationContexts) { - List modificationEntities = networkModificationRepository.saveModificationInfos(groupUuid, List.of(modificationInfo)); - List ids = modificationEntities.stream().map(ModificationEntity::getId).toList(); - return applyModifications(groupUuid, modificationEntities, applicationContexts).thenApply(results -> + List modifications = networkModificationRepository.saveModificationInfos(groupUuid, List.of(modificationInfo)); + List ids = modifications.stream().map(ModificationInfos::getUuid).toList(); + return applyModifications(groupUuid, modifications, applicationContexts).thenApply(results -> new NetworkModificationsResult(ids, results)); } /** * Apply modifications on several networks */ - private CompletableFuture>> applyModifications(UUID groupUuid, List modifications, List applicationContexts) { + private CompletableFuture>> applyModifications(UUID groupUuid, List modifications, List applicationContexts) { // Do we want to do these all in parallel (CompletableFuture.allOf) or sequentially (like in Flux.concatMap) or something in between ? // sequentially like before for now return scheduleApplyModifications( @@ -259,7 +259,9 @@ private CompletableFuture>> applyModifi modificationApplicationContext.networkUuid(), modificationApplicationContext.variantId(), new ModificationApplicationGroup(groupUuid, - modifications.stream().filter(m -> !modificationApplicationContext.excludedModifications().contains(m.getId())).toList(), + modifications.stream() + .filter(m -> !modificationApplicationContext.excludedModifications().contains(m.getUuid())) + .toList(), new ReportInfos(modificationApplicationContext.reportUuid(), modificationApplicationContext.reporterId()) ) ), @@ -294,10 +296,9 @@ public NetworkModificationResult buildVariant(@NonNull UUID networkUuid, @NonNul Streams.forEachPair(buildInfos.getModificationGroupUuids().stream(), buildInfos.getReportsInfos().stream(), (groupUuid, reportInfos) -> { Set modificationsToExclude = buildInfos.getModificationUuidsToExclude().get(groupUuid); - List modifications = List.of(); + List modifications = List.of(); try { - // FullDto needed for toModificationInfos() after the modifications have been applied - modifications = networkModificationRepository.getActiveModificationsEntities(groupUuid, modificationsToExclude); + modifications = networkModificationRepository.getActiveModifications(groupUuid, modificationsToExclude); } catch (NetworkModificationException e) { if (e.getType() != MODIFICATION_GROUP_NOT_FOUND) { // May not exist throw e; @@ -311,8 +312,7 @@ public NetworkModificationResult buildVariant(@NonNull UUID networkUuid, @NonNul PreloadingStrategy preloadingStrategy = modificationGroupsInfos.stream().map(ModificationApplicationGroup::modifications) .flatMap(Collection::stream) .filter(m -> m.getActivated() && !m.getStashed()) - .map(ModificationEntity::getType) - .map(ModificationType::valueOf) + .map(ModificationInfos::getType) .reduce(ModificationType::maxStrategy).map(ModificationType::getStrategy).orElse(PreloadingStrategy.NONE); Network network = cloneNetworkVariant(networkUuid, buildInfos.getOriginVariantId(), buildInfos.getDestinationVariantId(), preloadingStrategy); @@ -340,20 +340,20 @@ public CompletableFuture moveModifications(@NonNull boolean applyModifications) { // update origin/destinations groups to cut and paste all modificationsToMove // FullDto needed for toModificationInfos() after the modifications have been applied - List modificationEntities = networkModificationRepository.moveModifications(destinationGroupUuid, originGroupUuid, modificationsToMoveUuids, beforeModificationUuid); + List modifications = networkModificationRepository.moveModifications(destinationGroupUuid, originGroupUuid, modificationsToMoveUuids, beforeModificationUuid); - CompletableFuture>> futureResult = applyModifications && !modificationEntities.isEmpty() ? applyModifications(destinationGroupUuid, modificationEntities, applicationContexts) : CompletableFuture.completedFuture(List.of()); - return futureResult.thenApply(result -> new NetworkModificationsResult(modificationEntities.stream().map(ModificationEntity::getId).toList(), result)); + CompletableFuture>> futureResult = applyModifications && !modifications.isEmpty() ? applyModifications(destinationGroupUuid, modifications, applicationContexts) : CompletableFuture.completedFuture(List.of()); + return futureResult.thenApply(result -> new NetworkModificationsResult(modifications.stream().map(ModificationInfos::getUuid).toList(), result)); } public Map duplicateGroup(UUID sourceGroupUuid, UUID groupUuid) { try { List modificationToDuplicateInfos = networkModificationRepository.getUnstashedModificationsInfos(sourceGroupUuid); - List duplicatedModificationEntities = networkModificationRepository.saveModificationInfos(groupUuid, modificationToDuplicateInfos); + List newModifications = networkModificationRepository.saveModificationInfos(groupUuid, modificationToDuplicateInfos); Map duplicateModificationMapping = new HashMap<>(); for (int i = 0; i < modificationToDuplicateInfos.size(); i++) { - duplicateModificationMapping.put(modificationToDuplicateInfos.get(i).getUuid(), duplicatedModificationEntities.get(i).getId()); + duplicateModificationMapping.put(modificationToDuplicateInfos.get(i).getUuid(), newModifications.get(i).getUuid()); } return duplicateModificationMapping; @@ -369,8 +369,7 @@ private CompletableFuture> applyModification if (!modificationGroupInfos.modifications().isEmpty()) { PreloadingStrategy preloadingStrategy = modificationGroupInfos.modifications().stream() .filter(m -> m.getActivated() && !m.getStashed()) - .map(ModificationEntity::getType) - .map(ModificationType::valueOf) + .map(ModificationInfos::getType) .reduce(ModificationType::maxStrategy).map(ModificationType::getStrategy).orElse(PreloadingStrategy.NONE); NetworkInfos networkInfos = getNetworkInfos(networkUuid, variantId, preloadingStrategy); @@ -386,16 +385,16 @@ public CompletableFuture duplicateModifications(@Non if (originGroupUuid != null && !modificationsUuids.isEmpty()) { // Duplicate modifications from a group or from a list only throw new NetworkModificationServerException(DUPLICATION_ARGUMENT_INVALID); } - List duplicateModifications = networkModificationRepository.saveDuplicateModifications(targetGroupUuid, originGroupUuid, modificationsUuids); - List ids = duplicateModifications.stream().map(ModificationEntity::getId).toList(); + List duplicateModifications = networkModificationRepository.saveDuplicateModifications(targetGroupUuid, originGroupUuid, modificationsUuids); + List ids = duplicateModifications.stream().map(ModificationInfos::getUuid).toList(); return applyModifications(targetGroupUuid, duplicateModifications, applicationContexts).thenApply(result -> new NetworkModificationsResult(ids, result)); } public CompletableFuture insertCompositeModifications(@NonNull UUID targetGroupUuid, @NonNull List modificationsUuids, @NonNull List applicationContexts) { - List modificationEntities = networkModificationRepository.saveCompositeModifications(targetGroupUuid, modificationsUuids); - List ids = modificationEntities.stream().map(ModificationEntity::getId).toList(); - return applyModifications(targetGroupUuid, modificationEntities, applicationContexts).thenApply(result -> + List modifications = networkModificationRepository.saveCompositeModifications(targetGroupUuid, modificationsUuids); + List ids = modifications.stream().map(ModificationInfos::getUuid).toList(); + return applyModifications(targetGroupUuid, modifications, applicationContexts).thenApply(result -> new NetworkModificationsResult(ids, result)); } diff --git a/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java b/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java index c80ea253e..fda2a2df7 100644 --- a/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java +++ b/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java @@ -101,9 +101,9 @@ void testVoltageInitDuplicationLogs(final ApplicationStatus resultStatus, final } private ApplicationStatus applyModification(Network network, VoltageInitModificationInfos infos) { - List entities = modificationRepository.saveModifications(GROUP_ID, List.of(ModificationEntity.fromDTO(infos))); + List modifications = modificationRepository.saveModifications(GROUP_ID, List.of(ModificationEntity.fromDTO(infos))); List modificationInfosGroups = List.of( - new ModificationApplicationGroup(GROUP_ID, entities, new ReportInfos(REPORT_ID, NODE_ID)) + new ModificationApplicationGroup(GROUP_ID, modifications, new ReportInfos(REPORT_ID, NODE_ID)) ); NetworkModificationResult result = networkModificationApplicator.applyModifications(modificationInfosGroups, new NetworkInfos(network, NETWORK_ID, true)); return result.getApplicationStatus(); 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 f533ce604..1e2a51d38 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 @@ -348,10 +348,10 @@ void testUnsupportedTabularCreationType() throws Exception { // creation ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + .andExpect(status().isOk()).andReturn(); NetworkModificationsResult result = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertNotNull(result); assertEquals(1, result.modificationUuids().size()); @@ -359,22 +359,22 @@ void testUnsupportedTabularCreationType() throws Exception { // try to get via the group UnsupportedOperationException exception = assertThrows( - UnsupportedOperationException.class, + UnsupportedOperationException.class, () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true) ); assertEquals("No sub-modifications loading for modification type: SUBSTATION_CREATION", exception.getMessage()); // try to get via id exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.getModificationInfo(modifId) + UnsupportedOperationException.class, + () -> networkModificationRepository.getModificationInfo(modifId) ); assertEquals("No sub-modifications loading for modification type: SUBSTATION_CREATION", exception.getMessage()); // try to update exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.updateModification(modifId, creationInfos) + 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()); @@ -382,8 +382,8 @@ void testUnsupportedTabularCreationType() throws Exception { // try to delete List ids = List.of(modifId); exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.deleteModifications(TEST_GROUP_ID, ids) + UnsupportedOperationException.class, + () -> networkModificationRepository.deleteModifications(TEST_GROUP_ID, ids) ); assertEquals("No sub-modifications deletion method for type: SUBSTATION_CREATION", exception.getMessage()); } 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 bbe71142c..6d9c0f536 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 @@ -42,9 +42,9 @@ import static com.vladmihalcea.sql.SQLStatementCountValidator.reset; import static org.assertj.core.api.Assertions.assertThat; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; 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.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; @@ -604,10 +604,10 @@ void testUnsupportedTabularModificationType() throws Exception { // creation ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularModificationJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(request().asyncStarted()); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) - .andExpect(status().isOk()).andReturn(); + .andExpect(status().isOk()).andReturn(); NetworkModificationsResult result = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertNotNull(result); assertEquals(1, result.modificationUuids().size()); @@ -615,22 +615,22 @@ void testUnsupportedTabularModificationType() throws Exception { // try to get via the group UnsupportedOperationException exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.getModifications(TEST_GROUP_ID, false, true) + 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) + 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) + 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()); @@ -638,8 +638,8 @@ void testUnsupportedTabularModificationType() throws Exception { // try to delete List ids = List.of(modifId); exception = assertThrows( - UnsupportedOperationException.class, - () -> networkModificationRepository.deleteModifications(TEST_GROUP_ID, ids) + UnsupportedOperationException.class, + () -> networkModificationRepository.deleteModifications(TEST_GROUP_ID, ids) ); assertEquals("No sub-modifications deletion method for type: STATIC_VAR_COMPENSATOR_CREATION", exception.getMessage()); } diff --git a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java index 223a21f2b..2a1d5fdd4 100644 --- a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java @@ -876,7 +876,7 @@ void runBuildWithExcludedModificationsTest(final MockWebServer server) { entities1.add(ModificationEntity.fromDTO(EquipmentAttributeModificationInfos.builder().equipmentId("v1d1").equipmentAttributeName("open").equipmentAttributeValue(true).equipmentType(IdentifiableType.SWITCH).build())); entities1.add(ModificationEntity.fromDTO(LoadCreationInfos.builder().equipmentId("willBeExcludedLoad").equipmentName("willBeExcludedLoad").loadType(LoadType.AUXILIARY).voltageLevelId("v1").busOrBusbarSectionId("1.1").p0(10.).q0(20.).connectionName("vn").connectionDirection(ConnectablePosition.Direction.TOP).terminalConnected(true).build())); - List savedModificationEntities = modificationRepository.saveModifications(TEST_GROUP_ID, entities1); + List modifications = modificationRepository.saveModifications(TEST_GROUP_ID, entities1); testNetworkModificationsCount(TEST_GROUP_ID, entities1.size()); @@ -886,7 +886,7 @@ void runBuildWithExcludedModificationsTest(final MockWebServer server) { .destinationVariantId(NetworkCreation.VARIANT_ID) .modificationGroupUuids(List.of(TEST_GROUP_ID)) .reportsInfos(List.of(new ReportInfos(UUID.randomUUID(), TEST_SUB_REPORTER_ID_1))) - .modificationUuidsToExclude(Map.of(TEST_GROUP_ID, Set.of(savedModificationEntities.get(1).getId()))) + .modificationUuidsToExclude(Map.of(TEST_GROUP_ID, Set.of(modifications.get(1).getUuid()))) .build(); networkModificationService.buildVariant(TEST_NETWORK_ID, buildInfos); @@ -979,11 +979,11 @@ void testApplyModificationWithErrors(final MockWebServer server) { UUID reporterId = UUID.randomUUID(); String variantId = network.getVariantManager().getWorkingVariantId(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadCreationInfos))); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadCreationInfos))); // Building mode : No error send with exception NetworkModificationResult networkModificationResult = TestUtils.applyModificationsBlocking(networkModificationApplicator, - new ModificationApplicationGroup(groupUuid, entities, new ReportInfos(reportUuid, reporterId)), + new ModificationApplicationGroup(groupUuid, modifications, new ReportInfos(reportUuid, reporterId)), new NetworkInfos(network, TEST_NETWORK_ID, true)); assertNotNull(networkModificationResult); testEmptyImpactsWithErrors(networkModificationResult); @@ -1015,10 +1015,10 @@ void testLastGroupModificationStatus(final MockWebServer server) { UUID nodeUuid1 = UUID.randomUUID(); UUID nodeUuid2 = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadCreationInfos))); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadCreationInfos))); List modificationInfosGroups = List.of( - new ModificationApplicationGroup(groupUuid, entities, new ReportInfos(reportUuid, nodeUuid1)), + new ModificationApplicationGroup(groupUuid, modifications, new ReportInfos(reportUuid, nodeUuid1)), new ModificationApplicationGroup(UUID.randomUUID(), List.of(), new ReportInfos(UUID.randomUUID(), nodeUuid2)) ); diff --git a/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java b/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java index 6d62fe7bd..9b8e88385 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java @@ -111,9 +111,9 @@ void testApplyCreatingModifications() { String newEquipmentId = "newLoad"; LoadCreationInfos loadCreationInfos = createLoadCreationInfos(newEquipmentId); UUID groupUuid = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadCreationInfos))); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos); assertNotNull(result); List modificationApplicationEntities = modificationApplicationRepository.findAll(); @@ -122,8 +122,8 @@ void testApplyCreatingModifications() { assertEquals(1, modificationApplicationEntities.size()); assertEquals(1, modificationApplicationInfos.size()); - assertEquals(entities.getFirst().getId(), modificationApplicationEntities.getFirst().getModification().getId()); - assertEquals(entities.getFirst().getId(), modificationApplicationInfos.getFirst().getModificationUuid()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationEntities.getFirst().getModification().getId()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationInfos.getFirst().getModificationUuid()); assertEquals(groupUuid, modificationApplicationInfos.getFirst().getGroupUuid()); assertTrue(modificationApplicationInfos.getFirst().getCreatedEquipmentIds().contains(newEquipmentId)); } @@ -136,9 +136,9 @@ void testApplyModifyingModifications() { .loadType(AttributeModification.toAttributeModification(LoadType.AUXILIARY, OperationType.SET)) .build(); UUID groupUuid = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos))); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos); assertNotNull(result); List modificationApplicationEntities = modificationApplicationRepository.findAll(); @@ -147,8 +147,8 @@ void testApplyModifyingModifications() { assertEquals(1, modificationApplicationEntities.size()); assertEquals(1, modificationApplicationInfos.size()); - assertEquals(entities.getFirst().getId(), modificationApplicationEntities.getFirst().getModification().getId()); - assertEquals(entities.getFirst().getId(), modificationApplicationInfos.getFirst().getModificationUuid()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationEntities.getFirst().getModification().getId()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationInfos.getFirst().getModificationUuid()); assertEquals(groupUuid, modificationApplicationInfos.getFirst().getGroupUuid()); assertEquals(modifiedEquipmentId, modificationApplicationInfos.getFirst().getModifiedEquipmentIds().iterator().next()); } @@ -161,9 +161,9 @@ void testApplyDeletingModifications() { .equipmentType(IdentifiableType.LOAD) .build(); UUID groupUuid = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(equipmentDeletionInfos))); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(equipmentDeletionInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos); assertNotNull(result); List modificationApplicationEntities = modificationApplicationRepository.findAll(); @@ -172,8 +172,8 @@ void testApplyDeletingModifications() { assertEquals(1, modificationApplicationEntities.size()); assertEquals(1, modificationApplicationInfos.size()); - assertEquals(entities.getFirst().getId(), modificationApplicationEntities.getFirst().getModification().getId()); - assertEquals(entities.getFirst().getId(), modificationApplicationInfos.getFirst().getModificationUuid()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationEntities.getFirst().getModification().getId()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationInfos.getFirst().getModificationUuid()); assertEquals(groupUuid, modificationApplicationInfos.getFirst().getGroupUuid()); assertTrue(modificationApplicationInfos.getFirst().getDeletedEquipmentIds().contains(deletedEquipmentId)); } @@ -191,9 +191,9 @@ void testDuplicateModifications() { // instead of one long idle transaction ? LoadCreationInfos loadCreationInfos = createLoadCreationInfos(newEquipmentId); UUID groupUuid1 = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); + List modifications = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, modifications, reportInfos), networkInfos); assertNotNull(result); // Need to remove the listener created in the last modifications application @@ -206,14 +206,14 @@ void testDuplicateModifications() { NetworkModificationsResult modificationsResult = networkModificationService.duplicateModifications( groupUuid2, null, - entities.stream().map(ModificationEntity::getId).toList(), + modifications.stream().map(ModificationInfos::getUuid).toList(), List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())) ).join(); /* check results in database and in elasticsearch */ - List expectedModificationUuids = List.of(entities.getFirst().getId(), modificationsResult.modificationUuids().getFirst()); + List expectedModificationUuids = List.of(modifications.getFirst().getUuid(), modificationsResult.modificationUuids().getFirst()); List expectedGroupUuids = List.of(groupUuid1, groupUuid2); List modificationApplicationEntities = modificationApplicationRepository.findAll(); @@ -241,8 +241,8 @@ void testMoveModifications() { // instead of one long idle transaction ? LoadCreationInfos loadCreationInfos = createLoadCreationInfos(newEquipmentId); UUID groupUuid1 = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + List modifications = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, modifications, reportInfos), networkInfos); assertNotNull(result); // Need to remove the listener created in the last modifications application @@ -256,7 +256,7 @@ void testMoveModifications() { groupUuid2, groupUuid1, null, - entities.stream().map(ModificationEntity::getId).toList(), + modifications.stream().map(ModificationInfos::getUuid).toList(), List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())), true ).join(); @@ -290,14 +290,14 @@ void testInsertCompositeModifications() { // instead of one long idle transaction ? LoadCreationInfos loadCreationInfos = createLoadCreationInfos(newEquipmentId); UUID groupUuid1 = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); + List modifications = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, modifications, reportInfos), networkInfos); assertNotNull(result); // Create the composite modification to pass later to ?action=insert UUID compositeUuid = networkModificationService.createNetworkCompositeModification( - entities.stream().map(ModificationEntity::getId).toList() + modifications.stream().map(ModificationInfos::getUuid).toList() ); // Need to remove the listener created in the last modifications application @@ -316,7 +316,7 @@ void testInsertCompositeModifications() { /* check results in database and in elasticsearch */ - List expectedModificationUuids = List.of(entities.getFirst().getId(), modificationsResult.modificationUuids().getFirst()); + List expectedModificationUuids = List.of(modifications.getFirst().getUuid(), modificationsResult.modificationUuids().getFirst()); List expectedGroupUuids = List.of(groupUuid1, groupUuid2); List modificationApplicationEntities = modificationApplicationRepository.findAll(); @@ -336,9 +336,9 @@ void testDeleteModifications() { */ LoadCreationInfos loadCreationInfos = createLoadCreationInfos("newLoad"); UUID groupUuid1 = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); + List modifications = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, modifications, reportInfos), networkInfos); assertNotNull(result); /* @@ -346,7 +346,7 @@ void testDeleteModifications() { */ networkModificationService.deleteNetworkModifications( groupUuid1, - entities.stream().map(ModificationEntity::getId).toList() + modifications.stream().map(ModificationInfos::getUuid).toList() ); /* @@ -364,9 +364,9 @@ void testDeleteModificationGroup() { */ LoadCreationInfos loadCreationInfos = createLoadCreationInfos("newLoad"); UUID groupUuid1 = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); + List modifications = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, modifications, reportInfos), networkInfos); assertNotNull(result); /* @@ -393,10 +393,10 @@ void testReindexAll() { createLoadCreationInfos("newLoad3") ); UUID groupUuid1 = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid1, loadCreationInfosList.stream().map(ModificationEntity::fromDTO).toList()); + List modifications = modificationRepository.saveModifications(groupUuid1, loadCreationInfosList.stream().map(ModificationEntity::fromDTO).toList()); // apply modifications to index them - TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid1, modifications, reportInfos), networkInfos); // assert they are both stored in ES and in postgres assertEquals(3, modificationApplicationRepository.findAll().size()); @@ -423,15 +423,15 @@ void testMultiplePropertiesModificationOnSingleEquipment() { .build(); UUID groupUuid = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos))); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos); assertNotNull(result); ModificationApplicationEntity modificationApplicationEntity = modificationApplicationRepository.findAll().getFirst(); ModificationApplicationInfos modificationApplicationInfos = IterableUtils.toList(modificationApplicationInfosRepository.findAll()).getFirst(); - assertEquals(entities.getFirst().getId(), modificationApplicationEntity.getModification().getId()); - assertEquals(entities.getFirst().getId(), modificationApplicationInfos.getModificationUuid()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationEntity.getModification().getId()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationInfos.getModificationUuid()); assertEquals(groupUuid, modificationApplicationInfos.getGroupUuid()); assertEquals(1, modificationApplicationEntity.getModifiedEquipmentIds().size()); @@ -448,8 +448,8 @@ void testSwitchModification() { .build(); UUID groupUuid = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(openSwitchModification))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(openSwitchModification))); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos); assertNotNull(result); assertEquals(1, modificationRepository.getModifications(groupUuid, true, true).size()); @@ -465,15 +465,15 @@ void testUpdateSubstationName() { .build(); UUID groupUuid = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationModificationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationModificationInfos))); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos); assertNotNull(result); ModificationApplicationEntity modificationApplicationEntity = modificationApplicationRepository.findAll().getFirst(); ModificationApplicationInfos modificationApplicationInfos = IterableUtils.toList(modificationApplicationInfosRepository.findAll()).getFirst(); - assertEquals(entities.getFirst().getId(), modificationApplicationEntity.getModification().getId()); - assertEquals(entities.getFirst().getId(), modificationApplicationInfos.getModificationUuid()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationEntity.getModification().getId()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationInfos.getModificationUuid()); assertEquals(groupUuid, modificationApplicationInfos.getGroupUuid()); assertEquals(1, modificationApplicationEntity.getModifiedEquipmentIds().size()); @@ -505,15 +505,15 @@ void testUpdateModificationProperties() { .build(); UUID groupUuid = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos))); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos); assertNotNull(result); ModificationApplicationEntity modificationApplicationEntity = modificationApplicationRepository.findAll().getFirst(); ModificationApplicationInfos modificationApplicationInfos = IterableUtils.toList(modificationApplicationInfosRepository.findAll()).getFirst(); - assertEquals(entities.getFirst().getId(), modificationApplicationEntity.getModification().getId()); - assertEquals(entities.getFirst().getId(), modificationApplicationInfos.getModificationUuid()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationEntity.getModification().getId()); + assertEquals(modifications.getFirst().getUuid(), modificationApplicationInfos.getModificationUuid()); assertEquals(groupUuid, modificationApplicationInfos.getGroupUuid()); assertEquals(1, modificationApplicationEntity.getModifiedEquipmentIds().size()); @@ -540,8 +540,8 @@ void testUpdateModificationPropertiesWithNotIndexedEquipment() { .build(); UUID groupUuid = UUID.randomUUID(); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationModificationInfos))); - NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationModificationInfos))); + NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos); assertNotNull(result); assertEquals(1, modificationRepository.getModifications(groupUuid, true, true).size()); 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 b2cce1733..747fa11eb 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationRepositoryTest.java @@ -491,27 +491,27 @@ void testMoveModificationInSameGroup() { GeneratorModificationInfos.builder().equipmentId("v6generator").maxP(new AttributeModification<>(500., OperationType.SET)).build(), GeneratorModificationInfos.builder().equipmentId("unknownGenerator").maxP(new AttributeModification<>(500., OperationType.SET)).build() ); - ModificationEntity tabularModificationEntity = ModificationEntity.fromDTO(TabularModificationInfos.builder() + TabularModificationInfos tabularModificationEntity = TabularModificationInfos.builder() .modificationType(ModificationType.GENERATOR_MODIFICATION) .modifications(groupModifications) .stashed(false) - .build()); + .build(); // and 5 script modifications - var groovyScriptEntity1 = ModificationEntity.fromDTO(GroovyScriptInfos.builder().script("script1").build()); - var groovyScriptEntity2 = ModificationEntity.fromDTO(GroovyScriptInfos.builder().script("script2").build()); - var groovyScriptEntity3 = ModificationEntity.fromDTO(GroovyScriptInfos.builder().script("script3").build()); - var groovyScriptEntity4 = ModificationEntity.fromDTO(GroovyScriptInfos.builder().script("script4").build()); - var groovyScriptEntity5 = ModificationEntity.fromDTO(GroovyScriptInfos.builder().script("script5").build()); - - List modificationEntities = List.of(groovyScriptEntity1, groovyScriptEntity2, groovyScriptEntity3, groovyScriptEntity4, groovyScriptEntity5, tabularModificationEntity); - networkModificationRepository.saveModifications(TEST_GROUP_ID, modificationEntities); + var groovyScriptEntity1 = GroovyScriptInfos.builder().script("script1").build(); + var groovyScriptEntity2 = GroovyScriptInfos.builder().script("script2").build(); + var groovyScriptEntity3 = GroovyScriptInfos.builder().script("script3").build(); + var groovyScriptEntity4 = GroovyScriptInfos.builder().script("script4").build(); + var groovyScriptEntity5 = GroovyScriptInfos.builder().script("script5").build(); + + List modifications = List.of(groovyScriptEntity1, groovyScriptEntity2, groovyScriptEntity3, groovyScriptEntity4, groovyScriptEntity5, tabularModificationEntity); + networkModificationRepository.saveModificationInfos(TEST_GROUP_ID, modifications); assertRequestsCount(2, 8, 0, 0); var modificationOriginal = networkModificationRepository.getModifications(TEST_GROUP_ID, true, true); SQLStatementCountValidator.reset(); - networkModificationRepository.moveModifications(TEST_GROUP_ID, TEST_GROUP_ID, List.of(tabularModificationEntity.getId()), groovyScriptEntity2.getId()); - assertRequestsCount(12, 0, 2, 0); + networkModificationRepository.moveModifications(TEST_GROUP_ID, TEST_GROUP_ID, List.of(modificationOriginal.get(5).getUuid()), modificationOriginal.get(1).getUuid()); + assertRequestsCount(6, 0, 2, 0); var modification = networkModificationRepository.getModifications(TEST_GROUP_ID, true, true); // [0:1, 1:6, 2:2, 3:3, 4:4 ,5:5 ] @@ -521,8 +521,8 @@ void testMoveModificationInSameGroup() { assertEquals(getIds(expected), getIds(modification)); SQLStatementCountValidator.reset(); - networkModificationRepository.moveModifications(TEST_GROUP_ID, TEST_GROUP_ID, List.of(groovyScriptEntity3.getId(), tabularModificationEntity.getId()), null); - assertRequestsCount(12, 0, 2, 0); + networkModificationRepository.moveModifications(TEST_GROUP_ID, TEST_GROUP_ID, List.of(modificationOriginal.get(2).getUuid(), modificationOriginal.get(5).getUuid()), null); + assertRequestsCount(6, 0, 2, 0); // [0:1, 1:2, 2:4, 3:5, 4:6, 5:3 ] modification = networkModificationRepository.getModifications(TEST_GROUP_ID, true, true); @@ -554,7 +554,7 @@ void testMoveModificationsBetweenTwoGroups() { SQLStatementCountValidator.reset(); List uuidsToMove = List.of(groovyScriptEntity2.getId(), groovyScriptEntity3.getId()); - List movedModifications = networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, uuidsToMove, null); + List movedModifications = networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, uuidsToMove, null); assertEquals(uuidsToMove.size(), movedModifications.size()); assertRequestsCount(5, 0, 1, 0); @@ -606,7 +606,7 @@ void testMoveModificationsBetweenTwoGroupsWithReferenceNode() { SQLStatementCountValidator.reset(); List uuidsToMove = List.of(groovyScriptEntity2.getId(), groovyScriptEntity3.getId()); - List movedModifications = networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, uuidsToMove, groovyScriptEntity6.getId()); + List movedModifications = networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, uuidsToMove, groovyScriptEntity6.getId()); assertEquals(uuidsToMove.size(), movedModifications.size()); assertRequestsCount(5, 0, 1, 0); @@ -647,15 +647,15 @@ void testMoveModificationsBetweenMoreThanTwoGroups() { // moving modifications with a good and a bad modification should work (the bad one will be ignored) SQLStatementCountValidator.reset(); List modificationsToMoveUuid = List.of(groovyScriptEntity1.getId(), UUID.randomUUID()); - List movedModifications = networkModificationRepository.moveModifications(TEST_GROUP_ID_3, TEST_GROUP_ID, modificationsToMoveUuid, null); + List movedModifications = networkModificationRepository.moveModifications(TEST_GROUP_ID_3, TEST_GROUP_ID, modificationsToMoveUuid, null); assertRequestsCount(5, 0, 1, 0); // only the valid modification is moved assertEquals(1, movedModifications.size()); - assertEquals(groovyScriptEntity1.getId(), movedModifications.get(0).getId()); + assertEquals(groovyScriptEntity1.getId(), movedModifications.get(0).getUuid()); // try to move again: empty result cause groovyScriptEntity1 has been moved SQLStatementCountValidator.reset(); - List movedModifications2 = networkModificationRepository.moveModifications(TEST_GROUP_ID_3, TEST_GROUP_ID, modificationsToMoveUuid, null); + List movedModifications2 = networkModificationRepository.moveModifications(TEST_GROUP_ID_3, TEST_GROUP_ID, modificationsToMoveUuid, null); assertRequestsCount(2, 0, 0, 0); assertEquals(0, movedModifications2.size()); @@ -1292,20 +1292,42 @@ void testGetModificationCount() { @Test void testModificationOrder() { // add 1 modification in a group - var modifEntity1 = ModificationEntity.fromDTO(EquipmentAttributeModificationInfos.builder().equipmentId("id1").equipmentAttributeName("attribute").equipmentAttributeValue("foo").equipmentType(IdentifiableType.VOLTAGE_LEVEL).build()); + var modifEntity1 = ModificationEntity.fromDTO( + EquipmentAttributeModificationInfos.builder() + .equipmentId("id1") + .equipmentAttributeName("attribute") + .equipmentAttributeValue("foo") + .equipmentType(IdentifiableType.VOLTAGE_LEVEL) + .build()); networkModificationRepository.saveModifications(TEST_GROUP_ID, List.of(modifEntity1)); // move it in another group - List movedEntities = networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, List.of(modifEntity1.getId()), null); + List movedEntities = networkModificationRepository.moveModifications( + TEST_GROUP_ID_2, + TEST_GROUP_ID, + List.of(modifEntity1.getId()), + null); assertEquals(1, movedEntities.size()); - assertEquals(0, movedEntities.get(0).getModificationsOrder()); + ModificationEntity entity1 = modificationRepository.findById(movedEntities.get(0).getUuid()).orElseThrow(); + assertEquals(0, entity1.getModificationsOrder()); // put another modification in empty origin group: its order must restart to 0 as well - var modifEntity2 = ModificationEntity.fromDTO(EquipmentAttributeModificationInfos.builder().equipmentId("id2").equipmentAttributeName("attribute").equipmentAttributeValue("foo").equipmentType(IdentifiableType.VOLTAGE_LEVEL).build()); + var modifEntity2 = ModificationEntity.fromDTO( + EquipmentAttributeModificationInfos.builder() + .equipmentId("id2") + .equipmentAttributeName("attribute") + .equipmentAttributeValue("foo") + .equipmentType(IdentifiableType.VOLTAGE_LEVEL) + .build()); networkModificationRepository.saveModifications(TEST_GROUP_ID, List.of(modifEntity2)); // trick: move it too, to see the order in the entity - movedEntities = networkModificationRepository.moveModifications(TEST_GROUP_ID_2, TEST_GROUP_ID, List.of(modifEntity2.getId()), null); + movedEntities = networkModificationRepository.moveModifications( + TEST_GROUP_ID_2, + TEST_GROUP_ID, + List.of(modifEntity2.getId()), + null); assertEquals(1, movedEntities.size()); - assertEquals(1, movedEntities.get(0).getModificationsOrder()); + ModificationEntity entity2 = modificationRepository.findById(movedEntities.get(0).getUuid()).orElseThrow(); + assertEquals(1, entity2.getModificationsOrder()); } @Test diff --git a/src/test/java/org/gridsuite/modification/server/service/ModificationSearchTest.java b/src/test/java/org/gridsuite/modification/server/service/ModificationSearchTest.java index fa0c65539..c91cf4fad 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationSearchTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationSearchTest.java @@ -119,7 +119,7 @@ void testSearchModificationsWithAccentsAndSpecialChars() { .properties(null) .build(); - List entities = modificationRepository.saveModifications( + List modifications = modificationRepository.saveModifications( groupUuid, List.of( ModificationEntity.fromDTO(creationWithAccent), @@ -128,7 +128,7 @@ void testSearchModificationsWithAccentsAndSpecialChars() { ); NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, - new ModificationApplicationGroup(groupUuid, entities, reportInfos), + new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos ); assertThat(result).isNotNull(); @@ -165,10 +165,10 @@ void testSearchModificationsByGroup() { // Load creation for equipment Id newLoadId LoadCreationInfos loadCreationInfos = createLoadCreationInfos("newLoadId"); - List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationCreationInfos), ModificationEntity.fromDTO(substationModificationInfos), ModificationEntity.fromDTO(loadCreationInfos))); + List modifications = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationCreationInfos), ModificationEntity.fromDTO(substationModificationInfos), ModificationEntity.fromDTO(loadCreationInfos))); NetworkModificationResult result = TestUtils.applyModificationsBlocking(networkModificationApplicator, - new ModificationApplicationGroup(groupUuid, entities, reportInfos), + new ModificationApplicationGroup(groupUuid, modifications, reportInfos), networkInfos ); assertThat(result).isNotNull(); diff --git a/src/test/java/org/gridsuite/modification/server/service/NetworkModificationApplicatorTest.java b/src/test/java/org/gridsuite/modification/server/service/NetworkModificationApplicatorTest.java index 842d2b186..3ad371af1 100644 --- a/src/test/java/org/gridsuite/modification/server/service/NetworkModificationApplicatorTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/NetworkModificationApplicatorTest.java @@ -13,6 +13,7 @@ import com.powsybl.commons.report.TypedValue; import com.powsybl.network.store.client.NetworkStoreService; import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl; +import org.gridsuite.modification.dto.ModificationInfos; import org.gridsuite.modification.dto.VoltageInitModificationInfos; import org.gridsuite.modification.dto.VoltageLevelModificationInfos; import org.gridsuite.modification.server.dto.ModificationApplicationGroup; @@ -20,9 +21,6 @@ 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.entities.ModificationEntity; -import org.gridsuite.modification.server.entities.equipment.modification.VoltageInitModificationEntity; -import org.gridsuite.modification.server.entities.equipment.modification.VoltageLevelModificationEntity; import org.gridsuite.modification.server.modifications.NetworkModificationApplicator; import org.gridsuite.modification.server.utils.TestUtils; import org.gridsuite.modification.server.utils.elasticsearch.DisableElasticsearch; @@ -86,11 +84,10 @@ void testApplyModificationsWithAllCollectionsNeededForBusView() { .stashed(false) .activated(true) .build(); - List modificationInfosList = List.of(new VoltageInitModificationEntity(modificationInfos)); NetworkModificationResult result = TestUtils.applyModificationsBlocking( networkModificationApplicator, - new ModificationApplicationGroup(UUID.randomUUID(), modificationInfosList, reportInfos), + new ModificationApplicationGroup(UUID.randomUUID(), List.of(modificationInfos), reportInfos), networkInfos ); @@ -104,11 +101,10 @@ void testApplyModificationsWithGroupsAndAllCollectionsNeededForBusView() { .stashed(false) .activated(true) .build(); - List modificationInfosList = List.of(new VoltageInitModificationEntity(modificationInfos)); List modificationInfosGroups = List.of( new ModificationApplicationGroup( UUID.randomUUID(), - modificationInfosList, + List.of(modificationInfos), mock(ReportInfos.class) )); @@ -148,7 +144,7 @@ void testApplyModificationsWithGroupsAndAllCollectionsNeededForBusViewStashedAnd verifyNoInteractions(largeNetworkModificationExecutionService); } - private List createModificationsWithUnactiveAllCollectionAndActiveNone() { + private List createModificationsWithUnactiveAllCollectionAndActiveNone() { // All collections but stashed var modificationInfosStashed = VoltageInitModificationInfos.builder() .stashed(true) @@ -167,9 +163,9 @@ private List createModificationsWithUnactiveAllCollectionAnd .build(); // So in the end strategy should be none return List.of( - new VoltageInitModificationEntity(modificationInfosStashed), - new VoltageInitModificationEntity(modificationInfosNotActivated), - new VoltageLevelModificationEntity(modificationInfosPreloadingNone) + modificationInfosStashed, + modificationInfosNotActivated, + modificationInfosPreloadingNone ); }