From ddf78824c952288707889e7f4084b1de94c28c46 Mon Sep 17 00:00:00 2001 From: devplant Date: Thu, 22 Sep 2022 11:00:49 +0300 Subject: [PATCH 1/2] RED-2200 - Dossier Template export and import - rework: reports with duplicate names for reports, find types and dossier states by id first then by name - delete existing types/ dossier states that were not in the import - update name of queue --- .../importexport/ExportFilename.java | 1 + .../controller/DossierTemplateController.java | 3 +- .../v1/server/service/DictionaryService.java | 7 +- .../service/DossierTemplateImportService.java | 232 ++++++++++-------- .../export/DossierTemplateExportService.java | 11 +- .../tests/DossierTemplateTest.java | 4 +- 6 files changed, 149 insertions(+), 109 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/importexport/ExportFilename.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/importexport/ExportFilename.java index 8389b9ccb..f81702413 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/importexport/ExportFilename.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/dossiertemplate/importexport/ExportFilename.java @@ -14,6 +14,7 @@ public enum ExportFilename { LEGAL_BASIS("legalBasisMappingList"), RULES("rules"), REPORT_TEMPLATE("reportTemplateList"), + REPORT_TEMPLATE_MULTI_FILE(" (Multi-file)"), DOSSIER_TYPE("dossierType"), ENTRIES("entries"), FALSE_POSITIVES("falsePositives"), diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java index 3be865da2..b4f9af2d1 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DossierTemplateController.java @@ -72,7 +72,8 @@ public class DossierTemplateController implements DossierTemplateResource { } public DossierTemplate importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) { - return dossierTemplateImportService.importDossierTemplate(request); + String dossierTemplateId = dossierTemplateImportService.importDossierTemplate(request); + return convert(dossierTemplatePersistenceService.getDossierTemplate(dossierTemplateId), DossierTemplate.class); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DictionaryService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DictionaryService.java index 469747196..7a0e12a99 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DictionaryService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/DictionaryService.java @@ -218,10 +218,9 @@ public class DictionaryService { List typeResponse = dictionaryPersistenceService.getCumulatedTypes(dossierTemplateId, dossierId, false); for (TypeEntity res : typeResponse) { - if (res.getDossierId() != null && res.getDossierId().equals(dossierId) && !type.equals(res.getType()) && res - .getDossierTemplateId() - .equals(dossierTemplateId) && labelToCheck.equals(res.getLabel()) || !type.equals(res.getType()) && res - .getDossierTemplateId() + var dossierTemplateResponse = res.getDossierTemplateId() == null ? res.getDossierTemplate().getId() : res.getDossierTemplateId(); + if (res.getDossierId() != null && res.getDossierId().equals(dossierId) && !type.equals(res.getType()) && dossierTemplateResponse + .equals(dossierTemplateId) && labelToCheck.equals(res.getLabel()) || !type.equals(res.getType()) && dossierTemplateResponse .equals(dossierTemplateId) && labelToCheck.equals(res.getLabel())) { throw new ConflictException("Label must be unique."); } 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 5abb5536a..0bde4fb67 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 @@ -3,16 +3,13 @@ package com.iqser.red.service.peristence.v1.server.service; import com.fasterxml.jackson.core.type.TypeReference; 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.configuration.*; 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; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; -import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService; import com.iqser.red.service.persistence.management.v1.processor.service.WatermarkService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; @@ -53,6 +50,7 @@ import java.util.function.Function; import java.util.stream.Collectors; import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; +import static java.util.stream.Collectors.toList; @Slf4j @Service @@ -75,15 +73,16 @@ public class DossierTemplateImportService { private final WatermarkService watermarkService; private final ReportTemplateService reportTemplateService; private final DictionaryService dictionaryService; + private final EntryPersistenceService entryPersistenceService; private final ObjectMapper objectMapper = new ObjectMapper(); - public DossierTemplate importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) { - ImportTemplateResult result = this.handleArchive(request); - return importDossierTemplate(result); + public String importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) { + ImportTemplateResult archiveResult = this.handleArchive(request); + return this.importDossierTemplate(archiveResult); } @Transactional - public DossierTemplate importDossierTemplate(ImportTemplateResult request) { + public String importDossierTemplate(ImportTemplateResult request) { String dossierTemplateId; var dossierTemplateMeta = request.getDossierTemplate(); DossierTemplateEntity existingDossierTemplate = null; @@ -111,72 +110,42 @@ public class DossierTemplateImportService { 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()); + if (!watermarkNameToEntity.isEmpty() && watermarkNameToEntity.get(watermark.getName()) != null) { + watermark.setId(watermarkNameToEntity.get(watermark.getName()).getId()); } + watermark.setDossierTemplateId(dossierTemplateId); + watermarkService.createOrUpdateWatermark(watermark); }); 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())); + this.updateTypes(request, dossierTemplateId); + } else { // no types to add, but remove existing ones + List currentTypes = dossierTemplatePersistenceService.getDossierTemplate(dossierTemplateId).getDossierTypes(); + currentTypes.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()); + this.updateDossieStates(request, dossierTemplateId); + } else { // no states to add, delete current states 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)); - + currentStates.forEach(state -> dossierStatusPersistenceService.deleteDossierStatus(state.getId(), null)); } } else { // creates new dossier template - if (StringUtils.isEmpty(dossierTemplateMeta.getName())) { throw new ConflictException("DossierTemplate name must be set"); } dossierTemplatePersistenceService.validateDossierTemplateNameIsUnique(dossierTemplateMeta.getName()); DossierTemplateEntity dossierTemplateEntity = new DossierTemplateEntity(); - dossierTemplateEntity.setId(UUID.randomUUID().toString()); + // order is important BeanUtils.copyProperties(dossierTemplateMeta, dossierTemplateEntity); + dossierTemplateEntity.setId(UUID.randomUUID().toString()); dossierTemplateEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); dossierTemplateEntity.setCreatedBy(request.getUserId()); //set rules @@ -192,11 +161,8 @@ public class DossierTemplateImportService { 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()); - } + watermark.setId(null); + watermarkService.createOrUpdateWatermark(watermark); }); } @@ -204,21 +170,19 @@ public class DossierTemplateImportService { if (CollectionUtils.isNotEmpty(request.getTypes())) { for (var type : request.getTypes()) { type.setDossierTemplateId(dossierTemplateId); - try { - 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); - } catch (ConflictException e) { - log.debug("conflict while creating the types", e); - } + 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)); + request.getDossierStatusInfos().forEach(state -> { + state.setId(null); + this.updateDossierStatus(dossierTemplateId, state); + }); } } // set legal basis @@ -248,12 +212,20 @@ public class DossierTemplateImportService { reportTemplateService.uploadTemplate(reportRequest); }); } - return convert(dossierTemplatePersistenceService.getDossierTemplate(dossierTemplateId), DossierTemplate.class); + return dossierTemplateId; } - 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 addEntries(Map> entries, String typeId, String initialTypeId, DictionaryEntryType dictionaryType) { + if (entries != null && !entries.isEmpty() && entries.get(initialTypeId) != null && !entries.get(initialTypeId).isEmpty()) { + dictionaryService.addEntries(typeId, entries.get(initialTypeId), true, true, dictionaryType); + } else { // no entries, delete current entries + List existing = entryPersistenceService.getEntries(typeId, dictionaryType, null) + .stream() + .map(BaseDictionaryEntry::getValue) + .collect(toList()); + if (!existing.isEmpty()) { + dictionaryService.deleteEntries(typeId, existing, dictionaryType); + } } } @@ -283,24 +255,73 @@ public class DossierTemplateImportService { } - private void updateDossierStates(String dossierTemplateId, DossierStatusInfo state) { - var dossierStatusRequest = CreateOrUpdateDossierStatusRequest.builder() - .dossierStatusId(state.getId()) - .name(state.getName()) - .description(state.getDescription()) - .color(state.getColor()) - .dossierTemplateId(dossierTemplateId) - .rank(state.getRank()) - .build(); - try { - dossierStatusPersistenceService.createOrUpdateDossierStatus(dossierStatusRequest); - } catch (BadRequestException e) { - log.debug(" Empty name for dossier status id " + state.getId()); - }catch (ConflictException e) { - log.debug(" Conflict detected for dossier status id: " + state.getId()); - } catch (NotFoundException e) { - log.debug(" Not found dossier status id " + state.getId()); + private DossierStatusEntity updateDossierStatus(String dossierTemplateId, DossierStatusInfo state) { + var dossierStatusRequest = CreateOrUpdateDossierStatusRequest.builder() + .dossierStatusId(state.getId()) + .name(state.getName()) + .description(state.getDescription()) + .color(state.getColor()) + .dossierTemplateId(dossierTemplateId) + .rank(state.getRank()) + .build(); + return dossierStatusPersistenceService.createOrUpdateDossierStatus(dossierStatusRequest); + } + + private void updateTypes(ImportTemplateResult request, String dossierTemplateId) { + List currentTypes = dossierTemplatePersistenceService.getDossierTemplate(dossierTemplateId).getDossierTypes(); + + Set currentTypesId = currentTypes.stream().map(TypeEntity::getId).collect(Collectors.toSet()); + Set typeIdsAdded = new HashSet<>(); + var typeToEntityMap = currentTypes.stream().collect(Collectors.toMap(TypeEntity::getType, Function.identity())); + for (var type : request.getTypes()) { +// log.info("Adding type: " + type.getType() + " id: " + type.getId()); + type.setDossierTemplateId(dossierTemplateId); + String typeId; + if (currentTypesId.contains(type.getId())) { //check by id + typeId = type.getId(); + dictionaryService.updateTypeValue(typeId, type); + } else if (!typeToEntityMap.isEmpty() && typeToEntityMap.get(type.getType()) != null) { //check by name + typeId = typeToEntityMap.get(type.getType()).getId(); + dictionaryService.updateTypeValue(typeId, type); + } else { // add the type, no match was found + var returnedType = dictionaryService.addType(type); + typeId = returnedType.getTypeId(); } + typeIdsAdded.add(typeId); + + this.addEntries(request.getEntries(), typeId, type.getTypeId(), DictionaryEntryType.ENTRY); + this.addEntries(request.getFalsePositives(), typeId, type.getTypeId(), DictionaryEntryType.FALSE_POSITIVE); + this.addEntries(request.getFalseRecommendations(), typeId, type.getTypeId(), DictionaryEntryType.FALSE_RECOMMENDATION); + } + // remove additional types + Set typesToRemove = currentTypesId.stream().filter(t -> !typeIdsAdded.contains(t)).collect(Collectors.toSet()); + typesToRemove.forEach(dictionaryService::deleteType); + } + + private void updateDossieStates(ImportTemplateResult request, String dossierTemplateId) { + + List currentStates = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId); + + Set currentStatesId = currentStates.stream().map(DossierStatusInfo::getId).collect(Collectors.toSet()); + Set stateIdsAdded = new HashSet<>(); + var stateToEntityMap = currentStates.stream().collect(Collectors.toMap(DossierStatusInfo::getName, Function.identity())); + for (var state : request.getDossierStatusInfos()) { + state.setDossierTemplateId(dossierTemplateId); + String stateId; + if (currentStatesId.contains(state.getId())) { //check by id + stateId = state.getId(); + } else if (!stateToEntityMap.isEmpty() && stateToEntityMap.get(state.getName()) != null) { //check by name + state.setId(stateToEntityMap.get(state.getName()).getId()); // force the id found to update the dossier status + } else { // add the state, no match was found + state.setId(null); // force null to create the dossier status + } + stateId = this.updateDossierStatus(dossierTemplateId, state).getId(); + stateIdsAdded.add(stateId); + + } + // remove additional states + Set statesToRemove = currentStatesId.stream().filter(t -> !stateIdsAdded.contains(t)).collect(Collectors.toSet()); + statesToRemove.forEach(stateId -> dossierStatusPersistenceService.deleteDossierStatus(stateId, null)); } public ImportTemplateResult handleArchive(ImportDossierTemplateRequest request) { @@ -401,30 +422,37 @@ public class DossierTemplateImportService { } else if (ze.getName().contains(ExportFilename.ENTRIES.getFilename())) { List entries = this.readEntries(bytes); - typeEntriesMap.put(this.getTypeName(ze.getName()), entries); - importTemplateResult.setEntries(typeEntriesMap); + typeEntriesMap.put(this.getTypeId(ze.getName()), entries); + } else if (ze.getName().contains(ExportFilename.FALSE_POSITIVES.getFilename())) { List falsePositives = this.readEntries(bytes); - typeFalsePositivesMap.put(this.getTypeName(ze.getName()), falsePositives); - importTemplateResult.setFalsePositives(typeFalsePositivesMap); + typeFalsePositivesMap.put(this.getTypeId(ze.getName()), falsePositives); + } else if (ze.getName().contains(ExportFilename.FALSE_RECOMMENDATION.getFilename())) { List falseRecommendations = this.readEntries(bytes); - typeFalseRecommendationsMap.put(this.getTypeName(ze.getName()), falseRecommendations); - importTemplateResult.setFalseRecommendations(typeFalseRecommendationsMap); - } else if (ze.getName().contains("reportTemplateList.json")) { + typeFalseRecommendationsMap.put(this.getTypeId(ze.getName()), falseRecommendations); + + } else if (ze.getName().contains(ExportFilename.REPORT_TEMPLATE.getFilename())) { var reportTemplateList = objectMapper.readValue(bytes, new TypeReference>() { }); reportTemplateMap = reportTemplateList.stream() - .collect(Collectors.toMap(ReportTemplate::getFileName, Function.identity())); - reportTemplateFilenameList = reportTemplateList.stream().map(ReportTemplate::getFileName).collect(Collectors.toList()); + .collect(Collectors.toMap(rt -> + rt.isMultiFileReport()? rt.getFileName() + ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename() : rt.getFileName(), + Function.identity())); + reportTemplateFilenameList = reportTemplateList.stream().map(rt -> + rt.isMultiFileReport()? rt.getFileName() + ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename() : rt.getFileName()).collect(Collectors.toList()); } else { - reportTemplateBytesMap.put(ze.getName(), bos); + reportTemplateBytesMap.put(ze.getName(), bos); } bos.close(); } } + importTemplateResult.setEntries(typeEntriesMap); + importTemplateResult.setFalsePositives(typeFalsePositivesMap); + importTemplateResult.setFalseRecommendations(typeFalseRecommendationsMap); + List reportTemplateUploadRequests = new ArrayList<>(); for (var reportZe : reportTemplateBytesMap.entrySet()) { @@ -469,13 +497,19 @@ public class DossierTemplateImportService { } } catch (IOException e) { log.debug("exception: ", e); + throw new BadRequestException("Error while reading the entries", e); } return entries; } - private String getTypeName(String filename) { + private String getTypeId(String filename) { var index = filename.indexOf('/'); return filename.substring(0, index); } + private String removeMultiFileFromFilename(String filename) { + var index = filename.indexOf(ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename()); + return filename.substring(0, index); + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/export/DossierTemplateExportService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/export/DossierTemplateExportService.java index af4a86557..20cc5cac8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/export/DossierTemplateExportService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/export/DossierTemplateExportService.java @@ -32,6 +32,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service; +import javax.transaction.Transactional; import java.io.*; import java.util.List; import java.util.stream.Collectors; @@ -72,6 +73,7 @@ public class DossierTemplateExportService { } @SneakyThrows + @Transactional public void createDownloadArchive(DownloadJob downloadJob) { objectMapper.registerModule(new JavaTimeModule()); DownloadStatusEntity downloadStatus = downloadStatusPersistenceService.getStatus(downloadJob.getStorageId()); @@ -130,14 +132,17 @@ public class DossierTemplateExportService { objectMapper.writeValueAsBytes(convert(reportTemplateList, ReportTemplate.class)))); reportTemplateList.forEach(reportTemplate -> { var report = fileManagementStorageService.getStoredObjectBytes(reportTemplate.getStorageId()); - fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, reportTemplate.getFileName(), report)); + fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(null, + reportTemplate.isMultiFileReport()? reportTemplate.getFileName() + ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename() : reportTemplate.getFileName(), + report)); }); // for every type 1 folder with: // 1 json file containing meta info of the type // and 1 txt file for every type: entries, false positives and false recommendation var dossierTypes = dossierTemplate.getDossierTypes(); for (TypeEntity typeEntity : dossierTypes) { - fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(typeEntity.getType(), getFilename(ExportFilename.DOSSIER_TYPE, JSON_EXT), +// log.info("type: " + typeEntity.getType() + " " + typeEntity.getDossierId()); + fileSystemBackedArchiver.addEntries(new FileSystemBackedArchiver.ArchiveModel(typeEntity.getId(), getFilename(ExportFilename.DOSSIER_TYPE, JSON_EXT), objectMapper.writeValueAsBytes(convert(typeEntity, Type.class)))); var entriesValuesList = entryPersistenceService.getEntries(typeEntity.getId(), DictionaryEntryType.ENTRY, null) @@ -195,7 +200,7 @@ public class DossierTemplateExportService { private void addToExportDownloadQueue(DownloadJob downloadJob, int priority) { try { - rabbitTemplate.convertAndSend(MessagingConfiguration.DOWNLOAD_QUEUE, objectMapper.writeValueAsString(downloadJob), message -> { + rabbitTemplate.convertAndSend(MessagingConfiguration.EXPORT_DOWNLOAD_QUEUE, objectMapper.writeValueAsString(downloadJob), message -> { message.getMessageProperties().setPriority(priority); return message; }); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java index 13713ab44..4c536faf4 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateTest.java @@ -411,7 +411,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { var newDossierTemplate = dossierTemplateClient.importDossierTemplate(request1); var allDossierTemplates = dossierTemplateClient.getAllDossierTemplates(); - assertThat(allDossierTemplates.size()).isEqualTo(1); //should be 2 + assertThat(allDossierTemplates.size()).isEqualTo(2); } @@ -450,7 +450,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { var newDossierTemplate = dossierTemplateClient.importDossierTemplate(request1); var allDossierTemplates = dossierTemplateClient.getAllDossierTemplates(); - assertThat(allDossierTemplates.size()).isEqualTo(1); // should be 2 + assertThat(allDossierTemplates.size()).isEqualTo(2); } From 61e9456a9b463b58f7eaebd937a8ad0ccdecfc0a Mon Sep 17 00:00:00 2001 From: devplant Date: Thu, 22 Sep 2022 11:05:28 +0300 Subject: [PATCH 2/2] RED-2200 - Dossier Template export and import - rework of pmd failures --- .../v1/server/service/DossierTemplateImportService.java | 8 +------- 1 file changed, 1 insertion(+), 7 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 0bde4fb67..ba817c3cd 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 @@ -50,7 +50,6 @@ import java.util.function.Function; import java.util.stream.Collectors; import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; -import static java.util.stream.Collectors.toList; @Slf4j @Service @@ -222,7 +221,7 @@ public class DossierTemplateImportService { List existing = entryPersistenceService.getEntries(typeId, dictionaryType, null) .stream() .map(BaseDictionaryEntry::getValue) - .collect(toList()); + .collect(Collectors.toList()); if (!existing.isEmpty()) { dictionaryService.deleteEntries(typeId, existing, dictionaryType); } @@ -507,9 +506,4 @@ public class DossierTemplateImportService { return filename.substring(0, index); } - private String removeMultiFileFromFilename(String filename) { - var index = filename.indexOf(ExportFilename.REPORT_TEMPLATE_MULTI_FILE.getFilename()); - return filename.substring(0, index); - } - }