From 274e2e28a6cea0534bb3362a38a069dd279199a6 Mon Sep 17 00:00:00 2001 From: ShienF Date: Sun, 11 Dec 2022 18:26:55 +0800 Subject: [PATCH] Encapsulate the method's of rulings from class Page Encapsulate rulings method from class Page into class Rulings. Make these methods more OO. --- src/main/java/technology/tabula/Page.java | 78 +++----------------- src/main/java/technology/tabula/Rulings.java | 61 +++++++++++++++ 2 files changed, 73 insertions(+), 66 deletions(-) create mode 100644 src/main/java/technology/tabula/Rulings.java diff --git a/src/main/java/technology/tabula/Page.java b/src/main/java/technology/tabula/Page.java index ed74d14a..78fc7b20 100644 --- a/src/main/java/technology/tabula/Page.java +++ b/src/main/java/technology/tabula/Page.java @@ -24,11 +24,7 @@ public class Page extends Rectangle { private List textElements; // TODO: Create a class for 'List ' that encapsulates all of these lists and their behaviors? - private List rulings, - cleanRulings = null, - verticalRulingLines = null, - horizontalRulingLines = null; - + private Rulings rulings; private PDPage pdPage; private PDDocument pdDoc; @@ -54,7 +50,7 @@ private Page( this.pdPage = pdPage; this.pdDoc = doc; this.textElements = characters; - this.rulings = rulings; + this.rulings = new Rulings(rulings); this.minCharWidth = minCharWidth; this.minCharHeight = minCharHeight; this.spatialIndex = index; @@ -81,7 +77,7 @@ public Page(float top, float left, float width, float height, int rotation, int List characters, List rulings) { this(top, left, width, height, rotation, number, pdPage, doc); this.textElements = characters; - this.rulings = rulings; + this.rulings = new Rulings(rulings); } /** @@ -125,7 +121,7 @@ public Page getArea(Rectangle area) { .withPdPage(pdPage) .withPdDocument(pdDoc) .withTextElements(areaTextElements) - .withRulings(Ruling.cropRulingsToArea(getRulings(), area)) + .withRulings(Ruling.cropRulingsToArea(rulings.getRulings(), area)) .withMinCharWidth(minimumCharWidth) .withMinCharHeight(minimumCharHeight) .withIndex(spatialIndex) @@ -238,78 +234,28 @@ public boolean hasText() { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // public List getRulings() { - if (cleanRulings != null) { - return cleanRulings; - } - - if (rulings == null || rulings.isEmpty()) { - verticalRulingLines = new ArrayList<>(); - horizontalRulingLines = new ArrayList<>(); - return new ArrayList<>(); - } - - // TODO: Move as a static method to the Ruling class? - Utils.snapPoints(rulings, minCharWidth, minCharHeight); - - verticalRulingLines = getCollapsedVerticalRulings(); - horizontalRulingLines = getCollapsedHorizontalRulings(); - - cleanRulings = new ArrayList<>(verticalRulingLines); - cleanRulings.addAll(horizontalRulingLines); - - return cleanRulings; - } + List rulings = this.rulings.getRulings(); - // TODO: Create a class for 'List ' and encapsulate these behaviors within it? - private List getCollapsedVerticalRulings() { - List verticalRulings = new ArrayList<>(); - for (Ruling ruling : rulings) { - if (ruling.vertical()) { - verticalRulings.add(ruling); - } + if (rulings != null && !rulings.isEmpty()) { + Utils.snapPoints(rulings, minCharWidth, minCharHeight);; } - return Ruling.collapseOrientedRulings(verticalRulings); - } - - private List getCollapsedHorizontalRulings() { - List horizontalRulings = new ArrayList<>(); - for (Ruling ruling : rulings) { - if (ruling.horizontal()) { - horizontalRulings.add(ruling); - } - } - return Ruling.collapseOrientedRulings(horizontalRulings); + return rulings; } public List getVerticalRulings() { - if (verticalRulingLines != null) { - return verticalRulingLines; - } - getRulings(); - return verticalRulingLines; + return rulings.getVerticalRulings(); } public List getHorizontalRulings() { - if (horizontalRulingLines != null) { - return horizontalRulingLines; - } - getRulings(); - return horizontalRulingLines; + return rulings.getHorizontalRulings(); } public void addRuling(Ruling ruling) { - if (ruling.oblique()) { - throw new UnsupportedOperationException("Can't add an oblique ruling."); - } - rulings.add(ruling); - // Clear caches: - verticalRulingLines = null; - horizontalRulingLines = null; - cleanRulings = null; + rulings.addRuling(ruling); } public List getUnprocessedRulings() { - return rulings; + return rulings.getUnprocessedRulings(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // diff --git a/src/main/java/technology/tabula/Rulings.java b/src/main/java/technology/tabula/Rulings.java new file mode 100644 index 00000000..a7cbfe6b --- /dev/null +++ b/src/main/java/technology/tabula/Rulings.java @@ -0,0 +1,61 @@ +package technology.tabula; + +import java.util.ArrayList; +import java.util.List; + +public class Rulings { + private List rulings = new ArrayList<>(); + private List cleanRulings = new ArrayList<>(); +// private float minCharWidth; +// private float minCharHeight; + + public Rulings(List rulings) { + this.rulings = rulings; +// this.minCharWidth = minCharWidth; +// this.minCharHeight = minCharHeight; + } + + public List getRulings() { + if (rulings == null || rulings.isEmpty()) { + return rulings; + } + List verticalRulingLines = getVerticalRulings(); + List horizontalRulingLines = getHorizontalRulings(); + + cleanRulings = new ArrayList<>(verticalRulingLines); + cleanRulings.addAll(horizontalRulingLines); + return cleanRulings; + } + + public List getVerticalRulings() { + List verticalRulings = new ArrayList<>(); + for (Ruling ruling : rulings) { + if (ruling.vertical()) { + verticalRulings.add(ruling); + } + } + return Ruling.collapseOrientedRulings(verticalRulings); + } + + public List getHorizontalRulings() { + List horizontalRulings = new ArrayList<>(); + for (Ruling ruling : rulings) { + if (ruling.vertical()) { + horizontalRulings.add(ruling); + } + } + return Ruling.collapseOrientedRulings(horizontalRulings); + } + + public void addRuling(Ruling ruling) { + if (ruling.oblique()) { + throw new UnsupportedOperationException("Can't add an oblique ruling."); + } + rulings.add(ruling); + } + + public List getUnprocessedRulings() { + return rulings; + } + +}