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 2021/11/10 16:34:03 UTC

[isis] 01/01: ISIS-2892: Upgrade Wicket 8.x -> 9.x

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

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

commit 8d8a7d29a1c35b26e65684c906e40ba1b97a0996
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Nov 10 17:33:14 2021 +0100

    ISIS-2892: Upgrade Wicket 8.x -> 9.x
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2892
---
 core/pom.xml                                       |  6 +--
 .../pdfjs/ui/components/PdfJsViewerPanel.java      |  3 +-
 .../ActionResultResponseHandlingStrategy.java      | 33 ++++++-------
 .../wicket/ui/actionresponse/_DownloadHandler.java |  3 +-
 .../actionprompt/ActionPromptModalWindow.java      |  2 +-
 .../widgets/linkandlabel/ActionLink.java           |  3 +-
 .../org/apache/isis/viewer/wicket/ui/util/Wkt.java | 36 ++++++++++++--
 .../viewer/wicketapp/IsisWicketApplication.java    | 56 ++++++++++------------
 8 files changed, 83 insertions(+), 59 deletions(-)

diff --git a/core/pom.xml b/core/pom.xml
index a777365..020450c 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -183,8 +183,8 @@
 
 		<vaadin.version>21.0.4</vaadin.version>
 
-		<wicket.version>8.13.0</wicket.version>
-		<wicket-bootstrap.version>3.0.0-M18</wicket-bootstrap.version> <!-- de.agilecoders.wicket:wicket-bootstrap... -->
+		<wicket.version>9.6.0</wicket.version>
+		<wicket-bootstrap.version>6.0.0-M4</wicket-bootstrap.version> <!-- de.agilecoders.wicket:wicket-bootstrap... -->
 		<wicket-fullcalendar.version>4.2</wicket-fullcalendar.version>
 		<wicket-source.version>7.0.0</wicket-source.version>
 		<wicket-webjars.version>2.0.20</wicket-webjars.version>
@@ -193,7 +193,7 @@
 		<bootstrap.version>4.6.0-1</bootstrap.version>
 		<popper-js.version>1.16.1-lts</popper-js.version> <!-- org.webjars:popper-js, dictated by bootstrap.version -->
 
-		<wicketstuff.version>8.13.0</wicketstuff.version> <!-- org.wicketstuff:wicketstuff-select2 -->
+		<wicketstuff.version>9.5.0</wicketstuff.version> <!-- org.wicketstuff:wicketstuff-select2 -->
 		<wicketstuff-gmap3.version>${wicket.version}</wicketstuff-gmap3.version>
 
 		<xdocreport.version>2.0.2</xdocreport.version>
diff --git a/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java b/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java
index 6854f4a..addc748 100644
--- a/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java
+++ b/extensions/vw/pdfjs/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/pdfjs/ui/components/PdfJsViewerPanel.java
@@ -42,7 +42,6 @@ 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.wicket.util.time.Duration;
 import org.wicketstuff.pdfjs.PdfJsPanel;
 
 import org.apache.isis.applib.services.user.UserService;
@@ -333,7 +332,7 @@ implements IRequestListener {
                 @Override protected void configureResponse(
                         final ResourceResponse response, final Attributes attributes) {
                     super.configureResponse(response, attributes);
-                    response.setCacheDuration(Duration.NONE);
+                    response.disableCaching();
                 }
             };
             final ResourceRequestHandler handler = new ResourceRequestHandler(resource, null);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
index 1e92d66..ced4f3b 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseHandlingStrategy.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.viewer.wicket.ui.actionresponse;
 
