From 004fe8d0d216c41456207543e8498de87bb6aee8 Mon Sep 17 00:00:00 2001 From: Corina Olariu Date: Tue, 20 Jun 2023 11:28:55 +0300 Subject: [PATCH] RED-6734 - Get merged dossier and template dictionaries - add endpoint for the merged dictionaries - use DictionaryEntry from commons service - add junit tests --- .../impl/controller/DictionaryController.java | 9 +- .../external/resource/DictionaryResource.java | 6 ++ .../DictionaryInternalController.java | 2 +- .../service/DictionaryManagementService.java | 2 +- .../processor/service/DictionaryService.java | 97 +++++++++++++++++-- .../RedactionLogMergeService.java | 20 ++-- .../v1/processor/utils/ColorUtils.java | 7 ++ .../peristence/v1/server/Application.java | 7 ++ .../integration/tests/DictionaryTest.java | 43 ++++++++ .../persistence-service-shared-api-v1/pom.xml | 6 ++ .../dossiertemplate/type/DictionaryEntry.java | 22 ----- .../model/dossiertemplate/type/Type.java | 1 + 12 files changed, 175 insertions(+), 47 deletions(-) delete mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/type/DictionaryEntry.java diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java index 7daab3067..19b8ebdf7 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/DictionaryController.java @@ -1,4 +1,4 @@ -package com.iqser.red.persistence.service.v1.external.api.impl.controller; + package com.iqser.red.persistence.service.v1.external.api.impl.controller; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -291,6 +291,13 @@ public class DictionaryController implements DictionaryResource { return dictionaryService.getDictionaryForType(type, dossierTemplateId, dossierId); } + @Override + public List getMergedDictionaries(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @RequestParam(value = DOSSIER_ID_PARAMETER_NAME) String dossierId) { + return dictionaryService.getMergedDictionaryForType(dossierTemplateId, dossierId); + } + + @Override public void setColors(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, @RequestBody Colors colors) { diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java index 8dd42632e..4b8186635 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/DictionaryResource.java @@ -47,6 +47,7 @@ public interface DictionaryResource { String UPLOAD = "/upload"; String DOWNLOAD = "/download"; + String MERGED = "/merged"; String DELETE = "/delete"; String COLOR_REST_PATH = ExternalApi.BASE_PATH + "/color"; @@ -172,6 +173,11 @@ public interface DictionaryResource { @RequestParam(value = DOSSIER_ID_PARAMETER_NAME, required = false) String dossierId, @RequestParam(value = DICTIONARY_ENTRY_TYPE_PARAM, required = false, defaultValue = DEFAULT_DICTIONARY_ENTRY_TYPE) DictionaryEntryType dictionaryEntryType); + @GetMapping(value = DICTIONARY_REST_PATH + MERGED + DOSSIER_TEMPLATE_PATH_VARIABLE, produces = MediaType.APPLICATION_JSON_VALUE) + @Operation(summary = "Retrieves and merge all dictionary entries for the given dossier template and dossier", description = "None") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Successfully retrieved all the dictionary entries"), @ApiResponse(responseCode = "400", description = "Request contains error."), @ApiResponse(responseCode = "404", description = "The entry type is not found.")}) + List getMergedDictionaries(@PathVariable(DOSSIER_TEMPLATE_PARAMETER_NAME) String dossierTemplateId, + @RequestParam(value = DOSSIER_ID_PARAMETER_NAME) String dossierId); @ResponseStatus(HttpStatus.NO_CONTENT) @Operation(summary = "Set system colors for redaction") diff --git a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DictionaryInternalController.java b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DictionaryInternalController.java index d04e6a4b3..2bc194475 100644 --- a/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DictionaryInternalController.java +++ b/persistence-service-v1/persistence-service-internal-api-impl-v1/src/main/java/com/iqser/red/service/persistence/v1/internal/api/controller/DictionaryInternalController.java @@ -8,12 +8,12 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import com.iqser.red.service.dictionarymerge.commons.DictionaryEntry; import com.iqser.red.service.persistence.management.v1.processor.service.ColorsService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService; import com.iqser.red.service.persistence.service.v1.api.internal.resources.DictionaryResource; 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.DictionaryEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java index cd22574ce..f3fe3a4e1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryManagementService.java @@ -17,6 +17,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import com.iqser.red.service.dictionarymerge.commons.DictionaryEntry; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.BaseDictionaryEntry; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; @@ -28,7 +29,6 @@ import com.iqser.red.service.persistence.management.v1.processor.utils.MagicConv import com.iqser.red.service.persistence.management.v1.processor.utils.TextNormalizationUtilities; import com.iqser.red.service.persistence.management.v1.processor.utils.TypeMapper; import com.iqser.red.service.persistence.management.v1.processor.validation.DictionaryValidator; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java index 721fa8b08..de846343b 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/DictionaryService.java @@ -13,14 +13,23 @@ import static com.iqser.red.keycloak.commons.roles.ActionRoles.READ_DICTIONARY_T import static com.iqser.red.keycloak.commons.roles.ActionRoles.WRITE_COLORS; import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; +import com.iqser.red.service.dictionarymerge.commons.CommonsDictionaryModel; +import com.iqser.red.service.dictionarymerge.commons.DictionaryEntry; +import com.iqser.red.service.dictionarymerge.commons.DictionaryEntryModel; +import com.iqser.red.service.dictionarymerge.commons.DictionaryMergeService; import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService; @@ -32,7 +41,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeRespons import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeValue; 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.DictionaryEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; @@ -50,6 +58,7 @@ public class DictionaryService { private final DictionaryPersistenceService dictionaryPersistenceService; private final AccessControlService accessControlService; private final EntryPersistenceService entryPersistenceService; + private final DictionaryMergeService dictionaryMergeService; @PreAuthorize("hasAuthority('" + ADD_DICTIONARY_ENTRY + "')") @@ -165,14 +174,6 @@ public class DictionaryService { } - @PreAuthorize("hasAuthority('" + ADD_UPDATE_DOSSIER_DICTIONARY_TYPE + "')") - public Type addDossierType(CreateTypeValue typeValue, String dossierId) { - - accessControlService.verifyUserIsMemberOrApprover(dossierId); - return addType(typeValue, dossierId); - } - - @PreAuthorize("hasAuthority('" + DELETE_DICTIONARY_TYPE + "')") public void deleteGlobalType(String type, String dossierTemplateId) { @@ -289,6 +290,84 @@ public class DictionaryService { } } + @PreAuthorize("hasAuthority('" + READ_DICTIONARY_TYPES + "')") + public List getMergedDictionaryForType(String dossierTemplateId, String dossierId) { + + try { + if (dossierId != null) { + accessControlService.verifyUserHasViewPermissions(dossierId); + } + var dossierTemplateDictionaries = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId, false); + var dossierDictionaries = dictionaryPersistenceService.getAllTypesForDossier(dossierId, false); + + var mergedDictionaries = dictionaryMergeService.getMergedDictionary(convertTypes(dossierTemplateDictionaries), convertTypes(dossierDictionaries)); + return convertMergedDictionaries(mergedDictionaries, dossierTemplateId, dossierId); + } catch (AccessDeniedException e) { + throw new NotFoundException("Object not found"); + } + } + + private List convertMergedDictionaries (List commonsDictionaries, String dossierTemplateId, String dossierId) { + List dictionaries = new ArrayList<>(); + commonsDictionaries.forEach(cdm -> { + var typeId = toTypeId(cdm.getType(), dossierTemplateId, dossierId); + var entity = dictionaryPersistenceService.getType(typeId); + Dictionary dict = Dictionary.builder() + .entries(cdm.getEntries() + .stream() + .map(DictionaryEntry::getValue) + .collect(Collectors.toList())) + .falsePositiveEntries(cdm.getFalsePositives() + .stream() + .map(DictionaryEntry::getValue) + .collect(Collectors.toList())) + .falseRecommendationEntries(cdm.getFalseRecommendations() + .stream() + .map(DictionaryEntry::getValue) + .collect(Collectors.toList())) + .hexColor(entity.getHexColor()) + .recommendationHexColor(entity.getRecommendationHexColor()) + .skippedHexColor(entity.getSkippedHexColor()) + .dossierTemplateId(dossierTemplateId) + .rank(cdm.getRank()) + .hint(cdm.isHint()) + .caseInsensitive(cdm.isCaseInsensitive()) + .recommendation(entity.isRecommendation()) + .description(entity.getDescription()) + .addToDictionaryAction(entity.isAddToDictionaryAction()) + .label(entity.getLabel()) + .hasDictionary(entity.isHasDictionary()) + .systemManaged(entity.isSystemManaged()) + .autoHideSkipped(entity.isAutoHideSkipped()) + .dossierDictionaryOnly(entity.isDossierDictionaryOnly()) + .build(); + dictionaries.add(dict); + }); + + return dictionaries; + } + + private List convertTypes(List dictionaries) { + + return dictionaries.stream() + .map(dm -> CommonsDictionaryModel.builder() + .type(dm.getType()) + .rank(dm.getRank()) + .color(ColorUtils.convertColor(dm.getHexColor())) + .caseInsensitive(dm.isCaseInsensitive()) + .hint(dm.isHint()) + .entries(getCommonsEntries(dm.getId(), DictionaryEntryType.ENTRY)) + .falsePositives(getCommonsEntries(dm.getId(), DictionaryEntryType.FALSE_POSITIVE)) + .falseRecommendations(getCommonsEntries(dm.getId(), DictionaryEntryType.FALSE_RECOMMENDATION)) + .build()).collect(Collectors.toList()); + } + + private Set getCommonsEntries(String typeId, DictionaryEntryType entryType) { + var entries = MagicConverter.convert(entryPersistenceService.getEntries(typeId, entryType, null), DictionaryEntry.class); + return CollectionUtils.isNotEmpty(entries) ? new HashSet<>(entries.stream() + .map(DictionaryEntryModel::new) + .collect(Collectors.toSet())) : new HashSet<>(); + } @PreAuthorize("hasAuthority('" + WRITE_COLORS + "')") public void setColors(String dossierTemplateId, Colors colors) { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/redactionlog/RedactionLogMergeService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/redactionlog/RedactionLogMergeService.java index a2b8e9bb6..8d027bc28 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/redactionlog/RedactionLogMergeService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/redactionlog/RedactionLogMergeService.java @@ -15,6 +15,7 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; +import com.iqser.red.service.persistence.management.v1.processor.utils.ColorUtils; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Comment; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; @@ -479,10 +480,10 @@ public class RedactionLogMergeService { private float[] getColor(String type, Colors colors, boolean requested, boolean isRedaction, boolean skipped, List types) { if (requested) { - return convertColor(colors.getRequestRemoveColor()); + return ColorUtils.convertColor(colors.getRequestRemoveColor()); } if (skipped || !isRedaction && !isHint(types, type)) { - return convertColor(colors.getSkippedColor()); + return ColorUtils.convertColor(colors.getSkippedColor()); } return getColor(types, type); } @@ -491,9 +492,9 @@ public class RedactionLogMergeService { private float[] getColorForManualAdd(String type, Colors colors, AnnotationStatus status, List types) { if (status.equals(AnnotationStatus.REQUESTED)) { - return convertColor(colors.getRequestAddColor()); + return ColorUtils.convertColor(colors.getRequestAddColor()); } else if (status.equals(AnnotationStatus.DECLINED)) { - return convertColor(colors.getSkippedColor()); + return ColorUtils.convertColor(colors.getSkippedColor()); } return getColor(types, type); } @@ -504,10 +505,10 @@ public class RedactionLogMergeService { var matchingTypes = getMatchingTypes(types, type); Optional foundAndNotDeletedType = matchingTypes.stream().filter(t -> !isDeletedType(t)).findFirst(); if (foundAndNotDeletedType.isPresent()) { - return convertColor(foundAndNotDeletedType.get().getHexColor()); + return ColorUtils.convertColor(foundAndNotDeletedType.get().getHexColor()); } Optional firstDeletedType = matchingTypes.stream().findFirst(); - return firstDeletedType.map(value -> convertColor(value.getHexColor())).orElseGet(() -> convertColor(DELETED_TYPE_COLOR)); + return firstDeletedType.map(value -> ColorUtils.convertColor(value.getHexColor())).orElseGet(() -> ColorUtils.convertColor(DELETED_TYPE_COLOR)); } @@ -523,13 +524,6 @@ public class RedactionLogMergeService { } - private float[] convertColor(String hex) { - - Color color = Color.decode(hex); - return new float[]{color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f}; - } - - private List getMatchingTypes(List types, String type) { return types.stream().filter(t -> t.getType().equals(type)).collect(Collectors.toList()); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ColorUtils.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ColorUtils.java index 920e25faf..a63227bcb 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ColorUtils.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/utils/ColorUtils.java @@ -1,5 +1,6 @@ package com.iqser.red.service.persistence.management.v1.processor.utils; +import java.awt.Color; import java.util.Locale; import java.util.regex.Pattern; @@ -23,4 +24,10 @@ public final class ColorUtils { } } + public static float[] convertColor(String hex) { + + Color color = Color.decode(hex); + return new float[]{color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f}; + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java index e42d06d34..1cbdfc0f9 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java @@ -25,6 +25,7 @@ import com.iqser.red.keycloak.commons.DefaultKeyCloakCommonsConfiguration; import com.iqser.red.keycloak.commons.KeyCloakSettings; import com.iqser.red.persistence.service.v1.external.api.impl.PersistenceServiceExternalApiConfiguration; import com.iqser.red.persistence.service.v1.external.api.impl.swagger.SwaggerAutoConfiguration; +import com.iqser.red.service.dictionarymerge.commons.DictionaryMergeService; import com.iqser.red.service.persistence.management.v1.processor.PersistenceServiceProcessorConfiguration; import com.iqser.red.service.persistence.management.v1.processor.cache.PersistenceServiceExternalApiCacheConfiguration; import com.iqser.red.service.persistence.management.v1.processor.configuration.CleanupDownloadSchedulerConfiguration; @@ -83,4 +84,10 @@ public class Application { }; } + @Bean + public DictionaryMergeService dictionaryMergeService() { + + return new DictionaryMergeService(); + } + } 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 829091da5..66badba74 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 @@ -20,6 +20,7 @@ import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvid import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.management.v1.processor.utils.multitenancy.TenantContext; import com.iqser.red.service.persistence.service.v1.api.shared.model.CreateTypeValue; +import com.iqser.red.service.persistence.service.v1.api.shared.model.Dictionary; import com.iqser.red.service.persistence.service.v1.api.shared.model.TypeValue; import com.iqser.red.service.persistence.service.v1.api.shared.model.UpdateTypeValue; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; @@ -368,6 +369,48 @@ public class DictionaryTest extends AbstractPersistenceServerServiceTest { assertThat(dictionary.getEntries().size()).isEqualTo(5); } + @Test + public void testGetMergedDictionaries() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "Dossier"); + var type = typeProvider.testAndProvideType(dossierTemplate); + assertThat(type.getRecommendationHexColor()).isEqualTo("#aaaaaa"); + assertThat(type.getSkippedHexColor()).isEqualTo("#aaaaaa"); + assertThat(type.isDossierDictionaryOnly()).isTrue(); + + dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("word1", "word2", "word3"), false, null, DictionaryEntryType.ENTRY); + dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("false_positive1", "false_positive"), false, null, DictionaryEntryType.FALSE_POSITIVE); + dictionaryClient.addEntry(type.getType(), + type.getDossierTemplateId(), + List.of("false_recommendation1", "false_recommendation2"), + false, + null, + DictionaryEntryType.FALSE_RECOMMENDATION); + + var loadedType1 = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); + + assertThat(loadedType1.getEntries()).hasSize(3); + assertThat(loadedType1.getFalsePositiveEntries()).hasSize(2); + assertThat(loadedType1.getFalseRecommendationEntries()).hasSize(2); + + dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("word1", "word2", "word4"), false, dossier.getDossierId(), DictionaryEntryType.ENTRY); + dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("false_positive1", "false_positive3"), false, dossier.getDossierId(), DictionaryEntryType.FALSE_POSITIVE); + dictionaryClient.addEntry(type.getType(), + type.getDossierTemplateId(), + List.of("false_recommendation3", "false_recommendation4"), + false, + dossier.getDossierId(), + DictionaryEntryType.FALSE_RECOMMENDATION); + + List result = dictionaryClient.getMergedDictionaries(dossierTemplate.getDossierTemplateId(), dossier.getDossierId()); + assertThat(result).isNotEmpty(); + assertThat(result.size()).isEqualTo(1); + Dictionary dict = result.get(0); + assertThat(dict.getEntries().size()).isEqualTo(4); + assertThat(dict.getFalsePositiveEntries().size()).isEqualTo(3); + assertThat(dict.getEntries().size()).isEqualTo(4); + } @Test public void testCreateAndDeleteLargeDictionary() { diff --git a/persistence-service-v1/persistence-service-shared-api-v1/pom.xml b/persistence-service-v1/persistence-service-shared-api-v1/pom.xml index 50ae380ed..c1e2a6a03 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/pom.xml +++ b/persistence-service-v1/persistence-service-shared-api-v1/pom.xml @@ -73,6 +73,12 @@ jackson-commons + + com.iqser.red.commons + dictionary-merge-commons + 1.3.0 + + com.iqser.red.commons diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/type/DictionaryEntry.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/type/DictionaryEntry.java deleted file mode 100644 index b1ac0a172..000000000 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/type/DictionaryEntry.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type; - -import java.io.Serializable; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class DictionaryEntry implements Serializable { - - private long entryId; - private String value; - private long version; - private boolean deleted; - private String typeId; - -} diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/type/Type.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/type/Type.java index ee93e48d9..3b18cc7df 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/type/Type.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/dossiertemplate/type/Type.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.iqser.red.service.dictionarymerge.commons.DictionaryEntry; import lombok.AllArgsConstructor; import lombok.Builder;