diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ArgumentType.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ArgumentType.java index 2c05e253..baab0409 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ArgumentType.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ArgumentType.java @@ -2,6 +2,6 @@ package com.iqser.red.service.redaction.v1.model; public enum ArgumentType { - INTEGER, BOOLEAN, STRING, FILE_ATTRIBUTE, REGEX, TYPE, RULE_NUMBER, LEGAL_BASIS + INTEGER, BOOLEAN, STRING, FILE_ATTRIBUTE, REGEX, TYPE, RULE_NUMBER, LEGAL_BASIS, REFERENCE_TYPE } diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/RedactionLogEntry.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/RedactionLogEntry.java index e9431f21..807b219c 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/RedactionLogEntry.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/RedactionLogEntry.java @@ -64,6 +64,8 @@ public class RedactionLogEntry { private Set engines= new HashSet<>(); + private Set reference = new HashSet<>(); + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Entity.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Entity.java index ad426337..cd90ab6b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Entity.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Entity.java @@ -44,11 +44,13 @@ public class Entity implements ReasonHolder { private Set engines = new HashSet<>(); + private Set references = new HashSet<>(); + public Entity(String word, String type, boolean redaction, String redactionReason, List positionSequences, String headline, int matchedRule, int sectionNumber, String legalBasis, boolean isDictionaryEntry, String textBefore, String textAfter, Integer start, - Integer end, boolean isDossierDictionaryEntry, Set engines) { + Integer end, boolean isDossierDictionaryEntry, Set engines, Set references) { this.word = word; this.type = type; @@ -66,6 +68,7 @@ public class Entity implements ReasonHolder { this.end = end; this.isDossierDictionaryEntry = isDossierDictionaryEntry; this.engines = engines; + this.references = references; } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java index 6a1594f8..9ba32611 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/Section.java @@ -228,6 +228,30 @@ public class Section { }); } + + @ThenAction + public void redactNotAndReference(@Argument(ArgumentType.TYPE) String type, + @Argument(ArgumentType.REFERENCE_TYPE) String referenceType, + @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, + @Argument(ArgumentType.STRING) String reason) { + + boolean hasRecommendationDictionary = dictionaryTypes.contains(RECOMMENDATION_PREFIX + type); + + Set references = entities.stream().filter(entity -> entity.getType().equals(referenceType)).collect(Collectors.toSet()); + + entities.forEach(entity -> { + if (entity.getType().equals(type) || hasRecommendationDictionary && entity.getType() + .equals(RECOMMENDATION_PREFIX + type)) { + entity.setRedaction(false); + entity.setMatchedRule(ruleNumber); + entity.setRedactionReason(reason); + entity.setReferences(references); + } + }); + } + + + @ThenAction public void expandToHintAnnotationByRegEx(@Argument(ArgumentType.TYPE) String type, @Argument(ArgumentType.STRING) String pattern, diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java index 7b7e5547..97b28158 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java @@ -149,7 +149,7 @@ public class EntityRedactionService { .add(new Entity(entity.getWord(), entity.getType(), entity.isRedaction(), entity.getRedactionReason(), entry .getValue(), entity.getHeadline(), entity.getMatchedRule(), entity.getSectionNumber(), entity .getLegalBasis(), entity.isDictionaryEntry(), entity.getTextBefore(), entity.getTextAfter(), entity - .getStart(), entity.getEnd(), entity.isDossierDictionaryEntry(), entity.getEngines())); + .getStart(), entity.getEnd(), entity.isDossierDictionaryEntry(), entity.getEngines(), entity.getReferences())); } } return entitiesPerPage; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java index 7fefdbc1..2de87968 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java @@ -159,6 +159,9 @@ public class RedactionLogCreatorService { private RedactionLogEntry createRedactionLogEntry(Entity entity, String dossierTemplateId) { + Set referenceIds = new HashSet<>(); + entity.getReferences().forEach(ref -> ref.getPositionSequences().forEach(pos -> referenceIds.add(pos.getId()))); + return RedactionLogEntry.builder() .color(getColor(entity.getType(), dossierTemplateId, entity.isRedaction())) .reason(entity.getRedactionReason()) @@ -178,6 +181,7 @@ public class RedactionLogCreatorService { .endOffset(entity.getEnd()) .isDossierDictionaryEntry(entity.isDossierDictionaryEntry()) .engines(entity.getEngines()) + .reference(referenceIds) .build(); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl index 853d7fac..bf9cb602 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl @@ -56,8 +56,8 @@ rule "5: Do not redact Names and Addresses if no redaction Indicator is containe when Section(matchesType("vertebrate"), matchesType("published_information")) then - section.redactNot("CBI_author", 5, "Vertebrate and Published Information found"); - section.redactNot("CBI_address", 5, "Vertebrate and Published Information found"); + section.redactNotAndReference("CBI_author","published_information", 5, "Vertebrate and Published Information found"); + section.redactNotAndReference("CBI_address","published_information", 5, "Vertebrate and Published Information found"); end