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 2017/05/16 13:00:50 UTC

[19/37] isis git commit: ISIS-1613: concurrency handling now seems to be working, more or less. More testing required.

ISIS-1613: concurrency handling now seems to be working, more or less.  More testing required.

- backs out the DisableConcurrencyCheckingOnRenderListener from IsisWicketApplication
  - instead use EntityPage on{Before/After}Render hooks
- use EntityModel#resetPropertyModels to reset version
  -  no longer clear propertyScalarModels on detach, so can iterate over
  - do this in FormExecutorAbstract, rather than PromptFormAbstract
- EntityModelWithLayoutHints introduced as wrapper around EntityModel, to avoid aliasing issues with resetting version on the "main" EntityModel
- use model.getParentEntityModel for action models in a couple of further places (ActionPromptHeaderPanel, ActionParametersPanel)
- similarly, reuse EntityModel in EntityLinkSimplePanel rather than create its own EntityModel

also:
- change PageAbstract#getUiHintContainerIfAny(), return a UiHintContainer once more (rather than EntityModel) since no need to return the more specific class


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/3ff8f7a8
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/3ff8f7a8
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/3ff8f7a8

Branch: refs/heads/master
Commit: 3ff8f7a82a579024b72f1bcaead6708424ae4e33
Parents: cfb2067
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon May 15 16:07:22 2017 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon May 15 16:07:22 2017 +0100

----------------------------------------------------------------------
 .../wicket/viewer/IsisWicketApplication.java    |  66 +++---
 .../viewer/wicket/model/models/ActionModel.java |   5 +
 .../wicket/model/models/BookmarkableModel.java  |   2 +-
 .../viewer/wicket/model/models/EntityModel.java |  15 +-
 .../models/EntityModelWithLayoutHints.java      | 215 +++++++++++++++++++
 .../model/models/FormExecutorContext.java       |   2 +-
 .../model/models/ParentEntityModelProvider.java |  26 +++
 .../ActionResultResponseType.java               |   6 +-
 .../actionprompt/ActionPromptHeaderPanel.java   |   4 +-
 .../actions/ActionParametersPanel.java          |   3 +-
 .../entitysimplelink/EntityLinkSimplePanel.java |   7 +-
 .../viewer/wicket/ui/pages/PageAbstract.java    |   9 +-
 .../ui/pages/actionprompt/ActionPromptPage.java |   4 -
 .../wicket/ui/pages/entity/EntityPage.java      |  47 ++--
 .../wicket/ui/panels/FormExecutorAbstract.java  |  32 ++-
 .../wicket/ui/panels/PromptFormAbstract.java    |  50 +----
 16 files changed, 369 insertions(+), 124 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index 80207f8..db5a5d4 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -35,14 +35,11 @@ import com.google.inject.Injector;
 import com.google.inject.Module;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.Component;
 import org.apache.wicket.ConverterLocator;
 import org.apache.wicket.IConverterLocator;
 import org.apache.wicket.Page;
 import org.apache.wicket.RuntimeConfigurationType;
 import org.apache.wicket.SharedResources;
-import org.apache.wicket.application.IComponentOnAfterRenderListener;
-import org.apache.wicket.application.IComponentOnBeforeRenderListener;
 import org.apache.wicket.authentication.IAuthenticationStrategy;
 import org.apache.wicket.authentication.strategy.DefaultAuthenticationStrategy;
 import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
@@ -69,7 +66,6 @@ import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
 import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
@@ -317,9 +313,11 @@ public class IsisWicketApplication
             @SuppressWarnings("unused")
             SharedResources sharedResources = getSharedResources();
 
-            final DisableConcurrencyCheckingOnRenderListener listenr = new DisableConcurrencyCheckingOnRenderListener();
-            getComponentPreOnBeforeRenderListeners().add(listenr);
-            getComponentOnAfterRenderListeners().add(listenr);
+            // hmm, this design doesn't work as expected, called before every component is rendered
+            // instead just override onBeforeRender/onAfterRender in EntityPage
+//            final DisableConcurrencyCheckingOnRenderListener listenr = new DisableConcurrencyCheckingOnRenderListener();
+//            getComponentPreOnBeforeRenderListeners().add(listenr);
+//            getComponentOnAfterRenderListeners().add(listenr);
             
             final MetaModelInvalidException mmie = IsisContext.getMetaModelInvalidExceptionIfAny();
             if(mmie != null) {
@@ -878,29 +876,33 @@ public class IsisWicketApplication
         return settings;
     }
 
