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/18 15:22:09 UTC

[isis] branch master updated: ISIS-3058: minor refactoring and comments

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 dd8ebbb776 ISIS-3058: minor refactoring and comments
dd8ebbb776 is described below

commit dd8ebbb7761406dcda6e585080a6e98bc123aa47
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed May 18 17:22:03 2022 +0200

    ISIS-3058: minor refactoring and comments
---
 .../ui/actionresponse/ActionResultResponse.java    | 40 ++++++++++-
 .../ui/actionresponse/PageRedirectRequest.java     |  6 ++
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  | 58 ++++++++++++++++
 .../viewer/wicket/ui/pages/entity/EntityPage.java  | 79 +++-------------------
 .../wicket/ui/panels/FormExecutorDefault.java      |  4 +-
 .../IsisWicketAjaxRequestListenerUtil.java         | 16 ++++-
 6 files changed, 131 insertions(+), 72 deletions(-)

diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponse.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponse.java
index ef6a2eabce..1e4ac16be2 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponse.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponse.java
@@ -100,14 +100,16 @@ public class ActionResultResponse {
     }
 
     /**
-     * Populated only if {@link #getHandlingStrategy() handling strategy} is {@link ActionResultResponseHandlingStrategy#SCHEDULE_HANDLER}
+     * Populated only if {@link #getHandlingStrategy() handling strategy}
+     * is {@link ActionResultResponseHandlingStrategy#SCHEDULE_HANDLER}
      */
     public IRequestHandler getHandler() {
         return handler;
     }
 
     /**
-     * Populated only if {@link #getHandlingStrategy() handling strategy} is {@link ActionResultResponseHandlingStrategy#REDIRECT_TO_PAGE}
+     * Populated only if {@link #getHandlingStrategy() handling strategy}
+     * is {@link ActionResultResponseHandlingStrategy#REDIRECT_TO_PAGE}
      */
     public PageRedirectRequest<?> getPageRedirect() {
         return pageRedirect;
@@ -130,4 +132,38 @@ public class ActionResultResponse {
     public String getUrl() {
         return url;
     }
+
+    @Override
+    public String toString() {
+        return String.format("ActionResultResponse["
+                + "handlingStrategy=%s,"
+                + "requestHandler=%s,"
+                + "pageRedirect=%s,"
+                + "ajaxTarget=%s,"
+                + "url=%s"
+                + "]",
+                handlingStrategy.name(),
+                handler,
+                pageRedirect,
+                target,
+                url);
+    }
+
+    /** introduced for debugging */
+    public String toStringMultiline() {
+        return String.format("ActionResultResponse {\n"
+                + "\thandlingStrategy=%s,\n"
+                + "\trequestHandler=%s,\n"
+                + "\tpageRedirect=%s,\n"
+                + "\tajaxTarget=%s,\n"
+                + "\turl=%s\n"
+                + "}",
+                handlingStrategy.name(),
+                handler,
+                pageRedirect,
+                target,
+                url);
+    }
+
+
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/PageRedirectRequest.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/PageRedirectRequest.java
index bcd9a3a3d4..2f865482e4 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/PageRedirectRequest.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/PageRedirectRequest.java
@@ -67,4 +67,10 @@ public class PageRedirectRequest<T extends IRequestablePage> {
         requestCycle.setResponsePage(pageClass);
     }
 
+    @Override
+    public String toString() {
+        return String.format("PageRedirectRequest[pageClass=%s,pageParameters=%s]",
+                pageClass.getName(), pageParameters);
+    }
+
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 7558f84661..3db0cf0ccb 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -22,6 +22,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Optional;
+import java.util.UUID;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -53,6 +54,11 @@ import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerService;
 import org.apache.isis.applib.services.metamodel.BeanSort;
 import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.base._Refs;
+import org.apache.isis.commons.internal.base._Refs.ObjectReference;
+import org.apache.isis.commons.internal.base._Timing;
+import org.apache.isis.commons.internal.debug._Debug;
+import org.apache.isis.commons.internal.debug.xray.XrayUi;
 import org.apache.isis.viewer.common.model.components.ComponentType;
 import org.apache.isis.viewer.wicket.model.hints.IsisEnvelopeEvent;
 import org.apache.isis.viewer.wicket.model.hints.IsisEventLetterAbstract;
@@ -496,5 +502,57 @@ implements ActionPromptProvider {
     }
 
 
+    // -- RE-ATTACH ENTITIES
+
+    @Override
+    public void renderPage() {
+        if(XrayUi.isXrayEnabled()){
+            _Debug.log("about to render %s ..", this.getClass().getSimpleName());
+            val stopWatch = _Timing.now();
+            onNewRequestCycle();
+            super.renderPage();
+            stopWatch.stop();
+            _Debug.log(".. rendering took %s", stopWatch.toString());
+        } else {
+            onNewRequestCycle();
+            super.renderPage();
+        }
+    }
+
+    /**
+     * Hook to re-fetch entities for view-models, usually required once at begin of request.
+     * @apiNote ideally we would not need that hook at all;
+     * this is a hack that came after re-designing the entity-model
+     */
+    public void onNewRequestCycle() {
+        // implemented only by EntityPage
+    }
+
+    // -- HELPER
+
+    private transient ObjectReference<UUID> interactionId;
+    private ObjectReference<UUID> interactionIdRef() {
+        if(interactionId==null) {
+            interactionId = _Refs.objectRef(null);
+        }
+        return interactionId;
+    }
+
+    protected boolean isAlreadyRefreshedWithinThisInteraction() {
+        val currentInteractionId = getCommonContext()
+                .getInteractionProvider().getInteractionId().orElseThrow();
+
+        val alreadyRefreshedForThisInteraction =
+            interactionIdRef().getValue()
+            .map(currentInteractionId::equals)
+            .orElse(false);
+
+        if(alreadyRefreshedForThisInteraction) {
+            return true;
+        }
+
+        interactionIdRef().setValue(currentInteractionId);
+        return false;
+    }
 
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index 110ab86d61..0ca6cf6b10 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.viewer.wicket.ui.pages.entity;
 
-import java.util.UUID;
-
 import org.apache.wicket.Application;
 import org.apache.wicket.RestartResponseException;
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
@@ -28,14 +26,10 @@ import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.repeater.RepeatingView;
-import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.CssResourceReference;
 
 import org.apache.isis.applib.services.user.UserMemento;
-import org.apache.isis.commons.internal.base._Refs;
-import org.apache.isis.commons.internal.base._Refs.ObjectReference;
-import org.apache.isis.commons.internal.base._Timing;
 import org.apache.isis.commons.internal.debug._Debug;
 import org.apache.isis.commons.internal.debug.xray.XrayUi;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -136,22 +130,6 @@ public class EntityPage extends PageAbstract {
         response.render(CssHeaderItem.forReference(ENTITY_PAGE_CSS));
     }
 
-    @Override
-    public void renderPage() {
-        if(XrayUi.isXrayEnabled()){
-            _Debug.log("about to render EntityPage ..");
-            val stopWatch = _Timing.now();
-            viewmodelRefresh(this);
-            super.renderPage();
-            stopWatch.stop();
-            _Debug.log(".. rendering took %s", stopWatch.toString());
-        } else {
-            viewmodelRefresh(this);
-            super.renderPage();
-        }
-    }
-
-
     @Override
     public UiHintContainer getUiHintContainerIfAny() {
         return model;
@@ -226,58 +204,23 @@ public class EntityPage extends PageAbstract {
 
     }
 
-    // -- UTILITIES
-
-    /**
-     * Re-fetch entities for view-models, usually required once at begin of request.
-     */
-    public static void viewmodelRefresh(
-            final IRequestablePage iRequestablePage) {
-        if(iRequestablePage instanceof EntityPage) {
-
-            val entityPage = (EntityPage) iRequestablePage;
-
-            // optimization, not strictly required
-            if(entityPage.isAlreadyRefreshedWithinThisInteraction()) {
-                return;
-            }
-
-            val entityModel = (EntityModel)entityPage.getUiHintContainerIfAny();
+    // -- RE-ATTACH ENTITIES
 
-            ManagedObjects.refreshViewmodel(entityModel.getObject(),
-                    ()->PageParameterUtils
-                            .toBookmark(entityPage.getPageParameters())
-                            .orElseThrow());
+    @Override
+    public void onNewRequestCycle() {
+        // optimization, not strictly required
+        if(isAlreadyRefreshedWithinThisInteraction()) {
+            return;
         }
+        val entityModel = (EntityModel) getUiHintContainerIfAny();
+        ManagedObjects.refreshViewmodel(entityModel.getObject(),
+                ()->PageParameterUtils
+                        .toBookmark(getPageParameters())
+                        .orElseThrow());
     }
 
     // -- HELPER
 
-    private transient ObjectReference<UUID> interactionId;
-    private ObjectReference<UUID> interactionIdRef() {
-        if(interactionId==null) {
-            interactionId = _Refs.objectRef(null);
-        }
-        return interactionId;
-    }
-
-    private boolean isAlreadyRefreshedWithinThisInteraction() {
-        val currentInteractionId = getCommonContext()
-                .getInteractionProvider().getInteractionId().orElseThrow();
-
-        val alreadyRefreshedForThisInteraction =
-            interactionIdRef().getValue()
-            .map(currentInteractionId::equals)
-            .orElse(false);
-
-        if(alreadyRefreshedForThisInteraction) {
-            return true;
-        }
-
-        interactionIdRef().setValue(currentInteractionId);
-        return false;
-    }
-
     private void addBreadcrumbIfShown(final EntityModel entityModel) {
         getBreadcrumbModel()
         .ifPresent(breadcrumbModel->breadcrumbModel.visited(entityModel));
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index cf440a8104..e06d6600d2 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -180,7 +180,9 @@ implements FormExecutor {
                 .handleResults(getCommonContext(), resultResponse);
 
             _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
-                _Debug.log("[EXECUTOR] ... return");
+                _Debug.log("[EXECUTOR] ... return\n"
+                        + " - %s\n",
+                        resultResponse.toStringMultiline());
             });
 
             return FormExecutionOutcome.SUCCESS_AND_REDIRECED_TO_RESULT_PAGE; // success (valid args), allow redirect
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketAjaxRequestListenerUtil.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketAjaxRequestListenerUtil.java
index b5e727f5e6..1998424556 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketAjaxRequestListenerUtil.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketAjaxRequestListenerUtil.java
@@ -25,10 +25,13 @@ import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
+import org.apache.wicket.request.component.IRequestablePage;
 
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
+import org.apache.isis.viewer.wicket.ui.pages.standalonecollection.StandaloneCollectionPage;
 
+import lombok.val;
 import lombok.experimental.UtilityClass;
 
 
@@ -52,7 +55,18 @@ public final class IsisWicketAjaxRequestListenerUtil {
 //                            _Debug.log("AJAX via ListenerRequestHandler");
 //                            RequestCycle.get().getListeners().add(newRequestCycleListener());
 
-                            EntityPage.viewmodelRefresh(((ListenerRequestHandler)handler).getPage());
+                            final IRequestablePage iRequestablePage =
+                                    ((ListenerRequestHandler)handler).getPage();
+
+                            if(iRequestablePage instanceof StandaloneCollectionPage) {
+                                val collectionPage = (StandaloneCollectionPage) iRequestablePage;
+                                collectionPage.onNewRequestCycle();
+                            }
+                            else if(iRequestablePage instanceof EntityPage) {
+                                val entityPage = (EntityPage) iRequestablePage;
+                                entityPage.onNewRequestCycle();
+                            }
+
                         }
 
                         return handler;