From 097bc34568a431494a324ba18764bc7c228f12a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20Sch=C3=BCttler?= Date: Tue, 26 Mar 2024 10:00:07 +0100 Subject: [PATCH] RED-7384: migration fixes --- .../redaction/v1/model/MigrationRequest.java | 11 +++++++ .../migration/MigrationMessageReceiver.java | 3 +- ...dactionLogToEntityLogMigrationService.java | 30 ++++++++++++------- .../v1/server/model/MigrationEntity.java | 16 +++++----- .../v1/server/MigrationIntegrationTest.java | 3 +- 5 files changed, 43 insertions(+), 20 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 316fa2b1..6eb0b640 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 @@ -1,11 +1,15 @@ package com.iqser.red.service.redaction.v1.model; +import java.util.Collections; +import java.util.Set; + import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import lombok.NonNull; @Data @Builder @@ -13,9 +17,16 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class MigrationRequest { + @NonNull String dossierTemplateId; + @NonNull String dossierId; + @NonNull String fileId; + @NonNull ManualRedactions manualRedactions; + @NonNull + @Builder.Default + Set entitiesWithComments = Collections.emptySet(); } 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 740d4116..b9b8e9ae 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 @@ -67,7 +67,8 @@ public class MigrationMessageReceiver { document, migrationRequest.getDossierTemplateId(), migrationRequest.getManualRedactions(), - migrationRequest.getFileId()); + migrationRequest.getFileId(), + migrationRequest.getEntitiesWithComments()); 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 681b1159..dc5e1fac 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 @@ -8,6 +8,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -57,7 +58,12 @@ public class RedactionLogToEntityLogMigrationService { ManualChangesApplicationService manualChangesApplicationService; - public MigratedEntityLog migrate(RedactionLog redactionLog, Document document, String dossierTemplateId, ManualRedactions manualRedactions, String fileId) { + public MigratedEntityLog migrate(RedactionLog redactionLog, + Document document, + String dossierTemplateId, + ManualRedactions manualRedactions, + String fileId, + Set entitiesWithComments) { log.info("Migrating entities for file {}", fileId); List entitiesToMigrate = calculateMigrationEntitiesFromRedactionLog(redactionLog, document, dossierTemplateId, fileId); @@ -89,15 +95,14 @@ public class RedactionLogToEntityLogMigrationService { if (getNumberOfApprovedEntries(redactionLog, document.getNumberOfPages()) != entityLog.getEntityLogEntry().size()) { String message = String.format("Not all entities have been found during the migration redactionLog has %d entries and new entityLog %d", - redactionLog.getRedactionLogEntry() - .size(), + redactionLog.getRedactionLogEntry().size(), entityLog.getEntityLogEntry().size()); log.error(message); throw new AssertionError(message); } MigratedIds idsToMigrateInDb = entitiesToMigrate.stream() - .filter(MigrationEntity::hasManualChangesOrComments) + .filter(migrationEntity -> migrationEntity.hasManualChangesOrComments(entitiesWithComments)) .filter(m -> !m.getOldId().equals(m.getNewId())) .collect(new MigratedIdsCollector()); @@ -136,7 +141,10 @@ public class RedactionLogToEntityLogMigrationService { private long getNumberOfApprovedEntries(RedactionLog redactionLog, int numberOfPages) { - return redactionLog.getRedactionLogEntry().stream().filter(redactionLogEntry -> isOnExistingPage(redactionLogEntry, numberOfPages)).collect(Collectors.toList()).size(); + return redactionLog.getRedactionLogEntry() + .stream() + .filter(redactionLogEntry -> isOnExistingPage(redactionLogEntry, numberOfPages)) + .count(); } @@ -288,17 +296,19 @@ public class RedactionLogToEntityLogMigrationService { } + private boolean isOnExistingPage(RedactionLogEntry redactionLogEntry, int numberOfPages) { - private boolean isOnExistingPage(RedactionLogEntry redactionLogEntry, int numberOfPages){ - var pages = redactionLogEntry.getPositions().stream().map(Rectangle::getPage).collect(Collectors.toSet()); + var pages = redactionLogEntry.getPositions() + .stream() + .map(Rectangle::getPage) + .collect(Collectors.toSet()); - for (int page: pages){ - if(page > numberOfPages){ + for (int page : pages) { + if (page > numberOfPages) { return false; } } return true; } - } 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 e8c1712a..1eb5bcf0 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 @@ -194,9 +194,6 @@ public final class MigrationEntity { entityLogEntry.setReference(migrateSetOfIds(redactionLogEntry.getReference(), oldToNewIdMapping)); entityLogEntry.setImportedRedactionIntersections(migrateSetOfIds(redactionLogEntry.getImportedRedactionIntersections(), oldToNewIdMapping)); entityLogEntry.setEngines(MigrationMapper.getMigratedEngines(redactionLogEntry)); - if (redactionLogEntry.getLegalBasis() != null) { - entityLogEntry.setLegalBasis(redactionLogEntry.getLegalBasis()); - } if (entityLogEntry.getEntryType().equals(EntryType.HINT) && lastManualChangeIsRemoveLocally(entityLogEntry)) { entityLogEntry.setState(EntryState.IGNORED); @@ -236,7 +233,8 @@ public final class MigrationEntity { .value(image.getValue()) .type(imageType) .reason(image.buildReasonWithManualChangeDescriptions()) - .legalBasis(image.legalBasis()) + .legalBasis(image.getManualOverwrite().getLegalBasis() + .orElse(redactionLogEntry.getLegalBasis())) .matchedRule(image.getMatchedRule().getRuleIdentifier().toString()) .dictionaryEntry(false) .positions(positions) @@ -259,7 +257,8 @@ public final class MigrationEntity { return EntityLogEntry.builder() .id(precursorEntity.getId()) .reason(precursorEntity.buildReasonWithManualChangeDescriptions()) - .legalBasis(precursorEntity.legalBasis()) + .legalBasis(precursorEntity.getManualOverwrite().getLegalBasis() + .orElse(redactionLogEntry.getLegalBasis())) .value(precursorEntity.value()) .type(precursorEntity.type()) .state(buildEntryState(precursorEntity)) @@ -293,7 +292,8 @@ public final class MigrationEntity { .id(entity.getId()) .positions(rectanglesPerLine) .reason(entity.buildReasonWithManualChangeDescriptions()) - .legalBasis(entity.legalBasis()) + .legalBasis(entity.getManualOverwrite().getLegalBasis() + .orElse(redactionLogEntry.getLegalBasis())) .value(entity.getManualOverwrite().getValue() .orElse(entity.getMatchedRule().isWriteValueWithLineBreaks() ? entity.getValueWithLineBreaks() : entity.getValue())) .type(entity.type()) @@ -336,11 +336,11 @@ public final class MigrationEntity { } - public boolean hasManualChangesOrComments() { + public boolean hasManualChangesOrComments(Set entitiesWithComments) { return !(redactionLogEntry.getManualChanges() == null || redactionLogEntry.getManualChanges().isEmpty()) || // !(redactionLogEntry.getComments() == null || redactionLogEntry.getComments().isEmpty()) // - || hasManualChanges(); + || hasManualChanges() || entitiesWithComments.contains(oldId); } 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 e3b704cc..916ea70a 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 @@ -177,7 +177,8 @@ public class MigrationIntegrationTest extends BuildDocumentIntegrationTest { document, TEST_DOSSIER_TEMPLATE_ID, manualRedactions, - TEST_FILE_ID); + TEST_FILE_ID, + Collections.emptySet()); redactionStorageService.storeObject(TEST_DOSSIER_ID, TEST_FILE_ID, FileType.ENTITY_LOG, migratedEntityLog.getEntityLog()); assertEquals(mergedRedactionLog.getRedactionLogEntry().size(), migratedEntityLog.getEntityLog().getEntityLogEntry().size());