From 1d9903c3bf51698ecc130cbfb6c3fd362055502d Mon Sep 17 00:00:00 2001 From: Andrei Isvoran Date: Thu, 13 Jun 2024 12:21:11 +0300 Subject: [PATCH] RED-9140 - Add more information to changes --- .../service/EntityLogMergeService.java | 24 ++++++---- .../PendingDictionaryEntryFactory.java | 2 +- .../tests/ManualRedactionTest.java | 5 ++- .../analysislog/entitylog/ManualChange.java | 3 +- .../model/analysislog/entitylog/Position.java | 7 +++ .../model/annotations/ChangeFactory.java | 21 +-------- .../annotations/ManualChangeFactory.java | 8 ++-- .../shared/model/annotations/Rectangle.java | 1 - .../api/shared/model/utils/ChangeUtils.java | 44 +++++++++++++++++++ 9 files changed, 79 insertions(+), 36 deletions(-) create mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/utils/ChangeUtils.java diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java index 53ae086e2..159675208 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java @@ -48,6 +48,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations 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.dossiertemplate.type.DictionaryEntryType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.utils.ChangeUtils; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; import io.micrometer.observation.annotation.Observed; @@ -281,7 +282,7 @@ public class EntityLogMergeService { public EntityLogEntry buildEntityLogEntry(ManualRedactionEntry manualRedactionEntry, int analysisNumber, DossierEntity dossier) { List manualChanges = new ArrayList<>(); - manualChanges.add(ManualChangeFactory.toLocalManualChange(manualRedactionEntry)); + manualChanges.add(ManualChangeFactory.toLocalManualChange(manualRedactionEntry, 0); List changes = new ArrayList<>(); changes.add(ChangeFactory.toChange(ChangeType.ADDED, manualRedactionEntry.getRequestDate(), analysisNumber)); @@ -349,13 +350,15 @@ public class EntityLogMergeService { entityLogEntry.setState(EntryState.IGNORED); entityLogEntry.getEngines().add(Engine.MANUAL); - entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(idRemoval)); + entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(idRemoval, 0)); } public void mergeResizeRedaction(ManualResizeRedaction manualResizeRedaction, EntityLogEntry entityLogEntry, int analysisNumber) { List changes = new ArrayList<>(); + List currentPositions = entityLogEntry.getPositions(); + List newPositions = convertPositions(manualResizeRedaction.getPositions()); changes.add(ChangeFactory.toChange(ChangeType.RESIZED, manualResizeRedaction.getRequestDate(), analysisNumber, @@ -369,15 +372,20 @@ public class EntityLogMergeService { .oldValue(entityLogEntry.getTextBefore()) .newValue(manualResizeRedaction.getTextBefore()) .build(), - PropertyChange.builder().property("value").oldValue(entityLogEntry.getValue()).newValue(manualResizeRedaction.getValue()).build())); + PropertyChange.builder().property("value").oldValue(entityLogEntry.getValue()).newValue(manualResizeRedaction.getValue()).build(), + PropertyChange.builder() + .property("positions") + .oldValue(ChangeUtils.prettifyPositions(currentPositions)) + .newValue(ChangeUtils.prettifyPositions(newPositions)) + .build())); addChanges(entityLogEntry, changes); entityLogEntry.setTextAfter(manualResizeRedaction.getTextAfter()); entityLogEntry.setTextBefore(manualResizeRedaction.getTextBefore()); - entityLogEntry.setPositions(convertPositions(manualResizeRedaction.getPositions())); + entityLogEntry.setPositions(newPositions); entityLogEntry.setValue(manualResizeRedaction.getValue()); entityLogEntry.getEngines().add(Engine.MANUAL); - entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(manualResizeRedaction)); + entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(manualResizeRedaction, 0)); } @@ -407,7 +415,7 @@ public class EntityLogMergeService { entityLogEntry.setSection(manualLegalBasisChange.getSection()); entityLogEntry.setValue(manualLegalBasisChange.getValue()); entityLogEntry.getEngines().add(Engine.MANUAL); - entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(manualLegalBasisChange)); + entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(manualLegalBasisChange, 0)); } @@ -466,7 +474,7 @@ public class EntityLogMergeService { } addChanges(entityLogEntry, changes); - entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(recategorization)); + entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(recategorization, 0)); return null; } @@ -489,7 +497,7 @@ public class EntityLogMergeService { entityLogEntry.setState(newState); entityLogEntry.getEngines().add(Engine.MANUAL); addChanges(entityLogEntry, changes); - entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(forceRedaction)); + entityLogEntry.getManualChanges().add(ManualChangeFactory.toLocalManualChange(forceRedaction, 0)); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingDictionaryEntryFactory.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingDictionaryEntryFactory.java index 2aa23c265..79a09283f 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingDictionaryEntryFactory.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingDictionaryEntryFactory.java @@ -208,7 +208,7 @@ public class PendingDictionaryEntryFactory { public EntityLogEntry buildPendingImageRecategorizationEntry(ManualRecategorization manualChange, EntityLogEntry originalEntry) { - var manualChanges = List.of(ManualChangeFactory.toLocalManualChange(manualChange)); + var manualChanges = List.of(ManualChangeFactory.toLocalManualChange(manualChange, 0)); String reason = String.format("Image has been recategorized from %s to %s", originalEntry.getType(), manualChange.getType()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java index 3de46caef..2fadcf156 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java @@ -15,6 +15,7 @@ import static org.mockito.Mockito.when; import java.time.OffsetDateTime; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Set; @@ -2378,7 +2379,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .dictionaryEntry(false) .dossierDictionaryEntry(false) .excluded(false) - .changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now()))) + .changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now(), Collections.emptyMap()))) .build(); var entityLog = new EntityLog(1, 1, @@ -2447,7 +2448,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .dictionaryEntry(true) .dossierDictionaryEntry(false) .excluded(false) - .changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now()))) + .changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now(), Collections.emptyMap()))) .engines(Set.of(Engine.DICTIONARY)) .build(); var entityLog = new EntityLog(1, diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualChange.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualChange.java index 055267470..99dcf5c10 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualChange.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualChange.java @@ -25,12 +25,13 @@ public class ManualChange { private int processedAnalysisNumber; - public static ManualChange from(BaseAnnotation baseAnnotation) { + public static ManualChange from(BaseAnnotation baseAnnotation, int processedAnalysisNumber) { ManualChange manualChange = new ManualChange(); manualChange.processedDate = baseAnnotation.getProcessedDate(); manualChange.requestedDate = baseAnnotation.getRequestDate(); manualChange.userId = baseAnnotation.getUser(); + manualChange.processedAnalysisNumber = processedAnalysisNumber; return manualChange; } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/Position.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/Position.java index 85438685b..467f0d6ce 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/Position.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/Position.java @@ -61,4 +61,11 @@ public class Position { return rectangle[3]; } + + @Override + public String toString() { + + return "[" + x() + ", " + y() + ", " + w() + ", " + h() + ", " + pageNumber + "]"; + } + } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ChangeFactory.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ChangeFactory.java index 29ecbb4f4..9d73722d5 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ChangeFactory.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ChangeFactory.java @@ -6,6 +6,7 @@ import java.util.Arrays; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Change; 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.PropertyChange; +import com.iqser.red.service.persistence.service.v1.api.shared.model.utils.ChangeUtils; import lombok.experimental.UtilityClass; @@ -31,27 +32,9 @@ public class ChangeFactory { Arrays.stream(propertyChanges) .forEach(propertyChange -> { if (!propertyChange.getOldValue().equals(propertyChange.getNewValue())) { - change.addChange(propertyChange.getProperty(), buildVisualChange(propertyChange.getOldValue(), propertyChange.getNewValue())); + change.addChange(propertyChange.getProperty(), ChangeUtils.buildVisualChange(propertyChange.getOldValue(), propertyChange.getNewValue())); } }); } - - private String buildVisualChange(String oldValue, String newValue) { - - String result = oldValue + " -> " + newValue; - - if (result.length() > 200) { - if (oldValue.length() > 100) { - oldValue = oldValue.substring(0, 100) + "..."; - } - if (newValue.length() > 100) { - newValue = newValue.substring(0, 100) + "..."; - } - result = oldValue + " -> " + newValue; - } - - return result; - } - } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ManualChangeFactory.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ManualChangeFactory.java index 320c6f0b4..f850a548b 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ManualChangeFactory.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ManualChangeFactory.java @@ -20,10 +20,10 @@ import lombok.experimental.UtilityClass; @UtilityClass public class ManualChangeFactory { - public List toLocalManualChangeList(List manualChanges, boolean markAsProcessed) { + public List toLocalManualChangeList(List manualChanges, boolean markAsProcessed, int processedAnalysisNumber) { return manualChanges.stream() - .map(ManualChangeFactory::toLocalManualChange) + .map(manualChange -> toLocalManualChange(manualChange, processedAnalysisNumber)) .peek(manualChange -> { if (markAsProcessed) { manualChange.setProcessedDate(OffsetDateTime.now()); @@ -33,13 +33,13 @@ public class ManualChangeFactory { } - public ManualChange toLocalManualChange(BaseAnnotation baseAnnotation) { + public ManualChange toLocalManualChange(BaseAnnotation baseAnnotation, int processedAnalysisNumber) { if (!baseAnnotation.isLocal()) { throw new IllegalArgumentException(String.format("Manual change %s is not a local manual change", baseAnnotation)); } - ManualChange manualChange = ManualChange.from(baseAnnotation); + ManualChange manualChange = ManualChange.from(baseAnnotation, processedAnalysisNumber); if (baseAnnotation instanceof ManualRecategorization recategorization) { manualChange.withManualRedactionType(ManualRedactionType.RECATEGORIZE) .withChange("type", recategorization.getType()) diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/Rectangle.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/Rectangle.java index 6f7d607bf..e7f4394f6 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/Rectangle.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/Rectangle.java @@ -1,6 +1,5 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model.annotations; -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.Point; import lombok.AllArgsConstructor; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/utils/ChangeUtils.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/utils/ChangeUtils.java new file mode 100644 index 000000000..5224450ba --- /dev/null +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/utils/ChangeUtils.java @@ -0,0 +1,44 @@ +package com.iqser.red.service.persistence.service.v1.api.shared.model.utils; + +import java.util.List; +import java.util.stream.Collectors; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Position; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class ChangeUtils { + + public String buildVisualChange(String oldValue, String newValue) { + + String result = oldValue + " -> " + newValue; + String shortenedOldValue = oldValue; + String shortenedNewValue = oldValue; + + if (result.length() > 200) { + if (oldValue.length() > 100) { + shortenedOldValue = oldValue.substring(0, 100) + "..."; + } + if (newValue.length() > 100) { + shortenedNewValue = newValue.substring(0, 100) + "..."; + } + result = shortenedOldValue + " -> " + shortenedNewValue; + } + + return result; + } + + + public String prettifyPositions(List positions) { + + if (positions.size() == 1) { + return positions.get(0).toString(); + } else { + return positions.stream() + .map(Position::toString) + .collect(Collectors.joining(", ", "[", "]")); + } + } + +}