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