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;