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 18:30:19 UTC

[4/9] 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/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
index 41b6d6a..c8f9203 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
@@ -26,12 +26,13 @@ import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
 import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacet;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
 
 // TODO need to pull up the common methods. like getName(), from subclasses
-public abstract class ObjectAssociationAbstract extends ObjectMemberAbstract implements ObjectAssociation {
+public abstract class ObjectAssociationAbstract<T extends AssociationAccessingContext<?>> extends ObjectMemberAbstract implements ObjectAssociation<T> {
 
     private final ObjectSpecification specification;
 
@@ -43,9 +44,6 @@ public abstract class ObjectAssociationAbstract extends ObjectMemberAbstract imp
         this.specification = specification;
     }
 
-    @Override
-    public abstract ObjectAdapter get(final ObjectAdapter fromObject);
-
     /**
      * Return the specification of the object (or objects) that this field
      * holds. For a value are one-to-one reference this will be type that the
@@ -74,7 +72,9 @@ public abstract class ObjectAssociationAbstract extends ObjectMemberAbstract imp
     }
 
     @Override
-    public abstract boolean isEmpty(final ObjectAdapter adapter);
+    public abstract boolean isEmpty(
+            final ObjectAdapter adapter,
+            final T accessingContext);
 
     @Override
     public boolean isOneToOneAssociation() {

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 1322d5d..1083614 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.filter.Filter;
 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.StringExtensions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
@@ -68,8 +69,12 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
     private final ServicesProvider servicesProvider;
     private final QuerySubmitter querySubmitter;
     private final DeploymentCategory deploymentCategory;
+    private final IsisConfiguration configuration;
 
-    protected ObjectMemberAbstract(final FacetedMethod facetedMethod, final FeatureType featureType, final ObjectMemberContext objectMemberContext) {
+    protected ObjectMemberAbstract(
+            final FacetedMethod facetedMethod,
+            final FeatureType featureType,
+            final ObjectMemberContext objectMemberContext) {
         final String id = facetedMethod.getIdentifier().getMemberName();
         if (id == null) {
             throw new IllegalArgumentException("Name must always be set");
@@ -85,12 +90,17 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
         this.adapterManager = objectMemberContext.getAdapterManager();
         this.servicesProvider = objectMemberContext.getServicesProvider();
         this.querySubmitter = objectMemberContext.getQuerySubmitter();
+        this.configuration = objectMemberContext.getConfiguration();
     }
 
     // /////////////////////////////////////////////////////////////
     // from context
     // /////////////////////////////////////////////////////////////
 
+    public IsisConfiguration getConfiguration() {
+        return configuration;
+    }
+
     public DeploymentCategory getDeploymentCategory() {
         return deploymentCategory;
     }
@@ -234,7 +244,8 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
     }
 
     private InteractionResult isVisibleResult(final AuthenticationSession session, final ObjectAdapter target, Where where) {
-        final VisibilityContext<?> ic = createVisibleInteractionContext(session, InteractionInvocationMethod.BY_USER, target, where);
+        final VisibilityContext<?> ic = createVisibleInteractionContext(session, InteractionInvocationMethod.BY_USER, target, where
+        );
         return InteractionUtils.isVisibleResult(this, ic);
     }
 
@@ -256,7 +267,8 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
     }
 
     private InteractionResult isUsableResult(final AuthenticationSession session, final ObjectAdapter target, Where where) {
-        final UsabilityContext<?> ic = createUsableInteractionContext(session, InteractionInvocationMethod.BY_USER, target, where);
+        final UsabilityContext<?> ic = createUsableInteractionContext(session, InteractionInvocationMethod.BY_USER, target, where
+        );
         return InteractionUtils.isUsableResult(this, ic);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 95c1e73..b9690f4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -36,6 +36,7 @@ import org.apache.isis.applib.filter.Filters;
 import org.apache.isis.applib.profiles.Localization;
 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.exceptions.UnknownTypeException;
 import org.apache.isis.core.commons.lang.ClassExtensions;
 import org.apache.isis.core.commons.util.ToString;
@@ -83,6 +84,7 @@ import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContribut
 public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implements ObjectSpecification {
 
     private final static Logger LOG = LoggerFactory.getLogger(ObjectSpecificationAbstract.class);
+    private final IsisConfiguration configuration;
 
     private static class SubclassList {
         private final List<ObjectSpecification> classes = Lists.newArrayList();
@@ -178,17 +180,22 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
         this.isAbstract = ClassExtensions.isAbstract(introspectedClass);
         this.identifier = Identifier.classIdentifier(introspectedClass);
 
+        this.configuration = specificationContext.getConfiguration();
         this.deploymentCategory = specificationContext.getDeploymentCategory();
         this.authenticationSessionProvider = specificationContext.getAuthenticationSessionProvider();
         this.servicesProvider = specificationContext.getServicesProvider();
         this.objectInstantiator = specificationContext.getObjectInstantiator();
         this.specificationLoader = specificationContext.getSpecificationLoader();
         this.facetProcessor = specificationContext.getFacetProcessor();
+
         
         this.objectMemberContext = objectMemberContext;
     }
 
-    
+    public IsisConfiguration getConfiguration() {
+        return configuration;
+    }
+
     protected DeploymentCategory getDeploymentCategory() {
         return deploymentCategory;
     }
@@ -623,7 +630,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
 
     @Override
     public ObjectTitleContext createTitleInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod interactionMethod, final ObjectAdapter targetObjectAdapter) {
-        return new ObjectTitleContext(getDeploymentCategory(), session, interactionMethod, targetObjectAdapter, getIdentifier(), targetObjectAdapter.titleString());
+        return new ObjectTitleContext(getConfiguration(), getDeploymentCategory(), session, interactionMethod, targetObjectAdapter, getIdentifier(), targetObjectAdapter.titleString());
     }
 
     // //////////////////////////////////////////////////////////////////////
@@ -1105,7 +1112,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
      */
     @Override
     public ObjectValidityContext createValidityInteractionContext(DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod interactionMethod, final ObjectAdapter targetObjectAdapter) {
-        return new ObjectValidityContext(deploymentCategory, session, interactionMethod, targetObjectAdapter, getIdentifier());
+        return new ObjectValidityContext(getConfiguration(), deploymentCategory, session, interactionMethod, targetObjectAdapter, getIdentifier());
     }
 
     // //////////////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
index af66786..69e354d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
@@ -17,6 +17,7 @@
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
 import java.util.List;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.annotation.Where;
@@ -36,6 +37,8 @@ import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
 import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetForContributee;
 import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
+import org.apache.isis.core.metamodel.interactions.CollectionAccessingContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
@@ -117,8 +120,17 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
     }
 
     @Override
