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 17a5fad6..a023f7e3 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 @@ -8,7 +8,6 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; @@ -552,8 +551,29 @@ public class Section { @ThenAction - public void recommendLineAfter(@Argument(ArgumentType.STRING) String start, - @Argument(ArgumentType.TYPE) String asType) { + public void redactNotLineAfter(@Argument(ArgumentType.STRING) String start, @Argument(ArgumentType.TYPE) String asType, @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, + @Argument(ArgumentType.BOOLEAN) boolean redactEverywhere, @Argument(ArgumentType.STRING) String reason, + @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { + + String[] values = StringUtils.substringsBetween(text, start, "\n"); + + if (values != null) { + for (String value : values) { + if (StringUtils.isNotBlank(value)) { + Set found = findEntities(value.trim(), asType, false, false, ruleNumber, reason, legalBasis, Engine.RULE); + EntitySearchUtils.addEntitiesWithHigherRank(entities, found, dictionary); + + if (redactEverywhere && !isLocal()) { + localDictionaryAdds.computeIfAbsent(asType, (x) -> new HashSet<>()).add(value.trim()); + } + } + } + } + } + + + @ThenAction + public void recommendLineAfter(@Argument(ArgumentType.STRING) String start, @Argument(ArgumentType.TYPE) String asType) { String[] values = StringUtils.substringsBetween(text, start, "\n"); @@ -600,10 +620,27 @@ public class Section { @ThenAction - public void addRecommendationByRegEx(@Argument(ArgumentType.REGEX) String pattern, - @Argument(ArgumentType.BOOLEAN) boolean patternCaseInsensitive, - @Argument(ArgumentType.INTEGER) int group, - @Argument(ArgumentType.TYPE) String asType) { + public void redactNotByRegEx(@Argument(ArgumentType.REGEX) String pattern, @Argument(ArgumentType.BOOLEAN) boolean patternCaseInsensitive, + @Argument(ArgumentType.INTEGER) int group, @Argument(ArgumentType.TYPE) String asType, @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, + @Argument(ArgumentType.STRING) String reason, @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { + + Pattern compiledPattern = Patterns.getCompiledPattern(pattern, patternCaseInsensitive); + + Matcher matcher = compiledPattern.matcher(searchText); + + while (matcher.find()) { + String match = matcher.group(group); + if (StringUtils.isNotBlank(match)) { + Set found = findEntities(match.trim(), asType, false, false, ruleNumber, reason, legalBasis, Engine.RULE); + EntitySearchUtils.addEntitiesWithHigherRank(entities, found, dictionary); + } + } + } + + + @ThenAction + public void addRecommendationByRegEx(@Argument(ArgumentType.REGEX) String pattern, @Argument(ArgumentType.BOOLEAN) boolean patternCaseInsensitive, + @Argument(ArgumentType.INTEGER) int group, @Argument(ArgumentType.TYPE) String asType) { Pattern compiledPattern = Patterns.getCompiledPattern(pattern, patternCaseInsensitive); @@ -668,13 +705,32 @@ public class Section { @ThenAction - public void redactLinesBetween(@Argument(ArgumentType.STRING) String start, - @Argument(ArgumentType.STRING) String stop, - @Argument(ArgumentType.TYPE) String asType, - @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, - @Argument(ArgumentType.BOOLEAN) boolean redactEverywhere, - @Argument(ArgumentType.STRING) String reason, - @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { + public void redactNotBetween(@Argument(ArgumentType.STRING) String start, @Argument(ArgumentType.STRING) String stop, @Argument(ArgumentType.TYPE) String asType, + @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, @Argument(ArgumentType.BOOLEAN) boolean redactEverywhere, + @Argument(ArgumentType.STRING) String reason, @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { + + String[] values = StringUtils.substringsBetween(searchText, start, stop); + + if (values != null) { + for (String value : values) { + if (StringUtils.isNotBlank(value)) { + + Set found = findEntities(value.trim(), asType, false, false, ruleNumber, reason, legalBasis, Engine.RULE); + EntitySearchUtils.addEntitiesWithHigherRank(entities, found, dictionary); + + if (redactEverywhere && !isLocal()) { + localDictionaryAdds.computeIfAbsent(asType, (x) -> new HashSet<>()).add(value.trim()); + } + } + } + } + } + + + @ThenAction + public void redactLinesBetween(@Argument(ArgumentType.STRING) String start, @Argument(ArgumentType.STRING) String stop, @Argument(ArgumentType.TYPE) String asType, + @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, @Argument(ArgumentType.BOOLEAN) boolean redactEverywhere, + @Argument(ArgumentType.STRING) String reason, @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { String[] values = StringUtils.substringsBetween(text, start, stop); @@ -703,9 +759,38 @@ public class Section { @ThenAction - public void highlightCell(@Argument(ArgumentType.STRING) String cellHeader, - @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, - @Argument(ArgumentType.TYPE) String type) { + public void redactNotLinesBetween(@Argument(ArgumentType.STRING) String start, @Argument(ArgumentType.STRING) String stop, @Argument(ArgumentType.TYPE) String asType, + @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, @Argument(ArgumentType.BOOLEAN) boolean redactEverywhere, + @Argument(ArgumentType.STRING) String reason, @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { + + String[] values = StringUtils.substringsBetween(text, start, stop); + + if (values != null) { + for (String value : values) { + if (StringUtils.isNotBlank(value)) { + String[] lines = value.split("\n"); + + for (String line : lines) { + + if (line.trim().length() <= 2) { + return; + } + + Set found = findEntities(line.trim(), asType, false, false, ruleNumber, reason, legalBasis, Engine.RULE); + EntitySearchUtils.addEntitiesWithHigherRank(entities, found, dictionary); + + if (redactEverywhere && !isLocal()) { + localDictionaryAdds.computeIfAbsent(asType, (x) -> new HashSet<>()).add(line.trim()); + } + } + } + } + } + } + + + @ThenAction + public void highlightCell(@Argument(ArgumentType.STRING) String cellHeader, @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, @Argument(ArgumentType.TYPE) String type) { annotateCell(cellHeader, ruleNumber, type, false, false, null, null); }