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 05:50:16 UTC

[isis] branch master updated: ISIS-3040: separation of concerns

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


The following commit(s) were added to refs/heads/master by this push:
     new ddf6f6a61c ISIS-3040: separation of concerns
ddf6f6a61c is described below

commit ddf6f6a61c3df0c4e62725b94d99986c0defa0a9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue May 10 07:50:10 2022 +0200

    ISIS-3040: separation of concerns
    
    - encapsulate resource specifica in their corresponding classes
---
 .../fullcalendar/selector/EventSourceSelector.java |  3 +-
 .../wkt/viewer/CalendaredCollectionAbstract.java   |  4 +-
 .../fullcalendar/wkt/viewer/_Sample.java           |  4 +-
 .../wicket/pdfjs/wkt/integration/PdfJsPanel.java   | 46 ++++++---------
 .../wkt/integration/WicketStuffPdfJsReference.java | 43 --------------
 .../PdfJsIntegrationReference.java}                | 50 +++++++++--------
 .../pdfjs/wkt/integration/res/PdfJsReference.java  | 65 ++++++++++++++++++++++
 .../{wicketstuff-pdf.js => pdfjs-integration.js}   |  0
 .../wkt/ui/components/PdfJsViewerReference.java    |  5 +-
 .../org/apache/isis/viewer/wicket/ui/util/Wkt.java | 10 ++++
 10 files changed, 127 insertions(+), 103 deletions(-)

diff --git a/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/selector/EventSourceSelector.java b/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/selector/EventSourceSelector.java
index 714ffc930c..0edf5fc4a2 100644
--- a/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/selector/EventSourceSelector.java
+++ b/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/selector/EventSourceSelector.java
@@ -22,6 +22,7 @@ import org.apache.wicket.markup.html.IHeaderContributor;
 import org.apache.wicket.markup.html.WebComponent;
 
 import org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.FullCalendar;