-    public ObjectAdapter get(final ObjectAdapter ownerAdapter) {
-        return serviceAction.execute(serviceAdapter, new ObjectAdapter[]{ownerAdapter});
+    public ObjectAdapter get(
+            final ObjectAdapter ownerAdapter,
+            final CollectionAccessingContext collectionAccessingContext) {
+
+        final ActionExecutingContext actionExecutingContext =
+                serviceAction.createExecutingInteractionContext(
+                        collectionAccessingContext.getSession(),
+                        collectionAccessingContext.getInvocationMethod(),
+                        serviceAdapter,
+                        new ObjectAdapter[] { ownerAdapter });
+        return serviceAction.execute(actionExecutingContext, serviceAdapter, new ObjectAdapter[]{ownerAdapter});
     }
 
     @Override
@@ -139,14 +151,16 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
 
     @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(0, contributee); // by definition, the contributee will be the first arg of the service action
         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(0, contributee); // by definition, the contributee will be the first arg of the service action
         return InteractionUtils.isUsableResult(this, ic).createConsent();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
index 7733052..86e89c7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
@@ -31,14 +31,15 @@ import org.apache.isis.core.metamodel.consent.InteractionResult;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
-import org.apache.isis.core.metamodel.interactions.CollectionAddToContext;
-import org.apache.isis.core.metamodel.interactions.CollectionRemoveFromContext;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.interactions.CollectionAccessingContext;
 import org.apache.isis.core.metamodel.interactions.CollectionUsabilityContext;
+import org.apache.isis.core.metamodel.interactions.CollectionValidityAddToContext;
+import org.apache.isis.core.metamodel.interactions.CollectionValidityRemoveFromContext;
 import org.apache.isis.core.metamodel.interactions.CollectionVisibilityContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
@@ -49,7 +50,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 
-public class OneToManyAssociationImpl extends ObjectAssociationAbstract implements OneToManyAssociation {
+public class OneToManyAssociationImpl extends ObjectAssociationAbstract<CollectionAccessingContext> implements OneToManyAssociation {
 
     public OneToManyAssociationImpl(
             final FacetedMethod facetedMethod, 
@@ -75,8 +76,16 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public VisibilityContext<?> createVisibleInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter ownerAdapter, Where where) {
-        return new CollectionVisibilityContext(getDeploymentCategory(), session, invocationMethod, ownerAdapter, getIdentifier(), where);
+    public VisibilityContext<?> createVisibleInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter ownerAdapter,
+            final Where where) {
+        return new CollectionVisibilityContext(
+                getConfiguration(), getDeploymentCategory(),
+                session, invocationMethod, ownerAdapter,
+                getIdentifier(),
+                where);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -84,8 +93,16 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public UsabilityContext<?> createUsableInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter ownerAdapter, Where where) {
-        return new CollectionUsabilityContext(getDeploymentCategory(), session, invocationMethod, ownerAdapter, getIdentifier(), where);
+    public UsabilityContext<?> createUsableInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter ownerAdapter,
+            final Where where) {
+        return new CollectionUsabilityContext(
+                getConfiguration(), getDeploymentCategory(),
+                session, invocationMethod, ownerAdapter,
+                getIdentifier(),
+                where);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -93,8 +110,17 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public ValidityContext<?> createValidateAddInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToAddAdapter) {
-        return new CollectionAddToContext(getDeploymentCategory(), session, invocationMethod, ownerAdapter, getIdentifier(), proposedToAddAdapter);
+    public ValidityContext<?> createValidatingAddInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToAddAdapter) {
+        return new CollectionValidityAddToContext(
+                this,
+                getConfiguration(), getDeploymentCategory(),
+                session, invocationMethod, ownerAdapter,
+                getIdentifier(),
+                proposedToAddAdapter);
     }
 
     /**
@@ -107,7 +133,8 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     }
 
     private InteractionResult isValidToAddResult(final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToAddAdapter) {
-        final ValidityContext<?> validityContext = createValidateAddInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER, ownerAdapter, proposedToAddAdapter);
+        final ValidityContext<?> validityContext = createValidatingAddInteractionContext(getAuthenticationSession(),
+                InteractionInvocationMethod.BY_USER, ownerAdapter, proposedToAddAdapter);
         return InteractionUtils.isValidResult(this, validityContext);
     }
 
@@ -116,8 +143,12 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public ValidityContext<?> createValidateRemoveInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToRemoveAdapter) {
-        return new CollectionRemoveFromContext(getDeploymentCategory(), session, invocationMethod, ownerAdapter, getIdentifier(), proposedToRemoveAdapter);
+    public ValidityContext<?> createValidatingRemoveInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToRemoveAdapter) {
+        return new CollectionValidityRemoveFromContext(this, getConfiguration(), getDeploymentCategory(), session, invocationMethod, ownerAdapter, getIdentifier(), proposedToRemoveAdapter);
     }
 
     /**
@@ -130,7 +161,8 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     }
 
     private InteractionResult isValidToRemoveResult(final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToRemoveAdapter) {
-        final ValidityContext<?> validityContext = createValidateRemoveInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER, ownerAdapter, proposedToRemoveAdapter);
+        final ValidityContext<?> validityContext = createValidatingRemoveInteractionContext(getAuthenticationSession(),
+                InteractionInvocationMethod.BY_USER, ownerAdapter, proposedToRemoveAdapter);
         return InteractionUtils.isValidResult(this, validityContext);
     }
 
@@ -143,10 +175,23 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter get(final ObjectAdapter ownerAdapter) {
+    public CollectionAccessingContext createAccessingInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod interactionMethod,
+            final ObjectAdapter ownerAdapter) {
+        return new CollectionAccessingContext(
+                this,
+                getConfiguration(), getDeploymentCategory(), session,
+                interactionMethod, getIdentifier(), ownerAdapter);
+    }
+
+    @Override
+    public ObjectAdapter get(
+            final ObjectAdapter ownerAdapter,
+            final CollectionAccessingContext collectionAccessingContext) {
 
         final PropertyOrCollectionAccessorFacet accessor = getFacet(PropertyOrCollectionAccessorFacet.class);
-        final Object collection = accessor.getProperty(ownerAdapter, getAuthenticationSession(), getDeploymentCategory());
+        final Object collection = accessor.getProperty(collectionAccessingContext, ownerAdapter, getAuthenticationSession(), getDeploymentCategory());
         if (collection == null) {
             return null;
         }
@@ -154,10 +199,12 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     }
 
     @Override
-    public boolean isEmpty(final ObjectAdapter parentAdapter) {
+    public boolean isEmpty(
+            final ObjectAdapter parentAdapter,
+            final CollectionAccessingContext collectionAccessingContext) {
         // REVIEW should we be able to determine if a collection is empty
         // without loading it?
-        final ObjectAdapter collection = get(parentAdapter);
+        final ObjectAdapter collection = get(parentAdapter, collectionAccessingContext);
         final CollectionFacet facet = CollectionFacet.Utils.getCollectionFacetFromSpec(collection);
         return facet.size(collection) == 0;
     }
@@ -167,7 +214,10 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public void addElement(final ObjectAdapter ownerAdapter, final ObjectAdapter referencedAdapter) {
+    public void addElement(
+            final CollectionAccessingContext collectionAccessingContext,
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter referencedAdapter) {
         if (referencedAdapter == null) {
             throw new IllegalArgumentException("Can't use null to add an item to a collection");
         }
@@ -176,18 +226,21 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
                 throw new IsisException("can't set a reference to a transient object from a persistent one: " + ownerAdapter.titleString() + " (persistent) -> " + referencedAdapter.titleString() + " (transient)");
             }
             final CollectionAddToFacet facet = getFacet(CollectionAddToFacet.class);
-            facet.add(ownerAdapter, referencedAdapter);
+            facet.add(collectionAccessingContext, ownerAdapter, referencedAdapter);
         }
     }
 
     @Override
-    public void removeElement(final ObjectAdapter ownerAdapter, final ObjectAdapter referencedAdapter) {
+    public void removeElement(
+            final CollectionAccessingContext collectionAccessingContext,
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter referencedAdapter) {
         if (referencedAdapter == null) {
             throw new IllegalArgumentException("element should not be null");
         }
         if (readWrite()) {
             final CollectionRemoveFromFacet facet = getFacet(CollectionRemoveFromFacet.class);
-            facet.remove(ownerAdapter, referencedAdapter);
+            facet.remove(collectionAccessingContext, ownerAdapter, referencedAdapter);
         }
     }
 
@@ -223,7 +276,7 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
 
     @Override
     public ObjectAdapter[] getChoices(
-            final ObjectAdapter ownerAdapter,
+            final CollectionAccessingContext associationAccessingContext, final ObjectAdapter ownerAdapter,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
         return new ObjectAdapter[0];
@@ -242,7 +295,7 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
 
     @Override
     public ObjectAdapter[] getAutoComplete(
-            ObjectAdapter object,
+            final CollectionAccessingContext associationAccessingContext, ObjectAdapter object,
             String searchArg,
             final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
         return new ObjectAdapter[0];

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
index 569b86f..2d32940 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.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;
 
 public class OneToOneActionParameterContributee extends OneToOneActionParameterImpl implements ObjectActionParameterContributee{
@@ -54,11 +55,11 @@ public class OneToOneActionParameterContributee extends OneToOneActionParameterI
 
     @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);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
index 367c36f..4c64141 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
@@ -19,10 +19,13 @@
 
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.MutableProposedHolder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.TypedHolder;
+import org.apache.isis.core.metamodel.interactions.ParameterAccessingContext;
 import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
 
@@ -59,11 +62,11 @@ public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract i
 
     /**
      * 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);
@@ -71,7 +74,7 @@ public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract i
 
     /**
      * 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/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
index 8e69c1e..759a977 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
@@ -17,6 +17,7 @@
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
 import java.util.List;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.annotation.Where;
@@ -35,7 +36,9 @@ import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
 import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetForContributee;
 import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.ActionExecutingContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -103,8 +106,15 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
     }
 
     @Override
-    public ObjectAdapter get(final ObjectAdapter ownerAdapter) {
-        return serviceAction.execute(serviceAdapter, new ObjectAdapter[]{ownerAdapter});
+    public ObjectAdapter get(
+            final ObjectAdapter ownerAdapter,
+            final PropertyAccessingContext propertyAccessingContext) {
+
+        final ActionExecutingContext actionExecutingContext =
+                serviceAction.createExecutingInteractionContext(
+                        propertyAccessingContext.getSession(), propertyAccessingContext.getInvocationMethod(),
+                        serviceAdapter, new ObjectAdapter[] { ownerAdapter });
+        return serviceAction.execute(actionExecutingContext, serviceAdapter, new ObjectAdapter[]{ownerAdapter});
     }
 
     @Override
@@ -125,14 +135,16 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
 
     @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(0, contributee); // by definition, the contributee will be the first arg of the service action
         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(0, contributee); // by definition, the contributee will be the first arg of the service action
         return InteractionUtils.isUsableResult(this, ic).createConsent();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
index 636811f..dd9fd49 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
@@ -37,8 +37,9 @@ import org.apache.isis.core.metamodel.consent.InteractionResult;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
+import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacet;
 import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacet;
 import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
@@ -46,8 +47,8 @@ import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyCle
 import org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
-import org.apache.isis.core.metamodel.interactions.PropertyAccessContext;
-import org.apache.isis.core.metamodel.interactions.PropertyModifyContext;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
+import org.apache.isis.core.metamodel.interactions.PropertyValidityContext;
 import org.apache.isis.core.metamodel.interactions.PropertyUsabilityContext;
 import org.apache.isis.core.metamodel.interactions.PropertyVisibilityContext;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
@@ -55,11 +56,11 @@ import org.apache.isis.core.metamodel.interactions.ValidityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
 import org.apache.isis.core.metamodel.spec.Instance;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.MutableCurrentHolder;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMemberContext;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
 
-public class OneToOneAssociationImpl extends ObjectAssociationAbstract implements OneToOneAssociation {
+public class OneToOneAssociationImpl extends ObjectAssociationAbstract<PropertyAccessingContext> implements OneToOneAssociation {
 
     public OneToOneAssociationImpl(final FacetedMethod facetedMethod, final ObjectMemberContext objectMemberContext) {
         this(facetedMethod, getSpecification(objectMemberContext.getSpecificationLoader(), facetedMethod.getType()), objectMemberContext);
@@ -74,8 +75,12 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public VisibilityContext<?> createVisibleInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter ownerAdapter, Where where) {
-        return new PropertyVisibilityContext(getDeploymentCategory(), session, invocationMethod, ownerAdapter, getIdentifier(), where);
+    public VisibilityContext<?> createVisibleInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter ownerAdapter,
+            final Where where) {
+        return new PropertyVisibilityContext(getConfiguration(), getDeploymentCategory(), session, invocationMethod, ownerAdapter, getIdentifier(), where);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -83,8 +88,12 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public UsabilityContext<?> createUsableInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter ownerAdapter, Where where) {
-        return new PropertyUsabilityContext(getDeploymentCategory(), session, invocationMethod, ownerAdapter, getIdentifier(), where);
+    public UsabilityContext<?> createUsableInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod invocationMethod,
+            final ObjectAdapter ownerAdapter,
+            final Where where) {
+        return new PropertyUsabilityContext(getConfiguration(), getDeploymentCategory(), session, invocationMethod, ownerAdapter, getIdentifier(), where);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -92,8 +101,12 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public ValidityContext<?> createValidateInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod interactionMethod, final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToReferenceAdapter) {
-        return new PropertyModifyContext(getDeploymentCategory(), session, interactionMethod, ownerAdapter, getIdentifier(), proposedToReferenceAdapter);
+    public ValidityContext<?> createValidateInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod interactionMethod,
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToReferenceAdapter) {
+        return new PropertyValidityContext(this, getConfiguration(), getDeploymentCategory(), session, interactionMethod, ownerAdapter, getIdentifier(), proposedToReferenceAdapter);
     }
 
     /**
@@ -101,7 +114,9 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
      * initiated {@link InteractionInvocationMethod#BY_USER by user}.
      */
     @Override
-    public Consent isAssociationValid(final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToReferenceAdapter) {
+    public Consent isAssociationValid(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToReferenceAdapter) {
         return isAssociationValidResult(ownerAdapter, proposedToReferenceAdapter).createConsent();
     }
 
@@ -127,9 +142,11 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter get(final ObjectAdapter ownerAdapter) {
+    public ObjectAdapter get(
+            final ObjectAdapter ownerAdapter,
+            final PropertyAccessingContext propertyAccessingContext) {
         final PropertyOrCollectionAccessorFacet facet = getFacet(PropertyOrCollectionAccessorFacet.class);
-        final Object referencedPojo = facet.getProperty(ownerAdapter, getAuthenticationSession(), getDeploymentCategory());
+        final Object referencedPojo = facet.getProperty(propertyAccessingContext, ownerAdapter, getAuthenticationSession(), getDeploymentCategory());
 
         if (referencedPojo == null) {
             return null;
@@ -143,14 +160,20 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
      * initiated {@link InteractionInvocationMethod#BY_USER by user}.
      */
     @Override
-    public PropertyAccessContext createAccessInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod interactionMethod, final ObjectAdapter ownerAdapter) {
-        return new PropertyAccessContext(getDeploymentCategory(), session, InteractionInvocationMethod.BY_USER, ownerAdapter, getIdentifier(), get(ownerAdapter
-        ));
+    public PropertyAccessingContext createAccessingInteractionContext(
+            final AuthenticationSession session,
+            final InteractionInvocationMethod interactionMethod,
+            final ObjectAdapter ownerAdapter) {
+        return new PropertyAccessingContext(this, getConfiguration(), getDeploymentCategory(), session, InteractionInvocationMethod.BY_USER,
+                getIdentifier(), ownerAdapter
+        );
     }
 
     @Override
-    public boolean isEmpty(final ObjectAdapter ownerAdapter) {
-        return get(ownerAdapter) == null;
+    public boolean isEmpty(
+            final ObjectAdapter ownerAdapter,
+            final PropertyAccessingContext propertyAccessingContext) {
+        return get(ownerAdapter, propertyAccessingContext) == null;
     }
 
     // /////////////////////////////////////////////////////////////
@@ -158,24 +181,33 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public void set(final ObjectAdapter ownerAdapter, final ObjectAdapter newReferencedAdapter) {
+    public void set(
+            final PropertyAccessingContext accessingContext,
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter newReferencedAdapter) {
         if (newReferencedAdapter != null) {
-            setValue(ownerAdapter, newReferencedAdapter);
+            setValue(accessingContext, ownerAdapter, newReferencedAdapter);
         } else {
-            clearValue(ownerAdapter);
+            clearValue(accessingContext, ownerAdapter);
         }
     }
 
     /**
-     * @see #set(ObjectAdapter, ObjectAdapter)
+     * @see MutableCurrentHolder#set(org.apache.isis.core.metamodel.interactions.AccessContext, ObjectAdapter, ObjectAdapter)
      */
     @Deprecated
     @Override
-    public void setAssociation(final ObjectAdapter ownerAdapter, final ObjectAdapter newReferencedAdapter) {
-        setValue(ownerAdapter, newReferencedAdapter);
+    public void setAssociation(
+            final PropertyAccessingContext propertyAccessingContext,
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter newReferencedAdapter) {
+        setValue(propertyAccessingContext, ownerAdapter, newReferencedAdapter);
     }
 
-    private void setValue(final ObjectAdapter ownerAdapter, final ObjectAdapter newReferencedAdapter) {
+    private void setValue(
+            final PropertyAccessingContext propertyAccessingContext,
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter newReferencedAdapter) {
         final PropertySetterFacet setterFacet = getFacet(PropertySetterFacet.class);
         if (setterFacet == null) {
             return;
@@ -184,21 +216,23 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
             // TODO: move to facet ?
             throw new IsisException("can't set a reference to a transient object from a persistent one: " + newReferencedAdapter.titleString() + " (transient)");
         }
-        setterFacet.setProperty(ownerAdapter, newReferencedAdapter);
+        setterFacet.setProperty(propertyAccessingContext, ownerAdapter, newReferencedAdapter);
     }
 
     /**
-     * @see #set(ObjectAdapter, ObjectAdapter)
+     * @see MutableCurrentHolder#set(org.apache.isis.core.metamodel.interactions.AccessContext, ObjectAdapter, ObjectAdapter)
      */
     @Deprecated
     @Override
-    public void clearAssociation(final ObjectAdapter ownerAdapter) {
-        clearValue(ownerAdapter);
+    public void clearAssociation(
+            final PropertyAccessingContext propertyAccessingContext,
+            final ObjectAdapter ownerAdapter) {
+        clearValue(propertyAccessingContext, ownerAdapter);
     }
 
-    private void clearValue(final ObjectAdapter ownerAdapter) {
+    private void clearValue(final PropertyAccessingContext propertyAccessingContext, final ObjectAdapter ownerAdapter) {
         final PropertyClearFacet facet = getFacet(PropertyClearFacet.class);
-        facet.clearProperty(ownerAdapter);
+        facet.clearProperty(propertyAccessingContext, ownerAdapter);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -245,11 +279,13 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
 
     @Override
     public ObjectAdapter[] getChoices(
+            final PropertyAccessingContext propertyAccessingContext,
             final ObjectAdapter ownerAdapter,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
         final PropertyChoicesFacet propertyChoicesFacet = getFacet(PropertyChoicesFacet.class);
-        final Object[] pojoOptions = propertyChoicesFacet == null ? null : propertyChoicesFacet.getChoices(ownerAdapter, getSpecificationLoader(),
+        final Object[] pojoOptions = propertyChoicesFacet == null ? null : propertyChoicesFacet.getChoices(
+                propertyAccessingContext, ownerAdapter, getSpecificationLoader(),
                 authenticationSession, deploymentCategory);
         if (pojoOptions != null) {
             List<ObjectAdapter> adapters = Lists.transform(
@@ -283,13 +319,15 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
 
     @Override
     public ObjectAdapter[] getAutoComplete(
+            final PropertyAccessingContext propertyAccessingContext,
             final ObjectAdapter ownerAdapter,
             final String searchArg,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
         final PropertyAutoCompleteFacet propertyAutoCompleteFacet = getFacet(PropertyAutoCompleteFacet.class);
-        final Object[] pojoOptions = propertyAutoCompleteFacet.autoComplete(ownerAdapter, searchArg,
-                authenticationSession, deploymentCategory);
+        final Object[] pojoOptions =
+                propertyAutoCompleteFacet.autoComplete(
+                        propertyAccessingContext, ownerAdapter, searchArg, authenticationSession, deploymentCategory);
         if (pojoOptions != null) {
             final ObjectAdapter[] options = new ObjectAdapter[pojoOptions.length];
             for (int i = 0; i < options.length; i++) {

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
index 783e563..b7cc7d6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
@@ -31,12 +31,14 @@ import org.apache.isis.core.commons.debug.DebugString;
 import org.apache.isis.core.commons.debug.DebugUtils;
 import org.apache.isis.core.commons.debug.DebuggableWithTitle;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacetUtils;
 import org.apache.isis.core.metamodel.facets.object.choices.ChoicesFacetUtils;
 import org.apache.isis.core.metamodel.facets.object.cached.CachedFacetUtils;
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacetUtils;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
 import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -417,10 +419,13 @@ public final class Dump {
             try {
                 final List<ObjectAssociation> fields = objectSpec.getAssociations(Contributed.EXCLUDED);
                 for (int i = 0; i < fields.size(); i++) {
-                    final ObjectAssociation field = fields.get(i);
-                    final ObjectAdapter obj = field.get(collectionAdapter);
+                    final ObjectAssociation<AssociationAccessingContext<?>> association = fields.get(i);
+                    final AssociationAccessingContext accessingContext = association
+                            .createAccessingInteractionContext(null, InteractionInvocationMethod.BY_USER,
+                                    collectionAdapter);
+                    final ObjectAdapter obj = association.get(collectionAdapter, accessingContext);
 
-                    final String name = field.getId();
+                    final String name = association.getId();
                     if (obj == null) {
                         debugBuilder.appendln(name, "null");
                     } else {
@@ -481,12 +486,15 @@ public final class Dump {
             // work through all its fields
             final List<ObjectAssociation> fields = adapter.getSpecification().getAssociations(Contributed.EXCLUDED);
             for (int i = 0; i < fields.size(); i++) {
-                final ObjectAssociation field = fields.get(i);
-                final ObjectAdapter obj = field.get(adapter);
-                final String name = field.getId();
+                final ObjectAssociation<AssociationAccessingContext<?>> association = fields.get(i);
+                final AssociationAccessingContext accessingContext =
+                        association.createAccessingInteractionContext(
+                                null, InteractionInvocationMethod.BY_USER, adapter);
+                final ObjectAdapter obj = association.get(adapter, accessingContext);
+                final String name = association.getId();
                 graphIndent(level, s);
 
-                if (field.isVisible(authenticationSession, adapter, where).isVetoed()) {
+                if (association.isVisible(authenticationSession, adapter, where).isVetoed()) {
                     s.append(name + ": (not visible)");
                     s.append("\n");
                 } else {

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
index a8ff3e8..a5e5e2e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/snapshot/XmlSnapshot.java
@@ -54,11 +54,14 @@ import org.apache.isis.applib.snapshot.SnapshottableWithInclusions;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.core.metamodel.interactions.CollectionAccessingContext;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.ObjectSpecificationException;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -200,7 +203,7 @@ public class XmlSnapshot implements Snapshot {
      * schemaManager must be populated with any application-level namespaces
      * referenced in the document that the parentElement resides within.
      * (Normally this is achieved simply by using appendXml passing in a new
-     * schemaManager - see {@link #toXml()}or {@link XmlSnapshot}).
+     * schemaManager - see {@link XmlSnapshot}).
      */
     private Place appendXml(final ObjectAdapter object) {
 
@@ -266,7 +269,7 @@ public class XmlSnapshot implements Snapshot {
      * with any application-level namespaces referenced in the document that the
      * parentElement resides within. (Normally this is achieved simply by using
      * appendXml passing in a rootElement and a new schemaManager - see
-     * {@link #toXml()}or {@link XmlSnapshot}).
+     * {@link {@link XmlSnapshot}).
      */
     private Element appendXml(final Place parentPlace, final ObjectAdapter childObject) {
 
@@ -491,9 +494,11 @@ public class XmlSnapshot implements Snapshot {
                 LOG.debug("includeField(Pl, Vec, Str): field is 1->1");
             }
 
-            final OneToOneAssociation oneToOneAssociation = ((OneToOneAssociation) field);
-            final ObjectAdapter referencedObject = oneToOneAssociation.get(fieldPlace.getObject()
-            );
+            final OneToOneAssociation property = ((OneToOneAssociation) field);
+            final ObjectAdapter targetAdapter = fieldPlace.getObject();
+            final PropertyAccessingContext propertyAccessingContext = property
+                    .createAccessingInteractionContext(null, InteractionInvocationMethod.BY_USER, targetAdapter);
+            final ObjectAdapter referencedObject = property.get(fieldPlace.getObject(), propertyAccessingContext);
 
             if (referencedObject == null) {
                 return true; // not a failure if the reference was null
@@ -511,15 +516,18 @@ public class XmlSnapshot implements Snapshot {
                 LOG.debug("includeField(Pl, Vec, Str): field is 1->M");
             }
 
-            final OneToManyAssociation oneToManyAssociation = (OneToManyAssociation) field;
-            final ObjectAdapter collection = oneToManyAssociation.get(fieldPlace.getObject());
-            final CollectionFacet facet = collection.getSpecification().getFacet(CollectionFacet.class);
+            final OneToManyAssociation collection = (OneToManyAssociation) field;
+            final ObjectAdapter targetAdapter = fieldPlace.getObject();
+            final CollectionAccessingContext collectionAccessingContext = collection
+                    .createAccessingInteractionContext(null, InteractionInvocationMethod.BY_USER, targetAdapter);
+            final ObjectAdapter collectionAdapter = collection.get(targetAdapter, collectionAccessingContext);
+            final CollectionFacet facet = collectionAdapter.getSpecification().getFacet(CollectionFacet.class);
 
             if (LOG.isDebugEnabled()) {
-                LOG.debug("includeField(Pl, Vec, Str): 1->M: " + log("collection.size", "" + facet.size(collection)));
+                LOG.debug("includeField(Pl, Vec, Str): 1->M: " + log("collection.size", "" + facet.size(collectionAdapter)));
             }
             boolean allFieldsNavigated = true;
-            for (final ObjectAdapter referencedObject : facet.iterable(collection)) {
+            for (final ObjectAdapter referencedObject : facet.iterable(collectionAdapter)) {
                 final boolean appendedXml = appendXmlThenIncludeRemaining(fieldPlace, referencedObject, names, annotation);
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("includeField(Pl, Vec, Str): 1->M: + invoked appendXmlThenIncludeRemaining for " + log("referencedObj", referencedObject) + andlog("returned", "" + appendedXml));
@@ -608,19 +616,19 @@ public class XmlSnapshot implements Snapshot {
         return childElement;
     }
 
-    Place objectToElement(final ObjectAdapter adapter) {
+    Place objectToElement(final ObjectAdapter targetAdapter) {
 
         if (LOG.isDebugEnabled()) {
-            LOG.debug("objectToElement(" + log("object", adapter) + ")");
+            LOG.debug("objectToElement(" + log("object", targetAdapter) + ")");
         }
 
-        final ObjectSpecification nos = adapter.getSpecification();
+        final ObjectSpecification nos = targetAdapter.getSpecification();
 
         if (LOG.isDebugEnabled()) {
             LOG.debug("objectToElement(NO): create element and isis:title");
         }
         final Element element = schema.createElement(getXmlDocument(), nos.getShortIdentifier(), nos.getFullIdentifier(), nos.getSingularName(), nos.getPluralName());
-        isisMetaModel.appendIsisTitle(element, adapter.titleString());
+        isisMetaModel.appendIsisTitle(element, targetAdapter.titleString());
 
         if (LOG.isDebugEnabled()) {
             LOG.debug("objectToElement(NO): create XS element for Isis class");
@@ -631,9 +639,9 @@ public class XmlSnapshot implements Snapshot {
         // cardinality setting.
         topLevelElementWritten = true;
 
-        final Place place = new Place(adapter, element);
+        final Place place = new Place(targetAdapter, element);
 
-        isisMetaModel.setAttributesForClass(element, oidAsString(adapter).toString());
+        isisMetaModel.setAttributesForClass(element, oidAsString(targetAdapter).toString());
 
         final List<ObjectAssociation> fields = nos.getAssociations(Contributed.INCLUDED);
         if (LOG.isDebugEnabled()) {
@@ -689,7 +697,7 @@ public class XmlSnapshot implements Snapshot {
                     continue eachField;
                 }
 
-                final OneToOneAssociation valueAssociation = ((OneToOneAssociation) field);
+                final OneToOneAssociation property = ((OneToOneAssociation) field);
                 final Element xmlValueElement = xmlFieldElement; // more
                                                                  // meaningful
                                                                  // locally
@@ -697,7 +705,10 @@ public class XmlSnapshot implements Snapshot {
 
                 ObjectAdapter value;
                 try {
-                    value = valueAssociation.get(adapter);
+                    final PropertyAccessingContext propertyAccessingContext = property
+                            .createAccessingInteractionContext(null, InteractionInvocationMethod.BY_USER,
+                                    targetAdapter);
+                    value = property.get(targetAdapter, propertyAccessingContext);
 
                     final ObjectSpecification valueNos = value.getSpecification();
 
@@ -728,7 +739,7 @@ public class XmlSnapshot implements Snapshot {
                 }
 
                 // XSD
-                xsdFieldElement = schema.createXsElementForNofValue(xsElement, xmlValueElement, FacetUtil.getFacetsByType(valueAssociation));
+                xsdFieldElement = schema.createXsElementForNofValue(xsElement, xmlValueElement, FacetUtil.getFacetsByType(property));
 
             } else if (field instanceof OneToOneAssociation) {
 
@@ -736,7 +747,7 @@ public class XmlSnapshot implements Snapshot {
                     LOG.debug("objectToElement(NO): " + log("field", fieldName) + " is OneToOneAssociation");
                 }
 
-                final OneToOneAssociation oneToOneAssociation = ((OneToOneAssociation) field);
+                final OneToOneAssociation property = ((OneToOneAssociation) field);
                 final String fullyQualifiedClassName = nos.getFullIdentifier();
                 final Element xmlReferenceElement = xmlFieldElement; // more
                                                                      // meaningful
@@ -747,7 +758,10 @@ public class XmlSnapshot implements Snapshot {
                 ObjectAdapter referencedObjectAdapter;
 
                 try {
-                    referencedObjectAdapter = oneToOneAssociation.get(adapter);
+                    final PropertyAccessingContext propertyAccessingContext =
+                            property.createAccessingInteractionContext(
+                                    null, InteractionInvocationMethod.BY_USER, targetAdapter);
+                    referencedObjectAdapter = property.get(targetAdapter, propertyAccessingContext);
 
                     // XML
                     isisMetaModel.setAttributesForReference(xmlReferenceElement, schema.getPrefix(), fullyQualifiedClassName);
@@ -763,7 +777,7 @@ public class XmlSnapshot implements Snapshot {
                 }
 
                 // XSD
-                xsdFieldElement = schema.createXsElementForNofReference(xsElement, xmlReferenceElement, oneToOneAssociation.getSpecification().getFullIdentifier(), FacetUtil.getFacetsByType(oneToOneAssociation));
+                xsdFieldElement = schema.createXsElementForNofReference(xsElement, xmlReferenceElement, property.getSpecification().getFullIdentifier(), FacetUtil.getFacetsByType(property));
 
             } else if (field instanceof OneToManyAssociation) {
 
@@ -771,27 +785,30 @@ public class XmlSnapshot implements Snapshot {
                     LOG.debug("objectToElement(NO): " + log("field", fieldName) + " is OneToManyAssociation");
                 }
 
-                final OneToManyAssociation oneToManyAssociation = (OneToManyAssociation) field;
+                final OneToManyAssociation collection = (OneToManyAssociation) field;
                 final Element xmlCollectionElement = xmlFieldElement; // more
                                                                       // meaningful
                                                                       // locally
                                                                       // scoped
                                                                       // name
 
-                ObjectAdapter collection;
+                ObjectAdapter collectionAdapter;
                 try {
-                    collection = oneToManyAssociation.get(adapter);
-                    final ObjectSpecification referencedTypeNos = oneToManyAssociation.getSpecification();
+                    final CollectionAccessingContext collectionAccessingContext =
+                            collection.createAccessingInteractionContext(
+                                    null, InteractionInvocationMethod.BY_USER, targetAdapter);
+                    collectionAdapter = collection.get(targetAdapter, collectionAccessingContext);
+                    final ObjectSpecification referencedTypeNos = collection.getSpecification();
                     final String fullyQualifiedClassName = referencedTypeNos.getFullIdentifier();
 
                     // XML
-                    isisMetaModel.setIsisCollection(xmlCollectionElement, schema.getPrefix(), fullyQualifiedClassName, collection);
+                    isisMetaModel.setIsisCollection(xmlCollectionElement, schema.getPrefix(), fullyQualifiedClassName, collectionAdapter);
                 } catch (final Exception ex) {
                     LOG.warn("objectToElement(NO): " + log("field", fieldName) + ": get(obj) threw exception - skipping XML generation");
                 }
 
                 // XSD
-                xsdFieldElement = schema.createXsElementForNofCollection(xsElement, xmlCollectionElement, oneToManyAssociation.getSpecification().getFullIdentifier(), FacetUtil.getFacetsByType(oneToManyAssociation));
+                xsdFieldElement = schema.createXsElementForNofCollection(xsElement, xmlCollectionElement, collection.getSpecification().getFullIdentifier(), FacetUtil.getFacetsByType(collection));
 
             } else {
                 if (LOG.isInfoEnabled()) {

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
index 3ba62cb..197ae33 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
@@ -71,6 +71,8 @@ import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemove
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacetAbstract;
 import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
+import org.apache.isis.core.metamodel.interactions.CollectionAccessingContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 import static org.apache.isis.core.commons.matchers.IsisMatchers.classEqualTo;
@@ -125,7 +127,7 @@ public class CollectionAnnotationFacetFactoryTest extends AbstractFacetFactoryJU
                     mockSpecificationLoaderSpi, mockConfiguration) {
                 @Override
                 public Object getProperty(
-                        final ObjectAdapter inObject,
+                        final AssociationAccessingContext<?> associationAccessingContext, final ObjectAdapter inObject,
                         final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
                     return null;
                 }
@@ -135,7 +137,10 @@ public class CollectionAnnotationFacetFactoryTest extends AbstractFacetFactoryJU
         private void addAddToFacet(final FacetHolder holder) {
             FacetUtil.addFacet(new CollectionAddToFacetAbstract(holder) {
                 @Override
-                public void add(final ObjectAdapter inObject, final ObjectAdapter value) {
+                public void add(
+                        final CollectionAccessingContext collectionAccessingContext,
+                        final ObjectAdapter inObject,
+                        final ObjectAdapter value) {
                 }
             });
         }
@@ -143,7 +148,10 @@ public class CollectionAnnotationFacetFactoryTest extends AbstractFacetFactoryJU
         private void addRemoveFromFacet(final FacetHolder holder) {
             FacetUtil.addFacet(new CollectionRemoveFromFacetAbstract(holder) {
                 @Override
-                public void remove(final ObjectAdapter inObject, final ObjectAdapter element) {
+                public void remove(
+                        final CollectionAccessingContext collectionAccessingContext,
+                        final ObjectAdapter inObject,
+                        final ObjectAdapter element) {
                 }
             });
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
index d940769..3f5e988 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
@@ -31,6 +31,7 @@ import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.adapters.ParsingException;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -53,6 +54,8 @@ public class ParseableFacetUsingParserTest {
     private ServicesInjector mockDependencyInjector;
     @Mock
     private AdapterManager mockAdapterManager;
+    @Mock
+    private IsisConfiguration mockConfiguration;
 
     private ParseableFacetUsingParser parseableFacetUsingParser;
 
@@ -106,7 +109,8 @@ public class ParseableFacetUsingParserTest {
                 return null;
             }
         };
-        parseableFacetUsingParser = new ParseableFacetUsingParser(parser, mockFacetHolder, DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockDependencyInjector, mockAdapterManager);
+        parseableFacetUsingParser = new ParseableFacetUsingParser(parser, mockFacetHolder, mockConfiguration,
+                DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockDependencyInjector, mockAdapterManager);
     }
 
     @Ignore

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
index 19738b9..ac4fd33 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/PropertyMethodsFacetFactoryTest.java
@@ -54,7 +54,7 @@ import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedF
 import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor;
 import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessorFactory;
 import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacet;
-import org.apache.isis.core.metamodel.facets.properties.autocomplete.method.PropertyAutoCompleteFacetMethod;
+import org.apache.isis.core.metamodel.facets.properties.autocomplete.method.PropertyAutoCompleteFacetViaMethod;
 import org.apache.isis.core.metamodel.facets.properties.autocomplete.method.PropertyAutoCompleteFacetMethodFactory;
 import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacet;
 import org.apache.isis.core.metamodel.facets.properties.choices.method.PropertyChoicesFacetViaMethod;
@@ -408,8 +408,8 @@ public class PropertyMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         
         final Facet facet = facetedMethod.getFacet(PropertyAutoCompleteFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof PropertyAutoCompleteFacetMethod);
-        final PropertyAutoCompleteFacetMethod propertyAutoCompleteFacet = (PropertyAutoCompleteFacetMethod) facet;
+        assertTrue(facet instanceof PropertyAutoCompleteFacetViaMethod);
+        final PropertyAutoCompleteFacetViaMethod propertyAutoCompleteFacet = (PropertyAutoCompleteFacetViaMethod) facet;
         assertEquals(propertyAutoCompleteMethod, propertyAutoCompleteFacet.getMethods().get(0));
         
         assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(propertyAutoCompleteMethod));

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
index 262fe3a..e0bf2e2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
@@ -77,6 +77,8 @@ import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySe
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.mustsatisfyspec.MustSatisfySpecificationFacet;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 import static org.apache.isis.core.commons.matchers.IsisMatchers.classEqualTo;
@@ -128,7 +130,7 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
                     mockSpecificationLoaderSpi, mockConfiguration) {
                 @Override
                 public Object getProperty(
-                        final ObjectAdapter inObject,
+                        final AssociationAccessingContext<?> associationAccessingContext, final ObjectAdapter inObject,
                         final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
                     return null;
                 }
@@ -138,7 +140,9 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
         private void addSetterFacet(final FacetHolder holder) {
             FacetUtil.addFacet(new PropertySetterFacetAbstract(holder) {
                 @Override
-                public void setProperty(final ObjectAdapter inObject, final ObjectAdapter value) {
+                public void setProperty(
+                        final PropertyAccessingContext propertyAccessingContext, final ObjectAdapter inObject,
+                        final ObjectAdapter value) {
                 }
             });
         }
@@ -146,7 +150,9 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
         private void addClearFacet(final FacetHolder holder) {
             FacetUtil.addFacet(new PropertyClearFacetAbstract(holder) {
                 @Override
-                public void clearProperty(final ObjectAdapter inObject) {
+                public void clearProperty(
+                        final PropertyAccessingContext propertyAccessingContext,
+                        final ObjectAdapter targetAdapter) {
                 }
             });
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java
index c4ea7f5..e7d4b05 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionMoreTest.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.object.validating.mustsatisfyspec.MustSatisfySpecificationFromMustSatisfyAnnotationOnTypeFacet;
-import org.apache.isis.core.metamodel.interactions.PropertyModifyContext;
+import org.apache.isis.core.metamodel.interactions.PropertyValidityContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 
@@ -58,7 +58,7 @@ public class MustSatisfySpecificationValidatingInteractionMoreTest {
     private TranslationService mockTranslationService;
 
     @Mock
-    private PropertyModifyContext mockContext;
+    private PropertyValidityContext mockContext;
 
     private ObjectAdapter mockProposedObjectAdapter;
 

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java
index d187435..71471c2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/propparam/specification/MustSatisfySpecificationValidatingInteractionTest.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.object.validating.mustsatisfyspec.MustSatisfySpecificationFromMustSatisfyAnnotationOnTypeFacet;
-import org.apache.isis.core.metamodel.interactions.PropertyModifyContext;
+import org.apache.isis.core.metamodel.interactions.PropertyValidityContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 
@@ -58,7 +58,7 @@ public class MustSatisfySpecificationValidatingInteractionTest {
     private TranslationService mockTranslationService;
 
     @Mock
-    private PropertyModifyContext mockContext;
+    private PropertyValidityContext mockContext;
 
     private ObjectAdapter mockProposedObjectAdapter;
     private Object mockProposedObject;

http://git-wip-us.apache.org/repos/asf/isis/blob/ec51c582/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index 9d5ef37..33a3da0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -19,14 +19,6 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.apache.isis.core.unittestsupport.jmocking.JMockActions.returnArgument;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-
 import java.util.Locale;
 
 import org.jmock.Expectations;
@@ -45,16 +37,24 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.metamodel.facets.object.encodeable.encoder.EncodableFacetUsingEncoderDecoder;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderContext;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 
+import static org.apache.isis.core.unittestsupport.jmocking.JMockActions.returnArgument;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
 public abstract class ValueSemanticsProviderAbstractTestCase {
 
     @Rule
@@ -122,7 +122,8 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
     protected void setValue(final ValueSemanticsProviderAndFacetAbstract<?> value) {
         this.valueSemanticsProvider = value;
         this.encodeableFacet = new EncodableFacetUsingEncoderDecoder(value, mockFacetHolder, mockAdapterManager, mockDependencyInjector);
-        this.parseableFacet = new ParseableFacetUsingParser(value, mockFacetHolder, DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockDependencyInjector, mockAdapterManager);
+        this.parseableFacet = new ParseableFacetUsingParser(value, mockFacetHolder, mockConfiguration,
+                DeploymentCategory.PRODUCTION, mockAuthenticationSessionProvider, mockDependencyInjector, mockAdapterManager);
     }
 
     protected ValueSemanticsProviderAndFacetAbstract<?> getValue() {