CAUSEWAY-3854: simplify (part 2)
diff --git a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/PdfFactory.java b/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/PdfFactory.java
index 7f76990..3d2d5e5 100644
--- a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/PdfFactory.java
+++ b/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/PdfFactory.java
@@ -31,7 +31,7 @@
import org.apache.causeway.applib.value.Blob;
import org.apache.causeway.applib.value.NamedWithMimeType.CommonMimeType;
import org.apache.causeway.commons.io.DataSink;
-import org.apache.causeway.extensions.tabular.pdf.factory.internal.BaseTable;
+import org.apache.causeway.extensions.tabular.pdf.factory.internal.Table;
import lombok.Builder;
import lombok.SneakyThrows;
@@ -103,8 +103,7 @@ public void drawTable(
final List<String> primaryHeaderTexts,
final List<String> secondaryHeaderTexts,
final List<List<Object>> rowData) {
- var baseTable = new BaseTable(yStart, yStartNewPage, bottomMargin, tableWidth, margin,
- document, page, true, true);
+ var baseTable = Table.create(yStart, yStartNewPage, 0, bottomMargin, tableWidth, margin, document, page);
var pdfTable = new PdfTable(baseTable, page, colWidths, primaryHeaderTexts, secondaryHeaderTexts);
pdfTable.appendRows(rowData);
this.yStart = baseTable.draw() - tablesmargin;
diff --git a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/PdfTable.java b/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/PdfTable.java
index 54d883e..4f343a3 100644
--- a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/PdfTable.java
+++ b/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/PdfTable.java
@@ -28,7 +28,6 @@
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.causeway.commons.internal.base._NullSafe;
-import org.apache.causeway.extensions.tabular.pdf.factory.internal.BaseTable;
import org.apache.causeway.extensions.tabular.pdf.factory.internal.Cell;
import org.apache.causeway.extensions.tabular.pdf.factory.internal.Row;
import org.apache.causeway.extensions.tabular.pdf.factory.internal.Table;
@@ -61,7 +60,7 @@ final class PdfTable {
dpage.setMediaBox(page.getMediaBox());
dpage.setRotation(page.getRotation());
ddoc.addPage(dpage);
- BaseTable dummyTable = new BaseTable(10f, 10f, 10f, table.getWidth(), 10f, ddoc, dpage, false, false);
+ var dummyTable = Table.dummy(10f, 10f, 0, 10f, table.getWidth(), 10f, ddoc, dpage);
Row dr = dummyTable.createRow(0f);
this.primaryHeaderTemplate = dr.createCell(10f, "A", HorizontalAlignment.CENTER, VerticalAlignment.MIDDLE);
this.secondaryHeaderTemplate = dr.createCell(10f, "A", HorizontalAlignment.LEFT, VerticalAlignment.MIDDLE);
diff --git a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/BaseTable.java b/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/BaseTable.java
deleted file mode 100644
index c16c02f..0000000
--- a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/BaseTable.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.causeway.extensions.tabular.pdf.factory.internal;
-
-import java.io.IOException;
-
-import org.apache.pdfbox.pdmodel.PDDocument;
-import org.apache.pdfbox.pdmodel.PDPage;
-
-public class BaseTable extends Table {
-
- public BaseTable(final float yStart, final float yStartNewPage, final float bottomMargin, final float width,
- final float margin, final PDDocument document, final PDPage currentPage, final boolean drawLines,
- final boolean drawContent) throws IOException {
- super(yStart, yStartNewPage, 0, bottomMargin, width, margin, document, currentPage, drawLines, drawContent,
- new PageProvider(document, currentPage.getMediaBox()));
- }
-
- public BaseTable(final float yStart, final float yStartNewPage, final float pageTopMargin, final float bottomMargin,
- final float width, final float margin, final PDDocument document, final PDPage currentPage, final boolean drawLines,
- final boolean drawContent) throws IOException {
- super(yStart, yStartNewPage, pageTopMargin, bottomMargin, width, margin, document, currentPage, drawLines, drawContent,
- new PageProvider(document, currentPage.getMediaBox()));
- }
-
- public BaseTable(final float yStart, final float yStartNewPage, final float pageTopMargin, final float bottomMargin,
- final float width, final float margin, final PDDocument document, final PDPage currentPage, final boolean drawLines,
- final boolean drawContent, final PageProvider pageProvider) throws IOException {
- super(yStart, yStartNewPage, pageTopMargin, bottomMargin, width, margin, document, currentPage, drawLines, drawContent, pageProvider);
- }
-
- @Override
- protected void loadFonts() {
- // Do nothing as we don't have any fonts to load
- }
-
-}
diff --git a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/Table.java b/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/Table.java
index 3d3ce5b..fb9961e 100644
--- a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/Table.java
+++ b/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/Table.java
@@ -42,9 +42,32 @@
import org.apache.causeway.extensions.tabular.pdf.factory.HorizontalAlignment;
import org.apache.causeway.extensions.tabular.pdf.factory.LineStyle;
-public abstract class Table {
+public final class Table {
- public final PDDocument document;
+ record Options(
+ float yStartNewPage,
+ float pageTopMargin,
+ float pageBottomMargin,
+ float width,
+ float margin,
+ PageProvider pageProvider,
+ boolean isDummy) {
+ }
+
+ public static Table create(final float yStart, final float yStartNewPage, final float pageTopMargin, final float bottomMargin,
+ final float width, final float margin, final PDDocument document, final PDPage currentPage) throws IOException {
+ var opts = new Table.Options(yStartNewPage, pageTopMargin, bottomMargin, width, margin, new PageProvider(document, currentPage.getMediaBox()), false);
+ return new Table(yStart, opts, currentPage);
+ }
+
+ public static Table dummy(final float yStart, final float yStartNewPage, final float pageTopMargin, final float bottomMargin,
+ final float width, final float margin, final PDDocument document, final PDPage currentPage) throws IOException {
+ var opts = new Table.Options(yStartNewPage, pageTopMargin, bottomMargin, width, margin, new PageProvider(document, currentPage.getMediaBox()), true);
+ return new Table(yStart, opts, currentPage);
+ }
+
+
+ private final PDDocument document;
private float margin;
private PDPage currentPage;
@@ -74,45 +97,25 @@ public abstract class Table {
private boolean drawDebug;
- public Table(final float yStart, final float yStartNewPage, final float pageTopMargin, final float pageBottomMargin, final float width,
- final float margin, final PDDocument document, final PDPage currentPage, final boolean drawLines, final boolean drawContent,
- final PageProvider pageProvider) throws IOException {
- this.pageTopMargin = pageTopMargin;
- this.document = document;
- this.drawLines = drawLines;
- this.drawContent = drawContent;
+ private Table(
+ final float yStart,
+ final Options opts,
+ final PDPage currentPage) throws IOException {
+ this.pageTopMargin = opts.pageTopMargin();
+ this.pageBottomMargin = opts.pageBottomMargin();
+ this.document = opts.pageProvider().getDocument();
+ this.drawLines = !opts.isDummy();
+ this.drawContent = !opts.isDummy();
// Initialize table
- this.yStartNewPage = yStartNewPage;
- this.margin = margin;
- this.width = width;
- this.yStart = yStart;
- this.pageBottomMargin = pageBottomMargin;
+ this.yStartNewPage = opts.yStartNewPage();
+ this.margin = opts.margin();
+ this.width = opts.width();
+ this.pageProvider = opts.pageProvider();
+
this.currentPage = currentPage;
- this.pageProvider = pageProvider;
- loadFonts();
+ this.yStart = yStart;
}
- public Table(final float yStartNewPage, final float pageTopMargin, final float pageBottomMargin, final float width, final float margin,
- final PDDocument document, final boolean drawLines, final boolean drawContent, final PageProvider pageProvider)
- throws IOException {
- this.pageTopMargin = pageTopMargin;
- this.document = document;
- this.drawLines = drawLines;
- this.drawContent = drawContent;
- // Initialize table
- this.yStartNewPage = yStartNewPage;
- this.margin = margin;
- this.width = width;
- this.pageProvider = pageProvider;
- this.pageBottomMargin = pageBottomMargin;
-
- // Fonts needs to be loaded before page creation
- loadFonts();
- this.currentPage = pageProvider.nextPage();
- }
-
- protected abstract void loadFonts() throws IOException;
-
protected PDType0Font loadFont(final String fontPath) throws IOException {
return FontUtils.loadFont(getDocument(), fontPath);
}
diff --git a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/TableCell.java b/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/TableCell.java
index 93379bd..76e916e 100644
--- a/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/TableCell.java
+++ b/extensions/vw/tabular/pdf/src/main/java/org/apache/causeway/extensions/tabular/pdf/factory/internal/TableCell.java
@@ -150,8 +150,8 @@ public void fillTable() {
private void createInnerTable(final float tableWidth, final Document document, final PDPage currentPage, final boolean drawTable) throws IOException {
- BaseTable table = new BaseTable(yStart, PDRectangle.A4.getHeight() - pageTopMargin, pageTopMargin,
- pageBottomMargin, tableWidth, xStart, doc, currentPage, true, true);
+ var table = Table.create(yStart, PDRectangle.A4.getHeight() - pageTopMargin, pageTopMargin,
+ pageBottomMargin, tableWidth, xStart, doc, currentPage);
document.outputSettings().prettyPrint(false);
Element htmlTable = document.select("table").first();