From 6e45a657bc12e3128c2a408fe96ef57bc4ab6e01 Mon Sep 17 00:00:00 2001 From: devplant Date: Thu, 15 Sep 2022 12:58:19 +0300 Subject: [PATCH] RED-2200 - Dossier Template export and import - modification to search by name for watermarks, dossier states and types (type) in case of updating existing dossier template --- .../service/DossierTemplateImportService.java | 161 ++++++++++++------ 1 file changed, 113 insertions(+), 48 deletions(-) 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 781fd43b5..ec0c26c00 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 @@ -5,7 +5,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierStatusEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; @@ -67,6 +70,7 @@ public class DossierTemplateImportService { private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService; private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService; private final ColorsService colorsService; + private final DictionaryPersistenceService dictionaryPersistenceService; private final DossierStatusPersistenceService dossierStatusPersistenceService; private final WatermarkService watermarkService; private final ReportTemplateService reportTemplateService; @@ -94,6 +98,72 @@ public class DossierTemplateImportService { dossierTemplate.get().setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(dossierTemplate.get()).name())); + // set colors + this.setColors(dossierTemplateId, request.getColors()); + + // set watermarks + if (CollectionUtils.isNotEmpty(request.getWatermarks())) { + Set toSetWatermarks = request.getWatermarks().stream().map(Watermark::getName).filter(Objects::nonNull).collect(Collectors.toSet()); + var currentWatermarkConfigs = watermarkService.getWatermarksForDossierTemplateId(dossierTemplateId); + Set configsToRemove = currentWatermarkConfigs.stream().filter(c -> !toSetWatermarks.contains(c.getName())).collect(Collectors.toSet()); + var watermarkNameToEntity = currentWatermarkConfigs.stream().collect(Collectors.toMap(WatermarkEntity::getName, Function.identity())); + + request.getWatermarks().forEach(watermark -> { + try { + if (!watermarkNameToEntity.isEmpty() && watermarkNameToEntity.get(watermark.getName()) != null) { + watermark.setId(watermarkNameToEntity.get(watermark.getName()).getId()); + } + watermarkService.createOrUpdateWatermark(watermark); + } catch (BadRequestException e) { + log.debug(" Conflict while validating watermark: " + watermark.getId()); + } + }); + configsToRemove.forEach(watermark -> watermarkService.deleteWatermark(watermark.getId())); + } + + // update the types + if (CollectionUtils.isNotEmpty(request.getTypes())) { + + Set toSetTypes = request.getTypes().stream().map(Type::getType).filter(Objects::nonNull).collect(Collectors.toSet()); + List currentTypes = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId, true); + Set typesToRemove = currentTypes.stream().filter(c -> !toSetTypes.contains(c.getType())).collect(Collectors.toSet()); + var typeToEntityMap = currentTypes.stream().collect(Collectors.toMap(TypeEntity::getType, Function.identity())); + + for (var type : request.getTypes()) { + type.setDossierTemplateId(dossierTemplateId); + String typeId; + if (!typeToEntityMap.isEmpty() && typeToEntityMap.get(type.getType()) != null) { + typeId = typeToEntityMap.get(type.getType()).getId(); + dictionaryService.updateTypeValue(typeId, type); + } else { + var returnedType = dictionaryService.addType(type); + typeId = returnedType.getTypeId(); + } + + this.addEntries(request.getEntries(), typeId, type.getType(), DictionaryEntryType.ENTRY); + this.addEntries(request.getFalsePositives(), typeId, type.getType(), DictionaryEntryType.FALSE_POSITIVE); + this.addEntries(request.getFalseRecommendations(), typeId, type.getType(), DictionaryEntryType.FALSE_RECOMMENDATION); + } + typesToRemove.forEach(type -> dictionaryService.deleteType(type.getId())); + } + + // dossier status + if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) { + Set toSetTypes = request.getDossierStatusInfos().stream().map(DossierStatusInfo::getName).filter(Objects::nonNull).collect(Collectors.toSet()); + List currentStates = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId); + Set statesToRemove = currentStates.stream().filter(c -> !toSetTypes.contains(c.getName())).collect(Collectors.toSet()); + var stateToEntityMap = currentStates.stream().collect(Collectors.toMap(DossierStatusInfo::getName, Function.identity())); + for (var state : request.getDossierStatusInfos()) { + state.setDossierTemplateId(dossierTemplateId); + if (!stateToEntityMap.isEmpty() && stateToEntityMap.get(state.getName()) != null) { + state.setId(stateToEntityMap.get(state.getName()).getId()); + } + updateDossierStates(dossierTemplateId, state); + } + statesToRemove.forEach(state -> dossierStatusPersistenceService.deleteDossierStatus(state.getId(), null)); + + } + } else { // creates new dossier template @@ -113,6 +183,37 @@ public class DossierTemplateImportService { loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate)); dossierTemplateId = loadedDossierTemplate.getId(); + // set colors + this.setColors(dossierTemplateId, request.getColors()); + + // set watermarks + if (CollectionUtils.isNotEmpty(request.getWatermarks())) { + request.getWatermarks().forEach(watermark -> { + watermark.setDossierTemplateId(dossierTemplateId); + try { + watermarkService.createOrUpdateWatermark(watermark); + } catch (BadRequestException e) { + log.debug(" Conflict while validating watermark: " + watermark.getId()); + } + }); + } + + //set types + if (CollectionUtils.isNotEmpty(request.getTypes())) { + for (var type : request.getTypes()) { + type.setDossierTemplateId(dossierTemplateId); + var returnedType = dictionaryService.addType(type); + + this.addEntries(request.getEntries(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.ENTRY); + this.addEntries(request.getFalsePositives(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.FALSE_POSITIVE); + this.addEntries(request.getFalseRecommendations(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.FALSE_RECOMMENDATION); + + } + } + // dossier status + if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) { + request.getDossierStatusInfos().forEach(state -> this.updateDossierStates(dossierTemplateId, state)); + } } // set legal basis if (CollectionUtils.isNotEmpty(request.getLegalBases())) { @@ -123,10 +224,6 @@ public class DossierTemplateImportService { dossierAttributeConfigPersistenceService.setDossierAttributesConfig(dossierTemplateId, convert(request.getDossierAttributesConfigs(), DossierAttributeConfigEntity.class)); } - // dossier status - if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) { - updateDossierStates(dossierTemplateId, request.getDossierStatusInfos()); - } //set file attributes if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) { @@ -145,51 +242,21 @@ public class DossierTemplateImportService { reportTemplateService.uploadTemplate(reportRequest); }); } + } + private void addEntries(Map> entries, String typeId, String typeType, DictionaryEntryType dictionaryType) { + if (entries != null && !entries.isEmpty() && !entries.get(typeType).isEmpty()) { + dictionaryService.addEntries(typeId, entries.get(typeType), true, true, dictionaryType); + } + } + + private void setColors(String dossierTemplateId, Colors requestedColors) { // set colors - if (request.getColors() != null) { - ColorsEntity colorsEntity = convert(request.getColors(), ColorsEntity.class); + if (requestedColors != null) { + ColorsEntity colorsEntity = convert(requestedColors, ColorsEntity.class); colorsEntity.setDossierTemplateId(dossierTemplateId); colorsService.saveColors(colorsEntity); } - - // set watermarks - if (CollectionUtils.isNotEmpty(request.getWatermarks())) { - request.getWatermarks().forEach(watermark -> { - try { - watermarkService.createOrUpdateWatermark(watermark); - } catch (BadRequestException e) { - log.debug(" Conflict while validating watermark: " + watermark.getId()); - } - }); - } - - // set the types - // should delete existing types? in case of conflicts - for (var type: request.getTypes()) { - type.setDossierTemplateId(dossierTemplateId); - String typeId = type.getTypeId(); - if (dictionaryService.checkForExistingType(type)) { - dictionaryService.updateTypeValue(type.getTypeId(), type); - } else { - var returnedType = dictionaryService.addType(type); - typeId = returnedType.getTypeId(); - } - - if (request.getEntries() != null && !request.getEntries().isEmpty() - && !request.getEntries().get(type.getType()).isEmpty()) { - dictionaryService.addEntries(typeId, request.getEntries().get(type.getType()), true, true, DictionaryEntryType.ENTRY); - } - if (request.getFalsePositives() != null && !request.getFalsePositives().isEmpty() - && !request.getFalsePositives().get(type.getType()).isEmpty()) { - dictionaryService.addEntries(typeId, request.getFalsePositives().get(type.getType()), true, true, DictionaryEntryType.FALSE_POSITIVE); - } - if (request.getFalseRecommendations() != null && !request.getFalseRecommendations().isEmpty() - && !request.getFalseRecommendations().get(type.getType()).isEmpty()) { - dictionaryService.addEntries(typeId, request.getFalseRecommendations().get(type.getType()), true, true, DictionaryEntryType.FALSE_RECOMMENDATION); - } - } - } private void updateDossierTemplateMeta(DossierTemplateEntity dossierTemplateEntity, DossierTemplate dossierTemplate, String userId) { @@ -209,8 +276,7 @@ public class DossierTemplateImportService { } - private void updateDossierStates(String dossierTemplateId, List dossierStatusInfoList) { - dossierStatusInfoList.forEach(state -> { + private void updateDossierStates(String dossierTemplateId, DossierStatusInfo state) { var dossierStatusRequest = CreateOrUpdateDossierStatusRequest.builder() .dossierStatusId(state.getId()) .name(state.getName()) @@ -228,7 +294,6 @@ public class DossierTemplateImportService { } catch (NotFoundException e) { log.debug(" Not found dossier status id " + state.getId()); } - }); } public ImportTemplateResult handleArchive(ImportDossierTemplateRequest request) { @@ -346,7 +411,7 @@ public class DossierTemplateImportService { }); reportTemplateMap = reportTemplateList.stream() .collect(Collectors.toMap(ReportTemplate::getFileName, Function.identity())); - reportTemplateFilenameList = reportTemplateList.stream().map(rt -> rt.getFileName()).collect(Collectors.toList()); + reportTemplateFilenameList = reportTemplateList.stream().map(ReportTemplate::getFileName).collect(Collectors.toList()); } else { reportTemplateBytesMap.put(ze.getName(), bos); }