From 5448153096a0928ab4c042f57ccd2b8646054fec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thierry=20G=C3=B6ckel?= Date: Mon, 28 Sep 2020 17:31:40 +0200 Subject: [PATCH] Merge rectangles for single annotation/redaction log entry --- .../service/EntityRedactionService.java | 2 - .../service/AnnotationHighlightService.java | 76 ++++++++++--------- 2 files changed, 39 insertions(+), 39 deletions(-) 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 165786fe..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 @@ -27,9 +27,7 @@ import com.iqser.red.service.redaction.v1.server.tableextraction.model.Cell; import com.iqser.red.service.redaction.v1.server.tableextraction.model.Table; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -@Slf4j @Service @RequiredArgsConstructor public class EntityRedactionService { 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 9836bd4d..9602ea3a 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 @@ -35,9 +35,7 @@ import com.iqser.red.service.redaction.v1.server.tableextraction.model.Cell; import com.iqser.red.service.redaction.v1.server.tableextraction.model.Table; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -@Slf4j @Service @RequiredArgsConstructor public class AnnotationHighlightService { @@ -45,7 +43,8 @@ public class AnnotationHighlightService { private final DictionaryService dictionaryService; - public void highlight(PDDocument document, Document classifiedDoc, boolean flatRedaction, ManualRedactions manualRedactions) throws IOException { + public void highlight(PDDocument document, Document classifiedDoc, boolean flatRedaction, + ManualRedactions manualRedactions) throws IOException { Set manualRedactionPages = getManualRedactionPages(manualRedactions); @@ -83,7 +82,8 @@ public class AnnotationHighlightService { } - private void addAnnotations(PDPage pdPage, Document classifiedDoc, boolean flatRedaction, ManualRedactions manualRedactions, int page) throws IOException { + private void addAnnotations(PDPage pdPage, Document classifiedDoc, boolean flatRedaction, + ManualRedactions manualRedactions, int page) throws IOException { List annotations = pdPage.getAnnotations(); @@ -107,11 +107,22 @@ public class AnnotationHighlightService { redactionLogEntry.setManual(true); } - for (TextPositionSequence textPositions : entityPositionSequence.getSequences()) { - - Rectangle rectangle = textPositions.getRectangle(); + if (CollectionUtils.isNotEmpty(entityPositionSequence.getSequences())) { + Rectangle rectangle = new Rectangle(); + rectangle.setTopLeft(entityPositionSequence.getSequences().get(0).getRectangle().getTopLeft()); + rectangle.setHeight((float) entityPositionSequence.getSequences() + .stream() + .mapToDouble(TextPositionSequence::getHeight) + .max() + .getAsDouble()); + rectangle.setWidth((float) entityPositionSequence.getSequences() + .stream() + .mapToDouble(TextPositionSequence::getWidth) + .sum()); + rectangle.setPage(page); redactionLogEntry.getPositions().add(rectangle); - annotations.add(createAnnotation(rectangle, entityPositionSequence.getId(), createAnnotationContent(entity), getColor(entity), !flatRedaction && !isHint(entity))); + annotations.add(createAnnotation(rectangle, entityPositionSequence.getId(), + createAnnotationContent(entity), getColor(entity), !flatRedaction && !isHint(entity))); } redactionLogEntry.setId(entityPositionSequence.getId()); } @@ -120,7 +131,8 @@ public class AnnotationHighlightService { } - private void addManualAnnotations(PDPage pdPage, Document classifiedDoc, ManualRedactions manualRedactions, int page) throws IOException { + private void addManualAnnotations(PDPage pdPage, Document classifiedDoc, ManualRedactions manualRedactions, + int page) throws IOException { if (manualRedactions == null) { return; @@ -143,7 +155,8 @@ public class AnnotationHighlightService { foundOnPage = true; - PDAnnotationTextMarkup highlight = createAnnotation(rectangle, id, createAnnotationContent(manualRedactionEntry), getColor(manualRedactionEntry + PDAnnotationTextMarkup highlight = createAnnotation(rectangle, id, + createAnnotationContent(manualRedactionEntry), getColor(manualRedactionEntry .getType()), true); annotations.add(highlight); @@ -188,7 +201,8 @@ public class AnnotationHighlightService { } - private PDAnnotationTextMarkup createAnnotation(Rectangle rectangle, String id, String content, float[] color, boolean popup) { + private PDAnnotationTextMarkup createAnnotation(Rectangle rectangle, String id, String content, float[] color, + boolean popup) { PDAnnotationTextMarkup annotation = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_HIGHLIGHT); annotation.constructAppearances(); @@ -206,25 +220,15 @@ public class AnnotationHighlightService { private String createAnnotationContent(Entity entity) { - return new StringBuilder().append("\nRule ") - .append(entity.getMatchedRule()) - .append(" matched") - .append("\n\n") - .append(entity.getRedactionReason()) - .append("\n\nIn Section : \"") - .append(entity.getHeadline()) - .append("\"") - .toString(); + return "\nRule " + entity.getMatchedRule() + " matched" + "\n\n" + entity.getRedactionReason() + "\n\nIn " + + "Section : \"" + entity + .getHeadline() + "\""; } private String createAnnotationContent(ManualRedactionEntry entry) { - return new StringBuilder().append("\nManual Redaction") - .append("\n\nIn Section : \"") - .append(entry.getSection()) - .append("\"") - .toString(); + return "\nManual Redaction" + "\n\nIn Section : \"" + entry.getSection() + "\""; } @@ -244,7 +248,8 @@ public class AnnotationHighlightService { // quadPoints is array of x,y coordinates in Z-like order (top-left, top-right, bottom-left,bottom-right) // of the area to be highlighted return new float[]{rectangle.getTopLeft().getX(), rectangle.getTopLeft().getY(), rectangle.getTopLeft() - .getX() + rectangle.getWidth(), rectangle.getTopLeft().getY(), rectangle.getTopLeft().getX(), rectangle.getTopLeft() + .getX() + rectangle.getWidth(), rectangle.getTopLeft().getY(), rectangle.getTopLeft().getX(), + rectangle.getTopLeft() .getY() + rectangle.getHeight(), rectangle.getTopLeft() .getX() + rectangle.getWidth(), rectangle.getTopLeft().getY() + rectangle.getHeight()}; } @@ -255,10 +260,7 @@ public class AnnotationHighlightService { if (!entity.isRedaction()) { return false; } - if (isHint(entity)) { - return false; - } - return true; + return !isHint(entity); } @@ -286,20 +288,19 @@ public class AnnotationHighlightService { private boolean isHint(Entity entity) { List hintTypes = dictionaryService.getHintTypes(); - if (CollectionUtils.isNotEmpty(hintTypes) && hintTypes.contains(entity.getType())) { - return true; - } - return false; + return CollectionUtils.isNotEmpty(hintTypes) && hintTypes.contains(entity.getType()); } - private void drawSectionFrames(PDDocument document, Document classifiedDoc, boolean flatRedaction, PDPage pdPage, int page) throws IOException { + private void drawSectionFrames(PDDocument document, Document classifiedDoc, boolean flatRedaction, PDPage pdPage, + int page) throws IOException { if (flatRedaction) { return; } - PDPageContentStream contentStream = new PDPageContentStream(document, pdPage, PDPageContentStream.AppendMode.APPEND, true); + PDPageContentStream contentStream = new PDPageContentStream(document, pdPage, + PDPageContentStream.AppendMode.APPEND, true); for (Paragraph paragraph : classifiedDoc.getParagraphs()) { for (int i = 0; i <= paragraph.getPageBlocks().size() - 1; i++) { @@ -348,7 +349,8 @@ public class AnnotationHighlightService { if (cell != null) { contentStream.setLineWidth(0.5f); contentStream.setStrokingColor(Color.CYAN); - contentStream.addRect((float) cell.getX(), (float) cell.getY(), (float) cell.getWidth(), (float) cell + contentStream.addRect((float) cell.getX(), (float) cell.getY(), (float) cell.getWidth(), + (float) cell .getHeight()); contentStream.stroke(); }