-    private static class DisableConcurrencyCheckingOnRenderListener
-            implements IComponentOnBeforeRenderListener, IComponentOnAfterRenderListener {
-
-        private static ThreadLocal<AdapterManager.ConcurrencyChecking> concurrencyChecking =
-                new ThreadLocal<AdapterManager.ConcurrencyChecking>() {
-                    protected AdapterManager.ConcurrencyChecking initialValue() {
-                        return null;
-                    }
-                };
-
-        @Override
-        public void onBeforeRender(final Component component) {
-            final AdapterManager.ConcurrencyChecking prior = AdapterManager.ConcurrencyChecking.disable();
-            concurrencyChecking.set(prior);
-        }
-
-        @Override
-        public void onAfterRender(final Component component) {
-            final AdapterManager.ConcurrencyChecking prior = DisableConcurrencyCheckingOnRenderListener.concurrencyChecking.get();
-            if(prior != null) {
-                AdapterManager.ConcurrencyChecking.reset(prior);
-            }
-            DisableConcurrencyCheckingOnRenderListener.concurrencyChecking.remove();
-        }
-    }
+//    private static class DisableConcurrencyCheckingOnRenderListener
+//            implements IComponentOnBeforeRenderListener, IComponentOnAfterRenderListener {
+//
+//        private static ThreadLocal<AdapterManager.ConcurrencyChecking> concurrencyChecking =
+//                new ThreadLocal<AdapterManager.ConcurrencyChecking>() {
+//                    protected AdapterManager.ConcurrencyChecking initialValue() {
+//                        return null;
+//                    }
+//                };
+//
+//        @Override
+//        public void onBeforeRender(final Component component) {
+//            if(component instanceof Page) {
+//                final AdapterManager.ConcurrencyChecking prior = AdapterManager.ConcurrencyChecking.disable();
+//                concurrencyChecking.set(prior);
+//            }
+//        }
+//
+//        @Override
+//        public void onAfterRender(final Component component) {
+//            if(component instanceof Page) {
+//                final AdapterManager.ConcurrencyChecking prior = DisableConcurrencyCheckingOnRenderListener.concurrencyChecking.get();
+//                if(prior != null) {
+//                    AdapterManager.ConcurrencyChecking.reset(prior);
+//                }
+//                DisableConcurrencyCheckingOnRenderListener.concurrencyChecking.remove();
+//            }
+//        }
+//    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index f9a8240..494c81a 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -329,6 +329,11 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
         this.actionMode = actionMode;
     }
 
+    @Override
+    public EntityModel getParentEntityModel() {
+        return entityModel;
+    }
+
     /**
      * Copy constructor, as called by {@link #copy()}.
      */

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
index 1dfa2ec..d47e108 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkableModel.java
@@ -38,7 +38,7 @@ public abstract class BookmarkableModel<T> extends ModelAbstract<T>  {
      * So can be bookmarked / added to <tt>BookmarkedPagesModel</tt>.
      */
     public abstract PageParameters getPageParameters();
-    
+
     public abstract boolean hasAsRootPolicy();
     
     public abstract String getTitle();

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 65b6a7d..27b3fbd 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -154,7 +154,10 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiH
     // //////////////////////////////////////////////////////////
 
     public EntityModel() {
-        this((ObjectAdapterMemento)null);
+        this.adapterMemento = null;
+        this.pendingModel = new PendingModel(this);
+        this.propertyScalarModels = Maps.newHashMap();
+        this.hintPageParameterSerializer = new HintPageParameterSerializer(this);
     }
 
     public EntityModel(final PageParameters pageParameters) {
@@ -493,7 +496,8 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiH
             final ScalarModel scalarModel = propertyScalarModels.get(propertyMemento);
             scalarModel.detach();
         }
-        propertyScalarModels.clear();
+        // we no longer clear these, because we want to call resetPropertyModels(...) after an object has been updated.
+        //propertyScalarModels.clear();
     }
 
     // //////////////////////////////////////////////////////////
