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 06:38:43 UTC

[isis] branch master updated: ISIS-3040: convert all resource references to singletons (optimization)

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 1e56fe9d6c ISIS-3040: convert all resource references to singletons (optimization)
1e56fe9d6c is described below

commit 1e56fe9d6ca75148166f9aa23922c38ceae3e45f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue May 10 08:38:37 2022 +0200

    ISIS-3040: convert all resource references to singletons (optimization)
---
 .../res/FullCalendarEventSourceEvents.java         | 26 ++----------
 ...nce.java => PdfJsViewerCallbacksReference.java} | 26 ++++++------
 ...Reference.java => PdfJsViewerCssReference.java} | 29 ++++++++------
 ...rReference.java => PdfJsViewerJsReference.java} | 19 ++++++++-
 .../pdfjs/wkt/ui/components/PdfJsViewerPanel.java  | 46 ++++++++--------------
 .../PdfJsViewerPanelCallbacks.template.js          |  6 +--
 .../wicket/ui/util/LicensedTextTemplate.java       | 37 ++++++-----------
 7 files changed, 81 insertions(+), 108 deletions(-)

diff --git a/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/res/FullCalendarEventSourceEvents.java b/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/res/FullCalendarEventSourceEvents.java
index 068a3a70ea..6831c8aaca 100644
--- a/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/res/FullCalendarEventSourceEvents.java
+++ b/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/res/FullCalendarEventSourceEvents.java
@@ -20,20 +20,17 @@ package org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.res;
 
 import java.util.Map;
 import java.util.function.Function;
-import java.util.stream.Collectors;
 
-import org.apache.wicket.util.template.PackageTextTemplate;
-
-import org.apache.isis.commons.internal.base._Text;
 import org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.CalendarConfig;
 import org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.EventSource;
+import org.apache.isis.viewer.wicket.ui.util.LicensedTextTemplate;
 
 import lombok.Getter;
 import lombok.val;
 import lombok.experimental.Accessors;
 
 public class FullCalendarEventSourceEvents