+import org.apache.isis.viewer.wicket.ui.util.Wkt;
 
 public class EventSourceSelector extends WebComponent implements IHeaderContributor {
 
@@ -32,7 +33,7 @@ public class EventSourceSelector extends WebComponent implements IHeaderContribu
 	public EventSourceSelector(final String id, final FullCalendar calendar) {
 		super(id);
 		this.calendar = calendar;
-		setOutputMarkupId(true);
+		Wkt.ajaxEnable(this);
 	}
 
 
diff --git a/extensions/vw/fullcalendar/wicket/ui/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/viewer/CalendaredCollectionAbstract.java b/extensions/vw/fullcalendar/wicket/ui/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/viewer/CalendaredCollectionAbstract.java
index 63c047bf7f..05db86ff97 100644
--- a/extensions/vw/fullcalendar/wicket/ui/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/viewer/CalendaredCollectionAbstract.java
+++ b/extensions/vw/fullcalendar/wicket/ui/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/viewer/CalendaredCollectionAbstract.java
@@ -34,6 +34,7 @@ import org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.selector.EventSo
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.panels.PanelUtil;
+import org.apache.isis.viewer.wicket.ui.util.Wkt;
 
 import lombok.val;
 
@@ -70,8 +71,7 @@ extends PanelAbstract<DataTableModel, EntityCollectionModel> {
 
         final EntityCollectionModel model = getModel();
 
-        final NotificationPanel feedback = new NotificationPanel(ID_FEEDBACK);
-        feedback.setOutputMarkupId(true);
+        final NotificationPanel feedback = Wkt.ajaxEnable(new NotificationPanel(ID_FEEDBACK));
         addOrReplace(feedback);
 
         val config = new CalendarConfig();
diff --git a/extensions/vw/fullcalendar/wicket/ui/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/viewer/_Sample.java b/extensions/vw/fullcalendar/wicket/ui/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/viewer/_Sample.java
index d61215495b..b0652c3808 100644
--- a/extensions/vw/fullcalendar/wicket/ui/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/viewer/_Sample.java
+++ b/extensions/vw/fullcalendar/wicket/ui/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/viewer/_Sample.java
@@ -36,6 +36,7 @@ import org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.callback.Selecte
 import org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.callback.View;
 import org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.selector.EventSourceSelector;
 import org.apache.isis.valuetypes.jodatime.applib.value.JodaTimeConverters;
+import org.apache.isis.viewer.wicket.ui.util.Wkt;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -50,8 +51,7 @@ class _Sample {
 
 	public void buildCalendar(final WebMarkupContainer container, final String id) {
 
-		final FeedbackPanel feedback = new FeedbackPanel("feedback");
-		feedback.setOutputMarkupId(true);
+		final FeedbackPanel feedback = Wkt.ajaxEnable(new FeedbackPanel("feedback"));
 		container.addOrReplace(feedback);
 
 		val config = new CalendarConfig();
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 95f2031831..f09eebe1fb 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
@@ -19,14 +19,18 @@
 package org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration;
 
 import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.html.panel.Panel;
-import org.apache.wicket.request.Url;
-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.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;
+
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.val;
+import lombok.experimental.Accessors;
 
 /**
  * A panel for rendering PDF documents inline in the page
@@ -35,6 +39,9 @@ public class PdfJsPanel extends Panel {
 
     private static final long serialVersionUID = 1L;
 
+    private final static String ID_PDFJSCANVAS = "pdfJsCanvas";
+
+    @Getter @Accessors(makeFinal = true)
     private final PdfJsConfig config;
 
     /**
@@ -42,41 +49,22 @@ public class PdfJsPanel extends Panel {
      *
      * @param id The component id
      */
-    public PdfJsPanel(final String id, final PdfJsConfig config) {
+    public PdfJsPanel(final String id, final @NonNull PdfJsConfig config) {
         super(id);
 
-        this.config = Args.notNull(config, "config");
+        this.config = config;
 
-        final WebComponent pdfJsCanvas = new WebComponent("pdfJsCanvas");
-        pdfJsCanvas.setOutputMarkupId(true);
+        val pdfJsCanvas = Wkt.add(this, Wkt.ajaxEnable(new WebComponent(ID_PDFJSCANVAS)));
         config.withCanvasId(pdfJsCanvas.getMarkupId());
-        add(pdfJsCanvas);
-    }
-
-    public final PdfJsConfig getConfig() {
-        return config;
     }
 
     @Override
     public void renderHead(final IHeaderResponse response) {
         super.renderHead(response);
 
-        response.render(JavaScriptHeaderItem.forReference(PdfJsReference.INSTANCE));
-        renderWicketStuffPdfJs(response);
-    }
-
-    protected void renderWicketStuffPdfJs(final IHeaderResponse response) {
-        config.withWorkerUrl(createPdfJsWorkerUrl());
-        response.render(JavaScriptHeaderItem.forReference(WicketStuffPdfJsReference.INSTANCE));
-        response.render(OnDomReadyHeaderItem.forScript(String.format("WicketStuff.PDFJS.init(%s)", config.toJsonString())));
-    }
-
-    protected String createPdfJsWorkerUrl() {
-        final CharSequence _pdfJsUrl = urlFor(PdfJsReference.INSTANCE, null);
-        final Url pdfJsUrl = Url.parse(_pdfJsUrl);
-        final Url pdfJsWorkerUrl = Url.parse("./pdf.worker.js");
-        pdfJsUrl.resolveRelative(pdfJsWorkerUrl);
-        return pdfJsUrl.toString();
+        response.render(PdfJsReference.asHeaderItem(config));
+        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/WicketStuffPdfJsReference.java b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/WicketStuffPdfJsReference.java
deleted file mode 100644
index 66e0d52ea9..0000000000
--- a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/WicketStuffPdfJsReference.java
+++ /dev/null
@@ -1,43 +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.isis.extensions.viewer.wicket.pdfjs.wkt.integration;
-
-import java.util.List;
-
-import org.apache.wicket.markup.head.HeaderItem;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.resource.JQueryPluginResourceReference;
-
-public class WicketStuffPdfJsReference extends JQueryPluginResourceReference {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final WicketStuffPdfJsReference INSTANCE = new WicketStuffPdfJsReference();
-
-    private WicketStuffPdfJsReference() {
-        super(WicketStuffPdfJsReference.class, "res/wicketstuff-pdf.js");
-    }
-
-    @Override
-    public List<HeaderItem> getDependencies() {
-        final List<HeaderItem> dependencies = super.getDependencies();
-        dependencies.add(JavaScriptHeaderItem.forReference(PdfJsReference.INSTANCE));
-        return dependencies;
-    }
-}
diff --git a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsReference.java b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsIntegrationReference.java
similarity index 50%
rename from extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsReference.java
rename to extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsIntegrationReference.java
index 7e0ad847fd..d601148590 100644
--- a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/PdfJsReference.java
+++ b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsIntegrationReference.java
@@ -16,38 +16,42 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration;
+package org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.res;
 
-import java.util.List;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.ajax.WicketAjaxJQueryResourceReference;
 import org.apache.wicket.markup.head.HeaderItem;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
-import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.resource.JQueryPluginResourceReference;
+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 lombok.Getter;
+import lombok.experimental.Accessors;
 
-public class PdfJsReference extends JQueryPluginResourceReference {
+public class PdfJsIntegrationReference
+extends JavaScriptResourceReference {
 
     private static final long serialVersionUID = 1L;
 
-    public static final PdfJsReference INSTANCE = new PdfJsReference();
+    @Getter(lazy = true) @Accessors(fluent = true)
+    private static final PdfJsIntegrationReference instance =
+        new PdfJsIntegrationReference();
 
-    private PdfJsReference() {
-        super(PdfJsReference.class, "res/pdf.js");
+    private PdfJsIntegrationReference() {
+        super(PdfJsIntegrationReference.class, "pdfjs-integration.js");
     }
 
-    @Override
-    public List<HeaderItem> getDependencies() {
-        final List<HeaderItem> dependencies = super.getDependencies();
-        ResourceReference wicketEventReference;
-        if (Application.exists()) {
-            wicketEventReference = Application.get()
-                    .getJavaScriptLibrarySettings().getJQueryReference();
-        } else {
-            wicketEventReference = WicketAjaxJQueryResourceReference.get();
-        }
-        dependencies.add(JavaScriptHeaderItem.forReference(wicketEventReference));
-        return dependencies;
+    /**
+     * @return this resource reference singleton instance as header item
+     */
+    public static HeaderItem asHeaderItem() {
+        return JavaScriptHeaderItem.forReference(instance());
     }
+
+    public static OnDomReadyHeaderItem domReadyScript(
+            final PdfJsConfig 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
new file mode 100644
index 0000000000..a19a37bef1
--- /dev/null
+++ b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/PdfJsReference.java
@@ -0,0 +1,65 @@
+/*
+ *  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.isis.extensions.viewer.wicket.pdfjs.wkt.integration.res;
+
+import org.apache.wicket.markup.head.HeaderItem;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+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 lombok.Getter;
+import lombok.experimental.Accessors;
+
+public class PdfJsReference
+extends JavaScriptResourceReference {
+
+    private static final long serialVersionUID = 1L;
+
+    @Getter(lazy = true) @Accessors(fluent = true)
+    private static final PdfJsReference instance =
+        new PdfJsReference();
+
+    private PdfJsReference() {
+        super(PdfJsReference.class, "pdf.js");
+    }
+
+    /**
+     * 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());
+        return JavaScriptHeaderItem.forReference(instance());
+    }
+
+    // -- HELPER
+
+    private static String createPdfJsWorkerUrl() {
+        final CharSequence _pdfJsUrl = RequestCycle.get().urlFor(instance(), null);
+        final Url pdfJsUrl = Url.parse(_pdfJsUrl);
+        final Url pdfJsWorkerUrl = Url.parse("./pdf.worker.js");
+        pdfJsUrl.resolveRelative(pdfJsWorkerUrl);
+        return pdfJsUrl.toString();
+    }
+
+}
diff --git a/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/wicketstuff-pdf.js b/extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/pdfjs-integration.js
similarity index 100%
rename from extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/wicketstuff-pdf.js
rename to extensions/vw/pdfjs/wicket/integration/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/integration/res/pdfjs-integration.js
diff --git a/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerReference.java b/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerReference.java
index abcecbc2a2..4a2aa0d9ae 100644
--- a/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerReference.java
+++ b/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerReference.java
@@ -21,10 +21,9 @@ package org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.ui.components;
 import java.util.List;
 
 import org.apache.wicket.markup.head.HeaderItem;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.resource.JQueryPluginResourceReference;
 
-import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.WicketStuffPdfJsReference;
+import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.res.PdfJsIntegrationReference;
 
 class PdfJsViewerReference extends JQueryPluginResourceReference {
 
@@ -37,7 +36,7 @@ class PdfJsViewerReference extends JQueryPluginResourceReference {
     @Override
     public List<HeaderItem> getDependencies() {
         final List<HeaderItem> dependencies = super.getDependencies();
-        dependencies.add(JavaScriptHeaderItem.forReference(WicketStuffPdfJsReference.INSTANCE));
+        dependencies.add(PdfJsIntegrationReference.asHeaderItem());
         return dependencies;
     }
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
index 7518ec8a56..51db7e14b4 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
@@ -115,6 +115,16 @@ public class Wkt {
         return behavior;
     }
 
+    // -- AJAX ENABLER
+
+    /**
+     * Requirement for AJAX updates to work.
+     */
+    public <T extends Component> T ajaxEnable(final T component) {
+        component.setOutputMarkupId(true);
+        return component;
+    }
+
     // -- ATTRIBUTES
 
     /**