From 7955a29992770cad8ab7973140f9fcd9561da3b1 Mon Sep 17 00:00:00 2001 From: devplant Date: Mon, 26 Sep 2022 17:45:42 +0300 Subject: [PATCH] RED-2200 - Dossier Template export and import - rework the update of dossier and file attributes --- ...sierAttributeConfigPersistenceService.java | 9 ++- ...FileAttributeConfigPersistenceService.java | 6 ++ .../DossierAttributeConfigRepository.java | 5 ++ .../FileAttributeConfigRepository.java | 4 + .../service/DossierTemplateImportService.java | 77 ++++++++++++++++--- 5 files changed, 88 insertions(+), 13 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java index 8313de202..b0951ef44 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierAttributeConfigPersistenceService.java @@ -6,6 +6,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.text.WordUtils; import org.springframework.stereotype.Service; @@ -88,6 +89,12 @@ public class DossierAttributeConfigPersistenceService { return dossierAttributeConfigRepository.findAllByDossierTemplateId(dossierTemplateId); } + public String getDossierAttributeByIdOrName(String dossierTemplateId, String dossierAttributeId, String label) { + + Optional result = dossierAttributeConfigRepository.findAttributeByIdOrDossierTemplateIdAndLabel(dossierTemplateId, dossierAttributeId, label); + return result.isPresent() ? result.get().getId() : null; + } + private void setPlaceholder(DossierAttributeConfigEntity dossierAttributeConfig) { if (dossierAttributeConfig.getPlaceholder() == null || dossierAttributeConfig.getPlaceholder().isEmpty()) { String placeholder = "{{dossier.attribute." + StringUtils.remove(WordUtils.capitalizeFully(dossierAttributeConfig.getLabel(), ' '), " ") + "}}"; @@ -102,7 +109,7 @@ public class DossierAttributeConfigPersistenceService { throw new ConflictException("Label already exists."); } if (other.getPlaceholder().equalsIgnoreCase(dossierAttributesConfig.getPlaceholder())) { - throw new ConflictException("Placeholder already exists."); + throw new ConflictException("Placeholder already exists. " + dossierAttributesConfig.getPlaceholder() ); } }); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java index 695c77bd7..44fae6cbb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/FileAttributeConfigPersistenceService.java @@ -111,6 +111,12 @@ public class FileAttributeConfigPersistenceService { return fileAttributeConfigRepository.findByDossierTemplateId(dossierTemplateId); } + public String getFileAttributeByIdOrName(String dossierTemplateId, String fileAttributeId, String label) { + + Optional result = fileAttributeConfigRepository.findByIdOrDossierTemplateIdAndLabel(dossierTemplateId, fileAttributeId, label); + return result.isPresent() ? result.get().getId() : null; + } + private void setPlaceholder(FileAttributeConfigEntity fileAttributeConfig) { if (fileAttributeConfig.getPlaceholder() == null || fileAttributeConfig.getPlaceholder().isEmpty()) { String placeholder = "{{file.attribute." + StringUtils.remove(WordUtils.capitalizeFully(fileAttributeConfig.getLabel(), ' '), " ") + "}}"; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeConfigRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeConfigRepository.java index 8ccb604a5..ee2bef462 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeConfigRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierAttributeConfigRepository.java @@ -1,13 +1,18 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity; +import org.springframework.data.jpa.repository.Query; public interface DossierAttributeConfigRepository extends JpaRepository { List findAllByDossierTemplateId(String dossierTemplateId); + @Query("select da from DossierAttributeConfigEntity da where da.dossierTemplate.id = :dossierTemplateId and (da.id = :dossierAttributeId or da.label = :label)") + Optional findAttributeByIdOrDossierTemplateIdAndLabel(String dossierTemplateId, String dossierAttributeId, String label); + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java index a532620bc..a40232d67 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/FileAttributeConfigRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import java.util.List; +import java.util.Optional; public interface FileAttributeConfigRepository extends JpaRepository { @@ -14,4 +15,7 @@ public interface FileAttributeConfigRepository extends JpaRepository findByIdOrDossierTemplateIdAndLabel(String dossierTemplateId, String fileAttributeId, String label); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierTemplateImportService.java index ba817c3cd..a0fa467e6 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DossierTemplateImportService.java @@ -128,12 +128,28 @@ public class DossierTemplateImportService { // dossier status if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) { - this.updateDossieStates(request, dossierTemplateId); + this.updateDossierStates(request, dossierTemplateId); } else { // no states to add, delete current states List currentStates = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId); currentStates.forEach(state -> dossierStatusPersistenceService.deleteDossierStatus(state.getId(), null)); } + // update dossier attributes + if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) { + this.updateDossierAttributes(request, dossierTemplateId); + } else { // no dossier attributes to add, but delete existing ones + var currentConfigs = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId); + currentConfigs.forEach(da -> dossierAttributeConfigPersistenceService.deleteDossierAttribute(da.getId())); + } + + //update file attributes + if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) { + this.updateFileAttributes(request, dossierTemplateId); + } else { // no file attributes to add, but delete existing + var currentConfigs = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId); + currentConfigs.forEach(fa -> fileAttributeConfigPersistenceService.deleteFileAttribute(fa.getId())); + } + } else { // creates new dossier template if (StringUtils.isEmpty(dossierTemplateMeta.getName())) { @@ -183,22 +199,29 @@ public class DossierTemplateImportService { this.updateDossierStatus(dossierTemplateId, state); }); } + + //set dossier attributes + if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) { + request.getDossierAttributesConfigs().forEach(da -> { + da.setId(null); // in order to create a new dossier attribute + dossierAttributeConfigPersistenceService.addOrUpdateDossierAttribute(dossierTemplateId, convert(da, DossierAttributeConfigEntity.class)); + }); + } + + //set file attributes + if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) { + request.getFileAttributesConfigs().forEach(fa -> { + fa.setId(null); // in order to force creation of new file attribute + fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, convert(fa, FileAttributeConfigEntity.class)); + }); + } } // set legal basis if (CollectionUtils.isNotEmpty(request.getLegalBases())) { legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, request.getLegalBases()); } - //set dossier attributes - if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) { - dossierAttributeConfigPersistenceService.setDossierAttributesConfig(dossierTemplateId, - convert(request.getDossierAttributesConfigs(), DossierAttributeConfigEntity.class)); - } - //set file attributes - if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) { - fileAttributeConfigPersistenceService.setFileAttributesConfig(dossierTemplateId, - convert(request.getFileAttributesConfigs(), FileAttributeConfigEntity.class)); - } + // file attribute general configuration if(request.getFileAttributesGeneralConfiguration() != null) { fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(dossierTemplateId, convert(request.getFileAttributesGeneralConfiguration(), FileAttributesGeneralConfigurationEntity.class)); @@ -297,7 +320,7 @@ public class DossierTemplateImportService { typesToRemove.forEach(dictionaryService::deleteType); } - private void updateDossieStates(ImportTemplateResult request, String dossierTemplateId) { + private void updateDossierStates(ImportTemplateResult request, String dossierTemplateId) { List currentStates = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId); @@ -323,6 +346,36 @@ public class DossierTemplateImportService { statesToRemove.forEach(stateId -> dossierStatusPersistenceService.deleteDossierStatus(stateId, null)); } + private void updateDossierAttributes(ImportTemplateResult request, String dossierTemplateId) { + List currentFileAttributes = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId); + Set currentDossierAttributeIds = currentFileAttributes.stream().map(DossierAttributeConfigEntity::getId).collect(Collectors.toSet()); + Set dossierAttributeIdsAdded = new HashSet<>(); + + request.getDossierAttributesConfigs().forEach(da -> { + da.setId(dossierAttributeConfigPersistenceService.getDossierAttributeByIdOrName(dossierTemplateId, da.getId(), da.getLabel())); + DossierAttributeConfigEntity result = dossierAttributeConfigPersistenceService.addOrUpdateDossierAttribute(dossierTemplateId, convert(da, DossierAttributeConfigEntity.class)); + dossierAttributeIdsAdded.add(result.getId()); + }); + // remove existing dossier attributes and not included in archive + Set attributesToRemove = currentDossierAttributeIds.stream().filter(da -> !dossierAttributeIdsAdded.contains(da)).collect(Collectors.toSet()); + attributesToRemove.forEach(daId -> dossierAttributeConfigPersistenceService.deleteDossierAttribute(daId)); + } + + private void updateFileAttributes(ImportTemplateResult request, String dossierTemplateId) { + List currentFileAttributes = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId); + Set currentFileAttributeIds = currentFileAttributes.stream().map(FileAttributeConfigEntity::getId).collect(Collectors.toSet()); + Set fileAttributeIdsAdded = new HashSet<>(); + request.getFileAttributesConfigs().forEach(fa -> { + //check by id or by dossierTemplate and label and set the corresponding Id if found + fa.setId(fileAttributeConfigPersistenceService.getFileAttributeByIdOrName(dossierTemplateId, fa.getId(), fa.getLabel())); + FileAttributeConfigEntity fileAttributeAdded = fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, convert(fa, FileAttributeConfigEntity.class)); + fileAttributeIdsAdded.add(fileAttributeAdded.getId()); + }); + // remove existing file attributes and not included in archive + Set attributesToRemove = currentFileAttributeIds.stream().filter(fa -> !fileAttributeIdsAdded.contains(fa)).collect(Collectors.toSet()); + attributesToRemove.forEach(faId -> fileAttributeConfigPersistenceService.deleteFileAttribute(faId)); + } + public ImportTemplateResult handleArchive(ImportDossierTemplateRequest request) { objectMapper.registerModule(new JavaTimeModule());