-extends PackageTextTemplate {
+extends LicensedTextTemplate {
 
     private static final long serialVersionUID = 1L;
 
@@ -42,23 +39,8 @@ extends PackageTextTemplate {
         new FullCalendarEventSourceEvents();
 
     private FullCalendarEventSourceEvents() {
-        super(FullCalendarEventSourceEvents.class, "fullcalendar-event-source-events.js");
-    }
-
-    // super class provides no way of accessing its memoized buffer; so we need to re-memoize here
-    private String scriptTemplate = null;
-
-    @Override
-    public String getString() {
-        if(scriptTemplate==null) {
-            val raw = super.getString();
-
-            // strip first 23 comment lines
-            this.scriptTemplate = _Text.streamLines(raw)
-            .skip(23)
-            .collect(Collectors.joining(" "));
-        }
-        return scriptTemplate;
+        // skip 23 leading lines in referenced java-script
+        super(FullCalendarEventSourceEvents.class, "fullcalendar-event-source-events.js", 23);
     }
 
     public static void setupEventSourceUrls(
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/PdfJsViewerCallbacksReference.java
similarity index 60%
copy from extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerReference.java
copy to extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerCallbacksReference.java
index 4a2aa0d9ae..dbf191b4d4 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/PdfJsViewerCallbacksReference.java
@@ -18,25 +18,23 @@
  */
 package org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.ui.components;
 
-import java.util.List;
+import org.apache.isis.viewer.wicket.ui.util.LicensedTextTemplate;
 
-import org.apache.wicket.markup.head.HeaderItem;
-import org.apache.wicket.resource.JQueryPluginResourceReference;
+import lombok.Getter;
+import lombok.experimental.Accessors;
 
-import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.res.PdfJsIntegrationReference;
-
-class PdfJsViewerReference extends JQueryPluginResourceReference {
+public class PdfJsViewerCallbacksReference
+extends LicensedTextTemplate {
 
     private static final long serialVersionUID = 1L;
 
-    public PdfJsViewerReference() {
-        super(PdfJsViewerPanel.class, "PdfJsViewerPanel.js");
-    }
+    @Getter(lazy = true) @Accessors(fluent = true)
+    private static final PdfJsViewerCallbacksReference instance =
+        new PdfJsViewerCallbacksReference();
 
-    @Override
-    public List<HeaderItem> getDependencies() {
-        final List<HeaderItem> dependencies = super.getDependencies();
-        dependencies.add(PdfJsIntegrationReference.asHeaderItem());
-        return dependencies;
+    private PdfJsViewerCallbacksReference() {
+        // skip 18 leading lines in referenced java-script
+        super(PdfJsViewerCallbacksReference.class, "PdfJsViewerPanelCallbacks.template.js", 18);
     }
+
 }
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/PdfJsViewerCssReference.java
similarity index 60%
copy from extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerReference.java
copy to extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerCssReference.java
index 4a2aa0d9ae..bf553eefee 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/PdfJsViewerCssReference.java
@@ -18,25 +18,30 @@
  */
 package org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.ui.components;
 
-import java.util.List;
-
+import org.apache.wicket.markup.head.CssHeaderItem;
 import org.apache.wicket.markup.head.HeaderItem;
-import org.apache.wicket.resource.JQueryPluginResourceReference;
+import org.apache.wicket.request.resource.CssResourceReference;
 
-import org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.integration.res.PdfJsIntegrationReference;
+import lombok.Getter;
+import lombok.experimental.Accessors;
 
-class PdfJsViewerReference extends JQueryPluginResourceReference {
+class PdfJsViewerCssReference extends CssResourceReference {
 
     private static final long serialVersionUID = 1L;
 
-    public PdfJsViewerReference() {
-        super(PdfJsViewerPanel.class, "PdfJsViewerPanel.js");
+    @Getter(lazy = true) @Accessors(fluent = true)
+    private static final PdfJsViewerCssReference instance =
+        new PdfJsViewerCssReference();
+
+    private PdfJsViewerCssReference() {
+        super(PdfJsViewerPanel.class, "PdfJsViewerPanel.css");
     }
 
-    @Override
-    public List<HeaderItem> getDependencies() {
-        final List<HeaderItem> dependencies = super.getDependencies();
-        dependencies.add(PdfJsIntegrationReference.asHeaderItem());
-        return dependencies;
+    /**
+     * @return this resource reference singleton instance as header item
+     */
+    public static HeaderItem asHeaderItem() {
+        return CssHeaderItem.forReference(instance());
     }
+
 }
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/PdfJsViewerJsReference.java
similarity index 72%
rename from extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerReference.java
rename to extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerJsReference.java
index 4a2aa0d9ae..09d404b09b 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/PdfJsViewerJsReference.java
@@ -21,18 +21,33 @@ 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.res.PdfJsIntegrationReference;
 
-class PdfJsViewerReference extends JQueryPluginResourceReference {
+import lombok.Getter;
+import lombok.experimental.Accessors;
+
+class PdfJsViewerJsReference extends JQueryPluginResourceReference {
 
     private static final long serialVersionUID = 1L;
 
-    public PdfJsViewerReference() {
+    @Getter(lazy = true) @Accessors(fluent = true)
+    private static final PdfJsViewerJsReference instance =
+        new PdfJsViewerJsReference();
+
+    private PdfJsViewerJsReference() {
         super(PdfJsViewerPanel.class, "PdfJsViewerPanel.js");
     }
 
+    /**
+     * @return this resource reference singleton instance as header item
+     */
+    public static HeaderItem asHeaderItem() {
+        return JavaScriptHeaderItem.forReference(instance());
+    }
+
     @Override
     public List<HeaderItem> getDependencies() {
         final List<HeaderItem> dependencies = super.getDependencies();
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 a495942acc..611a16774d 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
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.extensions.viewer.wicket.pdfjs.wkt.ui.components;
 
-import java.nio.charset.StandardCharsets;
+import java.util.Map;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.IRequestListener;
@@ -30,7 +30,6 @@ import org.apache.wicket.core.request.handler.ListenerRequestHandler;
 import org.apache.wicket.core.request.handler.PageAndComponentProvider;
 import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
 import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.head.CssHeaderItem;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -40,12 +39,10 @@ import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.handler.resource.ResourceRequestHandler;
 import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException;
 import org.apache.wicket.request.resource.ByteArrayResource;
-import org.apache.wicket.request.resource.CssResourceReference;
 import org.apache.wicket.request.resource.IResource;
 
 import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.applib.value.Blob;
-import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.PdfJsConfig;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.config.Scale;
@@ -75,14 +72,8 @@ implements IRequestListener {
     AbstractDefaultAjaxBehavior updateScale;
     AbstractDefaultAjaxBehavior updateHeight;
 
-    String pdfJsViewerPanelCallbacksTemplateJs;
-
     PdfJsViewerPanel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel);
-
-        pdfJsViewerPanelCallbacksTemplateJs = _Strings.readFromResource(
-                PdfJsViewerPanel.class, "PdfJsViewerPanelCallbacks.template.js", StandardCharsets.UTF_8);
-
     }
 
     /**
@@ -185,14 +176,14 @@ implements IRequestListener {
     private void updateAdvisors(final Updater updater) {
         val instanceKey = buildKey();
         getServiceRegistry().select(PdfJsViewerAdvisor.class)
-                .forEach(advisor -> updater.update(advisor, instanceKey));
+        .forEach(advisor -> updater.update(advisor, instanceKey));
     }
 
     private PdfJsViewerAdvisor.InstanceKey buildKey() {
         return getServiceRegistry().lookupService(UserService.class)
-            .map(this::toInstanceKey)
-            .orElseThrow(() -> new IllegalStateException(
-                                    "Could not locate UserService"));
+                .map(this::toInstanceKey)
+                .orElseThrow(() -> new IllegalStateException(
+                        "Could not locate UserService"));
     }
 
     private PdfJsViewerAdvisor.InstanceKey toInstanceKey(final UserService userService) {
@@ -221,9 +212,9 @@ implements IRequestListener {
                 && blob != null) {
 
             val pdfJsConfig =
-                scalarModel.lookupFacet(PdfJsViewerFacet.class)
-                .map(pdfJsViewerFacet->pdfJsViewerFacet.configFor(buildKey()))
-                .orElseGet(PdfJsConfig::new);
+                    scalarModel.lookupFacet(PdfJsViewerFacet.class)
+                    .map(pdfJsViewerFacet->pdfJsViewerFacet.configFor(buildKey()))
+                    .orElseGet(PdfJsConfig::new);
 
             // Wicket 8 migration: previously this was urlFor(IResourceListener.INTERFACE, null);
             val urlStr = urlFor(
@@ -251,8 +242,8 @@ implements IRequestListener {
                     currentZoomSelect, currentHeightSelect, printButton, downloadResourceLink);
 
 
-//            Label fileNameIfCompact = new Label("fileNameIfCompact", blob.getName());
-//            downloadLink.add(fileNameIfCompact);
+            //            Label fileNameIfCompact = new Label("fileNameIfCompact", blob.getName());
+            //            downloadLink.add(fileNameIfCompact);
 
 
             containerIfRegular.addOrReplace(new NotificationPanel(ID_FEEDBACK, pdfJsPanel, new ComponentFeedbackMessageFilter(pdfJsPanel)));
@@ -302,18 +293,13 @@ implements IRequestListener {
     public void renderHead(final IHeaderResponse response) {
         super.renderHead(response);
 
-        response.render(CssHeaderItem.forReference(new CssResourceReference(PdfJsViewerPanel.class, "PdfJsViewerPanel.css")));
-        response.render(JavaScriptHeaderItem.forReference(new PdfJsViewerReference()));
-
-         renderFunctionsForUpdateCallbacks(response);
-    }
-
-    private void renderFunctionsForUpdateCallbacks(final IHeaderResponse response) {
+        response.render(PdfJsViewerCssReference.asHeaderItem());
+        response.render(PdfJsViewerJsReference.asHeaderItem());
 
-        String script = pdfJsViewerPanelCallbacksTemplateJs
-                .replace("__updatePageNum_getCallbackUrl()__", updatePageNum.getCallbackUrl())
-                .replace("__updateScale_getCallbackUrl()__", updateScale.getCallbackUrl())
-                .replace("__updateHeight_getCallbackUrl()__", updateHeight.getCallbackUrl());
+        val script = PdfJsViewerCallbacksReference.instance().asString(Map.of(
+                "pageNumCallbackUrl", updatePageNum.getCallbackUrl(),
+                "scaleCallbackUrl", updateScale.getCallbackUrl(),
+                "heightCallbackUrl", updateHeight.getCallbackUrl()));
 
         response.render(JavaScriptHeaderItem.forScript(script, "pdfJsViewerCallbacks"));
     }
diff --git a/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerPanelCallbacks.template.js b/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerPanelCallbacks.template.js
index 0850a27c4a..9750691f69 100644
--- a/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerPanelCallbacks.template.js
+++ b/extensions/vw/pdfjs/wicket/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/wkt/ui/components/PdfJsViewerPanelCallbacks.template.js
@@ -23,13 +23,13 @@ if (typeof(PdfJsViewerPanel) !== 'object') {
     if (typeof(PdfJsViewerPanel.Callbacks) !== 'object') {
         PdfJsViewerPanel.Callbacks = {
             updatePageNum: function (pageNum) {
-                Wicket.Ajax.get({'u':'__updatePageNum_getCallbackUrl()__&pageNum=' + pageNum})
+                Wicket.Ajax.get({'u':'${pageNumCallbackUrl}&pageNum=' + pageNum})
             },
             updateScale: function (scale) {
-                Wicket.Ajax.get({'u':'__updateScale_getCallbackUrl()__&scale=' + scale})
+                Wicket.Ajax.get({'u':'${scaleCallbackUrl}&scale=' + scale})
             },
             updateHeight: function (height) {
-                Wicket.Ajax.get({'u':'__updateHeight_getCallbackUrl()__&height=' + height})
+                Wicket.Ajax.get({'u':'${heightCallbackUrl}&height=' + height})
             }
         };
     }
diff --git a/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/res/FullCalendarEventSourceEvents.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/LicensedTextTemplate.java
similarity index 55%
copy from extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/res/FullCalendarEventSourceEvents.java
copy to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/LicensedTextTemplate.java
index 068a3a70ea..353c0247fa 100644
--- a/extensions/vw/fullcalendar/wicket/integration/src/main/java/org/apache/isis/extensions/fullcalendar/wkt/fullcalendar/res/FullCalendarEventSourceEvents.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/LicensedTextTemplate.java
@@ -16,58 +16,45 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.res;
+package org.apache.isis.viewer.wicket.ui.util;
 
-import java.util.Map;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import org.apache.wicket.util.template.PackageTextTemplate;
 
 import org.apache.isis.commons.internal.base._Text;
-import org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.CalendarConfig;
-import org.apache.isis.extensions.fullcalendar.wkt.fullcalendar.EventSource;
 
-import lombok.Getter;
 import lombok.val;
-import lombok.experimental.Accessors;
 
-public class FullCalendarEventSourceEvents
+/**
+ * Introduced for optimization purposes.
+ */
+public abstract class LicensedTextTemplate
 extends PackageTextTemplate {
 
     private static final long serialVersionUID = 1L;
 
-    @Getter(lazy = true) @Accessors(fluent = true)
-    private static final FullCalendarEventSourceEvents instance =
-        new FullCalendarEventSourceEvents();
+    private final int skipLicenseLines;
 
-    private FullCalendarEventSourceEvents() {
-        super(FullCalendarEventSourceEvents.class, "fullcalendar-event-source-events.js");
+    public LicensedTextTemplate(final Class<?> clazz, final String fileName, final int skipLicenseLines) {
+        super(clazz, fileName);
+        this.skipLicenseLines = skipLicenseLines;
     }
 
     // super class provides no way of accessing its memoized buffer; so we need to re-memoize here
-    private String scriptTemplate = null;
+    protected String scriptTemplate = null;
 
     @Override
     public String getString() {
         if(scriptTemplate==null) {
             val raw = super.getString();
 
-            // strip first 23 comment lines
+            // strip first n comment lines
             this.scriptTemplate = _Text.streamLines(raw)
-            .skip(23)
+            .skip(skipLicenseLines)
             .collect(Collectors.joining(" "));
         }
         return scriptTemplate;
     }
 
-    public static void setupEventSourceUrls(
-            final CalendarConfig calendarConfig,
-            final Function<EventSource, String> eventSourceUrlProvider) {
-        val instance = instance();
-        for (val eventSource : calendarConfig.getEventSources()) {
-            eventSource.setEvents(instance.asString(Map.of("url", eventSourceUrlProvider.apply(eventSource))));
-        }
-    }
-
 }