From 941448492bfe294634a8c3c309f237034245e842 Mon Sep 17 00:00:00 2001 From: deiflaender Date: Mon, 4 Apr 2022 14:33:36 +0200 Subject: [PATCH] RED-3616: Do not remove annotation that intersects with skipped imported redactions --- .../redaction-service-api-v1/pom.xml | 6 ++++++ .../redaction/v1/model/RedactionLogEntry.java | 3 +++ .../controller/RedactionController.java | 2 +- .../service/ImportedRedactionService.java | 21 +++++++++++-------- .../service/RedactionLogMergeService.java | 16 ++++++++++++-- 5 files changed, 36 insertions(+), 12 deletions(-) diff --git a/redaction-service-v1/redaction-service-api-v1/pom.xml b/redaction-service-v1/redaction-service-api-v1/pom.xml index 349c3a61..dfbbcf4d 100644 --- a/redaction-service-v1/redaction-service-api-v1/pom.xml +++ b/redaction-service-v1/redaction-service-api-v1/pom.xml @@ -25,6 +25,12 @@ com.iqser.red.service persistence-service-api-v1 ${persistence-service.version} + + + com.iqser.red.service + redaction-service-api-v1 + + 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 0444a28e..349d20fb 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 @@ -66,6 +66,9 @@ public class RedactionLogEntry { private Set reference = new HashSet<>(); + @Builder.Default + private Set importedRedactionIntersections = new HashSet<>(); + public boolean lastChangeIsRemoved() { return last(changes).map(c -> c.getType() == ChangeType.REMOVED).orElse(false); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java index 0fc054c6..a5f6c95d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java @@ -197,7 +197,7 @@ public class RedactionController implements RedactionResource { } log.info("Loaded redaction log with computationalVersion: {}", redactionLog.getAnalysisVersion()); - var merged = redactionLogMergeService.mergeRedactionLogData(redactionLog, sectionGrid, redactionRequest.getDossierTemplateId(), redactionRequest.getManualRedactions(), redactionRequest.getExcludedPages(), redactionRequest.getTypes(), redactionRequest.getColors()); + var merged = redactionLogMergeService.mergeRedactionLogData(redactionLog, sectionGrid, redactionRequest.getManualRedactions(), redactionRequest.getExcludedPages(), redactionRequest.getTypes(), redactionRequest.getColors()); merged.getRedactionLogEntry().removeIf(e -> e.isFalsePositive() && !redactionRequest.isIncludeFalsePositives()); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java index 28ccfe35..c65b6780 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java @@ -1,6 +1,6 @@ package com.iqser.red.service.redaction.v1.server.redaction.service; -import java.util.Iterator; +import java.util.HashSet; import java.util.List; import org.springframework.stereotype.Service; @@ -24,14 +24,15 @@ public class ImportedRedactionService { public List processImportedRedactions(String dossierTemplateId, String dossierId, String fileId, - List redactionLogEntries, boolean addImportedRedactions) { + List redactionLogEntries, + boolean addImportedRedactions) { var importedRedactions = redactionStorageService.getImportedRedactions(dossierId, fileId); if (importedRedactions == null) { return redactionLogEntries; } - redactionLogEntries.removeIf(redactionLogEntry -> hasIntersections(redactionLogEntry, importedRedactions)); + redactionLogEntries.forEach(redactionLogEntry -> addIntersections(redactionLogEntry, importedRedactions)); if (addImportedRedactions) { return addImportedRedactionsRedactionLogEntries(dossierTemplateId, redactionLogEntries, importedRedactions); @@ -42,8 +43,8 @@ public class ImportedRedactionService { private List addImportedRedactionsRedactionLogEntries(String dossierTemplateId, - List redactionLogEntries, - ImportedRedactions importedRedactions) { + List redactionLogEntries, + ImportedRedactions importedRedactions) { for (List importedRedactionsValues : importedRedactions.getImportedRedactions().values()) { for (ImportedRedaction importedRedaction : importedRedactionsValues) { @@ -53,7 +54,7 @@ public class ImportedRedactionService { .imported(true) .redacted(true) .positions(importedRedaction.getPositions()) - .color(getColor("imported_redaction", dossierTemplateId)) + .color(getColor(IMPORTED_REDACTION_TYPE, dossierTemplateId)) .build(); redactionLogEntries.add(redactionLogEntry); @@ -64,7 +65,7 @@ public class ImportedRedactionService { } - private boolean hasIntersections(RedactionLogEntry redactionLogEntry, ImportedRedactions importedRedactions) { + private void addIntersections(RedactionLogEntry redactionLogEntry, ImportedRedactions importedRedactions) { for (Rectangle rectangle : redactionLogEntry.getPositions()) { if (importedRedactions.getImportedRedactions().containsKey(rectangle.getPage())) { @@ -72,13 +73,15 @@ public class ImportedRedactionService { for (ImportedRedaction importedRedaction : importedRedactionsOnPage) { for (Rectangle importedRedactionPosition : importedRedaction.getPositions()) { if (intersects(importedRedactionPosition, rectangle)) { - return true; + if(redactionLogEntry.getImportedRedactionIntersections() == null){ + redactionLogEntry.setImportedRedactionIntersections(new HashSet<>()); + } + redactionLogEntry.getImportedRedactionIntersections().add(importedRedaction.getId()); } } } } } - return false; } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogMergeService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogMergeService.java index 90674585..8810bf32 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogMergeService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogMergeService.java @@ -27,13 +27,15 @@ public class RedactionLogMergeService { private final SectionTextService sectionTextService; - public RedactionLog mergeRedactionLogData(RedactionLog redactionLog, SectionGrid sectionGrid, - String dossierTemplateId, ManualRedactions manualRedactions, + public RedactionLog mergeRedactionLogData(RedactionLog redactionLog, SectionGrid sectionGrid, ManualRedactions manualRedactions, Set excludedPages, List types, Colors colors) { + var skippedImportedRedactions = new HashSet<>(); + log.info("Merging Redaction log with manual redactions"); if (manualRedactions != null) { + var manualRedactionLogEntries = addManualAddEntries(sectionGrid, manualRedactions.getEntriesToAdd(), manualRedactions.getComments(), colors, types); redactionLog.getRedactionLogEntry().addAll(manualRedactionLogEntries); @@ -46,6 +48,10 @@ public class RedactionLogMergeService { .filter(mr -> entry.getId().equals(mr.getId())) .collect(Collectors.toList()), entry, types, colors); + if(entry.isImported() && !entry.isRedacted()){ + skippedImportedRedactions.add(entry.getId()); + } + entry.setComments(manualRedactions.getComments().get(entry.getId())); if (excludedPages != null && !excludedPages.isEmpty()) { @@ -61,6 +67,12 @@ public class RedactionLogMergeService { Set processedIds = new HashSet<>(); redactionLog.getRedactionLogEntry().removeIf(entry -> { + if(entry.getImportedRedactionIntersections() != null) { + entry.getImportedRedactionIntersections().removeAll(skippedImportedRedactions); + if (!entry.getImportedRedactionIntersections().isEmpty() && (!entry.isImage() || entry.isImage() && !entry.isRedacted())) { + return true; + } + } if (processedIds.contains(entry.getId())) { log.info("Duplicate annotation found with id {}", entry.getId()); return true;