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();