You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/05/10 09:18:45 UTC

[isis] 02/02: ISIS-3040: decouple pdf.js applib and metamodel from wicket

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 4293500de3a89bd722d2146ca5bf50d818a5565d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue May 10 11:18:38 2022 +0200

    ISIS-3040: decouple pdf.js applib and metamodel from wicket
---
 extensions/vw/pdfjs/applib/pom.xml                 |  12 +--
 .../wicket/pdfjs/applib/config/PdfJsConfig.java    | 109 ++++++++-------------
 .../viewer/wicket/pdfjs/applib/config/Scale.java   |   8 +-
 extensions/vw/pdfjs/metamodel/pom.xml              |   5 -
 .../facet/PdfJsViewerFacetFromAnnotation.java      |  17 ++--
 .../pdfjs/wkt/integration/PdfJsConfigWkt.java}     |  36 ++++---
 .../wicket/pdfjs/wkt/integration/PdfJsPanel.java   |  13 ++-
 .../integration/res/PdfJsIntegrationReference.java |   4 +-
 .../pdfjs/wkt/integration/res/PdfJsReference.java  |  11 ++-
 extensions/vw/pdfjs/wicket/pom.xml                 |   7 ++
 .../pdfjs/wkt/ui/components/PdfJsViewerPanel.java  |  15 ++-
 11 files changed, 112 insertions(+), 125 deletions(-)

diff --git a/extensions/vw/pdfjs/applib/pom.xml b/extensions/vw/pdfjs/applib/pom.xml
index 2e18e36b4a..961ee74da5 100644
--- a/extensions/vw/pdfjs/applib/pom.xml
+++ b/extensions/vw/pdfjs/applib/pom.xml
@@ -37,15 +37,13 @@
     <dependencies>
 
         <dependency>
-            <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-applib</artifactId>
+            <groupId>org.apache.isis.commons</groupId>
+            <artifactId>isis-commons</artifactId>
         </dependency>
-
+        
         <dependency>
-            <groupId>de.agilecoders.wicket</groupId>
-            <artifactId>wicket-bootstrap-core</artifactId>
-            <!-- to avoid polluting the classpath -->
-            <optional>true</optional>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-applib</artifactId>
         </dependency>
 
     </dependencies>
diff --git a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java
index 4c7474962d..375ead641a 100644
--- a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java
+++ b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java
@@ -18,93 +18,68 @@
  */
 package org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config;
 
-import org.apache.wicket.util.lang.Args;
+import java.io.Serializable;
 
-import de.agilecoders.wicket.jquery.AbstractConfig;
-import de.agilecoders.wicket.jquery.IKey;
-import de.agilecoders.wicket.jquery.Key;
+import org.springframework.util.Assert;
+
+import org.apache.isis.commons.internal.resources._Json;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.With;
 
 /**
  * @since 2.0 {@index}
  */
