diff --git a/.gitignore b/.gitignore
index 549e00a..5b60bf8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,12 @@ target/
!**/src/main/**/target/
!**/src/test/**/target/
+### maven build ###
+*.class
+/out/
+**/out/
+**/target/
+
### STS ###
.apt_generated
.classpath
diff --git a/layoutparser-service/layoutparser-service-internal-api/pom.xml b/layoutparser-service/layoutparser-service-internal-api/pom.xml
index 9b61b69..d52ccc6 100755
--- a/layoutparser-service/layoutparser-service-internal-api/pom.xml
+++ b/layoutparser-service/layoutparser-service-internal-api/pom.xml
@@ -2,8 +2,8 @@
- 4.0.0
+ 4.0.0
com.knecon.fforesight
@@ -12,9 +12,6 @@
layoutparser-service-internal-api
- 1.0.0
-
- pom
@@ -29,21 +26,4 @@
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
- org.projectlombok
- lombok
-
-
-
-
-
-
-
diff --git a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/data/TableOfContentsData.java b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/data/TableOfContentsData.java
index 3172b70..738dd1a 100644
--- a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/data/TableOfContentsData.java
+++ b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/data/TableOfContentsData.java
@@ -5,8 +5,6 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
-import javax.management.openmbean.InvalidKeyException;
-
import com.knecon.fforesight.service.layoutparser.internal.api.graph.nodes.NodeType;
import lombok.AccessLevel;
@@ -23,15 +21,15 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class TableOfContentsData {
- List entries;
+ EntryData root;
public EntryData get(List tocId) {
- if (tocId.size() < 1) {
- throw new InvalidKeyException(String.format("ClassificationSection Identifier: \"%s\" is not valid.", tocId));
+ if (tocId.isEmpty()) {
+ return root;
}
- EntryData entry = entries.get(tocId.get(0));
+ EntryData entry = root.subEntries.get(tocId.get(0));
for (int id : tocId.subList(1, tocId.size())) {
entry = entry.subEntries().get(id);
}
@@ -41,7 +39,7 @@ public class TableOfContentsData {
public Stream streamAllEntries() {
- return entries.stream().flatMap(TableOfContentsData::flatten);
+ return Stream.concat(Stream.of(root), root.subEntries.stream()).flatMap(TableOfContentsData::flatten);
}
diff --git a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/DocumentGraph.java b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/DocumentGraph.java
index 72ff2d6..1803b48 100644
--- a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/DocumentGraph.java
+++ b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/DocumentGraph.java
@@ -10,6 +10,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.entity.EntityNode;
+import com.knecon.fforesight.service.layoutparser.internal.api.graph.nodes.NodeType;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.nodes.PageNode;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.nodes.SectionNode;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.nodes.SemanticNode;
@@ -20,11 +21,13 @@ import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
+import lombok.NoArgsConstructor;
import lombok.experimental.FieldDefaults;
@Data
@Builder
@AllArgsConstructor
+@NoArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class DocumentGraph implements SemanticNode {
@@ -42,7 +45,7 @@ public class DocumentGraph implements SemanticNode {
public List getMainSections() {
- return tableOfContents.entries.stream().filter(entry -> entry.node() instanceof SectionNode).map(entry -> (SectionNode) entry.node()).collect(Collectors.toList());
+ return streamChildren().filter(node -> node instanceof SectionNode).map(node -> (SectionNode) node).collect(Collectors.toList());
}
@@ -74,14 +77,14 @@ public class DocumentGraph implements SemanticNode {
private Stream streamAllNodes() {
- return tableOfContents.streamEntriesInOrder().map(TableOfContents.Entry::node);
+ return tableOfContents.streamAllEntriesInOrder().map(TableOfContents.Entry::node);
}
@Override
public String toString() {
- return tableOfContents.toString();
+ return NodeType.DOCUMENT + ": " + buildTextBlock().buildSummary();
}
diff --git a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/TableOfContents.java b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/TableOfContents.java
index b0fa0f0..14318bf 100644
--- a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/TableOfContents.java
+++ b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/TableOfContents.java
@@ -1,10 +1,11 @@
package com.knecon.fforesight.service.layoutparser.internal.api.graph;
+import static java.lang.String.format;
+
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
-import java.util.NoSuchElementException;
import java.util.stream.Stream;
import com.google.common.hash.Hashing;
@@ -19,22 +20,22 @@ import lombok.Data;
@Data
public class TableOfContents {
- List entries;
+ private final Entry root;
- public TableOfContents() {
+ public TableOfContents(DocumentGraph documentGraph) {
- entries = new LinkedList<>();
+ root = Entry.builder().tocId(Collections.emptyList()).type(NodeType.DOCUMENT).children(new LinkedList<>()).node(documentGraph).build();
}
public TextBlock buildTextBlock() {
- return streamEntriesInOrder().map(Entry::node).filter(SemanticNode::isTerminal).map(SemanticNode::getTerminalTextBlock).collect(new TextBlockCollector());
+ return streamAllEntriesInOrder().map(Entry::node).filter(SemanticNode::isTerminal).map(SemanticNode::getTerminalTextBlock).collect(new TextBlockCollector());
}
- public List createNewEntryAndReturnId(NodeType nodeType, SemanticNode node) {
+ public List createNewMainEntryAndReturnId(NodeType nodeType, SemanticNode node) {
return createNewChildEntryAndReturnId(Collections.emptyList(), nodeType, node);
}
@@ -42,27 +43,25 @@ public class TableOfContents {
public List createNewChildEntryAndReturnId(List parentId, NodeType nodeType, SemanticNode node) {
- List newId;
- if (entryExists(parentId)) {
- Entry parent = getEntryById(parentId);
- newId = new LinkedList<>(parentId);
- newId.add(parent.children().size());
- parent.children().add(Entry.builder().tocId(newId).node(node).type(nodeType).children(new LinkedList<>()).build());
- } else {
- newId = List.of(entries.size());
- entries.add(Entry.builder().tocId(newId).node(node).type(nodeType).children(new LinkedList<>()).build());
+ if (!entryExists(parentId)) {
+ throw new UnsupportedOperationException(format("parentId %s does not exist!", parentId));
}
+ Entry parent = getEntryById(parentId);
+ List newId = new LinkedList<>(parentId);
+ newId.add(parent.children().size());
+ parent.children().add(Entry.builder().tocId(newId).node(node).type(nodeType).children(new LinkedList<>()).build());
+
return newId;
}
private boolean entryExists(List tocId) {
- if (tocId.size() < 1) {
- return false;
+ if (tocId.isEmpty()) {
+ return root != null;
}
- Entry entry = entries.get(tocId.get(0));
+ Entry entry = root.children.get(tocId.get(0));
for (int id : tocId.subList(1, tocId.size())) {
if (id >= entry.children.size() || 0 > id) {
return false;
@@ -75,22 +74,17 @@ public class TableOfContents {
public Entry getParentEntryById(List tocId) {
- List parentIds = getParentId(tocId);
- if (parentIds.size() < 1) {
- throw new NoSuchElementException(String.format("Node with tocId \"%s\" has no parent!", tocId));
- }
- return getEntryById(parentIds);
+ return getEntryById(getParentId(tocId));
}
public boolean hasParentById(List tocId) {
- List parentId = getParentId(tocId);
- return entryExists(parentId);
+ return entryExists(getParentId(tocId));
}
- public Stream streamChildren(List tocId) {
+ public Stream streamChildrenNodes(List tocId) {
return getEntryById(tocId).children().stream().map(Entry::node);
}
@@ -98,13 +92,22 @@ public class TableOfContents {
private static List getParentId(List tocId) {
+ if (tocId.isEmpty()) {
+ throw new UnsupportedOperationException("Root has no parent!");
+ }
+ if (tocId.size() < 2) {
+ return Collections.emptyList();
+ }
return tocId.subList(0, tocId.size() - 1);
}
public Entry getEntryById(List tocId) {
- Entry entry = entries.get(tocId.get(0));
+ if (tocId.isEmpty()) {
+ return root;
+ }
+ Entry entry = root.children.get(tocId.get(0));
for (int id : tocId.subList(1, tocId.size())) {
entry = entry.children().get(id);
}
@@ -112,13 +115,19 @@ public class TableOfContents {
}
- public Stream streamEntriesInOrder() {
+ public Stream streamMainEntries() {
- return entries.stream().flatMap(TableOfContents::flatten);
+ return root.children.stream();
}
- public Stream streamSubEntriesInOrder(List parentId) {
+ public Stream streamAllEntriesInOrder() {
+
+ return Stream.of(root).flatMap(TableOfContents::flatten);
+ }
+
+
+ public Stream streamAllSubEntriesInOrder(List parentId) {
return Stream.of(getEntryById(parentId)).flatMap(TableOfContents::flatten);
}
@@ -127,13 +136,13 @@ public class TableOfContents {
@Override
public String toString() {
- return String.join("\n", streamEntriesInOrder().map(Entry::toString).toList());
+ return String.join("\n", streamAllEntriesInOrder().map(Entry::toString).toList());
}
public String toString(List id) {
- return String.join("\n", streamSubEntriesInOrder(id).map(Entry::toString).toList());
+ return String.join("\n", streamAllSubEntriesInOrder(id).map(Entry::toString).toList());
}
diff --git a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/nodes/NodeType.java b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/nodes/NodeType.java
index df2f63b..a85c4aa 100644
--- a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/nodes/NodeType.java
+++ b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/nodes/NodeType.java
@@ -1,6 +1,7 @@
package com.knecon.fforesight.service.layoutparser.internal.api.graph.nodes;
public enum NodeType {
+ DOCUMENT,
SECTION,
HEADLINE,
PARAGRAPH,
diff --git a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/nodes/SemanticNode.java b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/nodes/SemanticNode.java
index bd24328..5937555 100644
--- a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/nodes/SemanticNode.java
+++ b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/graph/nodes/SemanticNode.java
@@ -205,7 +205,7 @@ public interface SemanticNode {
*/
default Stream streamChildren() {
- return getTableOfContents().streamChildren(getTocId());
+ return getTableOfContents().streamChildrenNodes(getTocId());
}
@@ -216,7 +216,7 @@ public interface SemanticNode {
*/
default Stream streamAllSubNodes() {
- return getTableOfContents().streamSubEntriesInOrder(getTocId()).map(TableOfContents.Entry::node);
+ return getTableOfContents().streamAllSubEntriesInOrder(getTocId()).map(TableOfContents.Entry::node);
}
diff --git a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/mapper/DocumentDataMapper.java b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/mapper/DocumentDataMapper.java
index 4fc78a9..231eddd 100644
--- a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/mapper/DocumentDataMapper.java
+++ b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/mapper/DocumentDataMapper.java
@@ -48,7 +48,7 @@ public class DocumentDataMapper {
private TableOfContentsData toTableOfContentsData(TableOfContents tableOfContents) {
- return new TableOfContentsData(tableOfContents.getEntries().stream().map(this::toEntryData).toList());
+ return new TableOfContentsData(toEntryData(tableOfContents.getRoot()));
}
diff --git a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/mapper/DocumentGraphMapper.java b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/mapper/DocumentGraphMapper.java
index e3683db..43e3c66 100644
--- a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/mapper/DocumentGraphMapper.java
+++ b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/mapper/DocumentGraphMapper.java
@@ -38,8 +38,10 @@ public class DocumentGraphMapper {
public DocumentGraph toDocumentGraph(DocumentData documentData) {
+
+ DocumentGraph documentGraph = new DocumentGraph();
Context context = new Context(documentData,
- new TableOfContents(),
+ new TableOfContents(documentGraph),
new LinkedList<>(),
new LinkedList<>(),
Arrays.stream(documentData.getAtomicTextBlocks()).toList(),
@@ -47,13 +49,12 @@ public class DocumentGraphMapper {
context.pages.addAll(Arrays.stream(documentData.getPages()).map(this::buildPage).toList());
- context.tableOfContents.setEntries(buildEntries(documentData.getTableOfContents().getEntries(), context));
+ context.tableOfContents.getRoot().children().addAll(buildEntries(documentData.getTableOfContents().getRoot().subEntries(), context));
+
+ documentGraph.setTableOfContents(context.tableOfContents);
+ documentGraph.setPages(new HashSet<>(context.pages));
+ documentGraph.setNumberOfPages(documentData.getPages().length);
- DocumentGraph documentGraph = DocumentGraph.builder()
- .numberOfPages(documentData.getPages().length)
- .pages(new HashSet<>(context.pages))
- .tableOfContents(context.tableOfContents)
- .build();
documentGraph.setTextBlock(documentGraph.buildTextBlock());
return documentGraph;
}
diff --git a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/services/EntityInsertionService.java b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/services/EntityInsertionService.java
index 1b67b32..c4b83c3 100644
--- a/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/services/EntityInsertionService.java
+++ b/layoutparser-service/layoutparser-service-internal-api/src/main/java/com.knecon.fforesight.service.layoutparser.internal.api/services/EntityInsertionService.java
@@ -1,5 +1,6 @@
package com.knecon.fforesight.service.layoutparser.internal.api.services;
+import java.util.Collections;
import java.util.NoSuchElementException;
import java.util.Set;
@@ -21,9 +22,7 @@ public class EntityInsertionService {
public void addEntityToGraph(EntityNode entity, TableOfContents tableOfContents) {
try {
- SemanticNode containingNode = tableOfContents.getEntries()
- .stream()
- .map(TableOfContents.Entry::node)
+ SemanticNode containingNode = tableOfContents.streamChildrenNodes(Collections.emptyList())
.filter(node -> node.buildTextBlock().containsBoundary(entity.getBoundary()))
.findFirst()
.orElseThrow(() -> new NoSuchElementException("No containing Node found!"));
@@ -37,7 +36,6 @@ public class EntityInsertionService {
addToNodeEntitySets(entity);
} catch (NoSuchElementException e) {
- entityEnrichmentService.enrichEntity(entity, tableOfContents.buildTextBlock());
entity.removeFromGraph();
}
}
diff --git a/layoutparser-service/layoutparser-service-processor/pom.xml b/layoutparser-service/layoutparser-service-processor/pom.xml
index c9e1b73..4a0bd02 100644
--- a/layoutparser-service/layoutparser-service-processor/pom.xml
+++ b/layoutparser-service/layoutparser-service-processor/pom.xml
@@ -10,94 +10,78 @@
layoutparser-service-processor
- 1.0.0
-
com.iqser.red.service
persistence-service-internal-api-v1
2.36.0
-
com.knecon.fforesight
layoutparser-service-internal-api
${project.version}
-
-
- com.iqser.red.commons
- spring-commons
- 6.2.0
-
-
com.iqser.red.commons
storage-commons
1.13.0
-
+
+ com.iqser.red.commons
+ spring-commons
+ 6.2.0
+
com.dslplatform
dsl-json-java8
1.10.0
-
org.apache.pdfbox
pdfbox
${pdfbox.version}
-
org.apache.pdfbox
pdfbox-tools
${pdfbox.version}
-
com.google.guava
guava
31.1-jre
-
com.fasterxml.jackson.module
jackson-module-afterburner
${jackson.version}
-
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
${jackson.version}
-
org.springframework.boot
spring-boot-starter-security
${spring.version}
-
org.springframework.boot
spring-boot-starter-web
${spring.version}
-
org.projectlombok
lombok
true
-
org.springframework.cloud
spring-cloud-starter-openfeign
4.0.2
-
org.springframework.boot
spring-boot-starter-amqp
@@ -105,22 +89,6 @@
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
- org.projectlombok
- lombok
-
-
-
-
-
-
spring-milestones
diff --git a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/factory/DocumentGraphFactory.java b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/factory/DocumentGraphFactory.java
index 217212f..95d54b6 100644
--- a/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/factory/DocumentGraphFactory.java
+++ b/layoutparser-service/layoutparser-service-processor/src/main/java/com/knecon/fforesight/service/layoutparser/processor/factory/DocumentGraphFactory.java
@@ -52,15 +52,17 @@ public class DocumentGraphFactory {
public DocumentGraph buildDocumentGraph(ClassificationDocument document) {
TextBlockFactory textBlockFactory = new TextBlockFactory();
- Context context = new Context(new TableOfContents(), new HashMap<>(), new LinkedList<>(), new LinkedList<>(), textBlockFactory);
+ DocumentGraph documentGraph = new DocumentGraph();
+ Context context = new Context(new TableOfContents(documentGraph), new HashMap<>(), new LinkedList<>(), new LinkedList<>(), textBlockFactory);
document.getPages().stream().map(this::buildPage).forEach(page -> context.pages().put(page, new AtomicInteger(1)));
document.getSections().stream().flatMap(section -> section.getImages().stream()).forEach(image -> context.images().add(image));
addSections(document, context);
addHeaderAndFooterToEachPage(document, context);
- DocumentGraph documentGraph = DocumentGraph.builder().numberOfPages(context.pages.size()).pages(context.pages.keySet()).tableOfContents(context.tableOfContents).build();
-
+ documentGraph.setNumberOfPages(context.pages.size());
+ documentGraph.setPages(context.pages.keySet());
+ documentGraph.setTableOfContents(context.tableOfContents);
documentGraph.setTextBlock(documentGraph.buildTextBlock());
return documentGraph;
}
@@ -82,7 +84,7 @@ public class DocumentGraphFactory {
List tocId;
if (parentNode == null) {
- tocId = context.tableOfContents.createNewEntryAndReturnId(NodeType.SECTION, sectionNode);
+ tocId = context.tableOfContents.createNewMainEntryAndReturnId(NodeType.SECTION, sectionNode);
} else {
tocId = context.tableOfContents.createNewChildEntryAndReturnId(parentNode.getTocId(), NodeType.SECTION, sectionNode);
}
@@ -309,7 +311,7 @@ public class DocumentGraphFactory {
footer,
context,
page);
- List tocId = context.tableOfContents().createNewEntryAndReturnId(NodeType.FOOTER, footer);
+ List tocId = context.tableOfContents().createNewMainEntryAndReturnId(NodeType.FOOTER, footer);
footer.setTocId(tocId);
footer.setTerminalTextBlock(textBlock);
page.setFooter(footer);
@@ -325,7 +327,7 @@ public class DocumentGraphFactory {
context,
0,
page);
- List tocId = context.tableOfContents().createNewEntryAndReturnId(NodeType.HEADER, header);
+ List tocId = context.tableOfContents().createNewMainEntryAndReturnId(NodeType.HEADER, header);
header.setTocId(tocId);
header.setTerminalTextBlock(textBlock);
page.setHeader(header);
@@ -337,7 +339,7 @@ public class DocumentGraphFactory {
PageNode page = getPage(pageIndex, context);
FooterNode footer = FooterNode.builder().tableOfContents(context.tableOfContents()).build();
AtomicTextBlock textBlock = context.textBlockFactory.emptyTextBlock(footer, context, page);
- List tocId = context.tableOfContents().createNewEntryAndReturnId(NodeType.FOOTER, footer);
+ List tocId = context.tableOfContents().createNewMainEntryAndReturnId(NodeType.FOOTER, footer);
footer.setTocId(tocId);
footer.setTerminalTextBlock(textBlock);
page.setFooter(footer);
@@ -349,7 +351,7 @@ public class DocumentGraphFactory {
PageNode page = getPage(pageIndex, context);
HeaderNode header = HeaderNode.builder().tableOfContents(context.tableOfContents()).build();
AtomicTextBlock textBlock = context.textBlockFactory.emptyTextBlock(header, 0, page);
- List tocId = context.tableOfContents().createNewEntryAndReturnId(NodeType.HEADER, header);
+ List tocId = context.tableOfContents().createNewMainEntryAndReturnId(NodeType.HEADER, header);
header.setTocId(tocId);
header.setTerminalTextBlock(textBlock);
page.setHeader(header);
diff --git a/layoutparser-service/layoutparser-service-server/pom.xml b/layoutparser-service/layoutparser-service-server/pom.xml
index c95d10a..d9372f1 100644
--- a/layoutparser-service/layoutparser-service-server/pom.xml
+++ b/layoutparser-service/layoutparser-service-server/pom.xml
@@ -10,7 +10,6 @@
layoutparser-service-server
- 1.0.0
@@ -18,7 +17,11 @@
layoutparser-service-processor
${project.version}
-
+
+ com.iqser.red.commons
+ spring-commons
+ 6.2.0
+
javax.servlet
javax.servlet-api
@@ -29,13 +32,11 @@
spring-cloud-starter-openfeign
4.0.2
-
org.springframework.boot
spring-boot-starter-amqp
${spring.version}
-
org.junit.jupiter
junit-jupiter-api
@@ -54,5 +55,28 @@
6.0.3
test
+
+ org.mockito
+ mockito-core
+ 5.3.0
+ test
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/ApplicationTest.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/ApplicationTest.java
deleted file mode 100644
index 24573c1..0000000
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/ApplicationTest.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.knecon.fforesight.service.layoutparser.server;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-class ApplicationTest {
-
-}
\ No newline at end of file
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/LayoutParserApplicationTests.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/ApplicationTests.java
similarity index 53%
rename from layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/LayoutParserApplicationTests.java
rename to layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/ApplicationTests.java
index a2af3fe..16489d0 100644
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/LayoutParserApplicationTests.java
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/ApplicationTests.java
@@ -2,7 +2,9 @@ package com.knecon.fforesight.service.layoutparser.server;
import org.junit.jupiter.api.Test;
-class LayoutParserApplicationTests extends BaseTest {
+import com.knecon.fforesight.service.layoutparser.server.utils.BaseTest;
+
+class ApplicationTests extends BaseTest {
@Test
void contextLoads() {
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/BuildDocumentGraphTest.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/BuildDocumentGraphTest.java
new file mode 100644
index 0000000..a264ecf
--- /dev/null
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/BuildDocumentGraphTest.java
@@ -0,0 +1,51 @@
+package com.knecon.fforesight.service.layoutparser.server.graph;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.InputStream;
+
+import org.apache.pdfbox.Loader;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+
+import com.knecon.fforesight.service.layoutparser.internal.api.graph.DocumentGraph;
+import com.knecon.fforesight.service.layoutparser.processor.LayoutParsingService;
+import com.knecon.fforesight.service.layoutparser.processor.adapter.model.table.TableServiceResponse;
+import com.knecon.fforesight.service.layoutparser.server.utils.BaseTest;
+
+import lombok.SneakyThrows;
+
+public class BuildDocumentGraphTest extends BaseTest {
+
+ @Autowired
+ private LayoutParsingService layoutParsingService;
+
+ @Test
+ public void buildMetolachlor() {
+
+ DocumentGraph documentGraph = buildGraph("files/S-Metolachlor_RAR_01_Volume_1_2018-09-06");
+ assertEquals(221, documentGraph.getPages().size());
+ assertEquals(220 , documentGraph.getPages().stream().filter(page -> page.getHeader().hasText()).count());
+ assertEquals(0 , documentGraph.getPages().stream().filter(page -> page.getFooter().hasText()).count());
+ }
+
+
+ @SneakyThrows
+ protected DocumentGraph buildGraph(String filename) {
+
+ if (filename.equals("files/S-Metolachlor_RAR_01_Volume_1_2018-09-06")) {
+ prepareStorage(filename + ".pdf", "cv_table_parsing_response/empty.json", "image_service_response/S-Metolachlor_RAR_01_Volume_1_2018-09-06.IMAGE_INFO.json");
+ } else {
+ prepareStorage(filename + ".pdf");
+ }
+ ClassPathResource fileResource = new ClassPathResource(filename + ".pdf");
+
+ try (InputStream inputStream = fileResource.getInputStream()) {
+ PDDocument pdDocument = Loader.loadPDF(inputStream);
+ return layoutParsingService.parseLayout(pdDocument, layoutParsingStorageService.getImagesFile(IMAGE_FILE_ID), new TableServiceResponse());
+ }
+ }
+
+}
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphTest.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphEntityInsertionTest.java
similarity index 87%
rename from layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphTest.java
rename to layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphEntityInsertionTest.java
index bf02e3a..3e27b20 100644
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphTest.java
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphEntityInsertionTest.java
@@ -4,14 +4,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.wildfly.common.Assert.assertTrue;
-import java.io.InputStream;
import java.util.List;
-import org.apache.pdfbox.Loader;
-import org.apache.pdfbox.pdmodel.PDDocument;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.io.ClassPathResource;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.Boundary;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.DocumentGraph;
@@ -26,21 +22,13 @@ import com.knecon.fforesight.service.layoutparser.internal.api.graph.nodes.Table
import com.knecon.fforesight.service.layoutparser.internal.api.graph.nodes.TableNode;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.textblock.TextBlock;
import com.knecon.fforesight.service.layoutparser.internal.api.services.EntityInsertionService;
-import com.knecon.fforesight.service.layoutparser.processor.LayoutParsingService;
-import com.knecon.fforesight.service.layoutparser.processor.adapter.model.table.TableServiceResponse;
-import com.knecon.fforesight.service.layoutparser.server.BaseTest;
-import com.knecon.fforesight.service.layoutparser.server.TestEntity;
+import com.knecon.fforesight.service.layoutparser.server.utils.TestEntity;
-import lombok.SneakyThrows;
-
-public class DocumentGraphTest extends BaseTest {
+public class DocumentGraphEntityInsertionTest extends BuildDocumentGraphTest {
@Autowired
private EntityInsertionService entityInsertionService;
- @Autowired
- private LayoutParsingService layoutParsingService;
-
@Test
public void assertTextBeforeAndTextAfterForParagraphCrafted() {
@@ -51,7 +39,7 @@ public class DocumentGraphTest extends BaseTest {
assert start != -1;
Boundary boundary = new Boundary(start, start + searchTerm.length());
- TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
+ TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
entityInsertionService.addEntityToGraph(entityNode, documentGraph.getTableOfContents());
assertEquals("Expand to Hint ", entityNode.getTextBefore());
@@ -76,7 +64,7 @@ public class DocumentGraphTest extends BaseTest {
assert start != -1;
Boundary boundary = new Boundary(start, start + searchTerm.length());
- TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
+ TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
entityInsertionService.addEntityToGraph(entityNode, documentGraph.getTableOfContents());
assertEquals("", entityNode.getTextBefore());
@@ -132,7 +120,7 @@ public class DocumentGraphTest extends BaseTest {
DocumentGraph documentGraph = buildGraph("files/crafted document");
TableNode table = (TableNode) documentGraph.getTableOfContents()//
- .streamEntriesInOrder()//
+ .streamAllEntriesInOrder()//
.filter(entry -> entry.type().equals(NodeType.TABLE))//
.map(TableOfContents.Entry::node)//
.findFirst().orElseThrow();
@@ -162,7 +150,7 @@ public class DocumentGraphTest extends BaseTest {
DocumentGraph documentGraph = buildGraph("files/S-Metolachlor_RAR_01_Volume_1_2018-09-06");
TableNode table = (TableNode) documentGraph.getTableOfContents()
- .streamEntriesInOrder()
+ .streamAllEntriesInOrder()
.filter(entry -> entry.node().getPages().stream().anyMatch(page -> page.getNumber() == 22))
.filter(entry -> entry.type().equals(NodeType.TABLE))
.map(TableOfContents.Entry::node)
@@ -187,7 +175,7 @@ public class DocumentGraphTest extends BaseTest {
assert start != -1;
Boundary boundary = new Boundary(start, start + searchTerm.length());
- TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
+ TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
entityInsertionService.addEntityToGraph(entityNode, documentGraph.getTableOfContents());
assertEquals("except Cranberry; Vegetable, ", entityNode.getTextBefore());
@@ -214,7 +202,7 @@ public class DocumentGraphTest extends BaseTest {
assert start != -1;
Boundary boundary = new Boundary(start, start + searchTerm.length());
- TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
+ TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
entityInsertionService.addEntityToGraph(entityNode, documentGraph.getTableOfContents());
assertEquals("2.6.1 Summary of ", entityNode.getTextBefore());
@@ -240,7 +228,7 @@ public class DocumentGraphTest extends BaseTest {
assert start != -1;
Boundary boundary = new Boundary(start, start + searchTerm.length());
- TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
+ TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
entityInsertionService.addEntityToGraph(entityNode, documentGraph.getTableOfContents());
assertEquals("2-[(2-(1-hydroxy-ethyl)-6methyl-phenyl-amino]propan-1-ol (", entityNode.getTextBefore());
@@ -258,23 +246,6 @@ public class DocumentGraphTest extends BaseTest {
}
- @SneakyThrows
- protected DocumentGraph buildGraph(String filename) {
-
- if (filename.equals("files/S-Metolachlor_RAR_01_Volume_1_2018-09-06")) {
- prepareStorage(filename + ".pdf", "cv_table_parsing_response/empty.json", "image_service_response/S-Metolachlor_RAR_01_Volume_1_2018-09-06.IMAGE_INFO.json");
- } else {
- prepareStorage(filename + ".pdf");
- }
- ClassPathResource fileResource = new ClassPathResource(filename + ".pdf");
-
- try (InputStream inputStream = fileResource.getInputStream()) {
- PDDocument pdDocument = Loader.loadPDF(inputStream);
- return layoutParsingService.parseLayout(pdDocument, layoutParsingStorageService.getImagesFile(IMAGE_FILE_ID), new TableServiceResponse());
- }
- }
-
-
private static void assertSameOffsetInAllIntersectingNodes(String searchTerm, int start, EntityNode entityNode) {
List paragraphStart = entityNode.getIntersectingNodes().stream()//
@@ -293,7 +264,7 @@ public class DocumentGraphTest extends BaseTest {
assert start != -1;
Boundary boundary = new Boundary(start, start + searchTerm.length());
- TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
+ TestEntity entityNode = TestEntity.initialEntityNode(boundary, "123", "123");
entityInsertionService.addEntityToGraph(entityNode, documentGraph.getTableOfContents());
PageNode pageNode = documentGraph.getPages().stream().filter(page -> page.getNumber() == pageNumber).findFirst().orElseThrow();
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphMappingTest.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphMappingTest.java
index cd0bf02..74d18fe 100644
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphMappingTest.java
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphMappingTest.java
@@ -1,31 +1,18 @@
package com.knecon.fforesight.service.layoutparser.server.graph;
-import java.util.Collections;
-
-import org.apache.pdfbox.Loader;
-import org.apache.pdfbox.pdmodel.PDDocument;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.io.ClassPathResource;
import com.knecon.fforesight.service.layoutparser.internal.api.data.DocumentData;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.DocumentGraph;
import com.knecon.fforesight.service.layoutparser.internal.api.mapper.DocumentDataMapper;
import com.knecon.fforesight.service.layoutparser.internal.api.mapper.DocumentGraphMapper;
-import com.knecon.fforesight.service.layoutparser.processor.classification.service.PdfParsingService;
-import com.knecon.fforesight.service.layoutparser.processor.factory.DocumentGraphFactory;
import com.knecon.fforesight.service.layoutparser.processor.queue.LayoutParsingRequest;
-import com.knecon.fforesight.service.layoutparser.server.BaseTest;
import lombok.SneakyThrows;
-public class DocumentGraphMappingTest extends BaseTest {
+public class DocumentGraphMappingTest extends BuildDocumentGraphTest {
- @Autowired
- private DocumentGraphFactory documentGraphFactory;
-
- @Autowired
- private PdfParsingService pdfParsingService;
@Autowired
private DocumentDataMapper documentDataMapper;
@@ -38,17 +25,10 @@ public class DocumentGraphMappingTest extends BaseTest {
@SneakyThrows
public void testGraphMapping() {
- String filename = "files/crafted document";
+ DocumentGraph document = buildGraph("files/crafted document");
+ LayoutParsingRequest layoutParsingRequest = buildStandardLayoutParsingRequest();
- prepareStorage(filename + ".pdf");
- ClassPathResource fileResource = new ClassPathResource(filename + ".pdf");
- LayoutParsingRequest layoutParsingRequest = prepareStorage(fileResource.getInputStream());
- PDDocument pdDocument = Loader.loadPDF(fileResource.getInputStream());
-
- var classifiedDoc = pdfParsingService.parseDocument(pdDocument, Collections.emptyMap(), Collections.emptyMap());
- DocumentGraph document = documentGraphFactory.buildDocumentGraph(classifiedDoc);
DocumentData documentData = documentDataMapper.toDocumentData(document);
-
layoutParsingStorageService.storeDocumentData(layoutParsingRequest, documentData);
DocumentData documentData2 = layoutParsingStorageService.readDocumentData(layoutParsingRequest);
DocumentGraph newDocumentGraph = documentGraphMapper.toDocumentGraph(documentData2);
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphVisualizationTest.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphVisualizationTest.java
index 0e252e4..27a825c 100644
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphVisualizationTest.java
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/graph/DocumentGraphVisualizationTest.java
@@ -12,37 +12,50 @@ import org.springframework.core.io.ClassPathResource;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.DocumentGraph;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.textblock.TextBlock;
-import com.knecon.fforesight.service.layoutparser.server.visualizations.PdfDraw;
+import com.knecon.fforesight.service.layoutparser.server.utils.visualizations.PdfDraw;
import lombok.SneakyThrows;
-
-@Disabled
-public class DocumentGraphVisualizationTest extends DocumentGraphTest {
+public class DocumentGraphVisualizationTest extends BuildDocumentGraphTest {
@Test
@SneakyThrows
+ @Disabled
public void visualizeMetolachlor() {
String filename = "files/S-Metolachlor_RAR_01_Volume_1_2018-09-06";
-
- DocumentGraph documentGraph = buildGraph(filename);
- TextBlock textBlock = documentGraph.buildTextBlock();
-
- visualizeSemanticNodes(filename, documentGraph, textBlock);
+ visualizePdf(filename);
}
@Test
@SneakyThrows
+ @Disabled
public void visualizeRotatedTestDocument() {
String filename = "files/RotateTestFileWithImages";
+ visualizePdf(filename);
+ }
+
+
+ @Test
+ @SneakyThrows
+ @Disabled
+ public void visualizeCraftedDocument() {
+
+ String filename = "files/crafted document";
+ visualizePdf(filename);
+ }
+
+
+ @SneakyThrows
+ private void visualizePdf(String filename) {
DocumentGraph documentGraph = buildGraph(filename);
TextBlock textBlock = documentGraph.buildTextBlock();
visualizeSemanticNodes(filename, documentGraph, textBlock);
+
}
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/BaseTest.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/BaseTest.java
similarity index 77%
rename from layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/BaseTest.java
rename to layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/BaseTest.java
index 74e28c2..0922784 100644
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/BaseTest.java
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/BaseTest.java
@@ -1,9 +1,10 @@
-package com.knecon.fforesight.service.layoutparser.server;
+package com.knecon.fforesight.service.layoutparser.server.utils;
import java.io.InputStream;
import java.util.Optional;
import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
@@ -12,6 +13,7 @@ import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
@@ -22,9 +24,12 @@ import com.iqser.red.storage.commons.service.StorageService;
import com.knecon.fforesight.service.layoutparser.internal.api.mapper.DocumentDataMapper;
import com.knecon.fforesight.service.layoutparser.internal.api.mapper.DocumentGraphMapper;
import com.knecon.fforesight.service.layoutparser.internal.api.services.EntityEnrichmentService;
+import com.knecon.fforesight.service.layoutparser.internal.api.services.EntityInsertionService;
import com.knecon.fforesight.service.layoutparser.processor.LayoutParsingStorageService;
import com.knecon.fforesight.service.layoutparser.processor.multitenancy.TenantContext;
+import com.knecon.fforesight.service.layoutparser.processor.multitenancy.TenantsClient;
import com.knecon.fforesight.service.layoutparser.processor.queue.LayoutParsingRequest;
+import com.knecon.fforesight.service.layoutparser.server.Application;
import lombok.SneakyThrows;
@@ -39,6 +44,9 @@ public class BaseTest {
@Autowired
protected StorageService storageService;
+ @Autowired
+ protected TenantsClient tenantsClient;
+
@MockBean
private RabbitTemplate rabbitTemplate;
@@ -49,6 +57,35 @@ public class BaseTest {
protected final static String TEXT_FILE_ID = "texts";
protected final static String POSITION_FILE_ID = "positions";
protected final static String PAGES_FILE_ID = "pages";
+ protected final static String TENANT_ID = "tenant";
+
+
+ protected LayoutParsingRequest buildStandardLayoutParsingRequest() {
+
+ return LayoutParsingRequest.builder()
+ .imagesFileStorageId(Optional.of(IMAGE_FILE_ID))
+ .originFileStorageId(ORIGIN_FILE_ID)
+ .tablesFileStorageId(Optional.of(TABLE_FILE_ID))
+ .pageFileStorageId(PAGES_FILE_ID)
+ .positionBlockFileStorageId(POSITION_FILE_ID)
+ .structureFileStorageId(STRUCTURE_FILE_ID)
+ .textBlockFileStorageId(TEXT_FILE_ID)
+ .build();
+ }
+
+
+ @BeforeEach
+ public void setupTenantContext() {
+
+ TenantContext.setTenantId(TENANT_ID);
+ }
+
+
+ @AfterEach
+ public void clearTenantContext() {
+
+ TenantContext.clear();
+ }
@SneakyThrows
@@ -115,6 +152,7 @@ public class BaseTest {
@Configuration
@EnableAutoConfiguration(exclude = RabbitAutoConfiguration.class)
+ @ComponentScan("com.knecon.fforesight.service.layoutparser")
public static class TestConfiguration {
@Bean
@@ -125,13 +163,6 @@ public class BaseTest {
}
- @Bean
- public EntityEnrichmentService testEntityEnrichmentService() {
-
- return new TestEntityEnrichmentService();
- }
-
-
@Bean
public DocumentDataMapper documentDataMapper() {
@@ -145,6 +176,14 @@ public class BaseTest {
return new DocumentGraphMapper();
}
+
+ @Bean
+ @Autowired
+ public EntityInsertionService entityInsertionService(EntityEnrichmentService entityEnrichmentService) {
+
+ return new EntityInsertionService(entityEnrichmentService);
+ }
+
}
}
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/FileSystemBackedStorageService.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/FileSystemBackedStorageService.java
similarity index 96%
rename from layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/FileSystemBackedStorageService.java
rename to layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/FileSystemBackedStorageService.java
index 809cb9e..9f12673 100644
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/FileSystemBackedStorageService.java
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/FileSystemBackedStorageService.java
@@ -1,4 +1,4 @@
-package com.knecon.fforesight.service.layoutparser.server;
+package com.knecon.fforesight.service.layoutparser.server.utils;
import static java.io.File.createTempFile;
@@ -14,6 +14,7 @@ import java.util.stream.Collectors;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.InputStreamResource;
+import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.iqser.red.commons.jackson.ObjectMapperFactory;
@@ -22,6 +23,7 @@ import com.iqser.red.storage.commons.service.StorageService;
import lombok.SneakyThrows;
+@Service
public class FileSystemBackedStorageService implements StorageService {
private final Map dataMap = new HashMap<>();
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/TestEntity.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/TestEntity.java
similarity index 98%
rename from layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/TestEntity.java
rename to layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/TestEntity.java
index 22c7eec..1876606 100644
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/TestEntity.java
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/TestEntity.java
@@ -1,4 +1,4 @@
-package com.knecon.fforesight.service.layoutparser.server;
+package com.knecon.fforesight.service.layoutparser.server.utils;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/TestEntityEnrichmentService.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/TestEntityEnrichmentService.java
similarity index 96%
rename from layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/TestEntityEnrichmentService.java
rename to layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/TestEntityEnrichmentService.java
index 76a54c1..5336872 100644
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/TestEntityEnrichmentService.java
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/TestEntityEnrichmentService.java
@@ -1,15 +1,18 @@
-package com.knecon.fforesight.service.layoutparser.server;
+package com.knecon.fforesight.service.layoutparser.server.utils;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
+import org.springframework.stereotype.Service;
+
import com.knecon.fforesight.service.layoutparser.internal.api.graph.entity.EntityNode;
import com.knecon.fforesight.service.layoutparser.internal.api.graph.textblock.TextBlock;
import com.knecon.fforesight.service.layoutparser.internal.api.services.EntityEnrichmentService;
import lombok.RequiredArgsConstructor;
+@Service
@RequiredArgsConstructor
public class TestEntityEnrichmentService implements EntityEnrichmentService {
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/TestTenantsClient.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/TestTenantsClient.java
new file mode 100644
index 0000000..6033996
--- /dev/null
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/TestTenantsClient.java
@@ -0,0 +1,42 @@
+package com.knecon.fforesight.service.layoutparser.server.utils;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+
+import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantRequest;
+import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.TenantResponse;
+import com.knecon.fforesight.service.layoutparser.processor.multitenancy.TenantsClient;
+
+@Service
+public class TestTenantsClient implements TenantsClient {
+
+ @Override
+ public void createTenant(TenantRequest tenantRequest) {
+
+ }
+
+
+ @Override
+ public List getTenants() {
+
+ return Collections.emptyList();
+ }
+
+
+ @Override
+ public TenantResponse getTenant(String tenantId) {
+
+ return null;
+ }
+
+
+ @Override
+ public JSONPrimitive getDeploymentKey(String tenantId) {
+
+ return null;
+ }
+
+}
diff --git a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/visualizations/PdfDraw.java b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/visualizations/PdfDraw.java
similarity index 91%
rename from layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/visualizations/PdfDraw.java
rename to layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/visualizations/PdfDraw.java
index 6113d09..70b1275 100644
--- a/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/visualizations/PdfDraw.java
+++ b/layoutparser-service/layoutparser-service-server/src/test/java/com/knecon/fforesight/service/layoutparser/server/utils/visualizations/PdfDraw.java
@@ -1,4 +1,4 @@
-package com.knecon.fforesight.service.layoutparser.server.visualizations;
+package com.knecon.fforesight.service.layoutparser.server.utils.visualizations;
import java.awt.Color;
import java.awt.geom.Point2D;
@@ -36,7 +36,7 @@ public class PdfDraw {
public static void drawDocumentGraph(PDDocument document, DocumentGraph documentGraph) {
- documentGraph.getTableOfContents().streamEntriesInOrder().forEach(entry -> drawNode(document, entry));
+ documentGraph.getTableOfContents().streamAllEntriesInOrder().forEach(entry -> drawNode(document, entry));
}
@@ -72,8 +72,11 @@ public class PdfDraw {
contentStream.setLineWidth(options.getStrokeWidth());
contentStream.beginText();
- contentStream.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(30), 0, 0));
- contentStream.newLineAtOffset((float) location.getX(), (float) location.getY());
+ if (rotate) {
+ contentStream.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(15), (float) location.getX(), (float) location.getY()));
+ } else {
+ contentStream.newLineAtOffset((float) location.getX(), (float) location.getY());
+ }
contentStream.setFont(new PDType1Font(Standard14Fonts.FontName.HELVETICA), 10);
contentStream.showText(string);
contentStream.endText();
@@ -136,6 +139,7 @@ public class PdfDraw {
private static Options buildStandardOptionsForNodes(TableOfContents.Entry entry) {
return Options.builder().stroke(true).strokeColor(switch (entry.type()) {
+ case DOCUMENT -> Color.LIGHT_GRAY;
case HEADER, FOOTER -> Color.GREEN;
case PARAGRAPH -> Color.BLUE;
case HEADLINE -> Color.RED;