RED-2200 - Dossier Template export and import
- rework the update of dossier and file attributes
This commit is contained in:
parent
7c3954ef51
commit
7955a29992
@ -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() );
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -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(), ' '), " ") + "}}";
|
||||
|
||||
@ -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);
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user