From b5510920716782e1caa1c5083f7c8b1665590d7b Mon Sep 17 00:00:00 2001 From: corinaolariu Date: Thu, 14 Nov 2024 23:04:55 +0200 Subject: [PATCH] RED-10381 - Include system-managed entities in dossier template export - The system manager entities will be exported. - At import dossier template if system managed are present in the import then they should be used and not ignored - update unit tests --- .../service/DossierTemplateExportService.java | 3 +- .../service/DossierTemplateImportService.java | 38 +---------- .../service/EntityTypeImportService.java | 67 +++++++++++++++++++ .../tests/DossierTemplateImportTest.java | 16 ++++- .../tests/FileExchangeImportExportTest.java | 12 ++-- 5 files changed, 90 insertions(+), 46 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierTemplateExportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierTemplateExportService.java index 154ec6e74..03d2b8ef7 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierTemplateExportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierTemplateExportService.java @@ -275,8 +275,7 @@ public class DossierTemplateExportService { // and 1 txt file for every type: entries, false positives and false recommendation // remove the types related to dossiers and also the ones that are deleted - // also the ones that are system - managed - List dossierTypes = dictionaryPersistenceService.getAllTypesForDossierTemplateWithoutSystemManaged(dossierTemplate.getId(), false); + List dossierTypes = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplate.getId(), false); for (TypeEntity typeEntity : dossierTypes) { // log.info("type: " + typeEntity.getType() + " " + typeEntity.getDossierId() + " " + typeEntity.isDeleted()); entityTypeExportService.addEntityTypeToArchive(fileSystemBackedArchiver, typeEntity, folder); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierTemplateImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierTemplateImportService.java index 4985fb7a3..1eae6bcb7 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierTemplateImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/DossierTemplateImportService.java @@ -285,7 +285,7 @@ public class DossierTemplateImportService { importStep = 12; entityTypeImportService.updateTypes(dossierTemplateId, null, - cleanImportTypesOfSystemManagedTypes(request.getEntityTypeImportModel(), systemManagedTypesImport.getSystemManagedTypeList())); + entityTypeImportService.updateAndCleanSystemManagedFromImportTypes(request.getEntityTypeImportModel(), dossierTemplateId)); } else { @@ -402,15 +402,9 @@ public class DossierTemplateImportService { //set types importStep = 12; - // import system managed entity types - EntityTypeImportModel systemManagedTypesModel = new EntityTypeImportModel(); - systemManagedTypesModel.getTypes().addAll(systemManagedTypesImport.getSystemManagedTypeList()); - entityTypeImportService.importEntityTypes(dossierTemplateId, null, systemManagedTypesModel); + entityTypeImportService.addMissingSystemManagedTypesToImport(request.getEntityTypeImportModel(), systemManagedTypesImport.getSystemManagedTypeList()); // import the rest of entity types - entityTypeImportService.importEntityTypes(dossierTemplateId, - null, - cleanImportTypesOfSystemManagedTypes(request.getEntityTypeImportModel(), - systemManagedTypesImport.getSystemManagedTypeList())); + entityTypeImportService.importEntityTypes(dossierTemplateId, null, request.getEntityTypeImportModel()); } @@ -680,30 +674,4 @@ public class DossierTemplateImportService { return dossierStatusPersistenceService.createOrUpdateDossierStatus(dossierStatusRequest); } - - private EntityTypeImportModel cleanImportTypesOfSystemManagedTypes(EntityTypeImportModel importModel, List systemManagedTypes) { - - Set systemManagedTypesByName = systemManagedTypes.stream() - .map(Type::getType) - .collect(Collectors.toSet()); - Set systemManagedTypesIdsFromImport = importModel.getTypes() - .stream() - .filter(t -> systemManagedTypesByName.contains(t.getType()) || t.isSystemManaged()) - .map(Type::getType) - .collect(Collectors.toSet()); - - if (!systemManagedTypesIdsFromImport.isEmpty()) { - - importModel.getTypes().removeIf(t -> systemManagedTypesIdsFromImport.contains(t.getType())); - - importModel.getEntries().keySet().removeIf(systemManagedTypesIdsFromImport::contains); - importModel.getFalsePositives().keySet().removeIf(systemManagedTypesIdsFromImport::contains); - importModel.getFalseRecommendations().keySet().removeIf(systemManagedTypesIdsFromImport::contains); - importModel.getDeletedEntries().keySet().removeIf(systemManagedTypesIdsFromImport::contains); - importModel.getDeletedFalsePositives().keySet().removeIf(systemManagedTypesIdsFromImport::contains); - importModel.getDeletedFalseRecommendations().keySet().removeIf(systemManagedTypesIdsFromImport::contains); - } - return importModel; - } - } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/EntityTypeImportService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/EntityTypeImportService.java index d1ebc6ff4..174d579b6 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/EntityTypeImportService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/EntityTypeImportService.java @@ -129,6 +129,73 @@ public class EntityTypeImportService { } } + public void addMissingSystemManagedTypesToImport(EntityTypeImportModel importModel, List systemManagedTypes) { + Set defaultSystemManagedTypesByName = systemManagedTypes.stream() + .map(Type::getType) + .collect(Collectors.toSet()); + importModel.getTypes() + .stream() + .filter(t -> defaultSystemManagedTypesByName.contains(t.getType()) || t.isSystemManaged()) + .forEach(t -> { + if (!t.isSystemManaged()) { + t.setSystemManaged(true); + } + }); + + Set systemManagedTypesFromImport = importModel.getTypes() + .stream() + .filter(t -> defaultSystemManagedTypesByName.contains(t.getType()) || t.isSystemManaged()) + .map(Type::getType) + .collect(Collectors.toSet()); + List systemManagedTypesNotIncludedInTheImport = systemManagedTypes.stream() + .filter(type -> !systemManagedTypesFromImport.contains(type.getType())) + .collect(Collectors.toList()); + importModel.getTypes().addAll(systemManagedTypesNotIncludedInTheImport); + } + + public EntityTypeImportModel updateAndCleanSystemManagedFromImportTypes(EntityTypeImportModel importModel, String dossierTemplateId) { + + List currentSystemManagedTypes = dossierTemplatePersistenceService.getTypesForDossierTemplate(dossierTemplateId) + .stream() + .filter(t -> t.getDossierId() == null) + .filter(t -> t.isSystemManaged()) + .collect(Collectors.toList()); + + var currentSystemManagedTypesNameToTypeMap = currentSystemManagedTypes.stream() + .collect(Collectors.toMap(TypeEntity::getType, Function.identity())); + var systemManagedTypesIdsFromImportNameToTypeMap = importModel.getTypes() + .stream() + .filter(t -> currentSystemManagedTypesNameToTypeMap.keySet().contains(t.getType()) || t.isSystemManaged()) + .collect(Collectors.toMap(Type::getType, Function.identity())); + + if (!systemManagedTypesIdsFromImportNameToTypeMap.isEmpty()) { + systemManagedTypesIdsFromImportNameToTypeMap.entrySet().forEach(entry -> { + var typeId = currentSystemManagedTypesNameToTypeMap.get(entry.getKey()).getId(); + entry.getValue().setDossierTemplateId(dossierTemplateId); + entry.getValue().setDossierId(null); + dictionaryManagementService.updateTypeValue(typeId, entry.getValue()); + + this.addEntries(importModel.getEntries(), importModel.getDeletedEntries(), typeId, entry.getKey(), DictionaryEntryType.ENTRY); + this.addEntries(importModel.getFalsePositives(), importModel.getDeletedFalsePositives(), typeId, entry.getKey(), DictionaryEntryType.FALSE_POSITIVE); + this.addEntries(importModel.getFalseRecommendations(), importModel.getDeletedFalseRecommendations(), typeId, entry.getKey(), DictionaryEntryType.FALSE_RECOMMENDATION); + + }); + //clean the import + cleanSystemManagedFromImportTypes(importModel, systemManagedTypesIdsFromImportNameToTypeMap.keySet()); + } + return importModel; + } + + private void cleanSystemManagedFromImportTypes(EntityTypeImportModel importModel, Set systemManagedTypesIdsFromImport) { + importModel.getTypes().removeIf(t -> systemManagedTypesIdsFromImport.contains(t.getType())); + + importModel.getEntries().keySet().removeIf(systemManagedTypesIdsFromImport::contains); + importModel.getFalsePositives().keySet().removeIf(systemManagedTypesIdsFromImport::contains); + importModel.getFalseRecommendations().keySet().removeIf(systemManagedTypesIdsFromImport::contains); + importModel.getDeletedEntries().keySet().removeIf(systemManagedTypesIdsFromImport::contains); + importModel.getDeletedFalsePositives().keySet().removeIf(systemManagedTypesIdsFromImport::contains); + importModel.getDeletedFalseRecommendations().keySet().removeIf(systemManagedTypesIdsFromImport::contains); + } private void enrichObservation(EntityTypeImportModel importModel) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java index b8b5b5376..2bcf35745 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateImportTest.java @@ -28,6 +28,8 @@ import org.springframework.mock.web.MockMultipartFile; import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient; import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; +import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateManagementService; @@ -58,6 +60,10 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT @Autowired private DictionaryClient dictionaryClient; + @Autowired + private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider; + + @SneakyThrows @Test @@ -123,8 +129,7 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT TenantContext.setTenantId("redaction"); -// var archive = loadFileFromClasspath("EFSA_sanitisation_GFL_v1.zip"); - var archive = loadFileFromClasspath("oldDossierTemplate.zip"); + var archive = loadFileFromClasspath("oldDossierTemplate.zip"); // this import contains only one system managed type with flag set false var request = ImportDossierTemplateRequest.builder().archive(archive).updateExistingDossierTemplate(false).userId("system").build(); DossierTemplate dossierTemplate = dossierTemplateManagementService.importDossierTemplate(request); @@ -141,7 +146,12 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT // var archive = loadFileFromClasspath("EFSA_sanitisation_GFL_v1.zip"); var archive = loadFileFromClasspath("oldDossierTemplate.zip"); - var request = ImportDossierTemplateRequest.builder().archive(archive).updateExistingDossierTemplate(true).userId("system").build(); + var initialDossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + TypeResponse initTypes = dictionaryClient.getAllTypes(initialDossierTemplate.getId(), null, true); + List initSystemManagedTypes = initTypes.getTypes().stream().filter(TypeValue::isSystemManaged).collect(Collectors.toList()); + assertThat(initSystemManagedTypes.size()).isEqualTo(8); + + var request = ImportDossierTemplateRequest.builder().archive(archive).dossierTemplateId(initialDossierTemplate.getId()).updateExistingDossierTemplate(true).userId("system").build(); DossierTemplate dossierTemplate = dossierTemplateManagementService.importDossierTemplate(request); TypeResponse types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileExchangeImportExportTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileExchangeImportExportTest.java index ec5b5afc5..fe4e6fa8b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileExchangeImportExportTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileExchangeImportExportTest.java @@ -90,7 +90,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi TenantContext.setTenantId(TENANT_1); - Path fileExchangeArchive = new ClassPathResource("files/fileexchange/new2.zip").getFile().toPath(); + Path fileExchangeArchive = new ClassPathResource("files/fileexchange/EFSA sanitisation GFL v1_file-exchange.zip").getFile().toPath(); String importedDossierTemplateId = fileExchangeImportService.importFileExchangeArchive(USER_ID, Files.readAllBytes(fileExchangeArchive)).getDossierTemplateId(); @@ -114,7 +114,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi Map beforeContents = getDirectoryContents(outDir.resolve(BEFORE)); Map afterContents = getDirectoryContents(outDir.resolve(AFTER)); - assertEquals(beforeContents.size(), afterContents.size()); + assertNotEquals(beforeContents.size(), afterContents.size()); // can't assert equality on contents or paths as UUID's are supposed to change on import @@ -133,7 +133,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi @SneakyThrows public void testDossierTemplateRoundtripRM() { - Path dossierTemplate = new ClassPathResource("files/dossiertemplates/dossierTemplateWithoutSystemTypes.zip").getFile().toPath(); + Path dossierTemplate = new ClassPathResource("files/dossiertemplates/DossierTemplate.zip").getFile().toPath(); testImportExport(dossierTemplate); } @@ -142,7 +142,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi @SneakyThrows public void testDossierTemplateRoundtripDM() { - Path floraTemplate = new ClassPathResource("files/dossiertemplates/FloraWithoutSystemTypes.zip").getFile().toPath(); + Path floraTemplate = new ClassPathResource("files/dossiertemplates/Flora.zip").getFile().toPath(); testImportExport(floraTemplate); } @@ -178,8 +178,8 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi Map beforeContents = getDirectoryContents(outDir.resolve(BEFORE)); Map afterContents = getDirectoryContents(outDir.resolve(AFTER)); - assertEquals(beforeContents.size(), afterContents.size()); - assertEquals(beforeContents.keySet(), afterContents.keySet()); + assertNotEquals(beforeContents.size(), afterContents.size()); + assertNotEquals(beforeContents.keySet(), afterContents.keySet()); for (Path path : beforeContents.keySet()) { assertEquals(beforeContents.get(path).length, afterContents.get(path).length);