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 61a56b934..c623036f9 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 @@ -273,7 +273,8 @@ 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 - List dossierTypes = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplate.getId(), false); + // also the ones that are system - managed + List dossierTypes = dictionaryPersistenceService.getAllTypesForDossierTemplateWithoutSystemManaged(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 22596179e..689f1d8c2 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 @@ -21,6 +21,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.EntityTypeImportModel; 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.WatermarkEntity; @@ -65,6 +66,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.DossierStatusInfo; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; import com.iqser.red.service.redaction.v1.model.DroolsValidation; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter; @@ -102,6 +104,7 @@ public class DossierTemplateImportService { ComponentMappingService componentMappingService; ComponentDefinitionPersistenceService componentDefinitionPersistenceService; EntityTypeImportService entityTypeImportService; + SystemManagedTypesImport systemManagedTypesImport; public String importDossierTemplate(ImportDossierTemplateRequest request) { @@ -276,7 +279,9 @@ public class DossierTemplateImportService { setComponentMappings(dossierTemplateId, request.getComponentMappings()); importStep = 12; - entityTypeImportService.updateTypes(dossierTemplateId, null, request.getEntityTypeImportModel()); + entityTypeImportService.updateTypes(dossierTemplateId, + null, + cleanImportTypesOfSystemManagedTypes(request.getEntityTypeImportModel(), systemManagedTypesImport.getSystemManagedTypeList())); } else { @@ -392,7 +397,15 @@ public class DossierTemplateImportService { //set types importStep = 12; - entityTypeImportService.importEntityTypes(dossierTemplateId, null, request.getEntityTypeImportModel()); + // import system managed entity types + EntityTypeImportModel systemManagedTypesModel = new EntityTypeImportModel(); + systemManagedTypesModel.getTypes().addAll(systemManagedTypesImport.getSystemManagedTypeList()); + entityTypeImportService.importEntityTypes(dossierTemplateId, null, systemManagedTypesModel); + // import the rest of entity types + entityTypeImportService.importEntityTypes(dossierTemplateId, + null, + cleanImportTypesOfSystemManagedTypes(request.getEntityTypeImportModel(), + systemManagedTypesImport.getSystemManagedTypeList())); } @@ -476,7 +489,7 @@ public class DossierTemplateImportService { private void setDataFormats(ImportTemplateResult request, String dossierTemplateId) { - if(request.getDateFormats() != null) { + if (request.getDateFormats() != null) { List dateFormatPatternErrorMessages = dateFormatsValidationService.validateDateFormats(request.getDateFormats()); if (!dateFormatPatternErrorMessages.isEmpty()) { throw new BadRequestException("The date formats file contains errors"); @@ -646,4 +659,30 @@ 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(key -> systemManagedTypesIdsFromImport.contains(key)); + importModel.getFalsePositives().keySet().removeIf(key -> systemManagedTypesIdsFromImport.contains(key)); + importModel.getFalseRecommendations().keySet().removeIf(key -> systemManagedTypesIdsFromImport.contains(key)); + importModel.getDeletedEntries().keySet().removeIf(key -> systemManagedTypesIdsFromImport.contains(key)); + importModel.getDeletedFalsePositives().keySet().removeIf(key -> systemManagedTypesIdsFromImport.contains(key)); + importModel.getDeletedFalseRecommendations().keySet().removeIf(key -> systemManagedTypesIdsFromImport.contains(key)); + } + 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 6e89e29da..d1ebc6ff4 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 @@ -47,6 +47,7 @@ public class EntityTypeImportService { List currentTypes = dossierTemplatePersistenceService.getTypesForDossierTemplate(dossierTemplateId) .stream() .filter(t -> t.getDossierId() == null) + .filter(t -> !t.isSystemManaged()) .collect(Collectors.toList()); Set currentTypesId = currentTypes.stream() @@ -145,28 +146,10 @@ public class EntityTypeImportService { private void deleteTypes(List currentTypes, Set typeIdsAdded) { - Set currentTypesIdSystemManaged = currentTypes.stream() - .filter(TypeEntity::isSystemManaged) - .map(TypeEntity::getId) - .collect(Collectors.toSet()); - - // for types system managed just delete the entries - Set entriesToRemove = currentTypesIdSystemManaged.stream() - .filter(t -> !typeIdsAdded.contains(t)) - .collect(Collectors.toSet()); - entriesToRemove.forEach(typeId -> { - var currentVersion = dictionaryManagementService.getCurrentVersion(typeId); - entryPersistenceService.deleteAllEntriesForTypeId(typeId, currentVersion + 1, DictionaryEntryType.ENTRY); - entryPersistenceService.deleteAllEntriesForTypeId(typeId, currentVersion + 1, DictionaryEntryType.FALSE_POSITIVE); - entryPersistenceService.deleteAllEntriesForTypeId(typeId, currentVersion + 1, DictionaryEntryType.FALSE_RECOMMENDATION); - dictionaryPersistenceService.incrementVersion(typeId); - typeIdsAdded.add(typeId); // added to the list, since the type can not be deleted - }); Set typesToRemove = currentTypes.stream() .filter(t -> !t.isDeleted()) // remove the ones already soft deleted .map(TypeEntity::getId) .filter(t -> !typeIdsAdded.contains(t)) // exclude the type ids already added from the import - .filter(t -> !currentTypesIdSystemManaged.contains(t)) // exclude the types system managed .collect(Collectors.toSet()); typesToRemove.forEach(dictionaryManagementService::deleteType); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/SystemManagedTypesImport.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/SystemManagedTypesImport.java new file mode 100644 index 000000000..8b0c3572e --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/dataexchange/service/SystemManagedTypesImport.java @@ -0,0 +1,59 @@ +package com.iqser.red.service.persistence.management.v1.processor.dataexchange.service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Service; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.commons.jackson.ObjectMapperFactory; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; + +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +public class SystemManagedTypesImport { + + @Value("${application.type}") + private String applicationType; + private final ObjectMapper objectMapper = ObjectMapperFactory.create(); + private List rmSystemManagedTypeList = new ArrayList<>(); +// List dmSystemManagedTypeList = new ArrayList<>(); + + + @PostConstruct + public void init() { + + Resource redactManagerResource = new ClassPathResource("files/systemtypes/rm/systemTypes.json"); +// Resource docuMineResource = new ClassPathResource("files/systemtypes/dm/systemTypes.json"); + + try { + rmSystemManagedTypeList = objectMapper.readValue(redactManagerResource.getContentAsByteArray(), new TypeReference<>() { + }); +// dmSystemManagedTypeList = objectMapper.readValue(docuMineResource.getContentAsByteArray(), new TypeReference<>() { +// }); + + } catch (IOException e) { + log.info("Could not read the system managed types for dossier templates error: {}", e.getMessage()); + } + } + + + public List getSystemManagedTypeList() { + +// if (applicationType.equals("DocuMine")) { +// return dmSystemManagedTypeList; +// } + return this.rmSystemManagedTypeList; + } + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateManagementService.java index 074f204cc..fa0152890 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateManagementService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DossierTemplateManagementService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.DossierTemplateExportService; import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.DossierTemplateImportService; +import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.SystemManagedTypesImport; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService; import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest; @@ -15,6 +16,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplate; import com.iqser.red.service.persistence.management.v1.processor.dataexchange.models.ExportDownloadRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -29,10 +31,25 @@ public class DossierTemplateManagementService { private final DossierTemplatePersistenceService dossierTemplatePersistenceService; private final DossierTemplateCloneService dossierTemplateCloneService; + private final SystemManagedTypesImport systemManagedTypesImport; + + private final DictionaryManagementService dictionaryManagementService; + public DossierTemplate createOrUpdateDossierTemplate(CreateOrUpdateDossierTemplateRequest dossierTemplate) { - return convert(dossierTemplatePersistenceService.createOrUpdateDossierTemplate(dossierTemplate), DossierTemplate.class); + DossierTemplate dossierTemplate1 = convert(dossierTemplatePersistenceService.createOrUpdateDossierTemplate(dossierTemplate), DossierTemplate.class); + + if (dossierTemplate.getDossierTemplateId() == null) { + // import system managed entity types to this dossier template + for (Type type : systemManagedTypesImport.getSystemManagedTypeList()) { + + type.setDossierTemplateId(dossierTemplate1.getId()); + type.setDossierId(null); + dictionaryManagementService.addType(type); + } + } + return dossierTemplate1; } @@ -66,7 +83,6 @@ public class DossierTemplateManagementService { } - public DossierTemplate importDossierTemplate(ImportDossierTemplateRequest request) { String dossierTemplateId = dossierTemplateImportService.importDossierTemplate(request); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java index f970eeb56..673b118e8 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DictionaryPersistenceService.java @@ -178,6 +178,13 @@ public class DictionaryPersistenceService { } + public List getAllTypesForDossierTemplateWithoutSystemManaged(String dossierTemplateId, boolean includeDeleted) { + + var types = typeRepository.getAllTypesForDossierTemplateWithoutSystemManagedTypes(dossierTemplateId); + return filterDeleted(types, includeDeleted); + } + + public List getAllTypesForDossier(String dossierId, boolean includeDeleted) { var types = typeRepository.findByDossierId(dossierId); @@ -319,13 +326,15 @@ public class DictionaryPersistenceService { @Transactional - public void setExperimentalTrue(String typeId){ - typeRepository.findById(typeId).ifPresent(type -> { - type.setVersion(type.getVersion() + 1); - type.setSystemManaged(true); - type.setExperimental(true); - typeRepository.saveAndFlush(type); - }); + public void setExperimentalTrue(String typeId) { + + typeRepository.findById(typeId) + .ifPresent(type -> { + type.setVersion(type.getVersion() + 1); + type.setSystemManaged(true); + type.setExperimental(true); + typeRepository.saveAndFlush(type); + }); } } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java index f7178898d..ce3186305 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/TypeRepository.java @@ -44,6 +44,9 @@ public interface TypeRepository extends JpaRepository { @Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplateId and t.dossierId is null") List getAllTypesForDossierTemplate(@Param("dossierTemplateId") String dossierTemplateId); + @Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplateId and t.dossierId is null and t.systemManaged = false") + List getAllTypesForDossierTemplateWithoutSystemManagedTypes(@Param("dossierTemplateId") String dossierTemplateId); + @Query("select t from TypeEntity t where t.dossierTemplateId = :dossierTemplateId or t.dossierId = :dossierId") List findAllTypesByDossierTemplateIdOrDossierId(@Param("dossierTemplateId") String dossierTemplateId, @Param("dossierId") String dossierId); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/files/systemtypes/dm/systemTypes.json b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/files/systemtypes/dm/systemTypes.json new file mode 100644 index 000000000..df64e5543 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/files/systemtypes/dm/systemTypes.json @@ -0,0 +1,207 @@ +[ + { + "id": "formula:4e4987e9-a285-40b8-9ae1-46464b37d322", + "type": "formula", + "label": "Formula", + "hexColor": "#036ffc", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#aaaaaa", + "rank": 1002, + "description": "Empty dictionary used to configure formula colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierDictionaryOnly": false, + "dossierTemplateId": "4e4987e9-a285-40b8-9ae1-46464b37d322", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "experimental": false, + "caseInsensitive": true, + "hint": true, + "recommendation": false + }, + { + "id": "graphic:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "graphic", + "label": "Graphic", + "hexColor": "#ffbdfd", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 998, + "description": "Empty dictionary used to configure graphic colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "hint": true, + "caseInsensitive": true, + "recommendation": false, + "experimental": true + }, + { + "id": "image:4e4987e9-a285-40b8-9ae1-46464b37d322", + "type": "image", + "label": "Image", + "hexColor": "#bdd6ff", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#aaaaaa", + "rank": 999, + "description": "Empty dictionary used to configure image colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierDictionaryOnly": false, + "dossierTemplateId": "4e4987e9-a285-40b8-9ae1-46464b37d322", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "experimental": false, + "caseInsensitive": true, + "hint": true, + "recommendation": false + }, + { + "id": "imported_redaction:4e4987e9-a285-40b8-9ae1-46464b37d322", + "type": "imported_redaction", + "label": "Imported Redaction", + "hexColor": "#f0f0c0", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#aaaaaa", + "rank": 9999, + "description": "Redaction Annotations that were imported from documents", + "version": 1, + "addToDictionaryAction": false, + "dossierDictionaryOnly": false, + "dossierTemplateId": "4e4987e9-a285-40b8-9ae1-46464b37d322", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": true, + "softDeletedTime": null, + "experimental": false, + "caseInsensitive": false, + "hint": false, + "recommendation": false + }, + { + "id": "logo:4e4987e9-a285-40b8-9ae1-46464b37d322", + "type": "logo", + "label": "Logo", + "hexColor": "#bdd6ff", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#aaaaaa", + "rank": 1001, + "description": "Empty dictionary used to configure logo colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierDictionaryOnly": false, + "dossierTemplateId": "4e4987e9-a285-40b8-9ae1-46464b37d322", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "experimental": false, + "caseInsensitive": true, + "hint": true, + "recommendation": false + }, + { + "id": "manual:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "manual", + "label": "Manual Redactions", + "hexColor": "#9398a0", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 10000, + "description": "Manual Redactions", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "hint": false, + "caseInsensitive": false, + "recommendation": false + }, + { + "id": "ocr:4e4987e9-a285-40b8-9ae1-46464b37d322", + "type": "ocr", + "label": "Ocr", + "hexColor": "#bdd6ff", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#aaaaaa", + "rank": 1000, + "description": "Empty dictionary used to configure ocr colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierDictionaryOnly": false, + "dossierTemplateId": "4e4987e9-a285-40b8-9ae1-46464b37d322", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "experimental": false, + "caseInsensitive": true, + "hint": true, + "recommendation": false + }, + { + "id": "signature:4e4987e9-a285-40b8-9ae1-46464b37d322", + "type": "signature", + "label": "Signature", + "hexColor": "#bdd6ff", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#aaaaaa", + "rank": 1003, + "description": "Empty dictionary used to configure signature colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierDictionaryOnly": false, + "dossierTemplateId": "4e4987e9-a285-40b8-9ae1-46464b37d322", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "experimental": false, + "caseInsensitive": true, + "hint": true, + "recommendation": false + } +] diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/files/systemtypes/rm/systemTypes.json b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/files/systemtypes/rm/systemTypes.json new file mode 100644 index 000000000..e7eeecfb6 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/files/systemtypes/rm/systemTypes.json @@ -0,0 +1,195 @@ +[ + { + "id": "formula:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "formula", + "label": "Formula", + "hexColor": "#036ffc", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 1002, + "description": "Empty dictionary used to configure formula colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "hint": true, + "caseInsensitive": true, + "recommendation": false + }, + { + "id": "graphic:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "graphic", + "label": "Graphic", + "hexColor": "#ffbdfd", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 998, + "description": "Empty dictionary used to configure graphic colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "hint": true, + "caseInsensitive": true, + "recommendation": false, + "experimental": true + }, + { + "id": "image:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "image", + "label": "Image", + "hexColor": "#bdd6ff", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 999, + "description": "Empty dictionary used to configure image colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "hint": true, + "caseInsensitive": true, + "recommendation": false + }, + { + "id": "imported_redaction:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "imported_redaction", + "label": "Imported Redaction", + "hexColor": "#f0f0c0", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 9999, + "description": "Redaction Annotations that were imported from documents", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": true, + "softDeletedTime": null, + "hint": false, + "caseInsensitive": false, + "recommendation": false + }, + { + "id": "logo:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "logo", + "label": "Logo", + "hexColor": "#9398a0", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 1001, + "description": "Empty dictionary used to configure logo colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "hint": false, + "caseInsensitive": true, + "recommendation": false + }, + { + "id": "manual:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "manual", + "label": "Manual Redactions", + "hexColor": "#9398a0", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 10000, + "description": "Manual Redactions", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "hint": false, + "caseInsensitive": false, + "recommendation": false + }, + { + "id": "ocr:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "ocr", + "label": "Ocr", + "hexColor": "#bdd6ff", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 1000, + "description": "Empty dictionary used to configure ocr colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "hint": true, + "caseInsensitive": true, + "recommendation": false + }, + { + "id": "signature:50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "type": "signature", + "label": "Signature", + "hexColor": "#9398a0", + "recommendationHexColor": "#8df06c", + "skippedHexColor": "#c498fa", + "rank": 1003, + "description": "Empty dictionary used to configure signature colors.", + "version": 1, + "addToDictionaryAction": false, + "dossierTemplateId": "50f0087a-d999-45b2-b9c9-d9c62a6fb66c", + "dossierId": null, + "entries": [], + "falsePositiveEntries": [], + "falseRecommendationEntries": [], + "hasDictionary": false, + "systemManaged": true, + "autoHideSkipped": false, + "softDeletedTime": null, + "hint": false, + "caseInsensitive": true, + "recommendation": false + } +] diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java index 4b60b2210..b8c80ef18 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DictionaryTest.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import java.util.stream.IntStream; import org.junit.jupiter.api.Assertions; @@ -408,10 +409,19 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .build()); assertThat(returnedtype1.isDossierDictionaryOnly()).isTrue(); - assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), null, false).getTypes().size()).isEqualTo(1); - assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), dossier.getId(), false).getTypes().size()).isEqualTo(2); + assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), null, false) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), dossier.getId(), false) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(2); var dictionary = dictionaryClient.getDictionaryForType(returnedtype1.getType(), dossier.getDossierTemplateId(), dossier2.getId()); - assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), dossier2.getId(), false).getTypes().size()).isEqualTo(2); + assertThat(dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), dossier2.getId(), false) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(2); } @@ -451,7 +461,9 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { assertThat(actualEntries).usingComparator(new ListContentWithoutOrderAndWithoutDuplicatesComparator<>()).isEqualTo(entries); dictionaryClient.deleteType(createdType.getType(), createdType.getDossierTemplateId()); - assertThat(dictionaryClient.getAllTypes(createdType.getDossierTemplateId(), null, false).getTypes().size()).isEqualTo(0); + assertThat(dictionaryClient.getAllTypes(createdType.getDossierTemplateId(), null, false) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()).size()).isEqualTo(0); dictionaryClient.addType(type); @@ -1007,11 +1019,20 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .build()); assertThat(dtType.getRank()).isEqualTo(100); assertThat(dtType.isDossierDictionaryOnly()).isFalse(); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes().size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(1); dictionaryClient.deleteType(dtType.getType(), dtType.getDossierTemplateId()); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, false).getTypes().size()).isEqualTo(0); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes().size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, false) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(0); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(1); var dtType2 = dictionaryClient.addType(CreateTypeValue.builder() .type("test2") @@ -1025,12 +1046,24 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .dossierTemplateId(dossierTemplate.getId()) .dossierDictionaryOnly(false) .build()); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, false).getTypes().size()).isEqualTo(1); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes().size()).isEqualTo(2); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, false) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(2); assertThat(dtType2.getRank()).isEqualTo(dtType.getRank()); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false).getTypes().size()).isEqualTo(2); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), true).getTypes().size()).isEqualTo(3); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(2); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), true) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(3); } @@ -1063,7 +1096,7 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .dossierDictionaryOnly(false) .build()); - List types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes(); + List types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes().stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()); assertThat(types.size()).isEqualTo(1); String dictionaryEntry = "entry1"; @@ -1097,7 +1130,10 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { .build()); assertThat(dtType.getRank()).isEqualTo(100); assertThat(dtType.isDossierDictionaryOnly()).isFalse(); - assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true).getTypes().size()).isEqualTo(1); + assertThat(dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true) + .getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(1); assertThatThrownBy(() -> dictionaryManagementService.addEntries(dtType.getTypeId(), List.of("entry1", "entry2"), diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateCloneAndExportWithDuplicateRanksTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateCloneAndExportWithDuplicateRanksTest.java index 4a4084196..b38784a2f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateCloneAndExportWithDuplicateRanksTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateCloneAndExportWithDuplicateRanksTest.java @@ -23,12 +23,14 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.commons.jackson.ObjectMapperFactory; +import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.SystemManagedTypesImport; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.migration.RankDeDuplicationService; import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService; import com.iqser.red.service.persistence.management.v1.processor.service.ComponentMappingService; +import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateCloneService; import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.DossierTemplateImportService; import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateManagementService; @@ -107,6 +109,10 @@ public class DossierTemplateCloneAndExportWithDuplicateRanksTest { private DossierTemplateExportService dossierTemplateExportService; private EntityTypeExportService entityTypeExportService; private RankDeDuplicationService rankDeDuplicationService; + @MockBean + private DictionaryManagementService dictionaryManagementService; + @MockBean + private SystemManagedTypesImport systemManagedTypesImport; ObjectMapper mapper; @@ -170,7 +176,9 @@ public class DossierTemplateCloneAndExportWithDuplicateRanksTest { dossierTemplateManagementService = new DossierTemplateManagementService(dossierTemplateExportService, dossierTemplateImportService, dossierTemplatePersistenceService, - dossierTemplateCloneService); + dossierTemplateCloneService, + systemManagedTypesImport, + dictionaryManagementService); rankDeDuplicationService = new RankDeDuplicationService(dossierTemplateManagementService, dictionaryPersistenceService); 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 dace0b740..6d4ad89c5 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 @@ -14,6 +14,7 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -25,12 +26,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; 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.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateManagementService; import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeValue; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DossierTemplate; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.importexport.ImportDossierTemplateRequest; import com.iqser.red.service.redaction.v1.model.DroolsBlacklistErrorMessage; @@ -51,6 +55,9 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT @Autowired private DossierTemplateClient dossierTemplateClient; + @Autowired + private DictionaryClient dictionaryClient; + @SneakyThrows @Test @@ -112,12 +119,34 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT @SneakyThrows @Test - public void testDossierTemplateImport() { + public void testDossierTemplateImportAsNew() { TenantContext.setTenantId("redaction"); - var archive = loadFileFromClasspath("EFSA_sanitisation_GFL_v1.zip"); - testDossierTemplateImport(archive); +// var archive = loadFileFromClasspath("EFSA_sanitisation_GFL_v1.zip"); + var archive = loadFileFromClasspath("oldDossierTemplate.zip"); + var request = ImportDossierTemplateRequest.builder().archive(archive).updateExistingDossierTemplate(false).userId("system").build(); + DossierTemplate dossierTemplate = dossierTemplateManagementService.importDossierTemplate(request); + + TypeResponse types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true); + List systemManagedTypes = types.getTypes().stream().filter(TypeValue::isSystemManaged).collect(Collectors.toList()); + assertThat(systemManagedTypes.size()).isEqualTo(8); + } + + @SneakyThrows + @Test + public void testDossierTemplateImportAsUpdate() { + + TenantContext.setTenantId("redaction"); + +// var archive = loadFileFromClasspath("EFSA_sanitisation_GFL_v1.zip"); + var archive = loadFileFromClasspath("oldDossierTemplate.zip"); + var request = ImportDossierTemplateRequest.builder().archive(archive).updateExistingDossierTemplate(true).userId("system").build(); + DossierTemplate dossierTemplate = dossierTemplateManagementService.importDossierTemplate(request); + + TypeResponse types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true); + List systemManagedTypes = types.getTypes().stream().filter(TypeValue::isSystemManaged).collect(Collectors.toList()); + assertThat(systemManagedTypes.size()).isEqualTo(8); } @SneakyThrows diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java index d8cc5d47e..5c32dff1c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTemplateStatsTest.java @@ -198,7 +198,7 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe .get(); assertThat(dossierTemplateStats1.getDossierTemplateId()).isEqualTo(dossierTemplate2.getId()); - assertThat(dossierTemplateStats1.getNumberOfDictionaries()).isEqualTo(2); + assertThat(dossierTemplateStats1.getNumberOfDictionaries()).isEqualTo(10); List dictionarySummaryList = dossierTemplateStats1.getDictionarySummaryList(); assertThat(dictionarySummaryList.stream() .filter(d -> d.getType().equals(TYPE_ID_1)) @@ -215,7 +215,7 @@ public class DossierTemplateStatsTest extends AbstractPersistenceServerServiceTe .findAny() .get(); assertThat(dossierTemplateStats3.getDossierTemplateId()).isEqualTo(dossierTemplate4.getId()); - assertThat(dossierTemplateStats3.getNumberOfDictionaries()).isZero(); + assertThat(dossierTemplateStats3.getNumberOfDictionaries()).isEqualTo(8); // delete some entries, stats should be updated var entries22 = new ArrayList(); 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 996739ca8..bc40b95e3 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 @@ -58,6 +58,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierAttr import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierStatusRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttributesConfig; +import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeValue; import com.iqser.red.service.persistence.service.v1.api.shared.model.WatermarkModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.CloneDossierTemplateRequest; @@ -147,6 +148,10 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + TypeResponse types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true); + List systemManagedTypes = types.getTypes().stream().filter(TypeValue::isSystemManaged).collect(Collectors.toList()); + assertThat(systemManagedTypes.size()).isEqualTo(8); + var allTemplates = dossierTemplateClient.getAllDossierTemplates(); assertThat(allTemplates.size()).isEqualTo(1); assertThat(allTemplates.get(0)).isEqualTo(dossierTemplate); @@ -243,7 +248,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { .hexColor("#ddddd") .recommendationHexColor("#cccccc") .skippedHexColor("#cccccc") - .rank(999) + .rank(957) .hint(false) .recommendation(false) .caseInsensitive(false) @@ -259,7 +264,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { .hexColor("#12345") .recommendationHexColor("#6789a") .skippedHexColor("#6789a") - .rank(1002) + .rank(1022) .hint(false) .recommendation(false) .caseInsensitive(false) @@ -279,7 +284,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { dictionaryClient.getDictionaryForType(type2.getType(), type2.getDossierTemplateId(), dossier.getId()); var allTypes = dictionaryClient.getAllTypes(dossierTemplate.getId(), dossier.getId(), false).getTypes(); - assertThat(allTypes.size()).isEqualTo(4); + assertThat(allTypes + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(4); var typesWithRankOfType1 = allTypes.stream() .filter(t -> t.getRank() == type.getRank()) .collect(Collectors.toList()); @@ -441,7 +448,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { .hexColor("#ddddd") .recommendationHexColor("#cccccc") .skippedHexColor("#cccccc") - .rank(999) + .rank(957) .hint(false) .recommendation(false) .caseInsensitive(false) @@ -456,7 +463,7 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest { .hexColor("#12345") .recommendationHexColor("#6789a") .skippedHexColor("#6789a") - .rank(1002) + .rank(1022) .hint(false) .recommendation(false) .caseInsensitive(false) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 2d289bfce..1204fd54e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -8,6 +8,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.OffsetDateTime; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import java.util.stream.IntStream; import org.junit.jupiter.api.Disabled; @@ -115,7 +116,9 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { var dossier = dossierTesterAndProvider.provideTestDossier(); var returnedTypes = dictionaryClient.getAllTypes(dossier.getDossierTemplateId(), dossier.getId(), false); - assertThat(returnedTypes.getTypes().size()).isEqualTo(0); + assertThat(returnedTypes.getTypes() + .stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()) + .size()).isEqualTo(0); var watermark = new WatermarkModel(); watermark.setName("watermark name"); 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 812bb0a10..2f78e2689 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 @@ -1,6 +1,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; @@ -89,7 +90,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi TenantContext.setTenantId(TENANT_1); - Path fileExchangeArchive = new ClassPathResource("files/fileexchange/EFSA sanitisation GFL v1_file-exchange.zip").getFile().toPath(); + Path fileExchangeArchive = new ClassPathResource("files/fileexchange/fileExchange.zip").getFile().toPath(); String importedDossierTemplateId = fileExchangeImportService.importFileExchangeArchive(USER_ID, Files.readAllBytes(fileExchangeArchive)).getDossierTemplateId(); @@ -130,15 +131,21 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi @Test @SneakyThrows - public void testDossierTemplateRoundtrip() { + public void testDossierTemplateRoundtripRM() { - Path dossierTemplate = new ClassPathResource("files/dossiertemplates/DossierTemplate.zip").getFile().toPath(); - Path floraTemplate = new ClassPathResource("files/dossiertemplates/Flora.zip").getFile().toPath(); + Path dossierTemplate = new ClassPathResource("files/dossiertemplates/dossierTemplateWithoutSystemTypes.zip").getFile().toPath(); testImportExport(dossierTemplate); - testImportExport(floraTemplate); } + @Test + @SneakyThrows + public void testDossierTemplateRoundtripDM() { + + Path floraTemplate = new ClassPathResource("files/dossiertemplates/FloraWithoutSystemTypes.zip").getFile().toPath(); + + testImportExport(floraTemplate); + } @SneakyThrows public void testImportExport(Path dossierTemplateExportArchive) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index 3c89bbb6b..02d9947ed 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -406,7 +406,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { var file = fileTesterAndProvider.testAndProvideFile(dossier); String fileId = file.getId(); - var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual"); + var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual2"); typeProvider.testAndProvideType(dossierTemplate, null, "new-type", false, 2000); var annotationId = "imagine_this_makes_sense"; var commentId = "commentId"; @@ -543,7 +543,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { var file = fileTesterAndProvider.testAndProvideFile(dossier); String fileId = file.getId(); - var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual"); + var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual2"); assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isEqualTo(1); @@ -589,7 +589,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { var file = fileTesterAndProvider.testAndProvideFile(dossier, fileName); String fileId = file.getId(); - var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual"); + var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual2"); assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isEqualTo(1); @@ -772,7 +772,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { var file = fileTesterAndProvider.testAndProvideFile(dossier); String fileId = file.getId(); - var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual"); + var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual2"); // manual is a system managed type automatcally created typeProvider.testAndProvideType(dossierTemplate, null, "new-type", false, 2000); var annotationId = "imagine_this_makes_sense"; var annotation2Id = "imagine_this_makes_sense 2"; @@ -1080,8 +1080,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest { ClassPathResource newDocumentTextDataClassPath = new ClassPathResource("files/newDocumentData/new.DOCUMENT_TEXT.proto"); storageService.storeObject(TenantContext.getTenantId(), newDocumentTextDataStorageId, newDocumentTextDataClassPath.getInputStream()); - - DocumentStructureProto.DocumentStructure documentStructure = storageService.readProtoObject(TenantContext.getTenantId(), newDocumentStructureStorageId, DocumentStructureProto.DocumentStructure.parser()); @@ -1098,9 +1096,9 @@ public class FileTest extends AbstractPersistenceServerServiceTest { newDocumentPositionDataStorageId, DocumentPositionDataProto.AllDocumentPositionData.parser()); - } + @Test @SneakyThrows @Disabled @@ -1174,6 +1172,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { @Test @Disabled public void testParseProtoFiles() throws Exception { + String tempDir = "/tmp"; Path documentStructurePath = Path.of(tempDir, "new.DOCUMENT_STRUCTURE.proto"); @@ -1186,14 +1185,10 @@ public class FileTest extends AbstractPersistenceServerServiceTest { byte[] documentTextBytes = Files.readAllBytes(documentTextPath); byte[] documentPositionBytes = Files.readAllBytes(documentPositionPath); - DocumentStructureProto.DocumentStructure documentStructure = - DocumentStructureProto.DocumentStructure.parseFrom(documentStructureBytes); - DocumentPageProto.AllDocumentPages allDocumentPages = - DocumentPageProto.AllDocumentPages.parseFrom(documentPagesBytes); - DocumentTextDataProto.AllDocumentTextData allDocumentTextData = - DocumentTextDataProto.AllDocumentTextData.parseFrom(documentTextBytes); - DocumentPositionDataProto.AllDocumentPositionData allDocumentPositionData = - DocumentPositionDataProto.AllDocumentPositionData.parseFrom(documentPositionBytes); + DocumentStructureProto.DocumentStructure documentStructure = DocumentStructureProto.DocumentStructure.parseFrom(documentStructureBytes); + DocumentPageProto.AllDocumentPages allDocumentPages = DocumentPageProto.AllDocumentPages.parseFrom(documentPagesBytes); + DocumentTextDataProto.AllDocumentTextData allDocumentTextData = DocumentTextDataProto.AllDocumentTextData.parseFrom(documentTextBytes); + DocumentPositionDataProto.AllDocumentPositionData allDocumentPositionData = DocumentPositionDataProto.AllDocumentPositionData.parseFrom(documentPositionBytes); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java index fbf067342..a7cb275f0 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java @@ -2597,12 +2597,12 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); var file = fileTesterAndProvider.testAndProvideFile(dossier); - var typeImage = typeProvider.testAndProvideType(dossierTemplate, null, "image", false, 999); - var typeLogo = typeProvider.testAndProvideType(dossierTemplate, null, "logo", false, 1001); + var typeImage = "image"; + var typeLogo = "logo"; var entityLogEntry = EntityLogEntry.builder() .id("annotationId") - .type(typeImage.getType()) + .type(typeImage) .entryType(EntryType.IMAGE_HINT) .state(EntryState.SKIPPED) .value("Image:Other") @@ -2647,7 +2647,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .annotationId("annotationId") .legalBasis("") .section("[31]: Section: Images: Regular Images: Formular") - .type(typeLogo.getType()) + .type(typeLogo) .value("Image:Other") .build(); @@ -2657,7 +2657,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertTrue(allManualRedactions.getRecategorizations() .stream() - .anyMatch(manualRecategorization -> manualRecategorization.getType().equals(typeLogo.getType()))); + .anyMatch(manualRecategorization -> manualRecategorization.getType().equals(typeLogo))); } @@ -3341,115 +3341,75 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { String newLegal = "new Legal"; String otherSection = "other section"; - String comment1 = "Recategorizing Luke Skywalker37"; - ManualRedactionResponse manualRedactionResponse = manualRedactionClient.recategorizeBulkLocal( - dossier.getId(), - file.getId(), - RecategorizationBulkLocalRequestModel.builder() - .rectangle(false) - .type(newType.getType()) - .legalBasis(newLegal) - .section(otherSection) - .value("Luke Skywalker37") - .comment(comment1) - .build(), - false); - assertEquals(1, manualRedactionResponse.getManualAnnotationResponses().size()); - assertEquals(newType.getType(), manualRedactionResponse.getManualAnnotationResponses() - .get(0).getEntityLogEntry().getType()); - assertEquals(newLegal, manualRedactionResponse.getManualAnnotationResponses() - .get(0).getEntityLogEntry().getLegalBasis()); - assertEquals(otherSection, manualRedactionResponse.getManualAnnotationResponses() - .get(0).getEntityLogEntry().getSection()); - Long commentId1 = manualRedactionResponse.getManualAnnotationResponses() - .get(0).getCommentId(); - assertNotNull(commentId1); - Optional commentEntity1 = commentRepository.findById(commentId1); - assertTrue(commentEntity1.isPresent()); - assertEquals(comment1, commentEntity1.get().getText()); + ManualRedactionResponse manualRedactionResponse = manualRedactionClient.recategorizeBulkLocal(dossier.getId(), + file.getId(), + RecategorizationBulkLocalRequestModel.builder() + .rectangle(false) + .type(newType.getType()) + .legalBasis(newLegal) + .section(otherSection) + .value("Luke Skywalker37") + .build(), + false); + assertEquals(manualRedactionResponse.getManualAnnotationResponses().size(), 1); + assertEquals(manualRedactionResponse.getManualAnnotationResponses() + .get(0).getEntityLogEntry().getType(), newType.getType()); + assertEquals(manualRedactionResponse.getManualAnnotationResponses() + .get(0).getEntityLogEntry().getLegalBasis(), newLegal); + assertEquals(manualRedactionResponse.getManualAnnotationResponses() + .get(0).getEntityLogEntry().getSection(), otherSection); - String comment2 = "Recategorizing Darth Vader with Legal 3"; - manualRedactionResponse = manualRedactionClient.recategorizeBulkLocal( - dossier.getId(), - file.getId(), - RecategorizationBulkLocalRequestModel.builder() - .rectangle(false) - .type(newType.getType()) - .legalBasis(newLegal) - .section(otherSection) - .value(darthVader) - .originLegalBases(Set.of(legal3)) - .comment(comment2) - .build(), - false); - assertEquals(101, manualRedactionResponse.getManualAnnotationResponses().size()); - assertEquals(newType.getType(), manualRedactionResponse.getManualAnnotationResponses() - .get(1).getEntityLogEntry().getType()); - assertEquals(newLegal, manualRedactionResponse.getManualAnnotationResponses() - .get(29).getEntityLogEntry().getLegalBasis()); - assertEquals(otherSection, manualRedactionResponse.getManualAnnotationResponses() - .get(79).getEntityLogEntry().getSection()); - Long commentId2 = manualRedactionResponse.getManualAnnotationResponses() - .get(0).getCommentId(); - assertNotNull(commentId2); - Optional commentEntity2 = commentRepository.findById(commentId2); - assertTrue(commentEntity2.isPresent()); - assertEquals(comment2, commentEntity2.get().getText()); + manualRedactionResponse = manualRedactionClient.recategorizeBulkLocal(dossier.getId(), + file.getId(), + RecategorizationBulkLocalRequestModel.builder() + .rectangle(false) + .type(newType.getType()) + .legalBasis(newLegal) + .section(otherSection) + .value(darthVader) + .originLegalBases(Set.of(legal3)) + .build(), + false); + assertEquals(manualRedactionResponse.getManualAnnotationResponses().size(), 101); + assertEquals(manualRedactionResponse.getManualAnnotationResponses() + .get(1).getEntityLogEntry().getType(), newType.getType()); + assertEquals(manualRedactionResponse.getManualAnnotationResponses() + .get(29).getEntityLogEntry().getLegalBasis(), newLegal); + assertEquals(manualRedactionResponse.getManualAnnotationResponses() + .get(79).getEntityLogEntry().getSection(), otherSection); - String comment3 = "Recategorizing Darth Vader with type2"; - manualRedactionResponse = manualRedactionClient.recategorizeBulkLocal( - dossier.getId(), - file.getId(), - RecategorizationBulkLocalRequestModel.builder() - .rectangle(false) - .type(newType.getType()) - .legalBasis(newLegal) - .section(otherSection) - .value(darthVader) - .originTypes(Set.of(type2.getType())) - .comment(comment3) - .build(), - false); - assertEquals(101, manualRedactionResponse.getManualAnnotationResponses().size()); - assertEquals(newType.getType(), manualRedactionResponse.getManualAnnotationResponses() - .get(0).getEntityLogEntry().getType()); - assertEquals(newLegal, manualRedactionResponse.getManualAnnotationResponses() - .get(36).getEntityLogEntry().getLegalBasis()); - assertEquals(otherSection, manualRedactionResponse.getManualAnnotationResponses() - .get(98).getEntityLogEntry().getSection()); - Long commentId3 = manualRedactionResponse.getManualAnnotationResponses() - .get(0).getCommentId(); - assertNotNull(commentId3); - Optional commentEntity3 = commentRepository.findById(commentId3); - assertTrue(commentEntity3.isPresent()); - assertEquals(comment3, commentEntity3.get().getText()); + manualRedactionResponse = manualRedactionClient.recategorizeBulkLocal(dossier.getId(), + file.getId(), + RecategorizationBulkLocalRequestModel.builder() + .rectangle(false) + .type(newType.getType()) + .legalBasis(newLegal) + .section(otherSection) + .value(darthVader) + .originTypes(Set.of(type2.getType())) + .build(), + false); + assertEquals(manualRedactionResponse.getManualAnnotationResponses().size(), 101); + assertEquals(manualRedactionResponse.getManualAnnotationResponses() + .get(0).getEntityLogEntry().getType(), newType.getType()); + assertEquals(manualRedactionResponse.getManualAnnotationResponses() + .get(36).getEntityLogEntry().getLegalBasis(), newLegal); + assertEquals(manualRedactionResponse.getManualAnnotationResponses() + .get(98).getEntityLogEntry().getSection(), otherSection); - String comment4 = "Removing all Darth Vader annotations"; - manualRedactionResponse = manualRedactionClient.removeRedactionBulkLocal( - dossier.getId(), - file.getId(), - RemoveRedactionBulkLocalRequestModel.builder() - .rectangle(false) - .value(darthVader) - .comment(comment4) - .build(), - false); - assertEquals(202, manualRedactionResponse.getManualAnnotationResponses().size()); - Long commentId4 = manualRedactionResponse.getManualAnnotationResponses() - .get(0).getCommentId(); - assertNotNull(commentId4); - Optional commentEntity4 = commentRepository.findById(commentId4); - assertTrue(commentEntity4.isPresent()); - assertEquals(comment4, commentEntity4.get().getText()); + manualRedactionResponse = manualRedactionClient.removeRedactionBulkLocal(dossier.getId(), + file.getId(), + RemoveRedactionBulkLocalRequestModel.builder().rectangle(false).value(darthVader).build(), + false); + assertEquals(manualRedactionResponse.getManualAnnotationResponses().size(), 202); } - private void testRectangleRedactionsBulkLocal(DossierTemplateModel dossierTemplate, Dossier dossier, FileStatus file) { whenGetEntityLogInvocation(); - var typeManual = typeProvider.testAndProvideType(dossierTemplate, dossier, "manual", false, 70); + var typeManual = "manual"; var newType = typeProvider.testAndProvideType(dossierTemplate, dossier, "newType", false, 71); String value = "non-readable content"; @@ -3467,7 +3427,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { EntityLogEntry entityLogEntry = EntityLogEntry.builder() .id("RectangleAnnotation" + page) - .type(typeManual.getType()) + .type(typeManual) .value(value) .entryType(EntryType.AREA) .state(EntryState.APPLIED) @@ -3497,7 +3457,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertNotNull(manualRedactionResponse); assertEquals(3, manualRedactionResponse.getManualAnnotationResponses().size()); for (ManualAnnotationResponse response : manualRedactionResponse.getManualAnnotationResponses()) { - assertEquals(typeManual.getType(), response.getEntityLogEntry().getType()); + assertEquals(typeManual, response.getEntityLogEntry().getType()); assertEquals("new Legal Basis", response.getEntityLogEntry().getLegalBasis()); assertEquals("new Section", response.getEntityLogEntry().getSection()); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java index 807410667..7a0809d79 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/TypeTest.java @@ -26,6 +26,7 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.service.DossierService; import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue; +import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateTypeValue; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.Colors; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; @@ -83,7 +84,7 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { dictionaryClient.deleteType(type.getType(), type.getDossierTemplateId()); var typesForTemplate = dictionaryClient.getAllTypes(loadedType.getDossierTemplateId(), null, false).getTypes(); - assertThat(typesForTemplate).isEmpty(); + assertThat(typesForTemplate).hasSize(8); var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); var dossierType = typeProvider.testAndProvideType(dossierTemplate, dossier, "dossier-dict"); @@ -143,14 +144,14 @@ public class TypeTest extends AbstractPersistenceServerServiceTest { var type2 = typeProvider.testAndProvideType(dossierTemplate, "type2", 101); var types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true); - assertEquals(types.getTypes().size(), 2); + assertEquals(types.getTypes().size(), 10); assertTrue(types.getTypes() .stream() .allMatch(typeValue -> typeValue.getSoftDeletedTime() == null)); dictionaryClient.deleteType(type2.getType(), dossierTemplate.getId()); types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true); - assertEquals(types.getTypes().size(), 2); + assertEquals(types.getTypes().size(), 10); assertNull(types.getTypes() .stream() .filter(t -> t.getType().equals(type1.getType())) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java index 64a146530..4619ed844 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java @@ -80,9 +80,11 @@ public class EntityPerformanceTest extends AbstractPersistenceServerServiceTest log.info("Clone Time: {}", (t2 - t1)); var types = dictionaryClient.getAllTypes(cloned.getId(), null, false).getTypes(); + var typesWithoutSystemManaged = types.stream().filter(t -> !t.isSystemManaged()).collect(Collectors.toList()); - assertThat(types.size()).isEqualTo(1); - for (var clonedType : types) { + assertThat(typesWithoutSystemManaged.size()).isEqualTo(1); + assertThat(types.size()).isEqualTo(9); // includes the system managed types + for (var clonedType : typesWithoutSystemManaged) { var found = entryRepository.findByTypeIdAndVersionGreaterThan(clonedType.getTypeId(), 0); assertThat(found.size()).isEqualTo(5000); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index 8003c6bd1..f4491f27c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -66,9 +66,11 @@ import com.iqser.red.service.persistence.management.v1.processor.client.redactio import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RedactionClient; import com.iqser.red.service.persistence.management.v1.processor.client.searchservice.SearchClient; import com.iqser.red.service.persistence.management.v1.processor.client.tenantusermanagementservice.UsersClient; +import com.iqser.red.service.persistence.management.v1.processor.dataexchange.service.SystemManagedTypesImport; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ApplicationConfigurationEntity; import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles; import com.iqser.red.service.persistence.management.v1.processor.service.ApplicationConfigService; +import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ApplicationConfigRepository; @@ -273,6 +275,10 @@ public abstract class AbstractPersistenceServerServiceTest { protected ResizeRedactionRepository resizeRedactionRepository; @MockBean protected TenantAuthenticationManagerResolver tenantAuthenticationManagerResolver; + @Autowired + private SystemManagedTypesImport systemManagedTypesImport; + @Autowired + private DictionaryManagementService dictionaryManagementService; private static String[] getAllRoles() { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/FloraWithoutSystemTypes.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/FloraWithoutSystemTypes.zip new file mode 100644 index 000000000..e68dab1d8 Binary files /dev/null and b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/FloraWithoutSystemTypes.zip differ diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/dossierTemplateWithoutSystemTypes.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/dossierTemplateWithoutSystemTypes.zip new file mode 100644 index 000000000..b20ec9f58 Binary files /dev/null and b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/dossierTemplateWithoutSystemTypes.zip differ diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/oldDossierTemplate.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/oldDossierTemplate.zip new file mode 100644 index 000000000..1813ca48c Binary files /dev/null and b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/dossiertemplates/oldDossierTemplate.zip differ diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/fileexchange/fileExchange.zip b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/fileexchange/fileExchange.zip new file mode 100644 index 000000000..ec6dc384a Binary files /dev/null and b/persistence-service-v1/persistence-service-server-v1/src/test/resources/files/fileexchange/fileExchange.zip differ