RED-2200 - Dossier Template export and import

- rework the update of dossier and file attributes
This commit is contained in:
devplant 2022-09-26 17:45:42 +03:00
parent 7c3954ef51
commit 7955a29992
5 changed files with 88 additions and 13 deletions

View File

@ -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<DossierAttributeConfigEntity> 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() );
}
});

View File

@ -111,6 +111,12 @@ public class FileAttributeConfigPersistenceService {
return fileAttributeConfigRepository.findByDossierTemplateId(dossierTemplateId);
}
public String getFileAttributeByIdOrName(String dossierTemplateId, String fileAttributeId, String label) {
Optional<FileAttributeConfigEntity> 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(), ' '), " ") + "}}";

View File

@ -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<DossierAttributeConfigEntity, String> {
List<DossierAttributeConfigEntity> findAllByDossierTemplateId(String dossierTemplateId);
@Query("select da from DossierAttributeConfigEntity da where da.dossierTemplate.id = :dossierTemplateId and (da.id = :dossierAttributeId or da.label = :label)")
Optional<DossierAttributeConfigEntity> findAttributeByIdOrDossierTemplateIdAndLabel(String dossierTemplateId, String dossierAttributeId, String label);
}

View File

@ -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<FileAttributeConfigEntity, String> {
@ -14,4 +15,7 @@ public interface FileAttributeConfigRepository extends JpaRepository<FileAttribu
@Modifying
@Query("update FileAttributeConfigEntity e set e.primaryAttribute = false where e.dossierTemplate.id = :dossierTemplateId")
void updateAllPrimaryAttributeValuesToFalse(String dossierTemplateId);
@Query("select fa from FileAttributeConfigEntity fa where fa.dossierTemplate.id = :dossierTemplateId and (fa.id = :fileAttributeId or fa.label = :label)")
Optional<FileAttributeConfigEntity> findByIdOrDossierTemplateIdAndLabel(String dossierTemplateId, String fileAttributeId, String label);
}

View File

@ -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<DossierStatusInfo> 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<DossierStatusInfo> 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<DossierAttributeConfigEntity> currentFileAttributes = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId);
Set<String> currentDossierAttributeIds = currentFileAttributes.stream().map(DossierAttributeConfigEntity::getId).collect(Collectors.toSet());
Set<String> 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<String> 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<FileAttributeConfigEntity> currentFileAttributes = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId);
Set<String> currentFileAttributeIds = currentFileAttributes.stream().map(FileAttributeConfigEntity::getId).collect(Collectors.toSet());
Set<String> 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<String> 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());