diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java index aad453b1..da185c00 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java @@ -682,6 +682,8 @@ public class EntityCreationService { addEntityToGraph(mergedEntity, node); insertToKieSession(mergedEntity); + + entitiesToMerge.stream().filter(e -> !e.equals(mergedEntity)).forEach(node.getEntities()::remove); return mergedEntity; } @@ -766,26 +768,38 @@ public class EntityCreationService { try { if (node.getEntities().contains(entity)) { // If entity already exists and it has a different text range, we add the text range to the list of duplicated text ranges - node.getEntities() + Optional optionalTextEntity = node.getEntities() .stream()// .filter(e -> e.equals(entity))// .filter(e -> !e.getTextRange().equals(entity.getTextRange()))// - .findAny()// - .ifPresent(entityToDuplicate -> addDuplicateEntityToGraph(entityToDuplicate, entity.getTextRange(), node)); + .findAny(); + if (optionalTextEntity.isPresent()) { + addDuplicateEntityToGraph(optionalTextEntity.get(), entity.getTextRange(), node); + } else { + node.getEntities().remove(entity); + addNewEntityToGraph(entity, documentTree); + } + } else { entity.addIntersectingNode(documentTree.getRoot().getNode()); addEntityToGraph(entity, documentTree); } } catch (NoSuchElementException e) { - entity.setDeepestFullyContainingNode(documentTree.getRoot().getNode()); - entityEnrichmentService.enrichEntity(entity, entity.getDeepestFullyContainingNode().getTextBlock()); - entity.addIntersectingNode(documentTree.getRoot().getNode()); - addToPages(entity); - addEntityToNodeEntitySets(entity); + addNewEntityToGraph(entity, documentTree); } } + private void addNewEntityToGraph(TextEntity entity, DocumentTree documentTree) { + + entity.setDeepestFullyContainingNode(documentTree.getRoot().getNode()); + entityEnrichmentService.enrichEntity(entity, entity.getDeepestFullyContainingNode().getTextBlock()); + entity.addIntersectingNode(documentTree.getRoot().getNode()); + addToPages(entity); + addEntityToNodeEntitySets(entity); + } + + private void addDuplicateEntityToGraph(TextEntity entityToDuplicate, TextRange newTextRange, SemanticNode node) { entityToDuplicate.addTextRange(newTextRange);