diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java index b8c2988c..6b97870d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java @@ -41,6 +41,7 @@ import org.kie.api.builder.KieBuilder; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieModule; import org.kie.api.runtime.KieContainer; +import org.mockito.stubbing.Answer; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -90,6 +91,7 @@ public class RedactionIntegrationTest { private static final String DOSSIER_REDACTIONS = "dossier_redactions"; private static final String IMPORTED_REDACTION = "imported_redaction"; private static final String PII = "PII"; + private static final String ROTATE_SIMPLE = "RotateSimple"; @Autowired private RedactionController redactionController; @@ -217,25 +219,26 @@ public class RedactionIntegrationTest { private void mockDictionaryCalls(Long version) { - when(dictionaryClient.getDictionaryForType(VERTEBRATE + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(VERTEBRATE, false)); - when(dictionaryClient.getDictionaryForType(ADDRESS + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(ADDRESS, false)); - when(dictionaryClient.getDictionaryForType(AUTHOR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(AUTHOR, false)); - when(dictionaryClient.getDictionaryForType(SPONSOR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(SPONSOR, false)); - when(dictionaryClient.getDictionaryForType(NO_REDACTION_INDICATOR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(NO_REDACTION_INDICATOR, false)); - when(dictionaryClient.getDictionaryForType(REDACTION_INDICATOR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(REDACTION_INDICATOR, false)); - when(dictionaryClient.getDictionaryForType(HINT_ONLY + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(HINT_ONLY, false)); - when(dictionaryClient.getDictionaryForType(MUST_REDACT + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(MUST_REDACT, false)); - when(dictionaryClient.getDictionaryForType(PUBLISHED_INFORMATION + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(PUBLISHED_INFORMATION, false)); - when(dictionaryClient.getDictionaryForType(TEST_METHOD + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(TEST_METHOD, false)); - when(dictionaryClient.getDictionaryForType(PII + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(PII, false)); - when(dictionaryClient.getDictionaryForType(PURITY + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(PURITY, false)); - when(dictionaryClient.getDictionaryForType(IMAGE + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(IMAGE, false)); - when(dictionaryClient.getDictionaryForType(OCR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(OCR, false)); - when(dictionaryClient.getDictionaryForType(LOGO + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(LOGO, false)); - when(dictionaryClient.getDictionaryForType(SIGNATURE + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(SIGNATURE, false)); - when(dictionaryClient.getDictionaryForType(FORMULA + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(FORMULA, false)); - when(dictionaryClient.getDictionaryForType(DOSSIER_REDACTIONS + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(DOSSIER_REDACTIONS, true)); - when(dictionaryClient.getDictionaryForType(IMPORTED_REDACTION + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).thenReturn(getDictionaryResponse(IMPORTED_REDACTION, true)); + when(dictionaryClient.getDictionaryForType(VERTEBRATE + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(VERTEBRATE, false)); + when(dictionaryClient.getDictionaryForType(ADDRESS + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(ADDRESS, false)); + when(dictionaryClient.getDictionaryForType(AUTHOR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(AUTHOR, false)); + when(dictionaryClient.getDictionaryForType(SPONSOR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(SPONSOR, false)); + when(dictionaryClient.getDictionaryForType(NO_REDACTION_INDICATOR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(NO_REDACTION_INDICATOR, false)); + when(dictionaryClient.getDictionaryForType(REDACTION_INDICATOR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(REDACTION_INDICATOR, false)); + when(dictionaryClient.getDictionaryForType(HINT_ONLY + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(HINT_ONLY, false)); + when(dictionaryClient.getDictionaryForType(MUST_REDACT + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(MUST_REDACT, false)); + when(dictionaryClient.getDictionaryForType(PUBLISHED_INFORMATION + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(PUBLISHED_INFORMATION, false)); + when(dictionaryClient.getDictionaryForType(TEST_METHOD + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(TEST_METHOD, false)); + when(dictionaryClient.getDictionaryForType(PII + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(PII, false)); + when(dictionaryClient.getDictionaryForType(PURITY + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(PURITY, false)); + when(dictionaryClient.getDictionaryForType(IMAGE + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(IMAGE, false)); + when(dictionaryClient.getDictionaryForType(OCR + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(OCR, false)); + when(dictionaryClient.getDictionaryForType(LOGO + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(LOGO, false)); + when(dictionaryClient.getDictionaryForType(SIGNATURE + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(SIGNATURE, false)); + when(dictionaryClient.getDictionaryForType(FORMULA + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(FORMULA, false)); + when(dictionaryClient.getDictionaryForType(ROTATE_SIMPLE + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(ROTATE_SIMPLE, false)); + when(dictionaryClient.getDictionaryForType(DOSSIER_REDACTIONS + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(DOSSIER_REDACTIONS, true)); + when(dictionaryClient.getDictionaryForType(IMPORTED_REDACTION + ":" + TEST_DOSSIER_TEMPLATE_ID, version)).then((Answer) invocation -> getDictionaryResponse(IMPORTED_REDACTION, true)); } @@ -851,6 +854,33 @@ public class RedactionIntegrationTest { System.out.println("numberOfPages: " + result.getNumberOfPages()); } + @Test + public void testRotationsSimple() throws IOException { + loadOnlyDictionaryForSimpleFile(); + mockDictionaryCalls(null); + mockDictionaryCalls(0L); + + System.out.println("testTableRedaction"); + long start = System.currentTimeMillis(); + + AnalyzeRequest request = prepareStorage("files/new/RotateTestFileSimple.pdf"); + analyzeService.analyzeDocumentStructure(new StructureAnalyzeRequest(request.getDossierId(), request.getFileId())); + AnalyzeResult result = analyzeService.analyze(request); + + AnnotateResponse annotateResponse = annotationService.annotate(AnnotateRequest.builder() + .dossierId(TEST_DOSSIER_ID) + .fileId(TEST_FILE_ID) + .build()); + + try (FileOutputStream fileOutputStream = new FileOutputStream(OsUtils.getTemporaryDirectory() + "/AnnotatedSimple.pdf")) { + fileOutputStream.write(annotateResponse.getDocument()); + } + long end = System.currentTimeMillis(); + + System.out.println("duration: " + (end - start)); + System.out.println("numberOfPages: " + result.getNumberOfPages()); + } + @Test public void testFindDictionaryEntryInResizedEntryPosition() throws IOException { @@ -1474,6 +1504,15 @@ public class RedactionIntegrationTest { } + private void loadOnlyDictionaryForSimpleFile() { + dictionary.clear(); + dictionary.computeIfAbsent(ROTATE_SIMPLE, v -> new ArrayList<>()) + .addAll(ResourceLoader.load("dictionaries/RotateTestFileSimple.txt") + .stream() + .map(this::cleanDictionaryEntry) + .collect(Collectors.toSet())); + } + private static String loadFromClassPath(String path) { @@ -1532,6 +1571,7 @@ public class RedactionIntegrationTest { typeColorMap.put(FORMULA, "#ffe187"); typeColorMap.put(SIGNATURE, "#ffe187"); typeColorMap.put(IMPORTED_REDACTION, "#fcfbe6"); + typeColorMap.put(ROTATE_SIMPLE, "#66ccff"); hintTypeMap.put(VERTEBRATE, true); hintTypeMap.put(ADDRESS, false); @@ -1552,6 +1592,7 @@ public class RedactionIntegrationTest { hintTypeMap.put(SIGNATURE, false); hintTypeMap.put(DOSSIER_REDACTIONS, false); hintTypeMap.put(IMPORTED_REDACTION, false); + hintTypeMap.put(ROTATE_SIMPLE, false); caseInSensitiveMap.put(VERTEBRATE, true); caseInSensitiveMap.put(ADDRESS, false); @@ -1572,6 +1613,7 @@ public class RedactionIntegrationTest { caseInSensitiveMap.put(FORMULA, true); caseInSensitiveMap.put(DOSSIER_REDACTIONS, false); caseInSensitiveMap.put(IMPORTED_REDACTION, false); + caseInSensitiveMap.put(ROTATE_SIMPLE, true); recommendationTypeMap.put(VERTEBRATE, false); recommendationTypeMap.put(ADDRESS, false); @@ -1592,6 +1634,7 @@ public class RedactionIntegrationTest { recommendationTypeMap.put(LOGO, false); recommendationTypeMap.put(DOSSIER_REDACTIONS, false); recommendationTypeMap.put(IMPORTED_REDACTION, false); + recommendationTypeMap.put(ROTATE_SIMPLE, false); rankTypeMap.put(PURITY, 155); rankTypeMap.put(PII, 150); @@ -1612,6 +1655,7 @@ public class RedactionIntegrationTest { rankTypeMap.put(FORMULA, 26); rankTypeMap.put(DOSSIER_REDACTIONS, 200); rankTypeMap.put(IMPORTED_REDACTION, 200); + rankTypeMap.put(ROTATE_SIMPLE, 150); colors.setSkippedColor("#cccccc"); colors.setRequestAddColor("#04b093"); @@ -1661,7 +1705,6 @@ public class RedactionIntegrationTest { .build(); } - private String cleanDictionaryEntry(String entry) { return TextNormalizationUtilities.removeHyphenLineBreaks(entry).replaceAll("\\n", " "); @@ -1669,6 +1712,8 @@ public class RedactionIntegrationTest { private List toDictionaryEntry(List entries) { + if (entries == null) + entries = Collections.emptyList(); List dictionaryEntries = new ArrayList<>(); entries.forEach(entry -> { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/dictionaries/RotateTestFileSimple.txt b/redaction-service-v1/redaction-service-server-v1/src/test/resources/dictionaries/RotateTestFileSimple.txt new file mode 100644 index 00000000..6cd6f75d --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/dictionaries/RotateTestFileSimple.txt @@ -0,0 +1,16 @@ +annotation Rotation 0 Direction 0 +annotation Rotation 0 Direction 90 +annotation Rotation 0 Direction 180 +annotation Rotation 0 Direction 270 +annotation Rotation 90 Direction 0 +annotation Rotation 90 Direction 90 +annotation Rotation 90 Direction 180 +annotation Rotation 90 Direction 270 +annotation Rotation 180 Direction 0 +annotation Rotation 180 Direction 90 +annotation Rotation 180 Direction 180 +annotation Rotation 180 Direction 270 +annotation Rotation 270 Direction 0 +annotation Rotation 270 Direction 90 +annotation Rotation 270 Direction 180 +annotation Rotation 270 Direction 270 \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/new/RotateTestFileSimple.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/new/RotateTestFileSimple.pdf new file mode 100644 index 00000000..cf04a1d3 Binary files /dev/null and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/new/RotateTestFileSimple.pdf differ