Merge branch 'RED-7384' into 'master'

RED-7384: add useful fields to ManualRedactionEntry

Closes RED-7384

See merge request redactmanager/redaction-service!314
This commit is contained in:
Dominique Eifländer 2024-03-18 13:17:15 +01:00
commit 16963d64ee
12 changed files with 98 additions and 62 deletions

View File

@ -16,7 +16,7 @@ val layoutParserVersion = "0.96.0"
val jacksonVersion = "2.15.2" val jacksonVersion = "2.15.2"
val droolsVersion = "9.44.0.Final" val droolsVersion = "9.44.0.Final"
val pdfBoxVersion = "3.0.0" val pdfBoxVersion = "3.0.0"
val persistenceServiceVersion = "2.360.0" val persistenceServiceVersion = "2.366.0"
val springBootStarterVersion = "3.1.5" val springBootStarterVersion = "3.1.5"
configurations { configurations {

View File

@ -34,7 +34,6 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image;
import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType;
import com.iqser.red.service.redaction.v1.server.service.DictionaryService; import com.iqser.red.service.redaction.v1.server.service.DictionaryService;
import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService;
import com.iqser.red.service.redaction.v1.server.service.document.EntityEnrichmentService;
import com.iqser.red.service.redaction.v1.server.service.document.EntityFindingUtility; import com.iqser.red.service.redaction.v1.server.service.document.EntityFindingUtility;
import com.iqser.red.service.redaction.v1.server.service.document.EntityFromPrecursorCreationService; import com.iqser.red.service.redaction.v1.server.service.document.EntityFromPrecursorCreationService;
import com.iqser.red.service.redaction.v1.server.utils.IdBuilder; import com.iqser.red.service.redaction.v1.server.utils.IdBuilder;
@ -54,7 +53,6 @@ public class RedactionLogToEntityLogMigrationService {
private static final double MATCH_THRESHOLD = 10; private static final double MATCH_THRESHOLD = 10;
EntityFindingUtility entityFindingUtility; EntityFindingUtility entityFindingUtility;
EntityEnrichmentService entityEnrichmentService;
DictionaryService dictionaryService; DictionaryService dictionaryService;
ManualChangesApplicationService manualChangesApplicationService; ManualChangesApplicationService manualChangesApplicationService;
@ -67,8 +65,8 @@ public class RedactionLogToEntityLogMigrationService {
MigratedIds migratedIds = entitiesToMigrate.stream() MigratedIds migratedIds = entitiesToMigrate.stream()
.collect(new MigratedIdsCollector()); .collect(new MigratedIdsCollector());
applyManualChanges(entitiesToMigrate, manualRedactions);
log.info("applying manual changes to migrated entities for file {}", fileId); log.info("applying manual changes to migrated entities for file {}", fileId);
applyManualChanges(entitiesToMigrate, manualRedactions);
EntityLog entityLog = new EntityLog(); EntityLog entityLog = new EntityLog();
entityLog.setAnalysisNumber(redactionLog.getAnalysisNumber()); entityLog.setAnalysisNumber(redactionLog.getAnalysisNumber());

View File

@ -4,6 +4,7 @@ import static com.iqser.red.service.redaction.v1.server.service.EntityLogCreator
import static com.iqser.red.service.redaction.v1.server.service.EntityLogCreatorService.buildEntryType; import static com.iqser.red.service.redaction.v1.server.service.EntityLogCreatorService.buildEntryType;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.time.OffsetDateTime;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -20,6 +21,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.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.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.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.redactionlog.ManualRedactionType; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.ManualRedactionType;
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;
import com.iqser.red.service.redaction.v1.server.migration.MigrationMapper; import com.iqser.red.service.redaction.v1.server.migration.MigrationMapper;
@ -350,18 +352,8 @@ public final class MigrationEntity {
manualChanges.addAll(manualChangesToApply); manualChanges.addAll(manualChangesToApply);
manualChangesToApply.forEach(manualChange -> { manualChangesToApply.forEach(manualChange -> {
if (manualChange instanceof ManualResizeRedaction manualResizeRedaction && migratedEntity instanceof TextEntity textEntity) { if (manualChange instanceof ManualResizeRedaction manualResizeRedaction && migratedEntity instanceof TextEntity textEntity) {
// Due to the value in the old redaction log already being resized, there is no way to find the original entity ID and therefore to migrate the resize annotation correctly. manualResizeRedaction.setAnnotationId(newId);
// Instead, we add an add_locally change to the db. manualChangesApplicationService.resize(textEntity, manualResizeRedaction);
ManualResizeRedaction migratedManualResizeRedaction = ManualResizeRedaction.builder()
.positions(manualResizeRedaction.getPositions())
.annotationId(getNewId())
.updateDictionary(manualResizeRedaction.getUpdateDictionary())
.addToAllDossiers(manualResizeRedaction.isAddToAllDossiers())
.requestDate(manualResizeRedaction.getRequestDate())
.textAfter(manualResizeRedaction.getTextAfter())
.textBefore(manualResizeRedaction.getTextBefore())
.build();
manualChangesApplicationService.resize(textEntity, migratedManualResizeRedaction);
} else { } else {
migratedEntity.getManualOverwrite().addChange(manualChange); migratedEntity.getManualOverwrite().addChange(manualChange);
} }
@ -379,26 +371,28 @@ public final class MigrationEntity {
.findFirst() .findFirst()
.orElse(manualChanges.get(0)).getUser(); .orElse(manualChanges.get(0)).getUser();
var requestDate = manualChanges.stream() OffsetDateTime requestDate = manualChanges.stream()
.filter(mc -> mc instanceof ManualResizeRedaction) .filter(mc -> mc instanceof ManualResizeRedaction)
.findFirst() .findFirst()
.orElse(manualChanges.get(0)).getRequestDate(); .orElse(manualChanges.get(0)).getRequestDate();
return ManualRedactionEntry.builder() return ManualRedactionEntry.builder()
.annotationId(newId) .annotationId(newId)
.fileId(fileId) .fileId(fileId)
.user(user)
.requestDate(requestDate)
.type(redactionLogEntry.getType()) .type(redactionLogEntry.getType())
.value(redactionLogEntry.getValue()) .value(redactionLogEntry.getValue())
.reason(redactionLogEntry.getReason()) .reason(redactionLogEntry.getReason())
.legalBasis(redactionLogEntry.getLegalBasis()) .legalBasis(redactionLogEntry.getLegalBasis())
.section(redactionLogEntry.getSection()) .section(redactionLogEntry.getSection())
.requestDate(requestDate) .rectangle(false)
.addToDictionary(false) .addToDictionary(false)
.addToDossierDictionary(false) .addToDossierDictionary(false)
.rectangle(false)
.positions(buildPositions(migratedEntity)) .positions(buildPositions(migratedEntity))
.user(user) .textAfter(redactionLogEntry.getTextAfter())
.textBefore(redactionLogEntry.getTextBefore())
.dictionaryEntryType(DictionaryEntryType.ENTRY)
.build(); .build();
} }

View File

@ -58,7 +58,7 @@ public class EntityFindingUtility {
List<TextEntity> possibleEntities = entitiesWithSameValue.get(precursorEntity.getValue().toLowerCase(Locale.ENGLISH)); List<TextEntity> possibleEntities = entitiesWithSameValue.get(precursorEntity.getValue().toLowerCase(Locale.ENGLISH));
if (entityIdentifierValueNotFound(possibleEntities)) { if (entityIdentifierValueNotFound(possibleEntities)) {
log.warn("Entity could not be created with precursorEntity: {}, due to the value {} not being found anywhere.", precursorEntity, precursorEntity.getValue()); log.info("Entity could not be created with precursorEntity: {}, due to the value {} not being found anywhere.", precursorEntity, precursorEntity.getValue());
return Optional.empty(); return Optional.empty();
} }
@ -68,13 +68,13 @@ public class EntityFindingUtility {
.min(Comparator.comparingDouble(ClosestEntity::getDistance)); .min(Comparator.comparingDouble(ClosestEntity::getDistance));
if (optionalClosestEntity.isEmpty()) { if (optionalClosestEntity.isEmpty()) {
log.warn("No Entity with value {} found on page {}", precursorEntity.getValue(), precursorEntity.getEntityPosition()); log.info("No Entity with value {} found on page {}", precursorEntity.getValue(), precursorEntity.getEntityPosition());
return Optional.empty(); return Optional.empty();
} }
ClosestEntity closestEntity = optionalClosestEntity.get(); ClosestEntity closestEntity = optionalClosestEntity.get();
if (closestEntity.getDistance() > matchThreshold) { if (closestEntity.getDistance() > matchThreshold) {
log.warn("For entity {} on page {} with positions {} distance to closest found entity is {} and therefore higher than the threshold of {}", log.info("For entity {} on page {} with positions {} distance to closest found entity is {} and therefore higher than the threshold of {}",
precursorEntity.getValue(), precursorEntity.getValue(),
precursorEntity.getEntityPosition() precursorEntity.getEntityPosition()
.get(0).pageNumber(), .get(0).pageNumber(),

View File

@ -9,7 +9,6 @@ import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.imported.ImportedRedactions; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.imported.ImportedRedactions;
@ -23,29 +22,21 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNo
import com.iqser.red.service.redaction.v1.server.service.DictionaryService; import com.iqser.red.service.redaction.v1.server.service.DictionaryService;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.experimental.FieldDefaults; import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public class EntityFromPrecursorCreationService { public class EntityFromPrecursorCreationService {
static double MATCH_THRESHOLD = 10; // Is compared to the average sum of distances in pdf coordinates for each corner of the bounding box of the entities static double MATCH_THRESHOLD = 10; // Is compared to the average sum of distances in pdf coordinates for each corner of the bounding box of the entities
EntityFindingUtility entityFindingUtility; EntityFindingUtility entityFindingUtility;
EntityCreationService entityCreationService;
DictionaryService dictionaryService; DictionaryService dictionaryService;
@Autowired
public EntityFromPrecursorCreationService(EntityEnrichmentService entityEnrichmentService, DictionaryService dictionaryService, EntityFindingUtility entityFindingUtility) {
this.entityFindingUtility = entityFindingUtility;
entityCreationService = new EntityCreationService(entityEnrichmentService);
this.dictionaryService = dictionaryService;
}
public List<PrecursorEntity> createEntitiesIfFoundAndReturnNotFoundEntries(ManualRedactions manualRedactions, SemanticNode node, String dossierTemplateId) { public List<PrecursorEntity> createEntitiesIfFoundAndReturnNotFoundEntries(ManualRedactions manualRedactions, SemanticNode node, String dossierTemplateId) {
Set<IdRemoval> idRemovals = manualRedactions.getIdsToRemove(); Set<IdRemoval> idRemovals = manualRedactions.getIdsToRemove();

View File

@ -218,7 +218,7 @@ public class RedactionAcceptanceTest extends AbstractRedactionIntegrationTest {
private static IdRemoval buildIdRemoval(String id) { private static IdRemoval buildIdRemoval(String id) {
return IdRemoval.builder().annotationId(id).requestDate(OffsetDateTime.now()).fileId(TEST_FILE_ID).build(); return IdRemoval.builder().annotationId(id).user("user").requestDate(OffsetDateTime.now()).fileId(TEST_FILE_ID).build();
} }
} }

View File

@ -218,10 +218,12 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
ManualRedactions manualRedactions = ManualRedactions.builder() ManualRedactions manualRedactions = ManualRedactions.builder()
.resizeRedactions(Set.of(ManualResizeRedaction.builder() .resizeRedactions(Set.of(ManualResizeRedaction.builder()
.annotationId("c6be5277f5ee60dc3d83527798b7fe02") .annotationId("c6be5277f5ee60dc3d83527798b7fe02")
.fileId(TEST_FILE_ID)
.value("Dr. Alan") .value("Dr. Alan")
.positions(List.of(new Rectangle(236.8f, 182.90005f, 40.584f, 12.642f, 7))) .positions(List.of(new Rectangle(236.8f, 182.90005f, 40.584f, 12.642f, 7)))
.requestDate(OffsetDateTime.now()) .requestDate(OffsetDateTime.now())
.updateDictionary(false) .updateDictionary(false)
.user("user")
.build())) .build()))
.build(); .build();
@ -657,6 +659,7 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
.fileId("fileId") .fileId("fileId")
.type("signature") .type("signature")
.requestDate(OffsetDateTime.now()) .requestDate(OffsetDateTime.now())
.user("user")
.build())); .build()));
request.setManualRedactions(manualRedactions); request.setManualRedactions(manualRedactions);
@ -711,6 +714,7 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
.annotationId("308dab9015bfafd911568cffe0a7f7de") .annotationId("308dab9015bfafd911568cffe0a7f7de")
.fileId(TEST_FILE_ID) .fileId(TEST_FILE_ID)
.requestDate(OffsetDateTime.of(2022, 05, 23, 8, 30, 07, 475479, ZoneOffset.UTC)) .requestDate(OffsetDateTime.of(2022, 05, 23, 8, 30, 07, 475479, ZoneOffset.UTC))
.user("user")
.processedDate(OffsetDateTime.of(2022, 05, 23, 8, 30, 07, 483651, ZoneOffset.UTC)) .processedDate(OffsetDateTime.of(2022, 05, 23, 8, 30, 07, 483651, ZoneOffset.UTC))
.build()); .build());
@ -719,6 +723,7 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
.annotationId("0b56ea1a87c83f351df177315af94f0d") .annotationId("0b56ea1a87c83f351df177315af94f0d")
.fileId(TEST_FILE_ID) .fileId(TEST_FILE_ID)
.legalBasis("Something") .legalBasis("Something")
.user("user")
.requestDate(OffsetDateTime.of(2022, 05, 23, 9, 30, 15, 4653, ZoneOffset.UTC)) .requestDate(OffsetDateTime.of(2022, 05, 23, 9, 30, 15, 4653, ZoneOffset.UTC))
.processedDate(OffsetDateTime.of(2022, 05, 23, 9, 30, 15, 794, ZoneOffset.UTC)) .processedDate(OffsetDateTime.of(2022, 05, 23, 9, 30, 15, 794, ZoneOffset.UTC))
.build()); .build());
@ -727,6 +732,7 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
.add(IdRemoval.builder() .add(IdRemoval.builder()
.annotationId("0b56ea1a87c83f351df177315af94f0d") .annotationId("0b56ea1a87c83f351df177315af94f0d")
.fileId(TEST_FILE_ID) .fileId(TEST_FILE_ID)
.user("user")
.requestDate(OffsetDateTime.of(2022, 05, 23, 8, 30, 23, 961721, ZoneOffset.UTC)) .requestDate(OffsetDateTime.of(2022, 05, 23, 8, 30, 23, 961721, ZoneOffset.UTC))
.processedDate(OffsetDateTime.of(2022, 05, 23, 8, 30, 23, 96528, ZoneOffset.UTC)) .processedDate(OffsetDateTime.of(2022, 05, 23, 8, 30, 23, 96528, ZoneOffset.UTC))
.build()); .build());
@ -946,6 +952,7 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
.textBefore("") .textBefore("")
.updateDictionary(false) .updateDictionary(false)
.textAfter("") .textAfter("")
.user("user")
.build(); .build();
manualRedactions.getResizeRedactions().add(manualResizeRedaction); manualRedactions.getResizeRedactions().add(manualResizeRedaction);
@ -1033,12 +1040,14 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
manualRedactions.setIdsToRemove(Set.of(IdRemoval.builder() manualRedactions.setIdsToRemove(Set.of(IdRemoval.builder()
.annotationId("5b940b2cb401ed9f5be6fc24f6e77bcf") .annotationId("5b940b2cb401ed9f5be6fc24f6e77bcf")
.fileId("fileId") .fileId("fileId")
.user("user")
.processedDate(OffsetDateTime.now()) .processedDate(OffsetDateTime.now())
.requestDate(OffsetDateTime.now()) .requestDate(OffsetDateTime.now())
.build())); .build()));
manualRedactions.setForceRedactions(Set.of(ManualForceRedaction.builder() manualRedactions.setForceRedactions(Set.of(ManualForceRedaction.builder()
.annotationId("675eba69b0c2917de55462c817adaa05") .annotationId("675eba69b0c2917de55462c817adaa05")
.fileId("fileId") .fileId("fileId")
.user("user")
.legalBasis("Something") .legalBasis("Something")
.requestDate(OffsetDateTime.now()) .requestDate(OffsetDateTime.now())
.processedDate(OffsetDateTime.now()) .processedDate(OffsetDateTime.now())
@ -1249,6 +1258,7 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
.requestDate(OffsetDateTime.now()) .requestDate(OffsetDateTime.now())
.fileId(TEST_FILE_ID) .fileId(TEST_FILE_ID)
.legalBasis("Article 39(e)(2) of Regulation (EC) No 178/2002") .legalBasis("Article 39(e)(2) of Regulation (EC) No 178/2002")
.user("user")
.build())) .build()))
.build()); .build());
@ -1289,6 +1299,7 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
.requestDate(OffsetDateTime.now()) .requestDate(OffsetDateTime.now())
.fileId(TEST_FILE_ID) .fileId(TEST_FILE_ID)
.legalBasis("Article 39(e)(2) of Regulation (EC) No 178/2002") .legalBasis("Article 39(e)(2) of Regulation (EC) No 178/2002")
.user("user")
.build())) .build()))
.recategorizations(Set.of(ManualRecategorization.builder() .recategorizations(Set.of(ManualRecategorization.builder()
.annotationId("3029651d0842a625f2d23f8375c23600") .annotationId("3029651d0842a625f2d23f8375c23600")
@ -1296,6 +1307,7 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
.legalBasis("") .legalBasis("")
.requestDate(OffsetDateTime.now()) .requestDate(OffsetDateTime.now())
.fileId(TEST_FILE_ID) .fileId(TEST_FILE_ID)
.user("user")
.build())) .build()))
.build()); .build());
@ -1456,6 +1468,8 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
.resizeRedactions(Set.of(ManualResizeRedaction.builder() .resizeRedactions(Set.of(ManualResizeRedaction.builder()
.updateDictionary(true) .updateDictionary(true)
.annotationId(david.getId()) .annotationId(david.getId())
.fileId(TEST_FILE_ID)
.user("user")
.requestDate(OffsetDateTime.now()) .requestDate(OffsetDateTime.now())
.value("David Ksenia") .value("David Ksenia")
.positions(List.of(Rectangle.builder() .positions(List.of(Rectangle.builder()
@ -1483,7 +1497,14 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
private IdRemoval getIdRemoval(String id) { private IdRemoval getIdRemoval(String id) {
return IdRemoval.builder().annotationId(id).removeFromAllDossiers(false).removeFromDictionary(false).requestDate(OffsetDateTime.now()).build(); return IdRemoval.builder()
.annotationId(id)
.removeFromAllDossiers(false)
.fileId(TEST_FILE_ID)
.user("user")
.removeFromDictionary(false)
.requestDate(OffsetDateTime.now())
.build();
} }

View File

@ -181,6 +181,7 @@ public class ManualChangesEnd2EndTest extends AbstractRedactionIntegrationTest {
manualRedactions.getResizeRedactions() manualRedactions.getResizeRedactions()
.add(ManualResizeRedaction.builder() .add(ManualResizeRedaction.builder()
.annotationId(idToResize) .annotationId(idToResize)
.fileId(TEST_FILE_ID)
.value(expandedEntityKeyword) .value(expandedEntityKeyword)
.positions(List.of(Rectangle.builder().topLeftX(56.8f).topLeftY(454.664f).height(15.408f).width(493.62f).page(3).build(), .positions(List.of(Rectangle.builder().topLeftX(56.8f).topLeftY(454.664f).height(15.408f).width(493.62f).page(3).build(),
Rectangle.builder().topLeftX(56.8f).topLeftY(440.864f).height(15.408f).width(396f).page(3).build())) Rectangle.builder().topLeftX(56.8f).topLeftY(440.864f).height(15.408f).width(396f).page(3).build()))

View File

@ -54,6 +54,8 @@ public class ManualChangesIntegrationTest extends RulesIntegrationTest {
.get(0).getId(); .get(0).getId();
ManualResizeRedaction manualResizeRedaction = ManualResizeRedaction.builder() ManualResizeRedaction manualResizeRedaction = ManualResizeRedaction.builder()
.annotationId(initialId) .annotationId(initialId)
.fileId(TEST_FILE_ID)
.user("user")
.value(biggerEntity.getValue()) .value(biggerEntity.getValue())
.positions(toAnnotationRectangles(biggerEntity.getPositionsOnPagePerPage() .positions(toAnnotationRectangles(biggerEntity.getPositionsOnPagePerPage()
.get(0))) .get(0)))
@ -95,7 +97,13 @@ public class ManualChangesIntegrationTest extends RulesIntegrationTest {
String initialId = entity.getPositionsOnPagePerPage() String initialId = entity.getPositionsOnPagePerPage()
.get(0).getId(); .get(0).getId();
ManualForceRedaction manualForceRedaction = ManualForceRedaction.builder().annotationId(initialId).legalBasis("Something").requestDate(OffsetDateTime.now()).build(); ManualForceRedaction manualForceRedaction = ManualForceRedaction.builder()
.annotationId(initialId)
.fileId(TEST_FILE_ID)
.user("user")
.legalBasis("Something")
.requestDate(OffsetDateTime.now())
.build();
doAnalysis(document, List.of(manualForceRedaction)); doAnalysis(document, List.of(manualForceRedaction));
@ -131,7 +139,7 @@ public class ManualChangesIntegrationTest extends RulesIntegrationTest {
String initialId = entity.getPositionsOnPagePerPage() String initialId = entity.getPositionsOnPagePerPage()
.get(0).getId(); .get(0).getId();
IdRemoval idRemoval = IdRemoval.builder().annotationId(initialId).requestDate(OffsetDateTime.now()).build(); IdRemoval idRemoval = IdRemoval.builder().annotationId(initialId).requestDate(OffsetDateTime.now()).fileId(TEST_FILE_ID).user("user").build();
doAnalysis(document, List.of(idRemoval)); doAnalysis(document, List.of(idRemoval));
@ -159,8 +167,13 @@ public class ManualChangesIntegrationTest extends RulesIntegrationTest {
String initialId = entity.getPositionsOnPagePerPage() String initialId = entity.getPositionsOnPagePerPage()
.get(0).getId(); .get(0).getId();
IdRemoval idRemoval = IdRemoval.builder().annotationId(initialId).requestDate(OffsetDateTime.now()).build(); ManualForceRedaction manualForceRedaction = ManualForceRedaction.builder()
ManualForceRedaction manualForceRedaction = ManualForceRedaction.builder().annotationId(initialId).legalBasis("Something").requestDate(OffsetDateTime.now()).build(); .annotationId(initialId)
.legalBasis("Something")
.requestDate(OffsetDateTime.now())
.fileId(TEST_FILE_ID)
.user("user")
.build();
doAnalysis(document, List.of(manualForceRedaction)); doAnalysis(document, List.of(manualForceRedaction));

View File

@ -58,7 +58,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest {
.get(0).getId(); .get(0).getId();
// remove first // remove first
IdRemoval removal = IdRemoval.builder().requestDate(start).fileId(TEST_FILE_ID).annotationId(annotationId).build(); IdRemoval removal = IdRemoval.builder().requestDate(start).fileId(TEST_FILE_ID).user("user").annotationId(annotationId).build();
entity.getManualOverwrite().addChange(removal); entity.getManualOverwrite().addChange(removal);
assertTrue(entity.ignored()); assertTrue(entity.ignored());
assertFalse(entity.applied()); assertFalse(entity.applied());
@ -68,6 +68,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest {
ManualForceRedaction forceRedaction = ManualForceRedaction.builder() ManualForceRedaction forceRedaction = ManualForceRedaction.builder()
.requestDate(start.plusSeconds(1)) .requestDate(start.plusSeconds(1))
.fileId(TEST_FILE_ID) .fileId(TEST_FILE_ID)
.user("user")
.annotationId(annotationId) .annotationId(annotationId)
.legalBasis("coolio") .legalBasis("coolio")
.build(); .build();
@ -81,7 +82,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest {
.orElse(entity.getMatchedRule().getLegalBasis())); .orElse(entity.getMatchedRule().getLegalBasis()));
// remove again // remove again
IdRemoval removal2 = IdRemoval.builder().requestDate(start.plusSeconds(3)).fileId(TEST_FILE_ID).annotationId(annotationId).build(); IdRemoval removal2 = IdRemoval.builder().requestDate(start.plusSeconds(3)).fileId(TEST_FILE_ID).annotationId(annotationId).user("user").build();
entity.getManualOverwrite().addChange(removal2); entity.getManualOverwrite().addChange(removal2);
assertTrue(entity.ignored()); assertTrue(entity.ignored());
assertFalse(entity.applied()); assertFalse(entity.applied());
@ -91,6 +92,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest {
ManualForceRedaction forceRedaction2 = ManualForceRedaction.builder() ManualForceRedaction forceRedaction2 = ManualForceRedaction.builder()
.requestDate(start.plusSeconds(2)) .requestDate(start.plusSeconds(2))
.fileId(TEST_FILE_ID) .fileId(TEST_FILE_ID)
.user("user")
.annotationId(annotationId) .annotationId(annotationId)
.legalBasis("coolio") .legalBasis("coolio")
.build(); .build();
@ -108,6 +110,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest {
.annotationId(annotationId) .annotationId(annotationId)
.requestDate(start.plusSeconds(4)) .requestDate(start.plusSeconds(4))
.section(section) .section(section)
.fileId(TEST_FILE_ID)
.user("peter") .user("peter")
.value(value) .value(value)
.build(); .build();
@ -129,6 +132,8 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest {
ManualRecategorization imageRecategorizationRequest = ManualRecategorization.builder() ManualRecategorization imageRecategorizationRequest = ManualRecategorization.builder()
.type("type") .type("type")
.requestDate(start.plusSeconds(5)) .requestDate(start.plusSeconds(5))
.fileId(TEST_FILE_ID)
.user("user")
.annotationId(annotationId) .annotationId(annotationId)
.legalBasis("") .legalBasis("")
.build(); .build();
@ -164,7 +169,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest {
.get(0).getId(); .get(0).getId();
// remove first // remove first
IdRemoval removal = IdRemoval.builder().requestDate(start).fileId(TEST_FILE_ID).annotationId(annotationId).build(); IdRemoval removal = IdRemoval.builder().requestDate(start).fileId(TEST_FILE_ID).annotationId(annotationId).user("user").build();
entity.getManualOverwrite().addChange(removal); entity.getManualOverwrite().addChange(removal);
assertTrue(entity.ignored()); assertTrue(entity.ignored());
assertFalse(entity.applied()); assertFalse(entity.applied());
@ -175,6 +180,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest {
.requestDate(start.plusSeconds(1)) .requestDate(start.plusSeconds(1))
.fileId(TEST_FILE_ID) .fileId(TEST_FILE_ID)
.annotationId(annotationId) .annotationId(annotationId)
.user("user")
.legalBasis("coolio") .legalBasis("coolio")
.build(); .build();
entity.getManualOverwrite().addChange(forceRedaction); entity.getManualOverwrite().addChange(forceRedaction);

View File

@ -84,7 +84,7 @@ public class PrecursorEntityTest extends BuildDocumentIntegrationTest {
public void testFoundManualAddRedactionAndRemovedHasStateRemoved() { public void testFoundManualAddRedactionAndRemovedHasStateRemoved() {
DocumentAndEntity context = createFoundManualRedaction(); DocumentAndEntity context = createFoundManualRedaction();
IdRemoval removal = IdRemoval.builder().requestDate(OffsetDateTime.now()).build(); IdRemoval removal = IdRemoval.builder().annotationId("123").user("user").fileId(TEST_FILE_ID).requestDate(OffsetDateTime.now()).build();
context.entity().getManualOverwrite().addChange(removal); context.entity().getManualOverwrite().addChange(removal);
assertTrue(context.entity().removed()); assertTrue(context.entity().removed());
} }
@ -95,7 +95,7 @@ public class PrecursorEntityTest extends BuildDocumentIntegrationTest {
public void testNotFoundManualAddRedactionAndRemovedHasStateRemoved() { public void testNotFoundManualAddRedactionAndRemovedHasStateRemoved() {
DocumentAndEntity context = createNotFoundManualRedaction(); DocumentAndEntity context = createNotFoundManualRedaction();
IdRemoval removal = IdRemoval.builder().requestDate(OffsetDateTime.now()).build(); IdRemoval removal = IdRemoval.builder().fileId(TEST_FILE_ID).user("user").annotationId("123").requestDate(OffsetDateTime.now()).build();
context.entity().getManualOverwrite().addChange(removal); context.entity().getManualOverwrite().addChange(removal);
assertTrue(context.entity().removed()); assertTrue(context.entity().removed());
} }
@ -108,8 +108,11 @@ public class PrecursorEntityTest extends BuildDocumentIntegrationTest {
String value = "To: Syngenta Ltd. Jealotts Hill"; String value = "To: Syngenta Ltd. Jealotts Hill";
String type = DICTIONARY_AUTHOR; String type = DICTIONARY_AUTHOR;
ManualRedactionEntry manualRedactionEntry = ManualRedactionEntry.builder() ManualRedactionEntry manualRedactionEntry = ManualRedactionEntry.builder()
.annotationId("123")
.type(type) .type(type)
.value(value) .value(value)
.user("user")
.fileId(TEST_FILE_ID)
.reason("reason") .reason("reason")
.legalBasis("n-a") .legalBasis("n-a")
.section("n-a") .section("n-a")
@ -162,8 +165,11 @@ public class PrecursorEntityTest extends BuildDocumentIntegrationTest {
ManualRedactionEntry manualRedactionEntry = ManualRedactionEntry.builder() ManualRedactionEntry manualRedactionEntry = ManualRedactionEntry.builder()
.type("manual") .type("manual")
.annotationId("123")
.value(tempEntity.getValue()) .value(tempEntity.getValue())
.reason("reason") .reason("reason")
.user("user")
.fileId(TEST_FILE_ID)
.legalBasis("n-a") .legalBasis("n-a")
.section(tempEntity.getDeepestFullyContainingNode().toString()) .section(tempEntity.getDeepestFullyContainingNode().toString())
.rectangle(false) .rectangle(false)

View File

@ -8,6 +8,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import java.time.OffsetDateTime;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
@ -34,7 +35,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.iqser.red.commons.jackson.ObjectMapperFactory; import com.iqser.red.commons.jackson.ObjectMapperFactory;
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
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.Rectangle; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle;
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;
@ -480,26 +480,32 @@ public class UnprocessedChangesServiceTest extends AbstractRedactionIntegrationT
private static ManualResizeRedaction prepareManualSizeRedaction(String id, List<Rectangle> positions, String value) { private static ManualResizeRedaction prepareManualSizeRedaction(String id, List<Rectangle> positions, String value) {
ManualResizeRedaction manualResizeRedaction = new ManualResizeRedaction(); return ManualResizeRedaction.builder()
manualResizeRedaction.setAnnotationId(id); .annotationId(id)
manualResizeRedaction.setPositions(positions); .fileId("fileId")
manualResizeRedaction.setUpdateDictionary(false); .user("user")
manualResizeRedaction.setAddToAllDossiers(false); .positions(positions)
manualResizeRedaction.setValue(value); .updateDictionary(false)
return manualResizeRedaction; .addToAllDossiers(false)
.value(value)
.requestDate(OffsetDateTime.now())
.build();
} }
private static ManualRedactionEntry prepareManualRedactionEntry(String id, List<Rectangle> positions, String value) { private static ManualRedactionEntry prepareManualRedactionEntry(String id, List<Rectangle> positions, String value) {
ManualRedactionEntry manualRedactionEntry = new ManualRedactionEntry(); return ManualRedactionEntry.builder()
manualRedactionEntry.setAnnotationId(id); .annotationId(id)
manualRedactionEntry.setFileId("fileId"); .fileId("fileId")
manualRedactionEntry.setType("CBI_author"); .user("user")
manualRedactionEntry.setValue(value); .type("CBI_author")
manualRedactionEntry.setReason("Manual Redaction"); .value(value)
manualRedactionEntry.setPositions(positions); .reason("Manual Redaction")
return manualRedactionEntry; .processedDate(OffsetDateTime.now())
.requestDate(OffsetDateTime.now())
.positions(positions)
.build();
} }
} }