From f5790bccab3fb8dce66aeb9fbe501655ae6b86c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thierry=20G=C3=B6ckel?= Date: Tue, 29 Sep 2020 13:54:32 +0200 Subject: [PATCH] Log entries and manual redaction require one position per line --- .../v1/model/ManualRedactionEntry.java | 5 ++- .../redaction/v1/model/RedactionLogEntry.java | 6 +++- .../service/EntityRedactionService.java | 9 ++--- .../service/AnnotationHighlightService.java | 35 ++++++++++++------- .../v1/server/RedactionIntegrationTest.java | 7 +--- 5 files changed, 37 insertions(+), 25 deletions(-) diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactionEntry.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactionEntry.java index 4d855f60..06f5c7d8 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactionEntry.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactionEntry.java @@ -1,5 +1,8 @@ package com.iqser.red.service.redaction.v1.model; +import java.util.ArrayList; +import java.util.List; + import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -12,7 +15,7 @@ public class ManualRedactionEntry { private String type; private String value; private String reason; - private Rectangle position; + private List positions = new ArrayList<>(); private String section; private int sectionNumber; 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 900c73cc..71697f02 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 @@ -1,5 +1,8 @@ package com.iqser.red.service.redaction.v1.model; +import java.util.ArrayList; +import java.util.List; + import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -20,7 +23,8 @@ public class RedactionLogEntry { private String section; private float[] color; - private Rectangle position; + @Builder.Default + private List positions = new ArrayList<>(); private int sectionNumber; private boolean manual; 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 1e484892..0be28bdc 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 @@ -213,10 +213,11 @@ public class EntityRedactionService { for (TextBlock textBlock : textBlocks) { for (ManualRedactionEntry manualRedactionEntry : manualRedactions.getEntriesToAdd()) { - Rectangle rectangle = manualRedactionEntry.getPosition(); - if (textBlock.contains(rectangle)) { - manualRedactionEntry.setSection(section); - manualRedactionEntry.setSectionNumber(sectionNumber); + for (Rectangle rectangle : manualRedactionEntry.getPositions()) { + if (textBlock.contains(rectangle)) { + manualRedactionEntry.setSection(section); + manualRedactionEntry.setSectionNumber(sectionNumber); + } } } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/visualization/service/AnnotationHighlightService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/visualization/service/AnnotationHighlightService.java index 510ed470..bde4c725 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/visualization/service/AnnotationHighlightService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/visualization/service/AnnotationHighlightService.java @@ -76,7 +76,11 @@ public class AnnotationHighlightService { return manualRedactionPages; } - manualRedactions.getEntriesToAdd().forEach(entry -> manualRedactionPages.add(entry.getPosition().getPage())); + manualRedactions.getEntriesToAdd().forEach(entry -> { + entry.getPositions().forEach(pos -> { + manualRedactionPages.add(pos.getPage()); + }); + }); return manualRedactionPages; } @@ -111,7 +115,7 @@ public class AnnotationHighlightService { .stream() .flatMap(seq -> seq.getTextPositions().stream()) .collect(Collectors.toList()), page)) { - redactionLogEntry.setPosition(rectangle); + redactionLogEntry.getPositions().add(rectangle); annotations.add(createAnnotation(rectangle, entityPositionSequence.getId(), createAnnotationContent(entity), getColor(entity), !flatRedaction && !isHint(entity))); } @@ -159,19 +163,24 @@ public class AnnotationHighlightService { RedactionLogEntry redactionLogEntry = createRedactionLogEntry(manualRedactionEntry, id); - Rectangle rectangle = manualRedactionEntry.getPosition(); + boolean foundOnPage = false; + for (Rectangle rectangle : manualRedactionEntry.getPositions()) { - if (page != rectangle.getPage()) { - continue; + if (page != rectangle.getPage()) { + continue; + } + + foundOnPage = true; + + PDAnnotationTextMarkup highlight = createAnnotation(rectangle, id, + createAnnotationContent(manualRedactionEntry), getColor(manualRedactionEntry.getType()), true); + annotations.add(highlight); + + redactionLogEntry.getPositions().add(rectangle); + } + if (foundOnPage) { + classifiedDoc.getRedactionLogEntities().add(redactionLogEntry); } - - PDAnnotationTextMarkup highlight = createAnnotation(rectangle, id, - createAnnotationContent(manualRedactionEntry), getColor(manualRedactionEntry - .getType()), true); - annotations.add(highlight); - - redactionLogEntry.setPosition(rectangle); - classifiedDoc.getRedactionLogEntities().add(redactionLogEntry); } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java index 41411b3e..6879382d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java @@ -325,12 +325,7 @@ public class RedactionIntegrationTest { manualRedactionEntry.setType("name"); manualRedactionEntry.setValue("O'Loughlin C.K."); manualRedactionEntry.setReason("Manual Redaction"); - Rectangle position = new Rectangle(); - position.setTopLeft(new Point(375.61096f, 241.282f)); - position.setHeight(43.72262f); - position.setWidth(15.296082f); - position.setPage(1); - manualRedactionEntry.setPosition(position); + manualRedactionEntry.setPositions(List.of(new Rectangle(new Point(375.61096f, 241.282f), 7.648041f, 43.72262f, 1), new Rectangle(new Point(384.83517f, 241.282f), 7.648041f, 17.043358f, 1))); manualRedactions.getEntriesToAdd().add(manualRedactionEntry);