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/12/11 23:57:39 UTC

[isis] branch master updated: ISIS-2903: fixes ExcelDownload links for JaxbViewmodels

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 ca8d892  ISIS-2903: fixes ExcelDownload links for JaxbViewmodels
ca8d892 is described below

commit ca8d892858d4ddceb2a48c7a5276b2ffc0f7e51e
Author: andi-huber <ah...@apache.org>
AuthorDate: Sun Dec 12 00:57:22 2021 +0100

    ISIS-2903: fixes ExcelDownload links for JaxbViewmodels
    
    - click on these are not AJAX requests, but also need to re-fetch any
    contained entities
---
 .../ui/components/ExcelFileDownloadLink.java       | 15 +++---
 .../viewer/wicket/ui/pages/entity/EntityPage.java  | 34 +++++++++++++
 .../IsisWicketAjaxRequestListenerUtil.java         | 58 +++-------------------
 3 files changed, 50 insertions(+), 57 deletions(-)

diff --git a/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/ExcelFileDownloadLink.java b/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/ExcelFileDownloadLink.java
index dcb7037..68d1ac0 100644
--- a/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/ExcelFileDownloadLink.java
+++ b/extensions/vw/exceldownload/ui/src/main/java/org/apache/isis/extensions/viewer/wicket/exceldownload/ui/components/ExcelFileDownloadLink.java
@@ -31,22 +31,25 @@ import org.apache.wicket.util.file.Files;
 import org.apache.wicket.util.resource.FileResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
 
+import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
+
 class ExcelFileDownloadLink extends DownloadLink {
 
     private static final long serialVersionUID = 1L;
 
     private final String xlsxFileName;
 
-    public ExcelFileDownloadLink(String id, LoadableDetachableModel<File> model, String xlsxFileName) {
+    public ExcelFileDownloadLink(
+            final String id, final LoadableDetachableModel<File> model, final String xlsxFileName) {
         super(id, model, xlsxFileName);
         this.xlsxFileName = xlsxFileName;
     }
 
+    @Override
+    public void onClick() {
 
+        EntityPage.jaxbViewmodelRefresh(getPage());
 
-    @Override
-    public void onClick()
-    {
         final File file = getModelObject();
         if (file == null)
         {
@@ -71,7 +74,7 @@ class ExcelFileDownloadLink extends DownloadLink {
                 new ResourceStreamRequestHandler(resourceStream)
                 {
                     @Override
-                    public void respond(IRequestCycle requestCycle)
+                    public void respond(final IRequestCycle requestCycle)
                     {
                         super.respond(requestCycle);
                         Files.remove(file);
@@ -81,7 +84,7 @@ class ExcelFileDownloadLink extends DownloadLink {
     }
 
     @Override
-    protected void onComponentTag(ComponentTag tag) {
+    protected void onComponentTag(final ComponentTag tag) {
         super.onComponentTag(tag);
         tag.put("download", encodedFileName());
     }
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 d9ca15e..c15d510 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
@@ -26,6 +26,7 @@ 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;
 
@@ -34,6 +35,7 @@ import org.apache.isis.commons.internal.debug._Debug;
 import org.apache.isis.commons.internal.debug.xray.XrayUi;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
+import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
@@ -219,6 +221,36 @@ public class EntityPage extends PageAbstract {
 
     }
 
+    // -- UTILIY
+
+    /**
+     * Re-fetch entities for JAXB viewmodels, usually required once at begin of request.
+     */
+    public static void jaxbViewmodelRefresh(final IRequestablePage iRequestablePage) {
+        if(iRequestablePage instanceof EntityPage) {
+
+            val entityPage = (EntityPage) iRequestablePage;
+            val entityModel = (EntityModel)entityPage.getUiHintContainerIfAny();
+            val spec = entityModel.getObject().getSpecification();
+            if(spec.isViewModel()) {
+
+                val viewModelFacet = spec.getFacet(ViewModelFacet.class);
+                if(viewModelFacet.containsEntities()) {
+
+                    val viewmodel = entityModel.getBookmarkedOwner();
+                    if(viewmodel.isBookmarkMemoized()) {
+                        viewmodel.reloadViewmodelFromMemoizedBookmark();
+                    } else {
+                        val bookmark = PageParameterUtils
+                                .toBookmark(entityPage.getPageParameters()).orElseThrow();
+                        viewmodel.reloadViewmodelFromBookmark(bookmark);
+                    }
+
+                }
+            }
+        }
+    }
+
     // -- HELPER
 
     private void addBreadcrumbIfShown(final EntityModel entityModel) {
@@ -231,4 +263,6 @@ public class EntityPage extends PageAbstract {
         .ifPresent(breadcrumbModel->breadcrumbModel.remove(entityModel));
     }
 
+
+
 }
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 f079967..95edb7e 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
@@ -27,15 +27,9 @@ import org.apache.wicket.request.IRequestMapper;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.http.WebRequest;
 
-import org.apache.isis.commons.internal.debug._Debug;
-import org.apache.isis.commons.internal.debug.xray.XrayUi;
-import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.model.util.PageParameterUtils;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 
-import lombok.val;
 import lombok.experimental.UtilityClass;
 
 /**
@@ -56,55 +50,17 @@ public final class IsisWicketAjaxRequestListenerUtil {
                     public IRequestHandler mapRequest(final Request request) {
                         var handler = super.mapRequest(request);
                         final boolean isAjax = ((WebRequest)request).isAjax();
-                        return isAjax
-                                ? entityRefetchingHandler(commonContext, handler)
-                                : handler;
+
+                        if(isAjax
+                                && handler instanceof ListenerRequestHandler) {
+                            EntityPage.jaxbViewmodelRefresh(((ListenerRequestHandler)handler).getPage());
+                        }
+
+                        return handler;
                     }
                 };
             }
         });
     }
 
-    // -- HELPER
-
-    private IRequestHandler entityRefetchingHandler(
-            final IsisAppCommonContext commonContext, final IRequestHandler handler) {
-        if(handler instanceof ListenerRequestHandler) {
-            val lirqh = (ListenerRequestHandler)handler;
-            val page = lirqh.getPage();
-            if(!(page instanceof EntityPage)) {
-                return lirqh;
-            }
-
-            val entityPage = (EntityPage) page;
-            val entityModel = (EntityModel)entityPage.getUiHintContainerIfAny();
-            val spec = entityModel.getObject().getSpecification();
-
-            if(!spec.isViewModel()) {
-                return lirqh;
-            };
-
-            val viewModelFacet = spec.getFacet(ViewModelFacet.class);
-            if(!viewModelFacet.containsEntities()) {
-                return lirqh;
-            }
-
-            _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
-                _Debug.log("[IRequestHandler] recreate model %s", spec.getCorrespondingClass().getSimpleName());
-            });
-
-            val viewmodel = entityModel.getBookmarkedOwner();
-            if(viewmodel.isBookmarkMemoized()) {
-                viewmodel.reloadViewmodelFromMemoizedBookmark();
-            } else {
-                val bookmark = PageParameterUtils.toBookmark(entityPage.getPageParameters()).orElseThrow();
-                viewmodel.reloadViewmodelFromBookmark(bookmark);
-            }
-
-            return lirqh;
-
-        }
-        return handler;
-    }
-
 }