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:02 UTC

[isis] branch 2892_wicket9 created (now 8d8a7d2)

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

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


      at 8d8a7d2  ISIS-2892: Upgrade Wicket 8.x -> 9.x

This branch includes the following new commits:

     new 8d8a7d2  ISIS-2892: Upgrade Wicket 8.x -> 9.x

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


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

Posted by ah...@apache.org.
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());