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 2015/08/28 19:16:07 UTC

[07/12] isis git commit: ISIS-1044: introducing interaction contexts - analogous to those visibility/usability/validity checking, for accessing properties, collections, invoking actions; also action prompt (for choices and autoComplete).

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyModifyContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyModifyContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyModifyContext.java
deleted file mode 100644
index a8d6b1d..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyModifyContext.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *  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.core.metamodel.interactions;
-
-import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
-
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.events.PropertyModifyEvent;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.InteractionContextType;
-import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-
-/**
- * See {@link InteractionContext} for overview; analogous to
- * {@link PropertyModifyEvent}.
- */
-public class PropertyModifyContext extends ValidityContext<PropertyModifyEvent> implements ProposedHolder {
-
-    private final ObjectAdapter proposed;
-
-    public PropertyModifyContext(DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter target, final Identifier id, final ObjectAdapter proposed) {
-        super(InteractionContextType.PROPERTY_MODIFY, deploymentCategory, session, invocationMethod, id, target);
-
-        this.proposed = proposed;
-    }
-
-    /**
-     * The (proposed) new value for a property.
-     */
-    @Override
-    public ObjectAdapter getProposed() {
-        return proposed;
-    }
-
-    @Override
-    public PropertyModifyEvent createInteractionEvent() {
-        return new PropertyModifyEvent(unwrap(getTarget()), getIdentifier(), unwrap(getProposed()));
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java
index 5d93ade..db83021 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyUsabilityContext.java
@@ -19,26 +19,33 @@
 
 package org.apache.isis.core.metamodel.interactions;
 
-import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
-
-
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.PropertyUsabilityEvent;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionContextType;
 import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 
+import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
+
 /**
  * See {@link InteractionContext} for overview; analogous to
  * {@link PropertyUsabilityEvent}.
  */
 public class PropertyUsabilityContext extends UsabilityContext<PropertyUsabilityEvent> {
 
-    public PropertyUsabilityContext(DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter target, final Identifier identifier, Where where) {
-        super(InteractionContextType.PROPERTY_USABLE, deploymentCategory, session, invocationMethod, identifier, target, where);
+    public PropertyUsabilityContext(
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter target,
+            final Identifier identifier,
+            Where where) {
+        super(InteractionContextType.PROPERTY_USABLE, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target, where);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyValidityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyValidityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyValidityContext.java
new file mode 100644
index 0000000..20d600e
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyValidityContext.java
@@ -0,0 +1,75 @@
+/*
+ *  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.core.metamodel.interactions;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.events.PropertyModifyEvent;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionContextType;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+
+import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
+
+/**
+ * See {@link InteractionContext} for overview; analogous to
+ * {@link PropertyModifyEvent}.
+ */
+public class PropertyValidityContext extends ValidityContext<PropertyModifyEvent> implements ProposedHolder {
+
+    private final OneToOneAssociation property;
+    private final ObjectAdapter proposed;
+
+    public PropertyValidityContext(
+            final OneToOneAssociation property,
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter target,
+            final Identifier id,
+            final ObjectAdapter proposed) {
+        super(InteractionContextType.PROPERTY_MODIFY, isisConfiguration, deploymentCategory, session, invocationMethod, id, target);
+        this.property = property;
+
+        this.proposed = proposed;
+    }
+
+    public OneToOneAssociation getProperty() {
+        return property;
+    }
+
+    /**
+     * The (proposed) new value for a property.
+     */
+    @Override
+    public ObjectAdapter getProposed() {
+        return proposed;
+    }
+
+    @Override
+    public PropertyModifyEvent createInteractionEvent() {
+        return new PropertyModifyEvent(unwrap(getTarget()), getIdentifier(), unwrap(getProposed()));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java
index 78f2412..9095162 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/PropertyVisibilityContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.PropertyVisibilityEvent;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionContextType;
 import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
@@ -36,8 +37,15 @@ import static org.apache.isis.core.metamodel.adapter.ObjectAdapter.Util.unwrap;
  */
 public class PropertyVisibilityContext extends VisibilityContext<PropertyVisibilityEvent> {
 
-    public PropertyVisibilityContext(DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter target, final Identifier identifier, Where where) {
-        super(InteractionContextType.PROPERTY_VISIBLE, deploymentCategory, session, invocationMethod, identifier, target, where);
+    public PropertyVisibilityContext(
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter target,
+            final Identifier identifier,
+            Where where) {
+        super(InteractionContextType.PROPERTY_VISIBLE, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target, where);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java
index 9f85aa7..9f87598 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ProposedHolder.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
  * easier for facets to process multiple at the same time.
  * 
  * <p>
- * Where this is used most often is for {@link PropertyModifyContext} and
+ * Where this is used most often is for {@link PropertyValidityContext} and
  * {@link ActionArgumentContext}, where a {@link Facet} (such as
  * <tt>MandatoryFacet</tt> or <tt>MaxLengthFacet</tt>) would want to perform the
  * same checks on the {@link #getProposed() proposed} value/argument.

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java
index ab0bf2d..b6de2ad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/UsabilityContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.UsabilityEvent;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionContextType;
 import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
@@ -36,8 +37,16 @@ public abstract class UsabilityContext<T extends UsabilityEvent> extends Interac
 
     private final Where where;
 
-    public UsabilityContext(final InteractionContextType interactionType, DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final Identifier identifier, final ObjectAdapter target, final Where where) {
-        super(interactionType, deploymentCategory, session, invocationMethod, identifier, target);
+    public UsabilityContext(
+            final InteractionContextType interactionType,
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final Identifier identifier,
+            final ObjectAdapter target,
+            final Where where) {
+        super(interactionType, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target);
         this.where = where;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java
index 4a682fe..be527cc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/ValidityContext.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.metamodel.interactions;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.events.ValidityEvent;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionContextType;
 import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
@@ -33,8 +34,15 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
  */
 public abstract class ValidityContext<T extends ValidityEvent> extends InteractionContext<T> {
 
-    public ValidityContext(final InteractionContextType interactionType, DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final Identifier identifier, final ObjectAdapter target) {
-        super(interactionType, deploymentCategory, session, invocationMethod, identifier, target);
+    public ValidityContext(
+            final InteractionContextType interactionType,
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final Identifier identifier,
+            final ObjectAdapter target) {
+        super(interactionType, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java
index 81935ab..f07dc2f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/VisibilityContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.VisibilityEvent;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionContextType;
 import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
@@ -38,13 +39,14 @@ public abstract class VisibilityContext<T extends VisibilityEvent> extends Inter
 
     public VisibilityContext(
             final InteractionContextType interactionType,
+            final IsisConfiguration isisConfiguration,
             final DeploymentCategory deploymentCategory,
             final AuthenticationSession session,
             final InteractionInvocationMethod invocationMethod,
             final Identifier identifier,
             final ObjectAdapter target,
             final Where where) {
-        super(interactionType, deploymentCategory, session, invocationMethod, identifier, target);
+        super(interactionType, isisConfiguration, deploymentCategory, session, invocationMethod, identifier, target);
         this.where = where;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
index 57dea94..bdcbb5b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/RuntimeContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
 import org.apache.isis.core.commons.components.Injectable;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.DomainObjectServices;
 import org.apache.isis.core.metamodel.adapter.LocalizationProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectDirtier;
@@ -40,6 +41,8 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoader;
  */
 public interface RuntimeContext extends Injectable, ApplicationScopedComponent {
 
+    public IsisConfiguration getConfiguration();
+
     public DeploymentCategory getDeploymentCategory();
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
index 314f91e..e5582b5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/runtimecontext/noruntime/RuntimeContextNoRuntime.java
@@ -27,6 +27,8 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAbstract;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.adapter.*;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
@@ -43,6 +45,7 @@ import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
 public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
 
+    private final IsisConfiguration configuration;
     private final DeploymentCategory deploymentCategory;
     private final ServicesInjector servicesInjector;
     private final AuthenticationSessionProviderAbstract authenticationSessionProvider;
@@ -57,8 +60,15 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
     public RuntimeContextNoRuntime() {
         this(DeploymentCategory.PRODUCTION);
     }
-    
-    public RuntimeContextNoRuntime(DeploymentCategory deploymentCategory) {
+
+    public RuntimeContextNoRuntime(final DeploymentCategory deploymentCategory) {
+        this(new IsisConfigurationDefault(), deploymentCategory);
+    }
+
+    public RuntimeContextNoRuntime(
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory) {
+        this.configuration = isisConfiguration;
         this.deploymentCategory = deploymentCategory;
         // Unlike most of the methods in this implementation, does nothing
         // (because this will always be called, even in a no-runtime context).
@@ -305,6 +315,11 @@ public class RuntimeContextNoRuntime extends RuntimeContextAbstract {
     // ///////////////////////////////////////////
 
     @Override
+    public IsisConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    @Override
     public DeploymentCategory getDeploymentCategory() {
         return deploymentCategory;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
index 30fd6f3..4fc4a52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/SpecificationContext.java
@@ -17,12 +17,14 @@
 package org.apache.isis.core.metamodel.spec;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ServicesProvider;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
 
 public class SpecificationContext {
 
+    private final IsisConfiguration isisConfiguration;
     private final DeploymentCategory deploymentCategory;
     private final AuthenticationSessionProvider authenticationSessionProvider;
     private final ServicesProvider servicesProvider;
@@ -31,12 +33,14 @@ public class SpecificationContext {
     private final FacetProcessor facetProcessor;
 
     public SpecificationContext(
-            final DeploymentCategory deploymentCategory, 
-            final AuthenticationSessionProvider authenticationSessionProvider, 
-            final ServicesProvider servicesProvider, 
-            final ObjectInstantiator objectInstantiator, 
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSessionProvider authenticationSessionProvider,
+            final ServicesProvider servicesProvider,
+            final ObjectInstantiator objectInstantiator,
             final SpecificationLoader specificationLoader,
             final FacetProcessor facetProcessor) {
+        this.isisConfiguration = isisConfiguration;
         this.deploymentCategory = deploymentCategory;
         this.authenticationSessionProvider = authenticationSessionProvider;
         this.servicesProvider = servicesProvider;
@@ -45,6 +49,10 @@ public class SpecificationContext {
         this.facetProcessor = facetProcessor;
     }
 
+    public IsisConfiguration getConfiguration() {
+        return isisConfiguration;
+    }
+
     public DeploymentCategory getDeploymentCategory() {
         return deploymentCategory;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java
index 3389610..2381a67 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/CurrentHolder.java
@@ -21,6 +21,9 @@ package org.apache.isis.core.metamodel.spec.feature;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.interactions.AccessContext;
+import org.apache.isis.core.metamodel.interactions.InteractionContext;
 
 /**
  * Mix-in interface for {@link ObjectFeature}s that reference or otherwise
@@ -31,7 +34,15 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  * {@link OneToManyAssociation collection}s and {@link OneToOneActionParameter
  * action parameter}s (but not {@link ObjectAction action}s themselves).
  */
-public interface CurrentHolder {
+public interface CurrentHolder<T extends AccessContext<?>> {
+
+    /**
+     * Creates an {@link InteractionContext} that represents access to this association.
+     */
+    public T createAccessingInteractionContext(
+            AuthenticationSession session,
+            InteractionInvocationMethod interactionMethod,
+            ObjectAdapter targetObjectAdapter);
 
     /**
      * Returns the referenced {@link ObjectAdapter} for the owning
@@ -41,6 +52,6 @@ public interface CurrentHolder {
      * For example, if this is an {@link OneToOneAssociation}, then returns the
      * referenced object.
      */
-    ObjectAdapter get(final ObjectAdapter owner);
+    ObjectAdapter get(final ObjectAdapter owner, final T accessingContext);
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java
index 0487c32..8a275ef 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/MutableCurrentHolder.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.spec.feature;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.interactions.AccessContext;
 
 /**
  * Mix-in interface for {@link ObjectAction}s that reference or otherwise
@@ -31,7 +32,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  * {@link ObjectAction action}s themselves) nor {@link OneToManyAssociation
  * collection}s.
  */
-public interface MutableCurrentHolder extends CurrentHolder {
+public interface MutableCurrentHolder<T extends AccessContext<?>> extends CurrentHolder<T> {
 
     /**
      * Updates the referenced {@link ObjectAdapter} for the owning
@@ -41,11 +42,11 @@ public interface MutableCurrentHolder extends CurrentHolder {
      * <p>
      * For example, if this is a {@link OneToOneAssociation}, then updates the
      * object referenced .
-     * 
+     *
+     * @param accessingContext
      * @param owner
      * @param newValue
-     *            - the new value, or <tt>null</tt>
      */
-    void set(final ObjectAdapter owner, final ObjectAdapter newValue);
+    void set(final T accessingContext, final ObjectAdapter owner, final ObjectAdapter newValue);
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index ea308cf..21fd6e9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -19,12 +19,15 @@ package org.apache.isis.core.metamodel.spec.feature;
 
 import java.util.List;
 
+import com.google.common.base.Functions;
+import com.google.common.base.Predicate;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.ActionSemantics;
 import org.apache.isis.applib.annotation.Bulk;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.value.Blob;
@@ -34,6 +37,7 @@ import org.apache.isis.core.commons.lang.StringFunctions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetFilters;
 import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
@@ -41,19 +45,17 @@ import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFace
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
+import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaPosition;
 import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
 import org.apache.isis.core.metamodel.facets.object.wizard.WizardFacet;
 import org.apache.isis.core.metamodel.interactions.AccessContext;
-import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
+import org.apache.isis.core.metamodel.interactions.ActionValidityContext;
 import org.apache.isis.core.metamodel.interactions.ValidatingInteractionAdvisor;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
-import com.google.common.base.Functions;
-import com.google.common.base.Predicate;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-
 public interface ObjectAction extends ObjectMember {
 
     // //////////////////////////////////////////////////////
@@ -99,11 +101,32 @@ public interface ObjectAction extends ObjectMember {
     // //////////////////////////////////////////////////////////////////
 
     /**
+     * Creates an {@link ActionPromptContext interaction context}
+     * representing the prompting of arguments for this action (defaults, choices, auto-complete).
+     */
+    public ActionPromptContext createPromptInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter targetObject);
+
+
+    /**
+     * Creates an {@link ActionExecutingContext interaction context}
+     * representing the invoking (pre-execute) this action.
+     */
+    public ActionExecutingContext createExecutingInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter targetObject,
+            final ObjectAdapter[] arguments);
+
+
+    /**
      * Invokes the action's method on the target object given the specified set
      * of parameters, checking the visibility, usability and validity first.
      */
     ObjectAdapter executeWithRuleChecking(
-            final ObjectAdapter target,
+            final ActionExecutingContext actionExecutingContext, final ObjectAdapter target,
             final ObjectAdapter[] parameters,
             final AuthenticationSession authenticationSession,
             final Where where) throws AuthorizationException;
@@ -112,14 +135,17 @@ public interface ObjectAction extends ObjectMember {
      * Invokes the action's method on the target object given the specified set
      * of parameters.
      */
-    ObjectAdapter execute(ObjectAdapter target, ObjectAdapter[] parameters);
+    ObjectAdapter execute(
+            final ActionExecutingContext actionExecutingContext,
+            ObjectAdapter target,
+            ObjectAdapter[] parameters);
 
     // //////////////////////////////////////////////////////////////////
     // valid
     // //////////////////////////////////////////////////////////////////
 
-/**
-     * Creates an {@link ActionInvocationContext interaction context}
+    /**
+     * Creates an {@link ActionValidityContext interaction context}
      * representing an attempt to invoke this action.
      *
      * <p>
@@ -131,7 +157,8 @@ public interface ObjectAction extends ObjectMember {
      *       interactions (such as {@link AccessContext} accesses) have no
      *       corresponding vetoing methods.
      */
-    public ActionInvocationContext createActionInvocationInteractionContext(AuthenticationSession session,
+    public ActionValidityContext createValidityInteractionContext(
+            AuthenticationSession session,
             InteractionInvocationMethod invocationMethod, ObjectAdapter targetObject, ObjectAdapter[] proposedArguments);
 
     /**
@@ -195,7 +222,8 @@ public interface ObjectAction extends ObjectMember {
      * the user can choose from.
      */
     ObjectAdapter[][] getChoices(
-            ObjectAdapter target,
+            final ActionPromptContext actionPromptContext,
+            final ObjectAdapter target,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
index 54a3b8c..14766ff 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
@@ -29,11 +29,13 @@ import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.interactions.ActionArgumentContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
+import org.apache.isis.core.metamodel.interactions.ParameterAccessingContext;
 
 /**
  * Analogous to {@link ObjectAssociation}.
  */
-public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
+public interface ObjectActionParameter extends ObjectFeature, CurrentHolder<ParameterAccessingContext> {
 
     /**
      * If true then can cast to a {@link OneToOneActionParameter}.
@@ -102,6 +104,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      * user can choose from, based on the input search argument.
      */
     ObjectAdapter[] getAutoComplete(
+            final ActionPromptContext actionPromptContext,
             final ObjectAdapter adapter,
             final String searchArg,
             final AuthenticationSession authenticationSession,
@@ -121,6 +124,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      * user can choose from.
      */
     ObjectAdapter[] getChoices(
+            final ActionPromptContext actionPromptContext,
             final ObjectAdapter adapter,
             final ObjectAdapter[] argumentsIfAvailable,
             final AuthenticationSession authenticationSession,

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
index dd69917..16337b0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociation.java
@@ -38,12 +38,13 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
 import org.apache.isis.core.metamodel.specloader.specimpl.ContributeeMember;
 
 /**
  * Provides reflective access to a field on a domain object.
  */
-public interface ObjectAssociation extends ObjectMember, CurrentHolder {
+public interface ObjectAssociation<T extends AssociationAccessingContext<?>> extends ObjectMember, CurrentHolder<T> {
 
     /**
      * Returns the referenced {@link ObjectAdapter} for the owning
@@ -53,7 +54,7 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
      * For example, if this is an {@link OneToOneAssociation}, then returns the
      * referenced object.
      */
-    ObjectAdapter get(final ObjectAdapter owner);
+    ObjectAdapter get(final ObjectAdapter owner, final T associationAccessingContext);
 
     /**
      * Get the name for the business key, if one has been specified.
@@ -80,7 +81,8 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
      * user can choose from.
      */
     public ObjectAdapter[] getChoices(
-            ObjectAdapter object,
+            final T associationAccessingContext,
+            final ObjectAdapter objectAdapter,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory);
 
@@ -95,7 +97,8 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
      * user can choose from, based on the provided search argument.
      */
     public ObjectAdapter[] getAutoComplete(
-            final ObjectAdapter object,
+            final T associationAccessingContext,
+            final ObjectAdapter objectAdapter,
             final String searchArg,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory);
@@ -112,7 +115,7 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
      * Returns <code>true</code> if this field on the specified object is deemed
      * to be empty, or has no content.
      */
-    boolean isEmpty(ObjectAdapter target);
+    boolean isEmpty(ObjectAdapter target, final T accessingContext);
 
     /**
      * Determines if this field must be complete before the object is in a valid

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
index 71f74f7..3b76f5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMember.java
@@ -72,7 +72,11 @@ public interface ObjectMember extends ObjectFeature {
      * provided as API for symmetry with interactions (such as
      * {@link AccessContext} accesses) have no corresponding vetoing methods.
      */
-    VisibilityContext<?> createVisibleInteractionContext(AuthenticationSession session, InteractionInvocationMethod invocationMethod, ObjectAdapter targetObjectAdapter, Where where);
+    VisibilityContext<?> createVisibleInteractionContext(
+            AuthenticationSession session,
+            InteractionInvocationMethod invocationMethod,
+            ObjectAdapter targetObjectAdapter,
+            Where where);
 
     /**
      * Determines if this member is visible, represented as a {@link Consent}.
@@ -97,7 +101,11 @@ public interface ObjectMember extends ObjectFeature {
      * provided as API for symmetry with interactions (such as
      * {@link AccessContext} accesses) have no corresponding vetoing methods.
      */
-    UsabilityContext<?> createUsableInteractionContext(AuthenticationSession session, InteractionInvocationMethod invocationMethod, ObjectAdapter target, Where where);
+    UsabilityContext<?> createUsableInteractionContext(
+            AuthenticationSession session,
+            InteractionInvocationMethod invocationMethod,
+            ObjectAdapter target,
+            Where where);
 
     /**
      * Determines whether this member is usable, represented as a
@@ -158,7 +166,7 @@ public interface ObjectMember extends ObjectFeature {
      *
      * <p>
      *     For the former case, is thrown by
-     *     {@link ObjectAction#executeWithRuleChecking(org.apache.isis.core.metamodel.adapter.ObjectAdapter, org.apache.isis.core.metamodel.adapter.ObjectAdapter[], org.apache.isis.core.commons.authentication.AuthenticationSession, org.apache.isis.applib.annotation.Where)}
+     *     {@link ObjectAction#executeWithRuleChecking(org.apache.isis.core.metamodel.interactions.ActionExecutingContext, ObjectAdapter, ObjectAdapter[], AuthenticationSession, Where)}
      *     when the action being executed is not visible or not usable for the specified session.  One reason this
      *     might occur if there was an attempt to construct a URL (eg a bookmarked action) and invoke in an unauthenticated session.
      * </p>

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
index 076c6b6..3f2f621 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectMemberContext.java
@@ -17,6 +17,7 @@
 package org.apache.isis.core.metamodel.spec.feature;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.ServicesProvider;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
@@ -25,6 +26,7 @@ import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
 public class ObjectMemberContext {
 
+    private final IsisConfiguration isisConfiguration;
     private final DeploymentCategory deploymentCategory;
     private final AuthenticationSessionProvider authenticationSessionProvider;
     private final SpecificationLoader specificationLoader;
@@ -33,6 +35,7 @@ public class ObjectMemberContext {
     private final ServicesProvider servicesProvider;
 
     public ObjectMemberContext(
+            final IsisConfiguration isisConfiguration,
             final DeploymentCategory deploymentCategory,
             final AuthenticationSessionProvider authenticationSessionProvider,
             final SpecificationLoader specificationLoader,
@@ -40,6 +43,7 @@ public class ObjectMemberContext {
             final QuerySubmitter querySubmitter,
             final ServicesProvider servicesProvider) {
 
+        this.isisConfiguration = isisConfiguration;
         this.deploymentCategory = deploymentCategory;
         this.authenticationSessionProvider = authenticationSessionProvider;
         this.specificationLoader = specificationLoader;
@@ -49,6 +53,10 @@ public class ObjectMemberContext {
         this.servicesProvider = servicesProvider;
     }
 
+    public IsisConfiguration getConfiguration() {
+        return isisConfiguration;
+    }
+
     public DeploymentCategory getDeploymentCategory() {
         return deploymentCategory;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
index 0abc308..469493a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToManyAssociation.java
@@ -24,10 +24,23 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
 import org.apache.isis.core.metamodel.interactions.AccessContext;
+import org.apache.isis.core.metamodel.interactions.CollectionAccessingContext;
 import org.apache.isis.core.metamodel.interactions.InteractionContext;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
 
-public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeature {
+public interface OneToManyAssociation extends ObjectAssociation<CollectionAccessingContext> , OneToManyFeature {
+
+
+
+    /**
+     * Creates an {@link InteractionContext} that represents access to this
+     * property.
+     */
+    public CollectionAccessingContext createAccessingInteractionContext(
+            AuthenticationSession session,
+            InteractionInvocationMethod interactionMethod,
+            ObjectAdapter targetObjectAdapter);
+
 
     // /////////////////////////////////////////////////////////////
     // add
@@ -43,17 +56,21 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
      * provided as API for symmetry with interactions (such as
      * {@link AccessContext} accesses) have no corresponding vetoing methods.
      */
-    public ValidityContext<?> createValidateAddInteractionContext(AuthenticationSession session, InteractionInvocationMethod invocationMethod, ObjectAdapter owningObjectAdapter, ObjectAdapter proposedObjectToAdd);
+    public ValidityContext<?> createValidatingAddInteractionContext(
+            AuthenticationSession session,
+            InteractionInvocationMethod invocationMethod,
+            ObjectAdapter owningObjectAdapter,
+            ObjectAdapter proposedObjectToAdd);
 
     /**
      * Determines if the specified element can be added to the collection field,
      * represented as a {@link Consent}.
      *
      * <p>
-     * If allowed the {@link #addElement(ObjectAdapter, ObjectAdapter) add}
+     * If allowed the {@link #addElement(CollectionAccessingContext, ObjectAdapter, ObjectAdapter) add}
      * method can be called with the same parameters.
      *
-     * @see #addElement(ObjectAdapter, ObjectAdapter)
+     * @see #addElement(CollectionAccessingContext, ObjectAdapter, ObjectAdapter)
      */
     Consent isValidToAdd(ObjectAdapter owningObjectAdapter, ObjectAdapter proposedObjectToAdd);
 
@@ -67,7 +84,10 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
      *
      * @see #isValidToAdd(ObjectAdapter, ObjectAdapter)
      */
-    void addElement(ObjectAdapter owningObjectAdapter, ObjectAdapter objectToAdd);
+    void addElement(
+            final CollectionAccessingContext collectionAccessingContext,
+            ObjectAdapter owningObjectAdapter,
+            ObjectAdapter objectToAdd);
 
     // /////////////////////////////////////////////////////////////
     // remove
@@ -83,17 +103,21 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
      * provided as API for symmetry with interactions (such as
      * {@link AccessContext} accesses) have no corresponding vetoing methods.
      */
-    ValidityContext<?> createValidateRemoveInteractionContext(AuthenticationSession session, InteractionInvocationMethod invocationMethod, ObjectAdapter owningObjectAdapter, ObjectAdapter proposedObjectToRemove);
+    ValidityContext<?> createValidatingRemoveInteractionContext(
+            AuthenticationSession session,
+            InteractionInvocationMethod invocationMethod,
+            ObjectAdapter owningObjectAdapter,
+            ObjectAdapter proposedObjectToRemove);
 
     /**
      * Determines if the specified element can be removed from the collection
      * field, represented as a {@link Consent}.
      * 
      * <p>
-     * If allowed the {@link #removeElement(ObjectAdapter, ObjectAdapter)
+     * If allowed the {@link #removeElement(CollectionAccessingContext, ObjectAdapter, ObjectAdapter)
      * remove} method can be called with the same parameters.
      * 
-     * @see #removeElement(ObjectAdapter, ObjectAdapter)
+     * @see #removeElement(CollectionAccessingContext, ObjectAdapter, ObjectAdapter)
      */
     Consent isValidToRemove(ObjectAdapter owningObjectAdapter, ObjectAdapter proposedObjectToRemove);
 
@@ -107,7 +131,10 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
      *
      * @see #isValidToRemove(ObjectAdapter, ObjectAdapter)
      */
-    void removeElement(ObjectAdapter owningObjectAdapter, ObjectAdapter oObjectToRemove);
+    void removeElement(
+            final CollectionAccessingContext collectionAccessingContext,
+            ObjectAdapter owningObjectAdapter,
+            ObjectAdapter objectToRemove);
 
     // /////////////////////////////////////////////////////////////
     // clear

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
index 0d8fcce..104d229 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/OneToOneAssociation.java
@@ -27,7 +27,7 @@ import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
 import org.apache.isis.core.metamodel.interactions.AccessContext;
 import org.apache.isis.core.metamodel.interactions.InteractionContext;
-import org.apache.isis.core.metamodel.interactions.PropertyAccessContext;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -35,7 +35,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
  * Provides reflective access to a field on a domain object that is used to
  * reference another domain object.
  */
-public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature, MutableCurrentHolder {
+public interface OneToOneAssociation extends ObjectAssociation<PropertyAccessingContext>, OneToOneFeature, MutableCurrentHolder<PropertyAccessingContext> {
 
     /**
      * Initialise this field in the specified object with the specified
@@ -47,19 +47,12 @@ public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature,
     void initAssociation(ObjectAdapter inObject, ObjectAdapter associate);
 
     /**
-     * Creates an {@link InteractionContext} that represents access to this
-     * property.
-     */
-    public PropertyAccessContext createAccessInteractionContext(AuthenticationSession session, InteractionInvocationMethod interactionMethod, ObjectAdapter targetObjectAdapter);
-
-    /**
      * Creates an {@link InteractionContext} that represents validation of a
      * proposed new value for the property.
      * 
      * <p>
      * Typically it is easier to just call
-     * {@link #isAssociationValid(ObjectAdapter, ObjectAdapter)} or
-     * {@link #isAssociationValidResult(ObjectAdapter, ObjectAdapter)}; this is
+     * {@link #isAssociationValid(ObjectAdapter, ObjectAdapter)}; this is
      * provided as API for symmetry with interactions (such as
      * {@link AccessContext} accesses) have no corresponding vetoing methods.
      */
@@ -79,21 +72,26 @@ public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature,
      * object to this logical state the <code>initAssociation</code> method
      * should be used on each of the objects.
      * 
-     * @deprecated - see {@link #set(ObjectAdapter, ObjectAdapter)}
+     * @deprecated - see {@link MutableCurrentHolder#set(AccessContext, ObjectAdapter, ObjectAdapter)}
      * @see #initAssociation(ObjectAdapter, ObjectAdapter)
      */
     @Deprecated
-    void setAssociation(ObjectAdapter inObject, ObjectAdapter associate);
+    void setAssociation(
+            final PropertyAccessingContext propertyAccessingContext,
+            final ObjectAdapter inObject,
+            final ObjectAdapter associate);
 
     /**
      * Clear this reference field (make it <code>null</code>) in the specified
      * object, and remove any association back-link.
      * 
-     * @see #setAssociation(ObjectAdapter, ObjectAdapter)
-     * @deprecated - see {@link #set(ObjectAdapter, ObjectAdapter)}
+     * @see #setAssociation(PropertyAccessingContext, ObjectAdapter, ObjectAdapter)
+     * @deprecated - see {@link MutableCurrentHolder#set(AccessContext, ObjectAdapter, ObjectAdapter)}
      */
     @Deprecated
-    void clearAssociation(ObjectAdapter inObject);
+    void clearAssociation(
+            final PropertyAccessingContext propertyAccessingContext,
+            final ObjectAdapter targetAdapter);
 
     
     // //////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index 1b9c3b3..68236c8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -439,10 +439,12 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
         final ObjectInstantiator objectInstantiator = getRuntimeContext().getObjectInstantiator();
 
         // create contexts as inputs ...
-        final SpecificationContext specContext = new SpecificationContext(getDeploymentCategory(), authenticationSessionProvider, servicesProvider, objectInstantiator, specificationLookup, facetProcessor);
+        final SpecificationContext specContext = new SpecificationContext(getConfiguration(), getDeploymentCategory(), authenticationSessionProvider, servicesProvider, objectInstantiator, specificationLookup, facetProcessor);
 
         final AdapterManager adapterMap = getRuntimeContext().getAdapterManager();
-        final ObjectMemberContext objectMemberContext = new ObjectMemberContext(getDeploymentCategory(), authenticationSessionProvider, specificationLookup, adapterMap, getRuntimeContext().getQuerySubmitter(), servicesProvider);
+        final ObjectMemberContext objectMemberContext = new ObjectMemberContext(getConfiguration(),
+                getDeploymentCategory(), authenticationSessionProvider, specificationLookup, adapterMap, getRuntimeContext().getQuerySubmitter(), servicesProvider
+        );
 
         // ... and create the specs
         if (FreeStandingList.class.isAssignableFrom(cls)) {
@@ -463,6 +465,13 @@ public final class ObjectReflectorDefault implements SpecificationLoaderSpi, App
         return runtimeContext.getDeploymentCategory();
     }
 
+    private IsisConfiguration getConfiguration() {
+        if(runtimeContext == null) {
+            throw new IllegalStateException("Runtime context has not been injected.");
+        }
+        return runtimeContext.getConfiguration();
+    }
+
     private Class<?> loadBuiltIn(final String className) throws ClassNotFoundException {
         final Class<?> builtIn = ClassUtil.getBuiltIn(className);
         if (builtIn != null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index cdeb1a1..ffc494c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -43,6 +43,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
 import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
@@ -161,14 +163,16 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
     
     @Override
     public Consent isVisible(final AuthenticationSession session, final ObjectAdapter contributee, Where where) {
-        final VisibilityContext<?> ic = serviceAction.createVisibleInteractionContext(session, InteractionInvocationMethod.BY_USER, serviceAdapter, where);
+        final VisibilityContext<?> ic = serviceAction.createVisibleInteractionContext(session, InteractionInvocationMethod.BY_USER, serviceAdapter, where
+        );
         ic.putContributee(this.contributeeParam, contributee);
         return InteractionUtils.isVisibleResult(this, ic).createConsent();
     }
 
     @Override
     public Consent isUsable(final AuthenticationSession session, final ObjectAdapter contributee, Where where) {
-        final UsabilityContext<?> ic = serviceAction.createUsableInteractionContext(session, InteractionInvocationMethod.BY_USER, serviceAdapter, where);
+        final UsabilityContext<?> ic = serviceAction.createUsableInteractionContext(session, InteractionInvocationMethod.BY_USER, serviceAdapter, where
+        );
         ic.putContributee(this.contributeeParam, contributee);
         return InteractionUtils.isUsableResult(this, ic).createConsent();
     }
@@ -181,10 +185,10 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
 
     @Override
     public ObjectAdapter[][] getChoices(
-            final ObjectAdapter target,
+            final ActionPromptContext actionPromptContext, final ObjectAdapter target,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
-        final ObjectAdapter[][] serviceChoices = serviceAction.getChoices(serviceAdapter, authenticationSession,
+        final ObjectAdapter[][] serviceChoices = serviceAction.getChoices(actionPromptContext, serviceAdapter, authenticationSession,
                 deploymentCategory);
         return removeElementFromArray(serviceChoices, contributeeParam, new ObjectAdapter[][]{});
     }
@@ -195,7 +199,10 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
     }
 
     @Override
-    public ObjectAdapter execute(final ObjectAdapter contributee, final ObjectAdapter[] arguments) {
+    public ObjectAdapter execute(
+            final ActionExecutingContext actionExecutingContext,
+            final ObjectAdapter contributee,
+            final ObjectAdapter[] arguments) {
         
         // this code also exists in ActionInvocationFacetViaMethod
         // we need to repeat it here because the target adapter should be the contributee, not the contributing service.
@@ -240,7 +247,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
             }
         }
         
-        return serviceAction.execute(serviceAdapter, argsPlusContributee(contributee, arguments));
+        return serviceAction.execute(actionExecutingContext, serviceAdapter, argsPlusContributee(contributee, arguments));
     }
 
     private ObjectAdapter[] argsPlusContributee(final ObjectAdapter contributee, final ObjectAdapter[] arguments) {

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
index 61a5f23..c3b89a7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
@@ -45,17 +45,19 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet;
+import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
 import org.apache.isis.core.metamodel.facets.actions.debug.DebugFacet;
 import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
 import org.apache.isis.core.metamodel.facets.actions.exploration.ExplorationFacet;
-import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
 import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
 import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
-import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
 import org.apache.isis.core.metamodel.interactions.ActionUsabilityContext;
+import org.apache.isis.core.metamodel.interactions.ActionValidityContext;
 import org.apache.isis.core.metamodel.interactions.ActionVisibilityContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
@@ -126,7 +128,6 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
         return getReturnType() != getSpecificationLoader().loadSpecification(void.class);
     }
 
-
     @Override
     public ObjectSpecification getOnType() {
         final ActionInvocationFacet facet = getActionInvocationFacet();
@@ -281,8 +282,12 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public VisibilityContext<?> createVisibleInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObjectAdapter, Where where) {
-        return new ActionVisibilityContext(getDeploymentCategory(), session, invocationMethod, targetObjectAdapter, getIdentifier(), where);
+    public VisibilityContext<?> createVisibleInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter targetObjectAdapter,
+            Where where) {
+        return new ActionVisibilityContext(getConfiguration(), getDeploymentCategory(), session, invocationMethod, targetObjectAdapter, getIdentifier(), where);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -290,8 +295,15 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public UsabilityContext<?> createUsableInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObjectAdapter, Where where) {
-        return new ActionUsabilityContext(getDeploymentCategory(), session, invocationMethod, targetObjectAdapter, getIdentifier(), where);
+    public UsabilityContext<?> createUsableInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter targetObjectAdapter,
+            Where where) {
+        return new ActionUsabilityContext(
+                getConfiguration(), getDeploymentCategory(),
+                session, invocationMethod, targetObjectAdapter,
+                getIdentifier(), where);
     }
 
     // //////////////////////////////////////////////////////////////////
@@ -320,15 +332,22 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
         }
         // only check the action's own validity if all the arguments are OK.
         if (resultSet.isAllowed()) {
-            final ValidityContext<?> ic = createActionInvocationInteractionContext(getAuthenticationSession(), invocationMethod, object, proposedArguments);
+            final ValidityContext<?> ic = createValidityInteractionContext(getAuthenticationSession(), invocationMethod,
+                    object, proposedArguments);
             InteractionUtils.isValidResultSet(this, ic, resultSet);
         }
         return resultSet;
     }
 
     @Override
-    public ActionInvocationContext createActionInvocationInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObject, final ObjectAdapter[] proposedArguments) {
-        return new ActionInvocationContext(getDeploymentCategory(), getAuthenticationSession(), invocationMethod, targetObject, getIdentifier(), proposedArguments);
+    public ActionValidityContext createValidityInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter targetObject,
+            final ObjectAdapter[] proposedArguments) {
+        return new ActionValidityContext(
+                this, getConfiguration(), getDeploymentCategory(), getAuthenticationSession(),
+                invocationMethod, targetObject, getIdentifier(), proposedArguments);
     }
 
     // //////////////////////////////////////////////////////////////////
@@ -336,7 +355,39 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter executeWithRuleChecking(final ObjectAdapter target, final ObjectAdapter[] arguments, final AuthenticationSession authenticationSession, final Where where) {
+    public ActionPromptContext createPromptInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter targetObject) {
+        return new ActionPromptContext(
+                this,
+                getConfiguration(), getDeploymentCategory(), getAuthenticationSession(),
+                invocationMethod, targetObject,
+                getIdentifier());
+    }
+
+    @Override
+    public ActionExecutingContext createExecutingInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter targetObject,
+            final ObjectAdapter[] arguments) {
+        return new ActionExecutingContext(
+                this,
+                getConfiguration(), getDeploymentCategory(), getAuthenticationSession(),
+                invocationMethod, targetObject,
+                getIdentifier(),
+                arguments);
+    }
+
+
+    @Override
+    public ObjectAdapter executeWithRuleChecking(
+            final ActionExecutingContext actionExecutingContext,
+            final ObjectAdapter target,
+            final ObjectAdapter[] arguments,
+            final AuthenticationSession authenticationSession,
+            final Where where) {
 
         // see it?
         final Consent visibility = isVisible(authenticationSession, target, where);
@@ -356,16 +407,19 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
             throw new RecoverableException(validity.getReason());
         }
 
-        return execute(target, arguments);
+        return execute(actionExecutingContext, target, arguments);
     }
 
     @Override
-    public ObjectAdapter execute(final ObjectAdapter target, final ObjectAdapter[] arguments) {
+    public ObjectAdapter execute(
+            final ActionExecutingContext actionExecutingContext,
+            final ObjectAdapter target,
+            final ObjectAdapter[] arguments) {
         if(LOG.isDebugEnabled()) {
             LOG.debug("execute action " + target + "." + getId());
         }
         final ActionInvocationFacet facet = getFacet(ActionInvocationFacet.class);
-        return facet.invoke(this, target, arguments, getAuthenticationSession(), getDeploymentCategory());
+        return facet.invoke(actionExecutingContext, this, target, arguments, getAuthenticationSession(), getDeploymentCategory());
     }
 
     protected ActionInvocationFacet getActionInvocationFacet() {
@@ -435,7 +489,7 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
 
     @Override
     public ObjectAdapter[][] getChoices(
-            final ObjectAdapter target,
+            final ActionPromptContext actionPromptContext, final ObjectAdapter target,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
 
@@ -447,7 +501,7 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
 
         if (!facet.isNoop()) {
             // using the old choicesXxx() approach
-            parameterChoicesPojos = facet.getChoices(target, authenticationSession, deploymentCategory);
+            parameterChoicesPojos = facet.getChoices(actionPromptContext, target, authenticationSession, deploymentCategory);
 
             // if no options, or not the right number of pojos, then default
             if (parameterChoicesPojos == null) {
@@ -465,7 +519,7 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
             for (int i = 0; i < parameterCount; i++) {
                 final ActionParameterChoicesFacet paramFacet = parameters.get(i).getFacet(ActionParameterChoicesFacet.class);
                 if (paramFacet != null && !paramFacet.isNoop()) {
-                    parameterChoicesPojos[i] = paramFacet.getChoices(target, null, authenticationSession,
+                    parameterChoicesPojos[i] = paramFacet.getChoices(actionPromptContext, target, null, authenticationSession,
                             deploymentCategory);
                 } else {
                     parameterChoicesPojos[i] = new Object[0];

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 4adc3aa..407fa2e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -30,6 +30,7 @@ import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.query.QueryFindAllInstances;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ClassExtensions;
 import org.apache.isis.core.commons.lang.ListExtensions;
 import org.apache.isis.core.commons.lang.StringExtensions;
@@ -51,7 +52,9 @@ import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterA
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
 import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
 import org.apache.isis.core.metamodel.interactions.ActionArgumentContext;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.ParameterAccessingContext;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
 import org.apache.isis.core.metamodel.spec.DomainModelException;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -73,6 +76,18 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
         this.peer = peer;
     }
 
+    @Override
+    public ParameterAccessingContext createAccessingInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod interactionMethod,
+            final ObjectAdapter targetObjectAdapter) {
+        final ObjectActionImpl action = (ObjectActionImpl) getAction();
+        return new ParameterAccessingContext(
+                this,
+                action.getConfiguration(), action.getDeploymentCategory(), action.getAuthenticationSession(),
+                interactionMethod, getIdentifier(), targetObjectAdapter);
+    }
+
     /**
      * Subclasses should override either {@link #isObject()} or
      * {@link #isCollection()}.
@@ -259,16 +274,16 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
 
     @Override
     public ObjectAdapter[] getAutoComplete(
-            ObjectAdapter adapter,
-            String searchArg,
+            final ActionPromptContext actionPromptContext,
+            final ObjectAdapter adapter,
+            final String searchArg,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
         final List<ObjectAdapter> adapters = Lists.newArrayList();
         final ActionParameterAutoCompleteFacet facet = getFacet(ActionParameterAutoCompleteFacet.class);
 
         if (facet != null) {
-
-            final Object[] choices = facet.autoComplete(adapter, searchArg, authenticationSession, deploymentCategory);
+            final Object[] choices = facet.autoComplete(actionPromptContext, adapter, searchArg, authenticationSession, deploymentCategory);
             checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification());
             for (final Object choice : choices) {
                 adapters.add(getAdapterMap().adapterFor(choice));
@@ -301,7 +316,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
 
     @Override
     public ObjectAdapter[] getChoices(
-            final ObjectAdapter adapter,
+            final ActionPromptContext actionPromptContext, final ObjectAdapter adapter,
             final ObjectAdapter[] argumentsIfAvailable,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
@@ -310,18 +325,18 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
         final ObjectAdapter target = targetForDefaultOrChoices(adapter, argListIfAvailable);
         final List<ObjectAdapter> args = argsForDefaultOrChoices(adapter, argListIfAvailable);
         
-        return findChoices(target, args, authenticationSession, deploymentCategory);
+        return findChoices(actionPromptContext, target, args, authenticationSession, deploymentCategory);
     }
 
     private ObjectAdapter[] findChoices(
-            final ObjectAdapter target,
+            final ActionPromptContext actionPromptContext, final ObjectAdapter target,
             final List<ObjectAdapter> args,
             final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
         final List<ObjectAdapter> adapters = Lists.newArrayList();
         final ActionParameterChoicesFacet facet = getFacet(ActionParameterChoicesFacet.class);
 
         if (facet != null) {
-            final Object[] choices = facet.getChoices(target, args, authenticationSession, deploymentCategory);
+            final Object[] choices = facet.getChoices(actionPromptContext, target, args, authenticationSession, deploymentCategory);
             checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification());
             for (final Object choice : choices) {
                 ObjectAdapter adapter = choice != null? getAdapterMap().adapterFor(choice) : null;
@@ -426,7 +441,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
 
     @Override
     public ActionArgumentContext createProposedArgumentInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObject, final ObjectAdapter[] proposedArguments, final int position) {
-        return new ActionArgumentContext(getDeploymentCategory(), getAuthenticationSession(), invocationMethod, targetObject, getIdentifier(), proposedArguments, position);
+        return new ActionArgumentContext(getConfiguration(), getDeploymentCategory(), getAuthenticationSession(), invocationMethod, targetObject, getIdentifier(), proposedArguments, position);
     }
 
     @Override
@@ -491,6 +506,10 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
         return parentAction.getDeploymentCategory();
     }
 
+    private IsisConfiguration getConfiguration() {
+        return parentAction.getConfiguration();
+    }
+
     protected SpecificationLoader getSpecificationLoader() {
         return parentAction.getSpecificationLoader();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
index 626b362..b7f94d6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
@@ -24,10 +24,11 @@ import org.apache.isis.core.metamodel.adapter.MutableProposedHolder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.TypedHolder;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.interactions.ParameterAccessingContext;
 import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
@@ -97,11 +98,11 @@ public class ObjectActionParameterParseable extends ObjectActionParameterAbstrac
 
     /**
      * Gets the proposed value of the {@link Instance} (downcast as a
-     * {@link MutableProposed}, wrapping the proposed value into a
+     * {@link MutableProposedHolder}, wrapping the proposed value into a
      * {@link ObjectAdapter}.
      */
     @Override
-    public ObjectAdapter get(final ObjectAdapter owner) {
+    public ObjectAdapter get(final ObjectAdapter owner, final ParameterAccessingContext parameterAccessingContext) {
         final MutableProposedHolder proposedHolder = getProposedHolder(owner);
         final Object proposed = proposedHolder.getProposed();
         return getAdapterMap().adapterFor(proposed);
@@ -109,7 +110,7 @@ public class ObjectActionParameterParseable extends ObjectActionParameterAbstrac
 
     /**
      * Sets the proposed value of the {@link Instance} (downcast as a
-     * {@link MutableProposed}, unwrapped the proposed value from a
+     * {@link MutableProposedHolder}, unwrapped the proposed value from a
      * {@link ObjectAdapter}.
      */
     public void set(final ObjectAdapter owner, final ObjectAdapter newValue) {

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
index ccd2f51..0dcbc66 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
@@ -22,6 +22,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.lang.ListExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 
 /**
@@ -60,11 +61,11 @@ public class ObjectActionParameterParseableContributee extends ObjectActionParam
 
     @Override
     public ObjectAdapter[] getAutoComplete(
-            final ObjectAdapter adapter,
+            final ActionPromptContext actionPromptContext, final ObjectAdapter adapter,
             final String searchArg,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
-        return serviceActionParameter.getAutoComplete(serviceAdapter, searchArg, authenticationSession,
+        return serviceActionParameter.getAutoComplete(actionPromptContext, serviceAdapter, searchArg, authenticationSession,
                 deploymentCategory);
     }