From 8ff3e463eae960a35e11fce7589e24131ccb51f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominique=20Eifl=C3=A4nder?= Date: Fri, 18 Jun 2021 11:28:43 +0200 Subject: [PATCH] RED-1326: Enabled to recategorize images --- .../v1/model/ManualImageRecategorization.java | 21 ++++++++++ .../v1/model/ManualRedactionType.java | 2 +- .../redaction/v1/model/ManualRedactions.java | 3 ++ .../redaction/v1/model/RedactionLogEntry.java | 2 + .../service/RedactionLogCreatorService.java | 40 +++++++++++++++++-- 5 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualImageRecategorization.java diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualImageRecategorization.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualImageRecategorization.java new file mode 100644 index 00000000..7dc9120c --- /dev/null +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualImageRecategorization.java @@ -0,0 +1,21 @@ +package com.iqser.red.service.redaction.v1.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class ManualImageRecategorization { + + private String id; + private String user; + private Status status; + private String type; + private String legalBasis; + private boolean redacted; + +} \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactionType.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactionType.java index 83df7d67..31f78218 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactionType.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactionType.java @@ -1,5 +1,5 @@ package com.iqser.red.service.redaction.v1.model; public enum ManualRedactionType { - ADD, REMOVE, FORCE_REDACT + ADD, REMOVE, FORCE_REDACT, RECATEGORIZE } diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactions.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactions.java index af866d09..64426a07 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactions.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/ManualRedactions.java @@ -26,6 +26,9 @@ public class ManualRedactions { @Builder.Default private Set entriesToAdd = new HashSet<>(); + @Builder.Default + private Set imageRecategorizations = new HashSet<>(); + @Builder.Default private Map> comments = new HashMap<>(); 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 f4c0dfd8..2c9e5610 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 @@ -51,4 +51,6 @@ public class RedactionLogEntry { private boolean excluded; + private String recategorizationType; + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java index 9aef4dc7..92ac8a28 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java @@ -13,7 +13,9 @@ import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder; import com.iqser.red.service.redaction.v1.server.tableextraction.model.AbstractTextContainer; 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 org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; @@ -87,6 +89,36 @@ public class RedactionLogCreatorService { .section(image.getSection()) .build(); + if (manualRedactions != null && !manualRedactions.getImageRecategorizations().isEmpty()) { + for (ManualImageRecategorization recategorization : manualRedactions.getImageRecategorizations()) { + if (recategorization.getId().equals(id)) { + String manualOverrideReason = null; + if (recategorization.getStatus().equals(Status.APPROVED)) { + image.setType(recategorization.getType()); + image.setRedaction(recategorization.isRedacted()); + image.setLegalBasis(recategorization.getLegalBasis()); + redactionLogEntry.setRedacted(recategorization.isRedacted()); + redactionLogEntry.setStatus(Status.APPROVED); + redactionLogEntry.setLegalBasis(recategorization.getLegalBasis()); + manualOverrideReason = image.getRedactionReason() + ", recategorized by manual override"; + redactionLogEntry.setColor(getColorForImage(image, dossierTemplateId, false)); + } else if (recategorization.getStatus().equals(Status.REQUESTED)) { + manualOverrideReason = image.getRedactionReason() + ", requested to recategorize"; + redactionLogEntry.setStatus(Status.REQUESTED); + redactionLogEntry.setColor(getColorForImage(image, dossierTemplateId, true)); + redactionLogEntry.setRecategorizationType(recategorization.getType()); + } else { + redactionLogEntry.setStatus(Status.DECLINED); + } + + image.setRedactionReason(manualOverrideReason != null ? manualOverrideReason : image.getRedactionReason()); + redactionLogEntry.setReason(manualOverrideReason); + redactionLogEntry.setManual(true); + redactionLogEntry.setManualRedactionType(ManualRedactionType.RECATEGORIZE); + } + } + } + if (manualRedactions != null && !manualRedactions.getIdsToRemove().isEmpty()) { for (IdRemoval manualRemoval : manualRedactions.getIdsToRemove()) { if (manualRemoval.getId().equals(id)) { @@ -276,20 +308,22 @@ public class RedactionLogCreatorService { List rectangles = new ArrayList<>(); if (textPositions.size() == 1) { - rectangles.add( TextPositionSequence.fromData(textPositions, page).getRectangle()); + rectangles.add(TextPositionSequence.fromData(textPositions, page).getRectangle()); } else { float y = textPositions.get(0).getYDirAdj(); int startIndex = 0; for (int i = 1; i < textPositions.size(); i++) { float yDirAdj = textPositions.get(i).getYDirAdj(); if (yDirAdj != y) { - rectangles.add( TextPositionSequence.fromData(textPositions.subList(startIndex, i), page).getRectangle()); + rectangles.add(TextPositionSequence.fromData(textPositions.subList(startIndex, i), page) + .getRectangle()); y = yDirAdj; startIndex = i; } } if (startIndex != textPositions.size()) { - rectangles.add( TextPositionSequence.fromData(textPositions.subList(startIndex, textPositions.size()), page).getRectangle()); + rectangles.add(TextPositionSequence.fromData(textPositions.subList(startIndex, textPositions.size()), page) + .getRectangle()); } }