-public class PdfJsConfig extends AbstractConfig {
+@Getter @With @AllArgsConstructor @NoArgsConstructor @Builder
+public class PdfJsConfig implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    private static final IKey<Integer> INITIAL_PAGE = new Key<>("initialPage", 1);
-    private static final IKey<String> INITIAL_SCALE = new Key<>("initialScale", Scale._1_00.getValue());
-    private static final IKey<Integer> INITIAL_HEIGHT = new Key<>("initialHeight", 800);
-    private static final IKey<Boolean> WORKER_DISABLED = new Key<>("workerDisabled", false);
-    private static final IKey<CharSequence> PDF_DOCUMENT_URL = new Key<>("documentUrl", null);
-    private static final IKey<CharSequence> WORKER_URL = new Key<>("workerUrl", null);
-    private static final IKey<CharSequence> CANVAS_ID = new Key<>("canvasId", null);
+    @Builder.Default
+    private int initialPage = 1;
+
+    @Builder.Default
+    private Scale initialScale = Scale._1_00;
+
+    @Builder.Default
+    private int initialHeight = 800;
+
+    @Builder.Default
+    private boolean workerDisabled = false;
+
+    private CharSequence documentUrl;
+    private CharSequence workerUrl;
+    private CharSequence canvasId;
 
     public PdfJsConfig withInitialPage(int initialPage) {
         if (initialPage < 1) {
             initialPage = 1;
         }
-        put(INITIAL_PAGE, initialPage);
-        return this;
-    }
-
-    public int getInitialPage() {
-        return get(INITIAL_PAGE);
+        return asBuilder().initialPage(initialPage).build();
     }
 
     public PdfJsConfig withInitialHeight(final int initialHeight) {
-        Args.isTrue(initialHeight >= 400 && initialHeight <= 2000,
-                "'initialHeight' must be between 400 and 2000");
-        put(INITIAL_HEIGHT, initialHeight);
-        return this;
-    }
-
-    public int getInitialHeight() {
-        return get(INITIAL_HEIGHT);
-    }
-
-    public PdfJsConfig withInitialScale(final Scale initialScale) {
-        put(INITIAL_SCALE, initialScale.getValue());
-        return this;
-    }
-
-    public String getInitialScale() {
-        return get(INITIAL_SCALE);
-    }
-
-    public PdfJsConfig disableWorker(final boolean disable) {
-        put(WORKER_DISABLED, disable);
-        return this;
-    }
-
-    public boolean isWorkerDisabled() {
-        return get(WORKER_DISABLED);
-    }
-
-    public PdfJsConfig withDocumentUrl(final CharSequence url) {
-        put(PDF_DOCUMENT_URL, url);
-        return this;
-    }
-
-    public CharSequence getDocumentUrl() {
-        return get(PDF_DOCUMENT_URL);
-    }
-
-    public PdfJsConfig withWorkerUrl(final String url) {
-        put(WORKER_URL, url);
-        return this;
-    }
-
-    public CharSequence getWorkerUrl() {
-        return get(WORKER_URL);
+        Assert.isTrue(initialHeight >= 400 && initialHeight <= 2000,
+                ()->String.format("'initialHeight' must be between 400 and 2000; got %d", initialHeight));
+        return asBuilder().initialHeight(initialHeight).build();
     }
 
-    public PdfJsConfig withCanvasId(final String url) {
-        put(CANVAS_ID, url);
-        return this;
+    public PdfJsConfig.PdfJsConfigBuilder asBuilder() {
+        return PdfJsConfig.builder()
+                .canvasId(getCanvasId())
+                .documentUrl(getDocumentUrl())
+                .initialHeight(getInitialHeight())
+                .initialPage(getInitialPage())
+                .initialScale(getInitialScale())
+                .workerDisabled(isWorkerDisabled())
+                .workerUrl(getWorkerUrl());
     }
 
-    public CharSequence getCanvasId() {
-        return get(CANVAS_ID);
+    public String toJsonString() {
+        return _Json.toString(this);
     }
 
 }
diff --git a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/Scale.java b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/Scale.java
index 459a61f76d..53061a7fd0 100644
--- a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/Scale.java
+++ b/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/Scale.java
@@ -18,7 +18,9 @@
  */
 package org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config;
 
-import org.apache.wicket.util.lang.Objects;
+import java.util.Objects;
+
+import com.fasterxml.jackson.annotation.JsonValue;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
@@ -50,7 +52,7 @@ public enum Scale {
     /** 400% */
     _4_00("4.00"),;
 
-    @Getter
+    @Getter @JsonValue
     private final String value;
 
     public static Scale forValue(final String scaleValue) {
@@ -58,7 +60,7 @@ public enum Scale {
             return null;
         }
         for (Scale scale : Scale.values()) {
-            if (Objects.equal(scale.value, scaleValue)) {
+            if (Objects.equals(scale.value, scaleValue)) {
                 return scale;
             }
         }
diff --git a/extensions/vw/pdfjs/metamodel/pom.xml b/extensions/vw/pdfjs/metamodel/pom.xml
index dda1fbb4d0..0844885f43 100644
--- a/extensions/vw/pdfjs/metamodel/pom.xml
+++ b/extensions/vw/pdfjs/metamodel/pom.xml
@@ -46,11 +46,6 @@
             <artifactId>isis-core-metamodel</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>de.agilecoders.wicket</groupId>
-            <artifactId>wicket-bootstrap-core</artifactId>
-        </dependency>
-
     </dependencies>
 
 </project>
diff --git a/extensions/vw/pdfjs/metamodel/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/metamodel/facet/PdfJsViewerFacetFromAnnotation.java b/extensions/vw/pdfjs/metamodel/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/metamodel/facet/PdfJsViewerFacetFromAnnotation.java
index 4a02a80008..eb771c46e9 100644
--- a/extensions/vw/pdfjs/metamodel/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/metamodel/facet/PdfJsViewerFacetFromAnnotation.java
+++ b/extensions/vw/pdfjs/metamodel/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/metamodel/facet/PdfJsViewerFacetFromAnnotation.java
@@ -42,21 +42,21 @@ public class PdfJsViewerFacetFromAnnotation extends PdfJsViewerFacetAbstract {
             final PdfJsViewer annotation,
             final FacetHolder holder) {
 
-        PdfJsConfig config = new PdfJsConfig();
+        var config = new PdfJsConfig();
 
         int initialPage = annotation.initialPageNum();
         if (initialPage > 0) {
-            config.withInitialPage(initialPage);
+            config = config.withInitialPage(initialPage);
         }
 
         final Scale initialScale = annotation.initialScale();
         if (initialScale != Scale._1_00) {
-            config.withInitialScale(initialScale);
+            config = config.withInitialScale(initialScale);
         }
 
         int initialHeight = annotation.initialHeight();
         if (initialHeight > 0) {
-            config.withInitialHeight(initialHeight);
+            config = config.withInitialHeight(initialHeight);
         }
 
         return new PdfJsViewerFacetFromAnnotation(config, holder);
@@ -64,7 +64,7 @@ public class PdfJsViewerFacetFromAnnotation extends PdfJsViewerFacetAbstract {
 
     @Override
     public PdfJsConfig configFor(final PdfJsViewerAdvisor.InstanceKey instanceKey) {
-        final PdfJsConfig config = super.configFor(instanceKey);
+        var config = super.configFor(instanceKey);
 
         if(advisors != null) {
             for (PdfJsViewerAdvisor advisor : advisors) {
@@ -72,15 +72,15 @@ public class PdfJsViewerFacetFromAnnotation extends PdfJsViewerFacetAbstract {
                 if(advice != null) {
                     final Integer pageNum = advice.getPageNum();
                     if(pageNum != null) {
-                        config.withInitialPage(pageNum);
+                        config = config.withInitialPage(pageNum);
                     }
                     final Scale scale = advice.getScale();
                     if(scale != null) {
-                        config.withInitialScale(scale);
+                        config = config.withInitialScale(scale);
                     }
                     final Integer height = advice.getHeight();
                     if(height != null) {
-                        config.withInitialHeight(height);
+                        config = config.withInitialHeight(height);
                     }
                     break;
                 }
@@ -90,5 +90,4 @@ public class PdfJsViewerFacetFromAnnotation extends PdfJsViewerFacetAbstract {
         return config;
     }
 
-
 }
diff --git a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsConfigWkt.java
similarity index 70%
copy from extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java
copy to extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsConfigWkt.java
index 4c7474962d..c50af9edf9 100644
--- a/extensions/vw/pdfjs/applib/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/applib/config/PdfJsConfig.java
+++ b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsConfigWkt.java
@@ -16,18 +16,18 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config;
+package org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration;
 
 import org.apache.wicket.util.lang.Args;
 
+import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.PdfJsConfig;
+import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.Scale;
+
 import de.agilecoders.wicket.jquery.AbstractConfig;
 import de.agilecoders.wicket.jquery.IKey;
 import de.agilecoders.wicket.jquery.Key;
 
-/**
- * @since 2.0 {@index}
- */
-public class PdfJsConfig extends AbstractConfig {
+public class PdfJsConfigWkt extends AbstractConfig {
 
     private static final long serialVersionUID = 1L;
 
@@ -39,7 +39,19 @@ public class PdfJsConfig extends AbstractConfig {
     private static final IKey<CharSequence> WORKER_URL = new Key<>("workerUrl", null);
     private static final IKey<CharSequence> CANVAS_ID = new Key<>("canvasId", null);
 
-    public PdfJsConfig withInitialPage(int initialPage) {
+    public static PdfJsConfigWkt from(final PdfJsConfig config) {
+        return new PdfJsConfigWkt()
+            .withCanvasId(config.getCanvasId())
+            .withDocumentUrl(config.getDocumentUrl())
+            .withInitialHeight(config.getInitialHeight())
+            .withInitialScale(config.getInitialScale())
+            .withInitialHeight(config.getInitialHeight())
+            .withWorkerUrl(config.getWorkerUrl())
+            .disableWorker(config.isWorkerDisabled())
+            ;
+    }
+
+    public PdfJsConfigWkt withInitialPage(int initialPage) {
         if (initialPage < 1) {
             initialPage = 1;
         }
@@ -51,7 +63,7 @@ public class PdfJsConfig extends AbstractConfig {
         return get(INITIAL_PAGE);
     }
 
-    public PdfJsConfig withInitialHeight(final int initialHeight) {
+    public PdfJsConfigWkt withInitialHeight(final int initialHeight) {
         Args.isTrue(initialHeight >= 400 && initialHeight <= 2000,
                 "'initialHeight' must be between 400 and 2000");
         put(INITIAL_HEIGHT, initialHeight);
@@ -62,7 +74,7 @@ public class PdfJsConfig extends AbstractConfig {
         return get(INITIAL_HEIGHT);
     }
 
-    public PdfJsConfig withInitialScale(final Scale initialScale) {
+    public PdfJsConfigWkt withInitialScale(final Scale initialScale) {
         put(INITIAL_SCALE, initialScale.getValue());
         return this;
     }
@@ -71,7 +83,7 @@ public class PdfJsConfig extends AbstractConfig {
         return get(INITIAL_SCALE);
     }
 
-    public PdfJsConfig disableWorker(final boolean disable) {
+    public PdfJsConfigWkt disableWorker(final boolean disable) {
         put(WORKER_DISABLED, disable);
         return this;
     }
@@ -80,7 +92,7 @@ public class PdfJsConfig extends AbstractConfig {
         return get(WORKER_DISABLED);
     }
 
-    public PdfJsConfig withDocumentUrl(final CharSequence url) {
+    public PdfJsConfigWkt withDocumentUrl(final CharSequence url) {
         put(PDF_DOCUMENT_URL, url);
         return this;
     }
@@ -89,7 +101,7 @@ public class PdfJsConfig extends AbstractConfig {
         return get(PDF_DOCUMENT_URL);
     }
 
-    public PdfJsConfig withWorkerUrl(final String url) {
+    public PdfJsConfigWkt withWorkerUrl(final CharSequence url) {
         put(WORKER_URL, url);
         return this;
     }
@@ -98,7 +110,7 @@ public class PdfJsConfig extends AbstractConfig {
         return get(WORKER_URL);
     }
 
-    public PdfJsConfig withCanvasId(final String url) {
+    public PdfJsConfigWkt withCanvasId(final CharSequence url) {
         put(CANVAS_ID, url);
         return this;
     }
diff --git a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsPanel.java b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsPanel.java
index f09eebe1fb..93168c1e7a 100644
--- a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsPanel.java
+++ b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsPanel.java
@@ -22,7 +22,6 @@ import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.html.panel.Panel;
 
-import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.PdfJsConfig;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.res.PdfJsIntegrationReference;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.res.PdfJsReference;
 import org.apache.isis.viewer.wicket.ui.util.Wkt;
@@ -42,27 +41,27 @@ public class PdfJsPanel extends Panel {
     private final static String ID_PDFJSCANVAS = "pdfJsCanvas";
 
     @Getter @Accessors(makeFinal = true)
-    private final PdfJsConfig config;
+    private PdfJsConfigWkt config;
 
     /**
      * Constructor.
      *
      * @param id The component id
      */
-    public PdfJsPanel(final String id, final @NonNull PdfJsConfig config) {
+    public PdfJsPanel(final String id, final @NonNull PdfJsConfigWkt config) {
         super(id);
 
-        this.config = config;
-
         val pdfJsCanvas = Wkt.add(this, Wkt.ajaxEnable(new WebComponent(ID_PDFJSCANVAS)));
-        config.withCanvasId(pdfJsCanvas.getMarkupId());
+
+        this.config = PdfJsReference.configureWorkerUrl(config)
+                .withCanvasId(pdfJsCanvas.getMarkupId());
     }
 
     @Override
     public void renderHead(final IHeaderResponse response) {
         super.renderHead(response);
 
-        response.render(PdfJsReference.asHeaderItem(config));
+        response.render(PdfJsReference.asHeaderItem());
         response.render(PdfJsIntegrationReference.asHeaderItem());
         response.render(PdfJsIntegrationReference.domReadyScript(config));
     }
diff --git a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsIntegrationReference.java b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsIntegrationReference.java
index d601148590..3ed6fa164f 100644
--- a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsIntegrationReference.java
+++ b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsIntegrationReference.java
@@ -23,7 +23,7 @@ import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 
-import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.PdfJsConfig;
+import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.PdfJsConfigWkt;
 
 import lombok.Getter;
 import lombok.experimental.Accessors;
@@ -49,7 +49,7 @@ extends JavaScriptResourceReference {
     }
 
     public static OnDomReadyHeaderItem domReadyScript(
-            final PdfJsConfig config) {
+            final PdfJsConfigWkt config) {
         return OnDomReadyHeaderItem.forScript(
                 String.format("WicketStuff.PDFJS.init(%s)", config.toJsonString()));
     }
diff --git a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsReference.java b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsReference.java
index a19a37bef1..2a4d6cbee2 100644
--- a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsReference.java
+++ b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsReference.java
@@ -24,7 +24,7 @@ import org.apache.wicket.request.Url;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 
-import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.PdfJsConfig;
+import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.PdfJsConfigWkt;
 
 import lombok.Getter;
 import lombok.experimental.Accessors;
@@ -43,15 +43,16 @@ extends JavaScriptResourceReference {
     }
 
     /**
-     * As a side-effect updates config's worker-url.
-     * @param config
      * @return this resource reference singleton instance as header item
      */
-    public static HeaderItem asHeaderItem(final PdfJsConfig config) {
-        config.withWorkerUrl(createPdfJsWorkerUrl());
+    public static HeaderItem asHeaderItem() {
         return JavaScriptHeaderItem.forReference(instance());
     }
 
+    public static PdfJsConfigWkt configureWorkerUrl(final PdfJsConfigWkt config) {
+        return config.withWorkerUrl(createPdfJsWorkerUrl());
+    }
+
     // -- HELPER
 
     private static String createPdfJsWorkerUrl() {
diff --git a/extensions/vw/pdfjs/wicket/pom.xml b/extensions/vw/pdfjs/wicket/pom.xml
index 0a03e1ba91..5b234e48d5 100644
--- a/extensions/vw/pdfjs/wicket/pom.xml
+++ b/extensions/vw/pdfjs/wicket/pom.xml
@@ -35,5 +35,12 @@
     	<module>integration</module>
     	<module>ui</module>
     </modules>
+
+	<dependency>
+		<groupId>de.agilecoders.wicket</groupId>
+		<artifactId>wicket-bootstrap-core</artifactId>
+		<!-- to avoid polluting the classpath -->
+		<optional>true</optional>
+	</dependency>
     
 </project>
diff --git a/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerPanel.java b/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerPanel.java
index 611a16774d..fc3835f7a1 100644
--- a/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerPanel.java
+++ b/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerPanel.java
@@ -48,6 +48,7 @@ import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.PdfJsConfig;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.Scale;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.spi.PdfJsViewerAdvisor;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.metamodel.facet.PdfJsViewerFacet;
+import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.PdfJsConfigWkt;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.PdfJsPanel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
@@ -211,16 +212,14 @@ implements IRequestListener {
         if (adapter != null
                 && blob != null) {
 
-            val pdfJsConfig =
+            val pdfJsConfig = PdfJsConfigWkt.from(
                     scalarModel.lookupFacet(PdfJsViewerFacet.class)
                     .map(pdfJsViewerFacet->pdfJsViewerFacet.configFor(buildKey()))
-                    .orElseGet(PdfJsConfig::new);
+                    .orElseGet(PdfJsConfig::new)
+                    .withDocumentUrl(urlFor(
+                            new ListenerRequestHandler(
+                                    new PageAndComponentProvider(getPage(), this)))));
 
-            // Wicket 8 migration: previously this was urlFor(IResourceListener.INTERFACE, null);
-            val urlStr = urlFor(
-                    new ListenerRequestHandler(
-                            new PageAndComponentProvider(getPage(), this)));
-            pdfJsConfig.withDocumentUrl(urlStr);
             val pdfJsPanel = new PdfJsPanel(ID_SCALAR_VALUE, pdfJsConfig);
 
             val prevPageButton = createComponent("prevPage", pdfJsConfig);
@@ -273,7 +272,7 @@ implements IRequestListener {
         return containerIfCompact;
     }
 
-    private MarkupContainer createComponent(final String id, final PdfJsConfig config) {
+    private MarkupContainer createComponent(final String id, final PdfJsConfigWkt config) {
         return new WebMarkupContainer(id) {
             private static final long serialVersionUID = 1L;