diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java index 094d9591..e459ba22 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java @@ -160,13 +160,19 @@ public class DictionaryService { List dictionary = typeResponse.stream().map(t -> { - Optional oldModel; + Optional optionalOldModel; if (dossierId == null) { var representation = getDossierTemplateDictionary(dossierTemplateId); - oldModel = representation != null ? representation.getDictionary().stream().filter(f -> f.getType().equals(t.getType())).findAny() : Optional.empty(); + optionalOldModel = representation != null ? representation.getDictionary() + .stream() + .filter(f -> f.getType().equals(t.getType())) + .findAny() : Optional.empty(); } else { var representation = getDossierDictionary(dossierId); - oldModel = representation != null ? representation.getDictionary().stream().filter(f -> f.getType().equals(t.getType())).findAny() : Optional.empty(); + optionalOldModel = representation != null ? representation.getDictionary() + .stream() + .filter(f -> f.getType().equals(t.getType())) + .findAny() : Optional.empty(); } Set entries = new HashSet<>(); @@ -179,19 +185,38 @@ public class DictionaryService { var newFalsePositivesValues = newEntries.getFalsePositives().stream().map(DictionaryEntry::getValue).collect(Collectors.toSet()); var newFalseRecommendationsValues = newEntries.getFalseRecommendations().stream().map(DictionaryEntry::getValue).collect(Collectors.toSet()); - oldModel.ifPresent(oldDictionaryModel -> { + optionalOldModel.ifPresent(oldDictionaryModel -> { }); - // add old entries from existing DictionaryModel - oldModel.ifPresent(dictionaryModel -> entries.addAll(dictionaryModel.getEntries().stream().filter(f -> !newValues.contains(f.getValue())).toList())); - oldModel.ifPresent(dictionaryModel -> falsePositives.addAll(dictionaryModel.getFalsePositives() - .stream() - .filter(f -> !newFalsePositivesValues.contains(f.getValue())) - .toList())); - oldModel.ifPresent(dictionaryModel -> falseRecommendations.addAll(dictionaryModel.getFalseRecommendations() - .stream() - .filter(f -> !newFalseRecommendationsValues.contains(f.getValue())) - .toList())); + if (optionalOldModel.isPresent()) { + var oldModel = optionalOldModel.get(); + if (oldModel.isCaseInsensitive() && !t.isCaseInsensitive()) { + // add old entries from existing DictionaryModel but exclude lower case representation + entries.addAll(oldModel.getEntries().stream().filter(f -> !newValues.stream().map(s -> s.toLowerCase(Locale.ROOT)).toList().contains(f.getValue())).toList()); + falsePositives.addAll(oldModel.getFalsePositives() + .stream() + .filter(f -> !newFalsePositivesValues.stream().map(s -> s.toLowerCase(Locale.ROOT)).toList().contains(f.getValue())) + .toList()); + falseRecommendations.addAll(oldModel.getFalseRecommendations() + .stream() + .filter(f -> !newFalseRecommendationsValues.stream().map(s -> s.toLowerCase(Locale.ROOT)).toList().contains(f.getValue())) + .toList()); + } else if (!oldModel.isCaseInsensitive() && t.isCaseInsensitive()) { + // add old entries from existing DictionaryModel but exclude upper case representation + entries.addAll(oldModel.getEntries().stream().filter(f -> !newValues.contains(f.getValue().toLowerCase(Locale.ROOT))).toList()); + falsePositives.addAll(oldModel.getFalsePositives().stream().filter(f -> !newFalsePositivesValues.contains(f.getValue().toLowerCase(Locale.ROOT))).toList()); + falseRecommendations.addAll(oldModel.getFalseRecommendations() + .stream() + .filter(f -> !newFalseRecommendationsValues.contains(f.getValue().toLowerCase(Locale.ROOT))) + .toList()); + + } else { + // add old entries from existing DictionaryModel + entries.addAll(oldModel.getEntries().stream().filter(f -> !newValues.contains(f.getValue())).toList()); + falsePositives.addAll(oldModel.getFalsePositives().stream().filter(f -> !newFalsePositivesValues.contains(f.getValue())).toList()); + falseRecommendations.addAll(oldModel.getFalseRecommendations().stream().filter(f -> !newFalseRecommendationsValues.contains(f.getValue())).toList()); + } + } // Add Increments entries.addAll(newEntries.getEntries());