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:
commit
16963d64ee
@ -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 {
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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(),
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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()))
|
||||||
|
|||||||
@ -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));
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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. Jealott’s Hill";
|
String value = "To: Syngenta Ltd. Jealott’s 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)
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user