Merge branch 'RED-7384' into 'release/4.244.x'
RED-7384: handle pending dict application in redaction-service instead of persistence See merge request redactmanager/redaction-service!356
This commit is contained in:
commit
72f324bb11
@ -23,6 +23,8 @@ public class MigrationRequest {
|
|||||||
String dossierId;
|
String dossierId;
|
||||||
@NonNull
|
@NonNull
|
||||||
String fileId;
|
String fileId;
|
||||||
|
|
||||||
|
boolean fileIsApproved;
|
||||||
@NonNull
|
@NonNull
|
||||||
ManualRedactions manualRedactions;
|
ManualRedactions manualRedactions;
|
||||||
@NonNull
|
@NonNull
|
||||||
|
|||||||
@ -68,7 +68,8 @@ public class MigrationMessageReceiver {
|
|||||||
migrationRequest.getDossierTemplateId(),
|
migrationRequest.getDossierTemplateId(),
|
||||||
migrationRequest.getManualRedactions(),
|
migrationRequest.getManualRedactions(),
|
||||||
migrationRequest.getFileId(),
|
migrationRequest.getFileId(),
|
||||||
migrationRequest.getEntitiesWithComments());
|
migrationRequest.getEntitiesWithComments(),
|
||||||
|
migrationRequest.isFileIsApproved());
|
||||||
|
|
||||||
log.info("Storing migrated entityLog and ids to migrate in DB for file {}", migrationRequest.getFileId());
|
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());
|
redactionStorageService.storeObject(migrationRequest.getDossierId(), migrationRequest.getFileId(), FileType.ENTITY_LOG, migratedEntityLog.getEntityLog());
|
||||||
|
|||||||
@ -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.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.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.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.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.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.RedactionLog;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry;
|
||||||
@ -63,7 +65,8 @@ public class RedactionLogToEntityLogMigrationService {
|
|||||||
String dossierTemplateId,
|
String dossierTemplateId,
|
||||||
ManualRedactions manualRedactions,
|
ManualRedactions manualRedactions,
|
||||||
String fileId,
|
String fileId,
|
||||||
Set<String> entitiesWithComments) {
|
Set<String> entitiesWithComments,
|
||||||
|
boolean fileIsApproved) {
|
||||||
|
|
||||||
log.info("Migrating entities for file {}", fileId);
|
log.info("Migrating entities for file {}", fileId);
|
||||||
List<MigrationEntity> entitiesToMigrate = calculateMigrationEntitiesFromRedactionLog(redactionLog, document, dossierTemplateId, fileId);
|
List<MigrationEntity> entitiesToMigrate = calculateMigrationEntitiesFromRedactionLog(redactionLog, document, dossierTemplateId, fileId);
|
||||||
@ -72,7 +75,7 @@ public class RedactionLogToEntityLogMigrationService {
|
|||||||
.collect(new MigratedIdsCollector());
|
.collect(new MigratedIdsCollector());
|
||||||
|
|
||||||
log.info("applying manual changes to migrated entities for file {}", fileId);
|
log.info("applying manual changes to migrated entities for file {}", fileId);
|
||||||
applyLocalProcessedManualChanges(entitiesToMigrate, manualRedactions);
|
applyLocalProcessedManualChanges(entitiesToMigrate, manualRedactions, fileIsApproved);
|
||||||
|
|
||||||
EntityLog entityLog = new EntityLog();
|
EntityLog entityLog = new EntityLog();
|
||||||
entityLog.setAnalysisNumber(redactionLog.getAnalysisNumber());
|
entityLog.setAnalysisNumber(redactionLog.getAnalysisNumber());
|
||||||
@ -123,22 +126,29 @@ public class RedactionLogToEntityLogMigrationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void applyLocalProcessedManualChanges(List<MigrationEntity> entitiesToMigrate, ManualRedactions manualRedactions) {
|
private void applyLocalProcessedManualChanges(List<MigrationEntity> entitiesToMigrate, ManualRedactions manualRedactions, boolean fileIsApproved) {
|
||||||
|
|
||||||
if (manualRedactions == null) {
|
if (manualRedactions == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Map<String, List<BaseAnnotation>> manualChangesPerAnnotationId;
|
||||||
|
|
||||||
Map<String, List<BaseAnnotation>> manualChangesPerAnnotationId = Stream.of(manualRedactions.getIdsToRemove(),
|
if (fileIsApproved) {
|
||||||
manualRedactions.getEntriesToAdd(),
|
manualChangesPerAnnotationId = manualRedactions.buildAll()
|
||||||
manualRedactions.getForceRedactions(),
|
.stream()
|
||||||
manualRedactions.getResizeRedactions(),
|
.filter(manualChange -> (manualChange.getProcessedDate() != null && manualChange.isLocal()) //
|
||||||
manualRedactions.getLegalBasisChanges(),
|
// unprocessed dict change of type IdRemoval or ManualResize must be applied for approved documents
|
||||||
manualRedactions.getRecategorizations())
|
|| (manualChange.getProcessedDate() == null && !manualChange.isLocal() //
|
||||||
.flatMap(Collection::stream)
|
&& (manualChange instanceof IdRemoval || manualChange instanceof ManualResizeRedaction)))
|
||||||
.filter(manualChange -> manualChange.getProcessedDate() != null)
|
.map(this::convertPendingDictChangesToLocal)
|
||||||
.filter(BaseAnnotation::isLocal)
|
.collect(Collectors.groupingBy(BaseAnnotation::getAnnotationId));
|
||||||
.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(),
|
entitiesToMigrate.forEach(migrationEntity -> migrationEntity.applyManualChanges(manualChangesPerAnnotationId.getOrDefault(migrationEntity.getOldId(),
|
||||||
Collections.emptyList()),
|
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) {
|
private long getNumberOfApprovedEntries(RedactionLog redactionLog, int numberOfPages) {
|
||||||
|
|
||||||
return redactionLog.getRedactionLogEntry()
|
return redactionLog.getRedactionLogEntry()
|
||||||
|
|||||||
@ -178,7 +178,8 @@ public class MigrationIntegrationTest extends BuildDocumentIntegrationTest {
|
|||||||
TEST_DOSSIER_TEMPLATE_ID,
|
TEST_DOSSIER_TEMPLATE_ID,
|
||||||
manualRedactions,
|
manualRedactions,
|
||||||
TEST_FILE_ID,
|
TEST_FILE_ID,
|
||||||
Collections.emptySet());
|
Collections.emptySet(),
|
||||||
|
false);
|
||||||
|
|
||||||
redactionStorageService.storeObject(TEST_DOSSIER_ID, TEST_FILE_ID, FileType.ENTITY_LOG, migratedEntityLog.getEntityLog());
|
redactionStorageService.storeObject(TEST_DOSSIER_ID, TEST_FILE_ID, FileType.ENTITY_LOG, migratedEntityLog.getEntityLog());
|
||||||
assertEquals(mergedRedactionLog.getRedactionLogEntry().size(), migratedEntityLog.getEntityLog().getEntityLogEntry().size());
|
assertEquals(mergedRedactionLog.getRedactionLogEntry().size(), migratedEntityLog.getEntityLog().getEntityLogEntry().size());
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user