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