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 e404af3b..30a24147 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 @@ -1,5 +1,23 @@ package com.iqser.red.service.redaction.v1.server.redaction.model; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import org.apache.commons.lang3.StringUtils; + import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions; import com.iqser.red.service.redaction.v1.model.ArgumentType; import com.iqser.red.service.redaction.v1.model.Engine; @@ -10,19 +28,10 @@ import com.iqser.red.service.redaction.v1.server.redaction.utils.EntitySearchUti import com.iqser.red.service.redaction.v1.server.redaction.utils.FindEntityDetails; import com.iqser.red.service.redaction.v1.server.redaction.utils.Patterns; import com.iqser.red.service.redaction.v1.server.redaction.utils.SearchImplementation; + import lombok.Builder; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; @Data @Slf4j @@ -518,40 +527,54 @@ public class Section { } + @Deprecated @ThenAction @SuppressWarnings("unused") - public void redactBetween(@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, + public void redactBetween(@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) { + + redactBetween(start, stop, asType, ruleNumber, redactEverywhere, false, reason, legalBasis, true); + } + + + @ThenAction + @SuppressWarnings("unused") + public void redactBetween(@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.BOOLEAN) boolean excludeHeadLine, @Argument(ArgumentType.STRING) String reason, @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { - redactBetween(start, stop, asType, ruleNumber, redactEverywhere, reason, legalBasis, true); + redactBetween(start, stop, asType, ruleNumber, redactEverywhere, excludeHeadLine, reason, legalBasis, true); } + @Deprecated @ThenAction @SuppressWarnings("unused") - 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, + 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) { - redactBetween(start, stop, asType, ruleNumber, redactEverywhere, reason, null, false); + redactBetween(start, stop, asType, ruleNumber, redactEverywhere, false, reason, null, false); } @ThenAction @SuppressWarnings("unused") - 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.BOOLEAN) boolean excludeHeadLine, @Argument(ArgumentType.STRING) String reason) { + + redactBetween(start, stop, asType, ruleNumber, redactEverywhere, excludeHeadLine, reason, null, false); + } + + + @ThenAction + @SuppressWarnings("unused") + 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) { redactLinesBetween(start, stop, asType, ruleNumber, redactEverywhere, reason, legalBasis, true); } @@ -559,11 +582,8 @@ public class Section { @ThenAction @SuppressWarnings("unused") - 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, + 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) { redactLinesBetween(start, stop, asType, ruleNumber, redactEverywhere, reason, null, false); @@ -706,8 +726,7 @@ public class Section { @SuppressWarnings("unused") public void ignoreRecommendations(@Argument(ArgumentType.TYPE) String type) { - entities.removeIf(entity -> entity.getType().equals(type) && entity.getEntityType() - .equals(EntityType.RECOMMENDATION)); + entities.removeIf(entity -> entity.getType().equals(type) && entity.getEntityType().equals(EntityType.RECOMMENDATION)); } @@ -812,9 +831,25 @@ public class Section { @ThenAction @SuppressWarnings("unused") - public void redactSection(@Argument(ArgumentType.TYPE) String type, - @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, - @Argument(ArgumentType.STRING) String reason, + public void redactSectionText(@Argument(ArgumentType.TYPE) String type, @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, @Argument(ArgumentType.STRING) String reason, + @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { + + redactBetween("", "", type, ruleNumber, false, false, reason, legalBasis, true); + } + + + @ThenAction + @SuppressWarnings("unused") + public void redactSectionTextWithoutHeadLine(@Argument(ArgumentType.TYPE) String type, @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, + @Argument(ArgumentType.STRING) String reason, @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { + + redactBetween("", "", type, ruleNumber, false, true, reason, legalBasis, true); + } + + + @ThenAction + @SuppressWarnings("unused") + public void redactSection(@Argument(ArgumentType.TYPE) String type, @Argument(ArgumentType.RULE_NUMBER) int ruleNumber, @Argument(ArgumentType.STRING) String reason, @Argument(ArgumentType.LEGAL_BASIS) String legalBasis) { for (SectionArea sectionArea : sectionAreas) { @@ -847,8 +882,8 @@ public class Section { } - private void redactAndRecommendByRegEx(String pattern, boolean patternCaseInsensitive, int group, String asType, - int ruleNumber, String reason, String legalBasis, boolean redaction) { + private void redactAndRecommendByRegEx(String pattern, boolean patternCaseInsensitive, int group, String asType, int ruleNumber, String reason, String legalBasis, + boolean redaction) { Pattern compiledPattern = Patterns.getCompiledPattern(pattern, patternCaseInsensitive); Matcher matcher = compiledPattern.matcher(searchText); @@ -995,16 +1030,20 @@ public class Section { } - private void redactBetween(String start, String stop, String asType, int ruleNumber, boolean redactEverywhere, - String reason, String legalBasis, boolean redaction) { + private void redactBetween(String start, String stop, String asType, int ruleNumber, boolean redactEverywhere, boolean excludeHeadLine, String reason, String legalBasis, + boolean redaction) { String[] values = new String[1]; - if(start.isEmpty() && stop.isEmpty()){ - values[0] = searchText; - } else if(start.isEmpty() && searchText.contains(stop)){ + if (start.isEmpty() && stop.isEmpty()) { + if (excludeHeadLine) { + values[0] = StringUtils.substringAfter(searchText, headline); + } else { + values[0] = searchText; + } + } else if (start.isEmpty() && searchText.contains(stop)) { values[0] = StringUtils.substringBefore(searchText, stop); - } else if (stop.isEmpty() && searchText.contains(start)){ + } else if (stop.isEmpty() && searchText.contains(start)) { values[0] = StringUtils.substringAfter(searchText, start); } else { values = StringUtils.substringsBetween(searchText, start, stop);