From cdab1d69457c3e1a3b51d66ea8a2452142a616da Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Tue, 2 May 2023 17:27:15 +0200 Subject: [PATCH] RED-6009 - Document Tree Structure * fix nullpointer, if empty entity falls on end of TextBlock --- .../graph/textblock/AtomicTextBlock.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/layoutparsing/document/graph/textblock/AtomicTextBlock.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/layoutparsing/document/graph/textblock/AtomicTextBlock.java index 01913fe8..87523d2b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/layoutparsing/document/graph/textblock/AtomicTextBlock.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/layoutparsing/document/graph/textblock/AtomicTextBlock.java @@ -3,6 +3,7 @@ package com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.t import static java.lang.String.format; import java.awt.geom.Rectangle2D; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -103,13 +104,18 @@ public class AtomicTextBlock implements TextBlock { if (!containsBoundary(stringBoundary)) { throw new IndexOutOfBoundsException(format("%s is out of bounds for %s", stringBoundary, this.boundary)); } - - if (stringBoundary.end() == this.boundary.end()) { - return positions.subList(stringIdxToPositionIdx.get(stringBoundary.start() - this.boundary.start()), positions.size()); + if (stringBoundary.length() == 0) { + return Collections.emptyList(); } - return positions.subList(stringIdxToPositionIdx.get(stringBoundary.start() - this.boundary.start()), - stringIdxToPositionIdx.get(stringBoundary.end() - this.boundary.start())); + int startPositionIdx = stringIdxToPositionIdx.get(stringBoundary.start() - this.boundary.start()); + + if (stringBoundary.end() == this.boundary.end()) { + return positions.subList(startPositionIdx, positions.size()); + } + + return positions.subList(startPositionIdx, stringIdxToPositionIdx.get(stringBoundary.end() - this.boundary.start())); + }