@@ -605,18 +609,15 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements UiH
     // tab and column metadata (if any)
     // //////////////////////////////////////////////////////////
 
-    private Object layoutMetadata;
-
     public Object getLayoutMetadata() {
-        return layoutMetadata;
+        return null;
     }
 
     /**
      * Returns a new copy that SHARES the property scalar models (for edit form).
      */
     public EntityModel cloneWithLayoutMetadata(final Object layoutMetadata) {
-        final EntityModel entityModel = new EntityModel(this.propertyScalarModels, this.adapterMemento);
-        entityModel.layoutMetadata = layoutMetadata;
+        final EntityModel entityModel = new EntityModelWithLayoutHints(this, layoutMetadata);
         return entityModel;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelWithLayoutHints.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelWithLayoutHints.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelWithLayoutHints.java
new file mode 100644
index 0000000..c142492
--- /dev/null
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelWithLayoutHints.java
@@ -0,0 +1,215 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.viewer.wicket.model.models;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
+import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
+
+/**
+ * This is a wrapper around {@link EntityModel} that adds in layout hints only but otherwise has the same identity
+ * as the underlying EntityModel.
+ *
+ * <p>
+ *     This is to avoid concurrency check exceptions ... we only need to update the single EntityModel, and it is
+ *     shared everywhere.
+ * </p>
+ */
+public class EntityModelWithLayoutHints extends EntityModel {
+
+    private static final long serialVersionUID = 1L;
+
+    private final EntityModel underlying;
+
+    private final Object layoutMetadata;
+
+    public EntityModelWithLayoutHints(final EntityModel underlying, final Object layoutMetadata) {
+        this.underlying = underlying;
+        this.layoutMetadata = layoutMetadata;
+    }
+
+    @Override
+    public Object getLayoutMetadata() {
+        return layoutMetadata;
+    }
+
+    @Override public void resetVersion() {
+        underlying.resetVersion();
+    }
+
+    @Override public PageParameters getPageParameters() {
+        return underlying.getPageParameters();
+    }
+
+    @Override public PageParameters getPageParametersWithoutUiHints() {
+        return underlying.getPageParametersWithoutUiHints();
+    }
+
+    @Override public String getHint(final Component component, final String keyName) {
+        return underlying.getHint(component, keyName);
+    }
+
+    @Override public void setHint(final Component component, final String keyName, final String hintValue) {
+        underlying.setHint(component, keyName, hintValue);
+    }
+
+    @Override public void clearHint(final Component component, final String attributeName) {
+        underlying.clearHint(component, attributeName);
+    }
+
+    @Override public String getTitle() {
+        return underlying.getTitle();
+    }
+
+    @Override public boolean hasAsRootPolicy() {
+        return underlying.hasAsRootPolicy();
+    }
+
+    @Override public boolean hasAsChildPolicy() {
+        return underlying.hasAsChildPolicy();
+    }
+
+    @Override public ObjectAdapterMemento getObjectAdapterMemento() {
+        return underlying.getObjectAdapterMemento();
+    }
+
+    @Override public ObjectSpecification getTypeOfSpecification() {
+        return underlying.getTypeOfSpecification();
+    }
+
+    @Override public ObjectAdapter load(final AdapterManager.ConcurrencyChecking concurrencyChecking) {
+        return underlying.load(concurrencyChecking);
+    }
+
+    @Override public ObjectAdapter load() {
+        return underlying.load();
+    }
+
+    @Override public void setObject(final ObjectAdapter adapter) {
+        underlying.setObject(adapter);
+    }
+
+    @Override public void setObjectMemento(
+            final ObjectAdapterMemento memento,
+            final PersistenceSession persistenceSession,
+            final SpecificationLoader specificationLoader) {
+        underlying.setObjectMemento(memento, persistenceSession, specificationLoader);
+    }
+
+    @Override public ScalarModel getPropertyModel(final PropertyMemento pm) {
+        return underlying.getPropertyModel(pm);
+    }
+
+    @Override public void resetPropertyModels() {
+        underlying.resetPropertyModels();
+    }
+
+    @Override public RenderingHint getRenderingHint() {
+        return underlying.getRenderingHint();
+    }
+
+    @Override public void setRenderingHint(final RenderingHint renderingHint) {
+        underlying.setRenderingHint(renderingHint);
+    }
+
+    @Override public ObjectAdapterMemento getContextAdapterIfAny() {
+        return underlying.getContextAdapterIfAny();
+    }
+
+    @Override public void setContextAdapterIfAny(final ObjectAdapterMemento contextAdapterIfAny) {
+        underlying.setContextAdapterIfAny(contextAdapterIfAny);
+    }
+
+    @Override public Mode getMode() {
+        return underlying.getMode();
+    }
+
+    @Override protected void setMode(final Mode mode) {
+        underlying.setMode(mode);
+    }
+
+    @Override public boolean isViewMode() {
+        return underlying.isViewMode();
+    }
+
+    @Override public boolean isEditMode() {
+        return underlying.isEditMode();
+    }
+
+    @Override public EntityModel toEditMode() {
+        return underlying.toEditMode();
+    }
+
+    @Override public EntityModel toViewMode() {
+        return underlying.toViewMode();
+    }
+
+    @Override protected void onDetach() {
+        underlying.onDetach();
+    }
+
+    @Override public void setException(final ConcurrencyException ex) {
+        underlying.setException(ex);
+    }
+
+    @Override public String getAndClearConcurrencyExceptionIfAny() {
+        return underlying.getAndClearConcurrencyExceptionIfAny();
+    }
+
+    @Override public ObjectAdapter getPendingElseCurrentAdapter() {
+        return underlying.getPendingElseCurrentAdapter();
+    }
+
+    @Override public ObjectAdapter getPendingAdapter() {
+        return underlying.getPendingAdapter();
+    }
+
+    @Override public ObjectAdapterMemento getPending() {
+        return underlying.getPending();
+    }
+
+    @Override public void setPending(final ObjectAdapterMemento selectedAdapterMemento) {
+        underlying.setPending(selectedAdapterMemento);
+    }
+
+    @Override public void clearPending() {
+        underlying.clearPending();
+    }
+
+    @Override public EntityModel cloneWithLayoutMetadata(final Object layoutMetadata) {
+        return underlying.cloneWithLayoutMetadata(layoutMetadata);
+    }
+
+    @Override public int hashCode() {
+        return underlying.hashCode();
+    }
+
+    @Override public boolean equals(final Object obj) {
+        return underlying.equals(obj);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
index 542e866..e64e6c1 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/FormExecutorContext.java
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.wicket.model.models;
 
 import org.apache.isis.applib.annotation.PromptStyle;
 
-public interface FormExecutorContext {
+public interface FormExecutorContext extends ParentEntityModelProvider {
 
     FormExecutor getFormExecutor();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java
new file mode 100644
index 0000000..61f4b6f
--- /dev/null
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ParentEntityModelProvider.java
@@ -0,0 +1,26 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.viewer.wicket.model.models;
+
+public interface ParentEntityModelProvider {
+
+    EntityModel getParentEntityModel();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index 80b962f..8c79da6 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -34,6 +34,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
+import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.model.models.VoidModel;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
@@ -50,8 +51,9 @@ public enum ActionResultResponseType {
         }
 
         @Override
-        public ActionResultResponse interpretResult(final ActionModel model, ObjectAdapter targetAdapter, ConcurrencyException ex) {
-            return toEntityPage(model, targetAdapter, ex);
+        public ActionResultResponse interpretResult(final ActionModel model, final ObjectAdapter targetAdapter, final ConcurrencyException ex) {
+            final ActionResultResponse actionResultResponse = toEntityPage(model, targetAdapter, ex);
+            return actionResultResponse;
         }
     },
     COLLECTION {

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptHeaderPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptHeaderPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptHeaderPanel.java
index 4d2e98e..59a26dc 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptHeaderPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptHeaderPanel.java
@@ -20,11 +20,11 @@ package org.apache.isis.viewer.wicket.ui.components.actionprompt;
 
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.AbstractReadOnlyModel;
+
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
@@ -40,7 +40,7 @@ public class ActionPromptHeaderPanel extends PanelAbstract<ActionModel> {
 
         ObjectAdapter targetAdapter = model.getTargetAdapter();
 
-        getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.ENTITY_ICON_AND_TITLE, new EntityModel(targetAdapter));
+        getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.ENTITY_ICON_AND_TITLE, model.getParentEntityModel());
 
 
         final Label label = new Label(ID_ACTION_NAME, new AbstractReadOnlyModel<String>() {

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
index 821f3ff..af32122 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
@@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponse;
 import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseType;
@@ -108,7 +107,7 @@ public class ActionParametersPanel extends PanelAbstract<ActionModel> {
             targetAdapter = actionModel.getTargetAdapter();
 
             getComponentFactoryRegistry().addOrReplaceComponent(this, ComponentType.PARAMETERS, getActionModel());
-            getComponentFactoryRegistry().addOrReplaceComponent(header, ComponentType.ENTITY_ICON_AND_TITLE, new EntityModel(targetAdapter));
+            getComponentFactoryRegistry().addOrReplaceComponent(header, ComponentType.ENTITY_ICON_AND_TITLE, actionModel.getParentEntityModel());
 
             final String actionName = getActionModel().getActionMemento().getAction(actionModel.getSpecificationLoader()).getName();
             header.add(new Label(ID_ACTION_NAME, Model.of(actionName)));

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
index de016cb..6e723e5 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
@@ -28,7 +28,6 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
-import org.apache.isis.viewer.wicket.ui.components.unknown.UnknownModelPanelFactory;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.CancelHintRequired;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormComponentPanelAbstract;
 
@@ -75,10 +74,8 @@ public class EntityLinkSimplePanel extends FormComponentPanelAbstract<ObjectAdap
         final ObjectAdapter adapter = getEntityModel().getObject(); // getPendingElseCurrentAdapter();
 
         if (adapter != null) {
-            final EntityModel entityModelForLink = new EntityModel(adapter);
-            entityModelForLink.setContextAdapterIfAny(getEntityModel().getContextAdapterIfAny());
-            entityModelForLink.setRenderingHint(getEntityModel().getRenderingHint());
-            
+            final EntityModel entityModelForLink = getEntityModel();
+
             final ComponentFactory componentFactory = getComponentFactoryRegistry().findComponentFactory(ComponentType.ENTITY_ICON_AND_TITLE, entityModelForLink);
 
             final Component component = componentFactory.createComponent(ID_ENTITY_ICON_AND_TITLE, entityModelForLink);

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 23ea2b3..b46a67f 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -66,6 +66,7 @@ import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
 import org.apache.isis.viewer.wicket.model.hints.IsisEnvelopeEvent;
 import org.apache.isis.viewer.wicket.model.hints.IsisEventLetterAbstract;
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
@@ -284,9 +285,9 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid
         }
 
         String markupId = null;
-        EntityModel entityModel = getUiHintContainerIfAny();
-        if(entityModel != null) {
-            String path = entityModel.getHint(getPage(), PageAbstract.UIHINT_FOCUS);
+        UiHintContainer hintContainer = getUiHintContainerIfAny();
+        if(hintContainer != null) {
+            String path = hintContainer.getHint(getPage(), PageAbstract.UIHINT_FOCUS);
             if(path != null) {
                 Component childComponent = get(path);
                 if(childComponent != null) {
@@ -303,7 +304,7 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid
 
     }
 
-    protected EntityModel getUiHintContainerIfAny() {
+    protected UiHintContainer getUiHintContainerIfAny() {
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
index 156e36e..d3d0814 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/actionprompt/ActionPromptPage.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.viewer.wicket.ui.pages.actionprompt;
 
-import org.apache.wicket.Component;
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
@@ -38,9 +37,6 @@ public class ActionPromptPage extends PageAbstract {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * For use with {@link Component#setResponsePage(org.apache.wicket.Page)}
-     */
     public ActionPromptPage(final ActionModel model) {
         super(new PageParameters(), model.getActionMemento().getAction(model.getSpecificationLoader()).getName(), ComponentType.ACTION_PROMPT);
         addChildComponents(themeDiv, model);

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index f19c7c7..8b0ae6d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -29,7 +29,7 @@ import org.apache.wicket.util.string.Strings;
 
 import org.apache.isis.applib.layout.component.Grid;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
@@ -38,6 +38,7 @@ import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModel;
@@ -128,30 +129,34 @@ public class EntityPage extends PageAbstract {
     }
 
     @Override
-    public EntityModel getUiHintContainerIfAny() {
+    public UiHintContainer getUiHintContainerIfAny() {
         return model;
     }
 
-    /**
-     * A rather crude way of intercepting the redirect-and-post strategy.
-     * 
-     * <p>
-     * Performs eager loading of corresponding {@link EntityModel}, with
-     * {@link ConcurrencyChecking#NO_CHECK no} concurrency checking.
-     */
+//    private static ThreadLocal<AdapterManager.ConcurrencyChecking> concurrencyChecking =
+//            new ThreadLocal<AdapterManager.ConcurrencyChecking>() {
+//                protected AdapterManager.ConcurrencyChecking initialValue() {
+//                    return null;
+//                }
+//            };
+
+    @Override
+    public void onBeforeRender() {
+        final AdapterManager.ConcurrencyChecking prior = AdapterManager.ConcurrencyChecking.disable();
+        //concurrencyChecking.set(prior);
+        super.onBeforeRender();
+    }
+
     @Override
-    protected void onBeforeRender() {
-
-
-        ConcurrencyChecking.executeWithConcurrencyCheckingDisabled(
-                new Runnable() {
-                    @Override
-                    public void run() {
-                        EntityPage.this.model.load(ConcurrencyChecking.NO_CHECK);
-                        EntityPage.super.onBeforeRender();
-                    }
-                }
-        );
+    public void onAfterRender() {
+        super.onAfterRender();
+
+//        final AdapterManager.ConcurrencyChecking prior = concurrencyChecking.get();
+//        if(prior != null) {
+//            AdapterManager.ConcurrencyChecking.reset(prior);
+        AdapterManager.ConcurrencyChecking.reset(AdapterManager.ConcurrencyChecking.CHECK);
+//        }
+//        concurrencyChecking.remove();
     }
 
     private void buildPage() {

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorAbstract.java
index 97611da..a11c44a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorAbstract.java
@@ -31,11 +31,13 @@ import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
+import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.FormExecutor;
+import org.apache.isis.viewer.wicket.model.models.ParentEntityModelProvider;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponseHandlingStrategy;
 
-public abstract class FormExecutorAbstract<M extends BookmarkableModel<ObjectAdapter>> implements FormExecutor {
+public abstract class FormExecutorAbstract<M extends BookmarkableModel<ObjectAdapter> & ParentEntityModelProvider> implements FormExecutor {
 
     protected final M model;
 
@@ -107,7 +109,33 @@ public abstract class FormExecutorAbstract<M extends BookmarkableModel<ObjectAda
             // flush any queued changes, so concurrency or violation exceptions (if any)
             // will be thrown here
             getTransactionManager().flushTransaction();
+            getPersistenceSession().getPersistenceManager().flush();
+
+            // update target, since version updated (concurrency checks)
+            final EntityModel parentEntityModel = model.getParentEntityModel();
+            parentEntityModel.resetVersion();
+            parentEntityModel.resetPropertyModels();
+
+            //                // don't need to do this, can instead use resetPropertyModels() on EntityModel, see above...
+            //                final Page page = target.getPage();
+            //                if (page instanceof EntityPage) {
+            //
+            //                    page.visitChildren(new IVisitor<Component, Object>() {
+            //                        @Override
+            //                        public void component(
+            //                                final Component component,
+            //                                final IVisit<Object> visit) {
+            //
+            //                            final IModel<?> componentModel = component.getDefaultModel();
+            //                            if (componentModel instanceof ScalarModel) {
+            //                                final ScalarModel scalarModel = (ScalarModel) componentModel;
+            //                                scalarModel.reset();
+            //                            }
+            //                        }
+            //                    });
+            //                }
 
+            onExecuteAndProcessResults(target);
 
             if(promptStyle == PromptStyle.INLINE) {
 
@@ -119,8 +147,6 @@ public abstract class FormExecutorAbstract<M extends BookmarkableModel<ObjectAda
 
             }
 
-            onExecuteAndProcessResults(target);
-
             return true;
 
         } catch (RuntimeException ex) {

http://git-wip-us.apache.org/repos/asf/isis/blob/3ff8f7a8/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
index a328b89..23d249d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
@@ -21,19 +21,15 @@ import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.util.string.AppendingStringBuffer;
-import org.apache.wicket.util.visit.IVisit;
-import org.apache.wicket.util.visit.IVisitor;
 
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.FormExecutorContext;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarModelSubscriber2;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract2;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormFeedbackPanel;
@@ -94,7 +90,7 @@ public abstract class PromptFormAbstract<T extends IModel<ObjectAdapter> & FormE
 
     protected AjaxButton addOkButton() {
 
-        final IModel<ObjectAdapter> model = getModel();
+//        final IModel<ObjectAdapter> model = getModel();
 
         AjaxButton okButton = settings.isUseIndicatorForFormSubmit()
                 ? new IndicatingAjaxButton(ID_OK_BUTTON, new ResourceModel("okLabel")) {
@@ -108,34 +104,9 @@ public abstract class PromptFormAbstract<T extends IModel<ObjectAdapter> & FormE
                     actionPromptIfAny.closePrompt(target);
                 }
 
-                final ObjectAdapter targetAdapter = model.getObject();
-
                 onSubmitOf(target, form, this);
 
-                IsisContext.getSessionFactory().getCurrentSession().getPersistenceSession().flush();
-                IsisContext.getSessionFactory().getCurrentSession().getPersistenceSession().getPersistenceManager()
-                        .flush();
-                // update target, since version updated (concurrency checks)
-                final Page page = target.getPage();
-                if (page instanceof EntityPage) {
-                    final EntityPage entityPage = (EntityPage) page;
-                    final EntityModel pageModel = entityPage.getUiHintContainerIfAny();
-                    pageModel.setObject(targetAdapter);
-
-                    page.visitChildren(new IVisitor<Component, Object>() {
-                        @Override
-                        public void component(
-                                final Component component,
-                                final IVisit<Object> visit) {
-
-                            final IModel<?> componentModel = component.getDefaultModel();
-                            if (componentModel instanceof ScalarModel) {
-                                final ScalarModel scalarModel = (ScalarModel) componentModel;
-                                scalarModel.reset();
-                            }
-                        }
-                    });
-                }
+
             }
 
             @Override
@@ -237,7 +208,7 @@ public abstract class PromptFormAbstract<T extends IModel<ObjectAdapter> & FormE
         }
     }
 
-    private EntityModel getPageUiHintContainerIfAny() {
+    private UiHintContainer getPageUiHintContainerIfAny() {
         Page page = getPage();
         if (page instanceof EntityPage) {
             EntityPage entityPage = (EntityPage) page;
@@ -292,16 +263,15 @@ public abstract class PromptFormAbstract<T extends IModel<ObjectAdapter> & FormE
         //            System.out.println("onSubmitOf, lastFocusedElementId = " + lastFocusedElementId);
         //            System.out.println("onSubmitOf, ajaxButton.getPath() = " + ajaxButton.getPath());
 
-        final EntityModel entityModel = getPageUiHintContainerIfAny();
+        final UiHintContainer entityModel = getPageUiHintContainerIfAny();
         if (entityModel == null) {
             return;
         }
-        ObjectAdapterMemento oam = entityModel.getObjectAdapterMemento();
-        if (oam == null) {
-            return;
-        }
-        Component parentPanel = this.parentPanel;
-        MarkupContainer parent = parentPanel.getParent();
+//        ObjectAdapterMemento oam = entityModel.getObjectAdapterMemento();
+//        if (oam == null) {
+//            return;
+//        }
+        MarkupContainer parent = this.parentPanel.getParent();
         if (parent != null) {
             entityModel.setHint(getPage(), PageAbstract.UIHINT_FOCUS, parent.getPageRelativePath());
         }