From 930ad5b25e3f230e08bb85d2db02d0ad3df232b1 Mon Sep 17 00:00:00 2001 From: Andrei Isvoran Date: Fri, 2 Feb 2024 11:23:08 +0100 Subject: [PATCH] RED-8347 - Add manual changes in entity log for removed entities --- .../service/EntityChangeLogService.java | 28 +++++++++++++++++-- .../service/EntityLogCreatorService.java | 4 +-- .../server/service/ManualChangeFactory.java | 2 +- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityChangeLogService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityChangeLogService.java index ef023fcb..4bdf8368 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityChangeLogService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityChangeLogService.java @@ -12,19 +12,26 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ChangeType; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryState; +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.IdRemoval; import io.micrometer.core.annotation.Timed; +import lombok.AccessLevel; import lombok.RequiredArgsConstructor; +import lombok.experimental.FieldDefaults; import lombok.extern.slf4j.Slf4j; @Slf4j @Service @RequiredArgsConstructor +@FieldDefaults(makeFinal=true, level= AccessLevel.PRIVATE) public class EntityChangeLogService { + ManualChangeFactory manualChangeFactory; + @Timed("redactmanager_computeChanges") - public boolean computeChanges(List previousEntityLogEntries, List newEntityLogEntries, int analysisNumber) { + public boolean computeChanges(List previousEntityLogEntries, List newEntityLogEntries, ManualRedactions manualRedactions, int analysisNumber) { var now = OffsetDateTime.now(); if (previousEntityLogEntries.isEmpty()) { @@ -49,13 +56,14 @@ public class EntityChangeLogService { entityLogEntry.getChanges().add(new Change(analysisNumber, changeType, now)); } } - addRemovedEntriesAsRemoved(previousEntityLogEntries, newEntityLogEntries, analysisNumber, now); + addRemovedEntriesAsRemoved(previousEntityLogEntries, newEntityLogEntries, manualRedactions, analysisNumber, now); return hasChanges; } - private static void addRemovedEntriesAsRemoved(List previousEntityLogEntries, + private void addRemovedEntriesAsRemoved(List previousEntityLogEntries, List newEntityLogEntries, + ManualRedactions manualRedactions, int analysisNumber, OffsetDateTime now) { @@ -65,10 +73,24 @@ public class EntityChangeLogService { .toList(); removedEntries.forEach(entry -> entry.getChanges().add(new Change(analysisNumber, ChangeType.REMOVED, now))); removedEntries.forEach(entry -> entry.setState(EntryState.REMOVED)); + removedEntries.forEach(entry -> addManualChangeForDictionaryRemovals(entry, manualRedactions)); newEntityLogEntries.addAll(removedEntries); } + private void addManualChangeForDictionaryRemovals(EntityLogEntry entry, ManualRedactions manualRedactions) { + + if (manualRedactions == null || manualRedactions.getIdsToRemove().isEmpty()) { + return; + } + + manualRedactions.getIdsToRemove().stream() + .filter(IdRemoval::isRemoveFromDictionary)// + .filter(removed -> removed.getAnnotationId().equals(entry.getId()))// + .findFirst()// + .ifPresent(idRemove -> entry.getManualChanges().add(manualChangeFactory.toManualChange(idRemove, false))); + } + private ChangeType calculateChangeType(EntryState state, EntryState previousState) { if (state.equals(previousState)) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java index 6da9525a..30eb13bb 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java @@ -77,7 +77,7 @@ public class EntityLogCreatorService { List previousExistingEntityLogEntries = getPreviousEntityLogEntries(analyzeRequest.getDossierId(), analyzeRequest.getFileId()); - entityChangeLogService.computeChanges(previousExistingEntityLogEntries, entityLogEntries, analyzeRequest.getAnalysisNumber()); + entityChangeLogService.computeChanges(previousExistingEntityLogEntries, entityLogEntries, analyzeRequest.getManualRedactions(), analyzeRequest.getAnalysisNumber()); return entityLog; } @@ -125,7 +125,7 @@ public class EntityLogCreatorService { .toList(); previousEntityLog.getEntityLogEntry().removeAll(previousEntriesFromReAnalyzedSections); - boolean hasChanges = entityChangeLogService.computeChanges(previousEntriesFromReAnalyzedSections, newEntityLogEntries, analyzeRequest.getAnalysisNumber()); + boolean hasChanges = entityChangeLogService.computeChanges(previousEntriesFromReAnalyzedSections, newEntityLogEntries, analyzeRequest.getManualRedactions(), analyzeRequest.getAnalysisNumber()); previousEntityLog.getEntityLogEntry().addAll(newEntityLogEntries); return updateVersionsAndReturnChanges(previousEntityLog, dictionaryVersion, analyzeRequest, hasChanges); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java index 0f03176a..e522d4f3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java @@ -24,7 +24,7 @@ public class ManualChangeFactory { } - private ManualChange toManualChange(BaseAnnotation baseAnnotation, boolean isHint) { + public ManualChange toManualChange(BaseAnnotation baseAnnotation, boolean isHint) { ManualChange manualChange = ManualChange.from(baseAnnotation); if (baseAnnotation instanceof ManualRecategorization imageRecategorization) {