From 6a9df397ebf79d10cfc050ac0e5783866b33848f Mon Sep 17 00:00:00 2001 From: deiflaender Date: Wed, 22 Jul 2020 13:56:40 +0200 Subject: [PATCH 1/2] Do not return redacted=true for vertebrates in RedactionLog, return isHint=true and redacted=false --- .../redaction/v1/model/RedactionLogEntry.java | 1 + .../v1/server/redaction/model/Section.java | 9 -------- .../service/AnnotationHighlightService.java | 22 ++++++++++++++----- .../src/test/resources/drools/rules.drl | 8 ------- 4 files changed, 17 insertions(+), 23 deletions(-) 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 70e9a22d..e75b44e9 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 @@ -13,6 +13,7 @@ public class RedactionLogEntry { private String value; private String reason; private boolean redacted; + private boolean isHint; private String section; private float[] color; private List positions = new ArrayList<>(); 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 0a98079b..049349cc 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 @@ -49,15 +49,6 @@ public class Section { }); } - public void highlightAll(String type){ - entities.forEach(entity -> { - if(entity.getType().equals(type)){ - entity.setRedaction(true); - } - }); - } - - public void redactLineAfter(String start, String asType, int ruleNumber, String reason){ String value = StringUtils.substringBetween(text, start, "\n"); 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 f662fee4..565893c6 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 @@ -121,7 +121,7 @@ public class AnnotationHighlightService { annotationPosition.setUpperRightY(posYEnd + height); highlight.setRectangle(annotationPosition); - if (!flatRedaction) { + if (!flatRedaction && !isHint(entity)) { highlight.setAnnotationName(entityPositionSequence.getId().toString()); highlight.setTitlePopup(entityPositionSequence.getId().toString()); highlight.setContents("\nRule " + entity.getMatchedRule() + " matched\n\n" + entity.getRedactionReason() + "\n\n" + "In Section : \"" + entity.getHeadline() + "\""); @@ -150,6 +150,7 @@ public class AnnotationHighlightService { redactionLogEntry.setType(entity.getType()); redactionLogEntry.setRedacted(entity.isRedaction()); redactionLogEntry.setSection(entity.getHeadline()); + redactionLogEntry.setHint(isHint(entity)); classifiedDoc.getRedactionLogEntities().add(redactionLogEntry); } @@ -173,15 +174,15 @@ public class AnnotationHighlightService { if (!entity.isRedaction()) { return false; } - if(entity.getType().equalsIgnoreCase("VERTEBRATE") || entity.getType().equalsIgnoreCase("NO_REDACTION_INDICATOR") ){ - // TODO in RED-161. - return true; + if(isHint(entity)){ + return false; } - return dictionaryService.getDictionary().keySet().contains(entity.getType()); + return true; } private float[] getColor(Entity entity) { - if (!entity.isRedaction()) { + + if (!entity.isRedaction() && !isHint(entity)) { return new float[]{0.627f, 0.627f, 0.627f}; } @@ -192,6 +193,15 @@ public class AnnotationHighlightService { return dictionaryService.getEntryColors().get(entity.getType()); } + + private boolean isHint(Entity entity){ + // TODO in RED-161. + if(entity.getType().equalsIgnoreCase("vertebrate") || entity.getType().equalsIgnoreCase("no_redaction_indicator")){ + return true; + } + return false; + } + private void visualizeTextBlock(TextBlock textBlock, PDPageContentStream contentStream) throws IOException { contentStream.setStrokingColor(Color.LIGHT_GRAY); 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 868ccee9..74f52589 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 @@ -4,14 +4,6 @@ import com.iqser.red.service.redaction.v1.server.redaction.model.Section global Section section -rule "0: Highlight Indicators" - when - eval(section.getEntities().isEmpty()==false); - then - section.highlightAll("vertebrate"); - section.highlightAll("no_redaction_indicator"); - end - rule "1: Redacted because Section contains Vertebrate" when From e7ea12a1b03f7f79e0f4fa12671f91ee326eef73 Mon Sep 17 00:00:00 2001 From: deiflaender Date: Wed, 22 Jul 2020 14:14:10 +0200 Subject: [PATCH 2/2] CodeStyle --- .../service/AnnotationHighlightService.java | 52 +++++++++++++------ 1 file changed, 36 insertions(+), 16 deletions(-) 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 565893c6..4b63523e 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 @@ -36,8 +36,10 @@ import lombok.extern.slf4j.Slf4j; @Service @RequiredArgsConstructor public class AnnotationHighlightService { + private final DictionaryService dictionaryService; + public void highlight(PDDocument document, Document classifiedDoc, boolean flatRedaction) throws IOException { for (int page = 1; page <= document.getNumberOfPages(); page++) { @@ -98,18 +100,29 @@ public class AnnotationHighlightService { posXEnd = textPositions.getTextPositions().get(0).getYDirAdj() + 2; posXInit = textPositions.getTextPositions().get(0).getYDirAdj() - height; posYInit = textPositions.getTextPositions().get(0).getXDirAdj(); - posYEnd = textPositions.getTextPositions().get(textPositions.getTextPositions().size() - 1).getXDirAdj() - height + 4; + posYEnd = textPositions.getTextPositions() + .get(textPositions.getTextPositions().size() - 1) + .getXDirAdj() - height + 4; } else { posXInit = textPositions.getTextPositions().get(0).getXDirAdj(); - posXEnd = textPositions.getTextPositions().get(textPositions.getTextPositions().size() - 1).getXDirAdj() + textPositions.getTextPositions().get(textPositions.getTextPositions().size() - 1).getWidth() + 1; - posYInit = textPositions.getTextPositions().get(0).getPageHeight() - textPositions.getTextPositions().get(0).getYDirAdj() - 2; - posYEnd = textPositions.getTextPositions().get(0).getPageHeight() - textPositions.getTextPositions().get(textPositions.getTextPositions().size() - 1).getYDirAdj() + 2; + posXEnd = textPositions.getTextPositions() + .get(textPositions.getTextPositions().size() - 1) + .getXDirAdj() + textPositions.getTextPositions() + .get(textPositions.getTextPositions().size() - 1) + .getWidth() + 1; + posYInit = textPositions.getTextPositions() + .get(0) + .getPageHeight() - textPositions.getTextPositions().get(0).getYDirAdj() - 2; + posYEnd = textPositions.getTextPositions() + .get(0) + .getPageHeight() - textPositions.getTextPositions() + .get(textPositions.getTextPositions().size() - 1) + .getYDirAdj() + 2; } Rectangle textHighlightRectangle = new Rectangle(new Point(posXInit, posYInit), posXEnd - posXInit, posYEnd - posYInit + height, page); - List annotations = pdPage.getAnnotations(); PDAnnotationTextMarkup highlight = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_HIGHLIGHT); highlight.constructAppearances(); @@ -124,7 +137,8 @@ public class AnnotationHighlightService { if (!flatRedaction && !isHint(entity)) { highlight.setAnnotationName(entityPositionSequence.getId().toString()); highlight.setTitlePopup(entityPositionSequence.getId().toString()); - highlight.setContents("\nRule " + entity.getMatchedRule() + " matched\n\n" + entity.getRedactionReason() + "\n\n" + "In Section : \"" + entity.getHeadline() + "\""); + highlight.setContents("\nRule " + entity.getMatchedRule() + " matched\n\n" + entity.getRedactionReason() + "\n\n" + "In Section : \"" + entity + .getHeadline() + "\""); } highlight.setQuadPoints(toQuadPoints(textHighlightRectangle)); @@ -162,31 +176,32 @@ 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().getY() + rectangle.getHeight(), - rectangle.getTopLeft().getX() + rectangle.getWidth(), rectangle.getTopLeft().getY() + rectangle.getHeight()}; + return new float[]{rectangle.getTopLeft().getX(), rectangle.getTopLeft().getY(), 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()}; } private boolean isRedactionType(Entity entity) { + if (!entity.isRedaction()) { return false; } - if(isHint(entity)){ + if (isHint(entity)) { return false; } return true; } + private float[] getColor(Entity entity) { if (!entity.isRedaction() && !isHint(entity)) { return new float[]{0.627f, 0.627f, 0.627f}; } - if(!dictionaryService.getEntryColors().containsKey(entity.getType())){ + if (!dictionaryService.getEntryColors().containsKey(entity.getType())) { return dictionaryService.getEntryColors().get("default"); } @@ -194,14 +209,16 @@ public class AnnotationHighlightService { } - private boolean isHint(Entity entity){ + private boolean isHint(Entity entity) { // TODO in RED-161. - if(entity.getType().equalsIgnoreCase("vertebrate") || entity.getType().equalsIgnoreCase("no_redaction_indicator")){ + if (entity.getType().equalsIgnoreCase("vertebrate") || entity.getType() + .equalsIgnoreCase("no_redaction_indicator")) { return true; } return false; } + private void visualizeTextBlock(TextBlock textBlock, PDPageContentStream contentStream) throws IOException { contentStream.setStrokingColor(Color.LIGHT_GRAY); @@ -226,13 +243,15 @@ public class AnnotationHighlightService { private void visualizeTable(Table table, PDPageContentStream contentStream) throws IOException { + for (List row : table.getRows()) { for (Cell cell : row) { if (cell != null) { contentStream.setLineWidth(0.5f); contentStream.setStrokingColor(Color.CYAN); - contentStream.addRect((float) cell.getX(), (float) cell.getY(), (float) cell.getWidth(), (float) cell.getHeight()); + contentStream.addRect((float) cell.getX(), (float) cell.getY(), (float) cell.getWidth(), (float) cell + .getHeight()); contentStream.stroke(); // contentStream.setStrokingColor(Color.GREEN); @@ -257,4 +276,5 @@ public class AnnotationHighlightService { contentStream.endText(); } } + } \ No newline at end of file