You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2019/01/12 08:37:57 UTC

[isis] 01/02: ISIS-1280: refactors redirection to use a BookmarkablePageLink

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

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit c7422c77f0048bfd6516df33d703b1d9c6aef527
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Jan 11 18:12:43 2019 +0000

    ISIS-1280: refactors redirection to use a BookmarkablePageLink
    
    once more, so that can 'open in new tab'
---
 .../entity/icontitle/EntityIconAndTitlePanel.java  | 47 ++++++++--------------
 1 file changed, 16 insertions(+), 31 deletions(-)

diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index d61a27b..d88b815 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -22,17 +22,19 @@ package org.apache.isis.viewer.wicket.ui.components.entity.icontitle;
 import java.util.concurrent.Callable;
 
 import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Page;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.ResourceReference;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
 import org.apache.isis.core.metamodel.facets.object.projection.ProjectionFacet;
@@ -43,6 +45,7 @@ import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
 import org.apache.isis.viewer.wicket.model.models.ObjectAdapterModel;
+import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionLinkFactory;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistryAccessor;
@@ -153,47 +156,29 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
     private AbstractLink createDynamicallyVisibleLink() {
 
         final ObjectAdapterModel entityModel = getModel();
-        return new AjaxLink<Void>(ID_ENTITY_LINK) {
-            @Override
-            public void onClick(final AjaxRequestTarget ajaxRequestTarget) {
-
-                final ObjectAdapter targetAdapter = entityModel.getObject();
-                final ObjectSpecification objectSpecification = targetAdapter.getSpecification();
-                final ProjectionFacet projectionFacet = objectSpecification.getFacet(ProjectionFacet.class);
 
-                final ObjectAdapter redirectToAdapter =
-                        projectionFacet != null ? projectionFacet.projected(targetAdapter) : targetAdapter;
+        final ObjectAdapter targetAdapter = entityModel.getObject();
+        final ObjectSpecification objectSpecification = targetAdapter.getSpecification();
+        final ProjectionFacet projectionFacet = objectSpecification.getFacet(ProjectionFacet.class);
 
-                final EntityPage entityPage =
+        final ObjectAdapter redirectToAdapter =
+                projectionFacet != null ? projectionFacet.projected(targetAdapter) : targetAdapter;
 
-                        // disabling concurrency checking after the layout XML (grid) feature
-                        // was throwing an exception when rebuild grid after invoking action
-                        // not certain why that would be the case, but think it should be
-                        // safe to simply disable while recreating the page to re-render back to user.
-                        AdapterManager.ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
-                                new Callable<EntityPage>() {
-                                    @Override public EntityPage call() throws Exception {
-                                        return new EntityPage(redirectToAdapter, null);
-                                    }
-                                }
-                        );
+        final EntityModel redirectToModel = new EntityModel(redirectToAdapter);
+        final PageParameters pageParameters = redirectToModel.getPageParametersWithoutUiHints();
 
-                getIsisSessionFactory().getCurrentSession().getPersistenceSession().getTransactionManager().flushTransaction();
-
-                // "redirect-after-post"
-                final RequestCycle requestCycle = RequestCycle.get();
-                requestCycle.setResponsePage(entityPage);
-
-            }
+        final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ENTITY);
 
+        final BookmarkablePageLink<Void> link = new BookmarkablePageLink<Void>(ID_ENTITY_LINK, pageClass, pageParameters) {
             @Override
             public boolean isVisible() {
                 final ObjectAdapter targetAdapter = entityModel.getObject();
                 return targetAdapter != null;
             }
-
         };
-        }
+
+        return link;
+    }
 
     private Label newLabel(final String id, final String title) {
         return new Label(id, title);