From 5031b17a7d41c28c5ec1b6f0cbe6d8e6e3b28ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20Sch=C3=BCttler?= Date: Wed, 3 Apr 2024 15:17:03 +0200 Subject: [PATCH] RED-7384: handle pending dict application in redaction-service instead of persistence --- .../redaction/v1/model/MigrationRequest.java | 2 + .../migration/MigrationMessageReceiver.java | 3 +- ...dactionLogToEntityLogMigrationService.java | 58 ++++++++++++++----- .../v1/server/MigrationIntegrationTest.java | 3 +- 4 files changed, 51 insertions(+), 15 deletions(-) diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/MigrationRequest.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/MigrationRequest.java index 6eb0b640..362feab7 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/MigrationRequest.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/MigrationRequest.java @@ -23,6 +23,8 @@ public class MigrationRequest { String dossierId; @NonNull String fileId; + + boolean fileIsApproved; @NonNull ManualRedactions manualRedactions; @NonNull diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/migration/MigrationMessageReceiver.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/migration/MigrationMessageReceiver.java index 70bf33df..2a28bbe5 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/migration/MigrationMessageReceiver.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/migration/MigrationMessageReceiver.java @@ -68,7 +68,8 @@ public class MigrationMessageReceiver { migrationRequest.getDossierTemplateId(), migrationRequest.getManualRedactions(), migrationRequest.getFileId(), - migrationRequest.getEntitiesWithComments()); + migrationRequest.getEntitiesWithComments(), + migrationRequest.isFileIsApproved()); log.info("Storing migrated entityLog and ids to migrate in DB for file {}", migrationRequest.getFileId()); redactionStorageService.storeObject(migrationRequest.getDossierId(), migrationRequest.getFileId(), FileType.ENTITY_LOG, migratedEntityLog.getEntityLog()); 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 c151aa60..e3a677ca 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 @@ -20,7 +20,9 @@ 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.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.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; 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; @@ -63,7 +65,8 @@ public class RedactionLogToEntityLogMigrationService { String dossierTemplateId, ManualRedactions manualRedactions, String fileId, - Set entitiesWithComments) { + Set entitiesWithComments, + boolean fileIsApproved) { log.info("Migrating entities for file {}", fileId); List entitiesToMigrate = calculateMigrationEntitiesFromRedactionLog(redactionLog, document, dossierTemplateId, fileId); @@ -72,7 +75,7 @@ public class RedactionLogToEntityLogMigrationService { .collect(new MigratedIdsCollector()); log.info("applying manual changes to migrated entities for file {}", fileId); - applyLocalProcessedManualChanges(entitiesToMigrate, manualRedactions); + applyLocalProcessedManualChanges(entitiesToMigrate, manualRedactions, fileIsApproved); EntityLog entityLog = new EntityLog(); entityLog.setAnalysisNumber(redactionLog.getAnalysisNumber()); @@ -123,22 +126,29 @@ public class RedactionLogToEntityLogMigrationService { } - private void applyLocalProcessedManualChanges(List entitiesToMigrate, ManualRedactions manualRedactions) { + private void applyLocalProcessedManualChanges(List entitiesToMigrate, ManualRedactions manualRedactions, boolean fileIsApproved) { if (manualRedactions == null) { return; } + Map> manualChangesPerAnnotationId; - Map> manualChangesPerAnnotationId = Stream.of(manualRedactions.getIdsToRemove(), - manualRedactions.getEntriesToAdd(), - manualRedactions.getForceRedactions(), - manualRedactions.getResizeRedactions(), - manualRedactions.getLegalBasisChanges(), - manualRedactions.getRecategorizations()) - .flatMap(Collection::stream) - .filter(manualChange -> manualChange.getProcessedDate() != null) - .filter(BaseAnnotation::isLocal) - .collect(Collectors.groupingBy(BaseAnnotation::getAnnotationId)); + if (fileIsApproved) { + manualChangesPerAnnotationId = manualRedactions.buildAll() + .stream() + .filter(manualChange -> (manualChange.getProcessedDate() != null && manualChange.isLocal()) // + // unprocessed dict change of type IdRemoval or ManualResize must be applied for approved documents + || (manualChange.getProcessedDate() == null && !manualChange.isLocal() // + && (manualChange instanceof IdRemoval || manualChange instanceof ManualResizeRedaction))) + .map(this::convertPendingDictChangesToLocal) + .collect(Collectors.groupingBy(BaseAnnotation::getAnnotationId)); + } else { + manualChangesPerAnnotationId = manualRedactions.buildAll() + .stream() + .filter(manualChange -> manualChange.getProcessedDate() != null) + .filter(BaseAnnotation::isLocal) + .collect(Collectors.groupingBy(BaseAnnotation::getAnnotationId)); + } entitiesToMigrate.forEach(migrationEntity -> migrationEntity.applyManualChanges(manualChangesPerAnnotationId.getOrDefault(migrationEntity.getOldId(), Collections.emptyList()), @@ -147,6 +157,28 @@ public class RedactionLogToEntityLogMigrationService { } + private BaseAnnotation convertPendingDictChangesToLocal(BaseAnnotation baseAnnotation) { + + if (baseAnnotation.getProcessedDate() != null) { + return baseAnnotation; + } + + if (baseAnnotation.isLocal()) { + return baseAnnotation; + } + + if (baseAnnotation instanceof ManualResizeRedaction manualResizeRedaction) { + manualResizeRedaction.setAddToAllDossiers(false); + manualResizeRedaction.setUpdateDictionary(false); + } else if (baseAnnotation instanceof IdRemoval idRemoval) { + idRemoval.setRemoveFromAllDossiers(false); + idRemoval.setRemoveFromDictionary(false); + } + + return baseAnnotation; + } + + private long getNumberOfApprovedEntries(RedactionLog redactionLog, int numberOfPages) { return redactionLog.getRedactionLogEntry() 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 916ea70a..a08e09b4 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 @@ -178,7 +178,8 @@ public class MigrationIntegrationTest extends BuildDocumentIntegrationTest { TEST_DOSSIER_TEMPLATE_ID, manualRedactions, TEST_FILE_ID, - Collections.emptySet()); + Collections.emptySet(), + false); redactionStorageService.storeObject(TEST_DOSSIER_ID, TEST_FILE_ID, FileType.ENTITY_LOG, migratedEntityLog.getEntityLog()); assertEquals(mergedRedactionLog.getRedactionLogEntry().size(), migratedEntityLog.getEntityLog().getEntityLogEntry().size());