+import java.time.Duration;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.Page;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -28,7 +30,6 @@ import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
 import org.apache.wicket.request.resource.ContentDisposition;
 import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.time.Duration;
 
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
@@ -40,8 +41,8 @@ public enum ActionResultResponseHandlingStrategy {
     REDIRECT_TO_VOID {
         @Override
         public void handleResults(
-                IsisAppCommonContext commonContext,
-                ActionResultResponse resultResponse) {
+                final IsisAppCommonContext commonContext,
+                final ActionResultResponse resultResponse) {
 
             final RequestCycle requestCycle = RequestCycle.get();
             requestCycle.setResponsePage(new VoidReturnPage(new VoidModel(commonContext)));
@@ -50,8 +51,8 @@ public enum ActionResultResponseHandlingStrategy {
     REDIRECT_TO_PAGE {
         @Override
         public void handleResults(
-                IsisAppCommonContext commonContext,
-                ActionResultResponse resultResponse) {
+                final IsisAppCommonContext commonContext,
+                final ActionResultResponse resultResponse) {
 
             // force any changes in state etc to happen now prior to the redirect;
             // in the case of an object being returned, this should cause our page mementos
@@ -67,8 +68,8 @@ public enum ActionResultResponseHandlingStrategy {
     SCHEDULE_HANDLER {
         @Override
         public void handleResults(
-                IsisAppCommonContext commonContext,
-                ActionResultResponse resultResponse) {
+                final IsisAppCommonContext commonContext,
+                final ActionResultResponse resultResponse) {
 
             final RequestCycle requestCycle = RequestCycle.get();
             AjaxRequestTarget target = requestCycle.find(AjaxRequestTarget.class).orElse(null);
@@ -112,8 +113,8 @@ public enum ActionResultResponseHandlingStrategy {
     OPEN_URL_IN_NEW_BROWSER_WINDOW {
         @Override
         public void handleResults(
-                IsisAppCommonContext commonContext,
-                ActionResultResponse resultResponse) {
+                final IsisAppCommonContext commonContext,
+                final ActionResultResponse resultResponse) {
 
             final AjaxRequestTarget target = resultResponse.getTarget();
             final String url = resultResponse.getUrl();
@@ -126,8 +127,8 @@ public enum ActionResultResponseHandlingStrategy {
     OPEN_URL_IN_SAME_BROWSER_WINDOW {
         @Override
         public void handleResults(
-                IsisAppCommonContext commonContext,
-                ActionResultResponse resultResponse) {
+                final IsisAppCommonContext commonContext,
+                final ActionResultResponse resultResponse) {
 
             final AjaxRequestTarget target = resultResponse.getTarget();
             final String url = resultResponse.getUrl();
@@ -145,7 +146,7 @@ public enum ActionResultResponseHandlingStrategy {
     /**
      * @see #expanded(String)
      */
-    public static String expanded(RequestCycle requestCycle, final String url) {
+    public static String expanded(final RequestCycle requestCycle, final String url) {
         String urlStr = expanded(url);
         return requestCycle.getUrlRenderer().renderFullUrl(Url.parse(urlStr));
     }
@@ -161,15 +162,15 @@ public enum ActionResultResponseHandlingStrategy {
         return urlStr;
     }
 
-    private static String javascriptFor_newWindow(CharSequence url) {
+    private static String javascriptFor_newWindow(final CharSequence url) {
         return "function(){Wicket.Event.publish(Isis.Topic.OPEN_IN_NEW_TAB, '" + url + "');}";
     }
 
-    private static String javascriptFor_sameWindow(CharSequence url) {
+    private static String javascriptFor_sameWindow(final CharSequence url) {
         return "\"window.location.href='" + url + "'\"";
     }
 
-    private static void scheduleJs(AjaxRequestTarget target, String js, int millis) {
+    private static void scheduleJs(final AjaxRequestTarget target, final String js, final int millis) {
         // the timeout is needed to let Wicket release the channel
         target.appendJavaScript(String.format("setTimeout(%s, %d);", js, millis));
     }
@@ -186,7 +187,7 @@ public enum ActionResultResponseHandlingStrategy {
         private final IResourceStream resourceStream;
         private final Duration cacheDuration;
 
-        public StreamAfterAjaxResponseBehavior(ResourceStreamRequestHandler scheduledHandler) {
+        public StreamAfterAjaxResponseBehavior(final ResourceStreamRequestHandler scheduledHandler) {
             this.fileName = scheduledHandler.getFileName();
             this.resourceStream = scheduledHandler.getResourceStream();
             this.cacheDuration = scheduledHandler.getCacheDuration();
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/_DownloadHandler.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/_DownloadHandler.java
index 250df09..bf34127 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/_DownloadHandler.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/_DownloadHandler.java
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui.actionresponse;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.time.Duration;
 
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
@@ -105,7 +106,7 @@ final class _DownloadHandler {
         }
         if(downloadHandler instanceof ResourceStreamRequestHandler)
             ((ResourceStreamRequestHandler) downloadHandler)
-            .setCacheDuration(org.apache.wicket.util.time.Duration.seconds(0));
+            .setCacheDuration(Duration.ZERO);
 
         return downloadHandler;
     }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
index f6f2665..de55141 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.java
@@ -62,7 +62,7 @@ implements ActionPromptWithExtraContent {
         // appendDisableEnforceFocus called after the modal javascript object has already been created.
         // so this patch makes sure it is called before hand.  This results in the JavaScript fragment being
         // invoked twice, but what the hey.
-        appendDisableEnforceFocus(target);
+        //appendDisableEnforceFocus(target);
 
         // we continue to call the original implementation, for maintainability
         return super.appendShowDialogJavaScript(target);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
index 7f9dbc2..272383b 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
@@ -55,7 +55,6 @@ import org.apache.isis.viewer.wicket.ui.util.Wkt;
 
 import static org.apache.isis.commons.internal.base._Casts.castTo;
 
-import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import lombok.NonNull;
 import lombok.val;
 
@@ -151,7 +150,7 @@ extends IndicatingAjaxLink<ManagedObject> {
     @Override
     protected void onComponentTag(final ComponentTag tag) {
         super.onComponentTag(tag);
-        Buttons.fixDisabledState(this, tag);
+        Wkt.fixDisabledState(this, tag);
     }
 
     @Override
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 de3a1b4..ff4e582 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
@@ -36,8 +36,10 @@ import org.apache.wicket.markup.head.JavaScriptContentHeaderItem;
 import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
 import org.apache.wicket.markup.html.form.TextArea;
 import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Fragment;
@@ -61,7 +63,6 @@ import lombok.val;
 import lombok.experimental.UtilityClass;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.behavior.CssClassNameAppender;
-import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 
 /**
  * Wicket common idioms, in alphabetical order.
@@ -113,7 +114,7 @@ public class Wkt {
                 super.renderHead(component, response);
                 final String javascript = PRE_JS + getCallbackScript() + POST_JS;
                 response.render(
-                        JavaScriptContentHeaderItem.forScript(javascript, null, null));
+                        new JavaScriptContentHeaderItem(javascript, null));
             }
             @Override protected void respond(final AjaxRequestTarget target) {
                 onRespond.accept(target);
@@ -351,14 +352,41 @@ public class Wkt {
             @Override public void onClick(final AjaxRequestTarget target) {
                 onClick.accept(target);
             }
-            @SuppressWarnings("deprecation")
             @Override protected void onComponentTag(final ComponentTag tag) {
                 super.onComponentTag(tag);
-                Buttons.fixDisabledState(this, tag);
+                fixDisabledState(this, tag);
             }
         };
     }
 
+    /**
+     * MOVED over from Wicket 8 - potentially no longer required
+     * <p>
+     * HACK issue #79: wicket changes tag name if component wasn't enabled
+     *
+     * @param component the component to fix
+     * @param tag       the component tag
+     * @deprecated since Wicket 7.0: doesn't mangle the link/button's markup anymore
+     */
+    @Deprecated
+    public static void fixDisabledState(final Component component, final ComponentTag tag) {
+        if (!component.isEnabledInHierarchy()) {
+            if (component instanceof AbstractLink) {
+                tag.setName("a");
+            } else if (component instanceof Button) {
+                tag.setName("button");
+            } else {
+                if (tag.getAttribute("value") != null) {
+                    tag.setName("input");
+                } else {
+                    tag.setName("button");
+                }
+            }
+
+            tag.put("disabled", "disabled");
+        }
+    }
+
     public AjaxLink<Void> linkAdd(
             final MarkupContainer container,
             final String id,
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java
index 901c076..455d0cf 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketApplication.java
@@ -41,12 +41,6 @@ import org.apache.wicket.authentication.strategy.DefaultAuthenticationStrategy;
 import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
 import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
 import org.apache.wicket.core.request.mapper.MountedMapper;
-import org.apache.wicket.devutils.debugbar.DebugBar;
-import org.apache.wicket.devutils.debugbar.InspectorDebugPanel;
-import org.apache.wicket.devutils.debugbar.PageSizeDebugPanel;
-import org.apache.wicket.devutils.debugbar.SessionSizeDebugPanel;
-import org.apache.wicket.devutils.debugbar.VersionDebugContributor;
-import org.apache.wicket.devutils.diskstore.DebugDiskDataStore;
 import org.apache.wicket.injection.Injector;
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.head.ResourceAggregator;
@@ -212,6 +206,8 @@ implements
     protected void init() {
         super.init();
 
+        getCspSettings().blocking().disabled();
+
         // Initialize Spring Dependency Injection (into Wicket components)
         val springInjector = new SpringComponentInjector(this);
         Injector.get().inject(this);
@@ -280,30 +276,30 @@ implements
             //  side-effects?
             //  SharedResources sharedResources = getSharedResources();
 
-            if(systemEnvironment.isPrototyping()) {
-                DebugDiskDataStore.register(this);
-                log.debug("DebugDiskDataStore registered; access via ~/wicket/internal/debug/diskDataStore");
-                log.debug("DebugDiskDataStore: eg, http://localhost:8080/wicket/wicket/internal/debug/diskDataStore");
-
-                if(!getDebugSettings().isDevelopmentUtilitiesEnabled()) {
-                    boolean enableDevUtils = configuration.getViewer().getWicket().getDevelopmentUtilities().isEnable();
-                    if(enableDevUtils) {
-                        getDebugSettings().setDevelopmentUtilitiesEnabled(true);
-
-                        // copied from DebugBarInitializer
-                        // this is hacky, but need to do this because IInitializer#init() called before
-                        // the Application's #init() is called.
-                        // an alternative, better, design might be to move Isis' own initialization into an
-                        // implementation of IInitializer?
-                        DebugBar.registerContributor(VersionDebugContributor.DEBUG_BAR_CONTRIB, this);
-                        DebugBar.registerContributor(InspectorDebugPanel.DEBUG_BAR_CONTRIB, this);
-                        DebugBar.registerContributor(SessionSizeDebugPanel.DEBUG_BAR_CONTRIB, this);
-                        DebugBar.registerContributor(PageSizeDebugPanel.DEBUG_BAR_CONTRIB, this);
-                    }
-                }
-            }
-
-            log.debug("storeSettings.inmemoryCacheSize        : {}", getStoreSettings().getInmemoryCacheSize());
+//            if(systemEnvironment.isPrototyping()) {
+//                DebugDiskDataStore.register(this);
+//                log.debug("DebugDiskDataStore registered; access via ~/wicket/internal/debug/diskDataStore");
+//                log.debug("DebugDiskDataStore: eg, http://localhost:8080/wicket/wicket/internal/debug/diskDataStore");
+//
+//                if(!getDebugSettings().isDevelopmentUtilitiesEnabled()) {
+//                    boolean enableDevUtils = configuration.getViewer().getWicket().getDevelopmentUtilities().isEnable();
+//                    if(enableDevUtils) {
+//                        getDebugSettings().setDevelopmentUtilitiesEnabled(true);
+//
+//                        // copied from DebugBarInitializer
+//                        // this is hacky, but need to do this because IInitializer#init() called before
+//                        // the Application's #init() is called.
+//                        // an alternative, better, design might be to move Isis' own initialization into an
+//                        // implementation of IInitializer?
+//                        DebugBar.registerContributor(VersionDebugContributor.DEBUG_BAR_CONTRIB, this);
+//                        DebugBar.registerContributor(InspectorDebugPanel.DEBUG_BAR_CONTRIB, this);
+//                        DebugBar.registerContributor(SessionSizeDebugPanel.DEBUG_BAR_CONTRIB, this);
+//                        //DebugBar.registerContributor(PageSizeDebugPanel.DEBUG_BAR_CONTRIB, this);
+//                    }
+//                }
+//            }
+
+            //log.debug("storeSettings.inmemoryCacheSize        : {}", getStoreSettings().getInmemoryCacheSize());
             log.debug("storeSettings.asynchronousQueueCapacity: {}", getStoreSettings().getAsynchronousQueueCapacity());
             log.debug("storeSettings.maxSizePerSession        : {}", getStoreSettings().getMaxSizePerSession());
             log.debug("storeSettings.fileStoreFolder          : {}", getStoreSettings().getFileStoreFolder());