From c2fa9ece184fad5fb5b5b089628093afcae5bd9c Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Mon, 17 Apr 2023 18:34:00 +0200 Subject: [PATCH] RED-6369: Rules Refactor * fix pmd errors --- .../textblock/ConcatenatedTextBlock.java | 2 +- .../services/EntityCreationService.java | 6 +- .../document/services/ImageSortService.java | 135 ------------------ .../service/RedactionLogCreatorService.java | 2 +- .../graph/DocumentGraphVisualizationTest.java | 3 + .../document/graph/ImageSortServiceTest.java | 58 -------- 6 files changed, 7 insertions(+), 199 deletions(-) delete mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/ImageSortService.java delete mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/ImageSortServiceTest.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/ConcatenatedTextBlock.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/ConcatenatedTextBlock.java index cbc5b5f1..2982c825 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/ConcatenatedTextBlock.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/ConcatenatedTextBlock.java @@ -55,7 +55,7 @@ public class ConcatenatedTextBlock implements TextBlock { private AtomicTextBlock getAtomicTextBlockByStringIndex(int stringIdx) { - return atomicTextBlocks.stream().filter(textBlock -> (textBlock.getBoundary().contains(stringIdx))).findAny().orElseThrow(IndexOutOfBoundsException::new); + return atomicTextBlocks.stream().filter(textBlock -> textBlock.getBoundary().contains(stringIdx)).findAny().orElseThrow(IndexOutOfBoundsException::new); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java index fcca9bce..9ebaedf3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java @@ -192,11 +192,9 @@ public class EntityCreationService { boolean typeMatches = entityNode.getType().equals(previousEntity.getType()); boolean entityTypeMatches = entityNode.getEntityType().equals(previousEntity.getEntityType()); boolean intersects = entityNode.intersects(previousEntity); - if (typeMatches && entityTypeMatches && intersects) { - previousEntity = entityNode; - continue; + if (!typeMatches || !entityTypeMatches || !intersects) { + return false; } - return false; } return true; } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/ImageSortService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/ImageSortService.java deleted file mode 100644 index 4980b089..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/ImageSortService.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.iqser.red.service.redaction.v1.server.document.services; - -import static com.iqser.red.service.redaction.v1.server.document.graph.factory.RectangleTransformations.bBoxUnionAbstractTextContainer; -import static com.iqser.red.service.redaction.v1.server.document.graph.factory.RectangleTransformations.toRectangle2D; -import static java.util.stream.Collectors.groupingBy; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.springframework.stereotype.Service; - -import com.iqser.red.service.redaction.v1.server.classification.model.Document; -import com.iqser.red.service.redaction.v1.server.classification.model.Section; -import com.iqser.red.service.redaction.v1.server.classification.model.TextBlock; -import com.iqser.red.service.redaction.v1.server.redaction.model.PdfImage; -import com.iqser.red.service.redaction.v1.server.tableextraction.model.AbstractTextContainer; -import com.iqser.red.service.redaction.v1.server.tableextraction.model.Cell; -import com.iqser.red.service.redaction.v1.server.tableextraction.model.Table; - -@Service -public class ImageSortService { - - public SortedImages sortImagesIntoStructure(Document document) { - - SortedImages sortedImages = new SortedImages(new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>()); - - Map> imagesByPage = document.getSections() - .stream() - .flatMap(section -> section.getImages().stream()) - .distinct() - .collect(groupingBy(PdfImage::getPage)); - - for (int pageNumber : imagesByPage.keySet()) { - List textContainersOnPage = document.getSections() - .stream() - .flatMap(section -> section.getPageBlocks().stream()) - .filter(abstractTextContainer -> abstractTextContainer.getPage() == pageNumber) - .toList(); - - List
sectionsOnPage = document.getSections() - .stream() - .filter(section -> section.getPageBlocks().stream().anyMatch(block -> block.getPage() == pageNumber)) - .toList(); - - for (PdfImage image : imagesByPage.get(pageNumber)) { - sortImage(textContainersOnPage, sectionsOnPage, image, sortedImages); - } - } - return sortedImages; - } - - - private void sortImage(List textContainersOnPage, List
sectionsOnPage, PdfImage image, SortedImages sortedImages) { - - Optional containingTextContainer = getContainingTextContainer(image, textContainersOnPage); - Optional
sectionContainingTextContainer = getContainingSection(image, sectionsOnPage); - List containedTextContainers = getContainedTextContainers(image, textContainersOnPage); - List
containedSections = getContainedSections(image, sectionsOnPage); - if (containingTextContainer.isPresent()) { - if (sortImageIntoTextContainerOrCell(image, sortedImages, containingTextContainer.get())) { - return; - } - } - } - - - private static boolean sortImageIntoTextContainerOrCell(PdfImage image, SortedImages sortedImages, AbstractTextContainer containingTextContainer) { - - if (containingTextContainer instanceof TextBlock) { - sortedImages.containedInTextContainer().computeIfAbsent(containingTextContainer, sortedImage -> new ArrayList<>()).add(image); - return true; - } - if (containingTextContainer instanceof Table) { - Optional containingCell = getContainingCell((Table) containingTextContainer, image); - if (containingCell.isPresent()) { - sortedImages.containedInCell().computeIfAbsent(containingCell.get(), sortedImage -> new ArrayList<>()).add(image); - return true; - } - } - - return false; - } - - - private static Optional getContainingCell(Table table, PdfImage image) { - - return table.getRows().stream().flatMap(List::stream).filter(cell -> cell.contains(toRectangle2D(image.getPosition()))).findFirst(); - } - - - private List
getContainedSections(PdfImage image, List
sectionsOnPage) { - - return sectionsOnPage.stream() - .filter(section -> toRectangle2D(image.getPosition()).contains(bBoxUnionAbstractTextContainer(section.getPageBlocks() - .stream() - .filter(block -> block.getPage() == image.getPage()) - .toList()))) - .toList(); - } - - - private List getContainedTextContainers(PdfImage image, List textContainersOnPage) { - - return textContainersOnPage.stream().filter(textContainer -> toRectangle2D(image.getPosition()).contains(toRectangle2D(textContainer))).toList(); - } - - - private Optional
getContainingSection(PdfImage image, List
sectionsOnPage) { - - return sectionsOnPage.stream()// - .filter(section -> // - bBoxUnionAbstractTextContainer(section.getPageBlocks().stream().filter(block -> block.getPage() == image.getPage()).toList())// - .contains(toRectangle2D(image.getPosition()))).findFirst(); - } - - - private Optional getContainingTextContainer(PdfImage image, List textContainersOnPage) { - - return textContainersOnPage.stream().filter(textContainer -> toRectangle2D(textContainer).contains(toRectangle2D(image.getPosition()))).findFirst(); - } - - - public record SortedImages( - Map> containedInCell, - Map> containedInTextContainer, - Map> containedInSection, - Map> containedByImage, - Map> sectionContainedByImage) { - - } - -} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java index ac2d004b..b24a70c2 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java @@ -40,7 +40,7 @@ public class RedactionLogCreatorService { List entries = new ArrayList<>(); Set processedIds = new HashSet<>(); - entityNodes.forEach((entityNode -> entries.addAll(toRedactionLogEntries(entityNode, processedIds, dossierTemplateId)))); + entityNodes.forEach(entityNode -> entries.addAll(toRedactionLogEntries(entityNode, processedIds, dossierTemplateId))); return entries; } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentGraphVisualizationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentGraphVisualizationTest.java index 43653b7d..ae4a8f84 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentGraphVisualizationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentGraphVisualizationTest.java @@ -5,6 +5,7 @@ import java.io.File; import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.core.io.ClassPathResource; @@ -17,6 +18,7 @@ public class DocumentGraphVisualizationTest extends BuildDocumentGraphTest { @Test @SneakyThrows + @Disabled public void visualizeMetolachlor() { String filename = "files/Metolachlor/S-Metolachlor_RAR_01_Volume_1_2018-09-06"; @@ -30,6 +32,7 @@ public class DocumentGraphVisualizationTest extends BuildDocumentGraphTest { @Test @SneakyThrows + @Disabled public void visualizeRotatedTestDocument() { String filename = "files/new/RotateTestFileWithImages"; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/ImageSortServiceTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/ImageSortServiceTest.java deleted file mode 100644 index a39bb05b..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/ImageSortServiceTest.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.iqser.red.service.redaction.v1.server.document.graph; - -import java.io.InputStream; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.io.ClassPathResource; - -import com.iqser.red.service.redaction.v1.server.AbstractTestWithDictionaries; -import com.iqser.red.service.redaction.v1.server.classification.model.Document; -import com.iqser.red.service.redaction.v1.server.document.services.ImageSortService; -import com.iqser.red.service.redaction.v1.server.redaction.model.PdfImage; -import com.iqser.red.service.redaction.v1.server.segmentation.ImageService; -import com.iqser.red.service.redaction.v1.server.segmentation.PdfSegmentationService; - -import lombok.SneakyThrows; - -public class ImageSortServiceTest extends AbstractTestWithDictionaries { - - @Autowired - private ImageSortService imageSortService; - - @Autowired - private PdfSegmentationService segmentationService; - - @Autowired - private ImageService imageService; - - - @Test - public void assertImagesContainedInCells() { - - ImageSortService.SortedImages sortedImages = getSortedImages("files/Metolachlor/S-Metolachlor_RAR_01_Volume_1_2018-09-06"); - //assertEquals(9, sortedImages.containedInCell().size()); - } - - - @SneakyThrows - private ImageSortService.SortedImages getSortedImages(String filename) { - - if (filename.equals("files/Metolachlor/S-Metolachlor_RAR_01_Volume_1_2018-09-06")) { - prepareStorage(filename + ".pdf", "files/cv_service_empty_response.json", filename + ".IMAGE_INFO.json"); - } else { - prepareStorage(filename + ".pdf"); - } - ClassPathResource fileResource = new ClassPathResource(filename + ".pdf"); - - try (InputStream inputStream = fileResource.getInputStream()) { - Map> pdfImages = imageService.convertImages(TEST_DOSSIER_ID, TEST_FILE_ID); - Document classifiedDoc = segmentationService.parseDocument(TEST_DOSSIER_ID, TEST_FILE_ID, inputStream, pdfImages); - return imageSortService.sortImagesIntoStructure(classifiedDoc); - } - - } - -}