From dafecc35b645ae171838c34ffa45e9aab3813145 Mon Sep 17 00:00:00 2001 From: Maverick Studer Date: Fri, 23 Aug 2024 17:01:13 +0200 Subject: [PATCH] RED-9865: fix for case 2 --- .../redaction-service-api-v1/build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- ...dactionLogToEntityLogMigrationService.java | 10 ++++++++-- .../v1/server/model/MigrationEntity.java | 20 ++++++++++++++++--- .../v1/server/utils/MigratedIdsCollector.java | 2 +- .../v1/server/MigrationIntegrationTest.java | 20 +++++++++---------- 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/redaction-service-v1/redaction-service-api-v1/build.gradle.kts b/redaction-service-v1/redaction-service-api-v1/build.gradle.kts index d6b825a4..ba585434 100644 --- a/redaction-service-v1/redaction-service-api-v1/build.gradle.kts +++ b/redaction-service-v1/redaction-service-api-v1/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } description = "redaction-service-api-v1" -val persistenceServiceVersion = "2.528.0" +val persistenceServiceVersion = "2.530.0" dependencies { implementation("org.springframework:spring-web:6.0.12") diff --git a/redaction-service-v1/redaction-service-server-v1/build.gradle.kts b/redaction-service-v1/redaction-service-server-v1/build.gradle.kts index 6da62463..6de0cff3 100644 --- a/redaction-service-v1/redaction-service-server-v1/build.gradle.kts +++ b/redaction-service-v1/redaction-service-server-v1/build.gradle.kts @@ -16,7 +16,7 @@ val layoutParserVersion = "0.141.0" val jacksonVersion = "2.15.2" val droolsVersion = "9.44.0.Final" val pdfBoxVersion = "3.0.0" -val persistenceServiceVersion = "2.528.0" +val persistenceServiceVersion = "2.530.0" val springBootStarterVersion = "3.1.5" val springCloudVersion = "4.0.4" val testContainersVersion = "1.19.7" diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/migration/RedactionLogToEntityLogMigrationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/migration/RedactionLogToEntityLogMigrationService.java index ca6b93aa..5bc2986e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/migration/RedactionLogToEntityLogMigrationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/migration/RedactionLogToEntityLogMigrationService.java @@ -21,6 +21,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.BaseAnnotation; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.IdRemoval; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Rectangle; @@ -119,9 +120,14 @@ public class RedactionLogToEntityLogMigrationService { .filter(MigrationEntity::needsManualEntry) .map(MigrationEntity::buildManualRedactionEntry) .toList(); - idsToMigrateInDb.setManualRedactionEntriesToAdd(manualRedactionEntriesToAdd); + List manualForceRedactionIdsToDelete = entitiesToMigrate.stream() + .filter(MigrationEntity::needsForceDeletion) + .map(MigrationEntity::getNewId) + .toList(); + idsToMigrateInDb.setForceRedactionIdsToDelete(manualForceRedactionIdsToDelete); + return new MigratedEntityLog(idsToMigrateInDb, entityLog); } @@ -200,7 +206,7 @@ public class RedactionLogToEntityLogMigrationService { private static EntityLogLegalBasis toEntityLogLegalBasis(RedactionLogLegalBasis redactionLogLegalBasis) { - return new EntityLogLegalBasis(redactionLogLegalBasis.getName(), redactionLogLegalBasis.getDescription(), redactionLogLegalBasis.getReason(),""); + return new EntityLogLegalBasis(redactionLogLegalBasis.getName(), redactionLogLegalBasis.getDescription(), redactionLogLegalBasis.getReason(), ""); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/MigrationEntity.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/MigrationEntity.java index a8e91fba..a5ba9182 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/MigrationEntity.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/MigrationEntity.java @@ -23,6 +23,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualChangeFactory; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.BaseAnnotation; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; @@ -216,10 +217,17 @@ public final class MigrationEntity { entityLogEntry.setValue("Imported Redaction"); } - if(entityLogEntry.getChanges() != null - && !entityLogEntry.getChanges().isEmpty() - && entityLogEntry.getChanges().stream().map(Change::getType).toList().get(entityLogEntry.getChanges().size() - 1).equals(ChangeType.REMOVED)) { + if (entityLogEntry.getChanges() != null && !entityLogEntry.getChanges().isEmpty() && entityLogEntry.getChanges() + .stream() + .map(Change::getType) + .toList() + .get(entityLogEntry.getChanges().size() - 1).equals(ChangeType.REMOVED)) { entityLogEntry.setState(EntryState.REMOVED); + if (!entityLogEntry.getManualChanges().isEmpty()) { + entityLogEntry.getManualChanges() + .removeIf(manualChange -> manualChange.getManualRedactionType() + .equals(com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ManualRedactionType.FORCE)); + } } return entityLogEntry; @@ -466,4 +474,10 @@ public final class MigrationEntity { .anyMatch(mc -> mc instanceof ManualResizeRedaction && !((ManualResizeRedaction) mc).getUpdateDictionary()) && !(migratedEntity instanceof Image); } + public boolean needsForceDeletion() { + + return manualChanges.stream() + .anyMatch(mc -> mc instanceof ManualForceRedaction) && this.precursorEntity != null && this.precursorEntity.removed(); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/MigratedIdsCollector.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/MigratedIdsCollector.java index 38656b66..6dc75188 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/MigratedIdsCollector.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/MigratedIdsCollector.java @@ -18,7 +18,7 @@ public class MigratedIdsCollector implements Collector supplier() { - return () -> new MigratedIds(new LinkedList<>(), Collections.emptyList()); + return () -> new MigratedIds(new LinkedList<>(), Collections.emptyList(), Collections.emptyList()); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/MigrationIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/MigrationIntegrationTest.java index 01774794..ff58e5bc 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/MigrationIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/MigrationIntegrationTest.java @@ -2,7 +2,6 @@ package com.iqser.red.service.redaction.v1.server; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.awt.geom.Rectangle2D; @@ -37,7 +36,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.migration.MigratedIds; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Rectangle; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry; @@ -99,7 +97,7 @@ public class MigrationIntegrationTest extends BuildDocumentIntegrationTest { @SneakyThrows public void testSave() { - MigratedIds ids = new MigratedIds(new LinkedList<>(), null); + MigratedIds ids = new MigratedIds(new LinkedList<>(), null, null); ids.addMapping("123", "321"); ids.addMapping("123", "321"); ids.addMapping("123", "321"); @@ -157,8 +155,8 @@ public class MigrationIntegrationTest extends BuildDocumentIntegrationTest { manualRedactions.setResizeRedactions(Collections.emptySet()); } } - MigratedIds migratedIds = getMigratedIds(migratedIdsFileName); - revertMigration(manualRedactions, migratedIds); +// MigratedIds migratedIds = getMigratedIds(migratedIdsFileName); +// revertMigration(manualRedactions, migratedIds); mergedRedactionLog = legacyRedactionLogMergeService.addManualAddEntriesAndRemoveSkippedImported(redactionLog, manualRedactions, TEST_DOSSIER_TEMPLATE_ID); } else { manualRedactions = new ManualRedactions(); @@ -174,6 +172,12 @@ public class MigrationIntegrationTest extends BuildDocumentIntegrationTest { false); redactionStorageService.storeObject(TEST_DOSSIER_ID, TEST_FILE_ID, FileType.ENTITY_LOG, migratedEntityLog.getEntityLog()); + AnnotateResponse annotateResponse = annotationService.annotate(AnnotateRequest.builder().dossierId(TEST_DOSSIER_ID).fileId(TEST_FILE_ID).build()); + File outputFile = Path.of(OsUtils.getTemporaryDirectory()).resolve(Path.of(fileName.replaceAll(".pdf", "_MIGRATED.pdf")).getFileName()).toFile(); + + try (FileOutputStream fileOutputStream = new FileOutputStream(outputFile)) { + fileOutputStream.write(annotateResponse.getDocument()); + } assertEquals(mergedRedactionLog.getRedactionLogEntry().size(), migratedEntityLog.getEntityLog().getEntityLogEntry().size()); EntityLog entityLog = migratedEntityLog.getEntityLog(); assertEquals(mergedRedactionLog.getAnalysisNumber(), entityLog.getAnalysisNumber()); @@ -189,12 +193,6 @@ public class MigrationIntegrationTest extends BuildDocumentIntegrationTest { migratedIds.forEach((oldId, newId) -> assertEntryIsEqual(oldId, newId, mergedRedactionLog, entityLog, migratedIds)); - AnnotateResponse annotateResponse = annotationService.annotate(AnnotateRequest.builder().dossierId(TEST_DOSSIER_ID).fileId(TEST_FILE_ID).build()); - File outputFile = Path.of(OsUtils.getTemporaryDirectory()).resolve(Path.of(fileName.replaceAll(".pdf", "_MIGRATED.pdf")).getFileName()).toFile(); - - try (FileOutputStream fileOutputStream = new FileOutputStream(outputFile)) { - fileOutputStream.write(annotateResponse.getDocument()); - } }