diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java index 3b80bc86d..d7c3308ef 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualRedactionEntryEntity.java @@ -49,13 +49,13 @@ public class ManualRedactionEntryEntity implements IBaseAnnotation { @Column private boolean rectangle; @Column - private boolean addToDictionary; + private boolean addToDictionary; //true, true @Column - private boolean addToAllDossiers; + private boolean addToAllDossiers; //true, false @Column @Deprecated - private boolean addToDossierDictionary; + private boolean addToDossierDictionary; //false, true @Column @Enumerated(EnumType.STRING) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingEntryFactory.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingEntryFactory.java index e027a9248..7114b8957 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingEntryFactory.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/PendingEntryFactory.java @@ -94,7 +94,7 @@ public class PendingEntryFactory { .endOffset(-1) .changes(Collections.emptyList()) .manualChanges(manualChanges) - .engines(new HashSet<>(Set.of(Engine.DICTIONARY))) + .engines(new HashSet<>(Set.of(manualRedactionEntry.isAddToDossierDictionary() ? Engine.DOSSIER_DICTIONARY : Engine.DICTIONARY))) .reference(Collections.emptySet()) .importedRedactionIntersections(Collections.emptySet()) .build(); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/AddRedactionPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/AddRedactionPersistenceService.java index c20d0bc32..d00fd4a59 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/AddRedactionPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/AddRedactionPersistenceService.java @@ -42,6 +42,7 @@ public class AddRedactionPersistenceService { manualRedactionEntry.setTypeId(addRedactionRequest.getDictionaryTypeId()); manualRedactionEntry.setDictionaryEntryType(addRedactionRequest.getDictionaryEntryType()); manualRedactionEntry.setSection(addRedactionRequest.getSection()); + manualRedactionEntry.setAddToDossierDictionary(manualRedactionEntry.isAddToDictionary() && !manualRedactionEntry.isAddToAllDossiers()); return manualRedactionRepository.saveAndFlush(manualRedactionEntry); 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 e3bf2446b..787498767 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 @@ -19,10 +19,12 @@ import static org.mockito.Mockito.when; import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; @@ -57,6 +59,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.RecategorizationPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.queue.SearchTermOccurrencesResponseReceiver; import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionRequest; +import com.iqser.red.service.persistence.management.v1.processor.utils.DossierMapper; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult; import com.iqser.red.service.persistence.service.v1.api.shared.model.BulkLocalResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel; @@ -91,6 +94,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.Remo import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequestModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ResizeRedactionRequestModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Point; +import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter; import feign.FeignException; @@ -4090,4 +4094,66 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertEquals(allManualRedactions.getRecategorizations().size(), 1); } + @Test + public void testPendingEntryFactoryEngineBasedOnAddToDossierDictionary() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + var type = typeProvider.testAndProvideType(dossierTemplate, null, "typeEngineTest", false); + assertThat(type.isDossierDictionaryOnly()).isFalse(); + + AddRedactionRequestModel addRedactionAllDossiers = AddRedactionRequestModel.builder() + .positions(List.of(Rectangle.builder().topLeftX(10).topLeftY(10).width(50).height(50).page(1).build())) + .section("Test Section") + .addToDictionary(true) + .addToAllDossiers(true) + .type(type.getType()) + .reason("Adding to all dossiers") + .value("TestValueAllDossiers") + .legalBasis("Legal Basis") + .sourceId("SourceId1") + .build(); + + manualRedactionClient.addRedactionBulk(dossier.getId(), file.getId(), Set.of(addRedactionAllDossiers)); + + AddRedactionRequestModel addRedactionSingleDossier = AddRedactionRequestModel.builder() + .positions(List.of(Rectangle.builder().topLeftX(20).topLeftY(20).width(30).height(30).page(2).build())) + .section("Test Section Single Dossier") + .addToDictionary(true) + .addToAllDossiers(false) + .type(type.getType()) + .reason("Adding to single dossier") + .value("TestValueSingleDossier") + .legalBasis("Legal Basis") + .sourceId("SourceId2") + .build(); + + manualRedactionClient.addRedactionBulk(dossier.getId(), file.getId(), Set.of(addRedactionSingleDossier)); + + var allManualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId(), true, true); + + DossierEntity dossierEntity = MagicConverter.convert(dossier, DossierEntity.class); + EntityLog updatedEntityLog = entityLogMergeService.mergeEntityLog( + allManualRedactions, + new EntityLog(), + dossierEntity + ); + + var entityLogEntries = updatedEntityLog.getEntityLogEntry(); + assertThat(entityLogEntries).hasSize(2); + + for (EntityLogEntry entry : entityLogEntries) { + if (entry.getValue().equals("TestValueAllDossiers")) { + // Should have Engine.DICTIONARY + assertThat(entry.getEngines()).containsExactlyInAnyOrder(Engine.DICTIONARY); + } else if (entry.getValue().equals("TestValueSingleDossier")) { + // Should have Engine.DOSSIER_DICTIONARY + assertThat(entry.getEngines()).containsExactlyInAnyOrder(Engine.DOSSIER_DICTIONARY); + } else { + throw new AssertionError("Unexpected EntityLogEntry value: " + entry.getValue()); + } + } + } }