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/09/03 14:33:09 UTC

[78/87] [abbrv] isis git commit: ISIS-1044: adding interactionInitiatedBy as param to all interactions with metamodel members.

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/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..c31a987 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
@@ -42,7 +42,7 @@ import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ServicesProvider;
 import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResult;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -622,7 +622,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectTitleContext createTitleInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod interactionMethod, final ObjectAdapter targetObjectAdapter) {
+    public ObjectTitleContext createTitleInteractionContext(final AuthenticationSession session, final InteractionInitiatedBy interactionMethod, final ObjectAdapter targetObjectAdapter) {
         return new ObjectTitleContext(getDeploymentCategory(), session, interactionMethod, targetObjectAdapter, getIdentifier(), targetObjectAdapter.titleString());
     }
 
@@ -1085,17 +1085,17 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
     // //////////////////////////////////////////////////////////////////////
 
     @Override
-    public Consent isValid(final ObjectAdapter inObject) {
-        return isValidResult(inObject).createConsent();
+    public Consent isValid(final ObjectAdapter inObject, final InteractionInitiatedBy interactionInitiatedBy) {
+        return isValidResult(inObject, interactionInitiatedBy).createConsent();
     }
 
-    /**
-     * TODO: currently this method is hard-coded to assume all interactions are
-     * initiated {@link InteractionInvocationMethod#BY_USER by user}.
-     */
     @Override
-    public InteractionResult isValidResult(final ObjectAdapter targetObjectAdapter) {
-        final ObjectValidityContext validityContext = createValidityInteractionContext(deploymentCategory, getAuthenticationSession(), InteractionInvocationMethod.BY_USER, targetObjectAdapter);
+    public InteractionResult isValidResult(
+            final ObjectAdapter targetObjectAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        final ObjectValidityContext validityContext =
+                createValidityInteractionContext(deploymentCategory, getAuthenticationSession(),
+                interactionInitiatedBy, targetObjectAdapter);
         return InteractionUtils.isValidResult(this, validityContext);
     }
 
@@ -1104,7 +1104,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
      * object.
      */
     @Override
-    public ObjectValidityContext createValidityInteractionContext(DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod interactionMethod, final ObjectAdapter targetObjectAdapter) {
+    public ObjectValidityContext createValidityInteractionContext(DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInitiatedBy interactionMethod, final ObjectAdapter targetObjectAdapter) {
         return new ObjectValidityContext(deploymentCategory, session, interactionMethod, targetObjectAdapter, getIdentifier());
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/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..9d15ced 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
@@ -24,7 +24,7 @@ import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 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.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
@@ -117,8 +117,8 @@ 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 InteractionInitiatedBy interactionInitiatedBy) {
+        return serviceAction.execute(serviceAdapter, new ObjectAdapter[]{ownerAdapter}, interactionInitiatedBy);
     }
 
     @Override
@@ -138,15 +138,24 @@ 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);
+    public Consent isVisible(
+            final ObjectAdapter contributee,
+            final InteractionInitiatedBy interactionInitiatedBy,
+            Where where) {
+        final AuthenticationSession session = getAuthenticationSession();
+        final VisibilityContext<?> ic = ((ObjectMemberAbstract)serviceAction).createVisibleInteractionContext(
+                serviceAdapter, interactionInitiatedBy, 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);
+    public Consent isUsable(
+            final ObjectAdapter contributee,
+            final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
+        final ObjectMemberAbstract serviceAction = (ObjectMemberAbstract) this.serviceAction;
+        final UsabilityContext<?> ic = serviceAction.createUsableInteractionContext(
+                serviceAdapter, interactionInitiatedBy, 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/d120bf74/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..8f188d5 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
@@ -26,7 +26,7 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
 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.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResult;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -75,8 +75,11 @@ 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 ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+            Where where) {
+        final AuthenticationSession session = getAuthenticationSession();
+        return new CollectionVisibilityContext(getDeploymentCategory(), session, interactionInitiatedBy, ownerAdapter, getIdentifier(), where);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -84,30 +87,40 @@ 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 ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+            Where where) {
+        final AuthenticationSession session = getAuthenticationSession();
+        return new CollectionUsabilityContext(getDeploymentCategory(), session, interactionInitiatedBy, ownerAdapter, getIdentifier(), where);
     }
 
     // /////////////////////////////////////////////////////////////
     // Validate Add
     // /////////////////////////////////////////////////////////////
 
-    @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);
+    // Not API
+    private ValidityContext<?> createValidateAddInteractionContext(
+            final InteractionInitiatedBy interactionInitiatedBy,
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToAddAdapter) {
+        final AuthenticationSession authenticationSession = getAuthenticationSession();
+        return new CollectionAddToContext(getDeploymentCategory(), authenticationSession, interactionInitiatedBy, ownerAdapter, getIdentifier(), proposedToAddAdapter);
     }
 
-    /**
-     * TODO: currently this method is hard-coded to assume all interactions are
-     * initiated {@link InteractionInvocationMethod#BY_USER by user}.
-     */
     @Override
-    public Consent isValidToAdd(final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToAddAdapter) {
-        return isValidToAddResult(ownerAdapter, proposedToAddAdapter).createConsent();
+    public Consent isValidToAdd(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToAddAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        return isValidToAddResult(ownerAdapter, proposedToAddAdapter, interactionInitiatedBy).createConsent();
     }
 
-    private InteractionResult isValidToAddResult(final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToAddAdapter) {
-        final ValidityContext<?> validityContext = createValidateAddInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER, ownerAdapter, proposedToAddAdapter);
+    private InteractionResult isValidToAddResult(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToAddAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        final ValidityContext<?> validityContext = createValidateAddInteractionContext(
+                interactionInitiatedBy, ownerAdapter, proposedToAddAdapter);
         return InteractionUtils.isValidResult(this, validityContext);
     }
 
@@ -115,22 +128,33 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     // Validate Remove
     // /////////////////////////////////////////////////////////////
 
-    @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);
+    private ValidityContext<?> createValidateRemoveInteractionContext(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToRemoveAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        return new CollectionRemoveFromContext(
+                getDeploymentCategory(), getAuthenticationSession(),
+                interactionInitiatedBy,
+                ownerAdapter,
+                getIdentifier(),
+                proposedToRemoveAdapter);
     }
 
-    /**
-     * TODO: currently this method is hard-coded to assume all interactions are
-     * initiated {@link InteractionInvocationMethod#BY_USER by user}.
-     */
     @Override
-    public Consent isValidToRemove(final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToRemoveAdapter) {
-        return isValidToRemoveResult(ownerAdapter, proposedToRemoveAdapter).createConsent();
+    public Consent isValidToRemove(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToRemoveAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        return isValidToRemoveResult(
+                ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy).createConsent();
     }
 
-    private InteractionResult isValidToRemoveResult(final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToRemoveAdapter) {
-        final ValidityContext<?> validityContext = createValidateRemoveInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER, ownerAdapter, proposedToRemoveAdapter);
+    private InteractionResult isValidToRemoveResult(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToRemoveAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        final ValidityContext<?> validityContext = createValidateRemoveInteractionContext(
+                ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy);
         return InteractionUtils.isValidResult(this, validityContext);
     }
 
@@ -143,10 +167,13 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter get(final ObjectAdapter ownerAdapter) {
+    public ObjectAdapter get(
+            final ObjectAdapter ownerAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
 
         final PropertyOrCollectionAccessorFacet accessor = getFacet(PropertyOrCollectionAccessorFacet.class);
-        final Object collection = accessor.getProperty(ownerAdapter, getAuthenticationSession(), getDeploymentCategory());
+        final Object collection = accessor.getProperty(ownerAdapter, getAuthenticationSession(), getDeploymentCategory(),
+                interactionInitiatedBy);
         if (collection == null) {
             return null;
         }
@@ -154,10 +181,10 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     }
 
     @Override
-    public boolean isEmpty(final ObjectAdapter parentAdapter) {
+    public boolean isEmpty(final ObjectAdapter parentAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
         // 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, interactionInitiatedBy);
         final CollectionFacet facet = CollectionFacet.Utils.getCollectionFacetFromSpec(collection);
         return facet.size(collection) == 0;
     }
@@ -167,27 +194,33 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public void addElement(final ObjectAdapter ownerAdapter, final ObjectAdapter referencedAdapter) {
+    public void addElement(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter referencedAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         if (referencedAdapter == null) {
             throw new IllegalArgumentException("Can't use null to add an item to a collection");
         }
         if (readWrite()) {
             if (ownerAdapter.representsPersistent() && referencedAdapter.isTransient()) {
-                throw new IsisException("can't set a reference to a transient object from a persistent one: " + ownerAdapter.titleString() + " (persistent) -> " + referencedAdapter.titleString() + " (transient)");
+                throw new IsisException("can't set a reference to a transient object from a persistent one: " + ownerAdapter.titleString(null) + " (persistent) -> " + referencedAdapter.titleString() + " (transient)");
             }
             final CollectionAddToFacet facet = getFacet(CollectionAddToFacet.class);
-            facet.add(ownerAdapter, referencedAdapter);
+            facet.add(ownerAdapter, referencedAdapter, interactionInitiatedBy);
         }
     }
 
     @Override
-    public void removeElement(final ObjectAdapter ownerAdapter, final ObjectAdapter referencedAdapter) {
+    public void removeElement(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter referencedAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         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(ownerAdapter, referencedAdapter, interactionInitiatedBy);
         }
     }
 
@@ -224,8 +257,7 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     @Override
     public ObjectAdapter[] getChoices(
             final ObjectAdapter ownerAdapter,
-            final AuthenticationSession authenticationSession,
-            final DeploymentCategory deploymentCategory) {
+            final InteractionInitiatedBy interactionInitiatedBy) {
         return new ObjectAdapter[0];
     }
 
@@ -244,7 +276,9 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
     public ObjectAdapter[] getAutoComplete(
             ObjectAdapter object,
             String searchArg,
-            final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
+            final AuthenticationSession authenticationSession,
+            final DeploymentCategory deploymentCategory,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         return new ObjectAdapter[0];
     }
     

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/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..9797396 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
@@ -21,6 +21,7 @@ import java.util.List;
 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.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 
@@ -56,10 +57,11 @@ public class OneToOneActionParameterContributee extends OneToOneActionParameterI
     public ObjectAdapter[] getAutoComplete(
             final ObjectAdapter adapter,
             final String searchArg,
-            final AuthenticationSession authenticationSession,
-            final DeploymentCategory deploymentCategory) {
-        return serviceActionParameter.getAutoComplete(serviceAdapter, searchArg, authenticationSession,
-                deploymentCategory);
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        final AuthenticationSession authenticationSession = getAuthenticationSession();
+        final DeploymentCategory deploymentCategory = serviceAction.getDeploymentCategory();
+        return serviceActionParameter.getAutoComplete(serviceAdapter, searchArg,
+                interactionInitiatedBy);
     }
 
     protected ObjectAdapter targetForDefaultOrChoices(

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/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..ab6f362 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
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
 
 import org.apache.isis.core.metamodel.adapter.MutableProposedHolder;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.TypedHolder;
 import org.apache.isis.core.metamodel.spec.Instance;
@@ -63,7 +64,7 @@ public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract i
      * {@link ObjectAdapter}.
      */
     @Override
-    public ObjectAdapter get(final ObjectAdapter owner) {
+    public ObjectAdapter get(final ObjectAdapter owner, final InteractionInitiatedBy interactionInitiatedBy) {
         final MutableProposedHolder proposedHolder = getProposedHolder(owner);
         final Object proposed = proposedHolder.getProposed();
         return getAdapterMap().adapterFor(proposed);

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/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..dec40df 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
@@ -21,10 +21,9 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.When;
 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.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.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
@@ -103,8 +102,8 @@ 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 InteractionInitiatedBy interactionInitiatedBy) {
+        return serviceAction.execute(serviceAdapter, new ObjectAdapter[]{ownerAdapter}, interactionInitiatedBy);
     }
 
     @Override
@@ -124,15 +123,22 @@ 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);
+    public Consent isVisible(
+            final ObjectAdapter contributee,
+            final InteractionInitiatedBy interactionInitiatedBy,
+            Where where) {
+        final VisibilityContext<?> ic = ((ObjectMemberAbstract)serviceAction).createVisibleInteractionContext(
+                serviceAdapter, interactionInitiatedBy, 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);
+    public Consent isUsable(
+            final ObjectAdapter contributee,
+            final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
+        final UsabilityContext<?> ic = ((ObjectMemberAbstract)serviceAction).createUsableInteractionContext(
+                serviceAdapter, interactionInitiatedBy, 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/d120bf74/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..31cf34d 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
@@ -32,7 +32,7 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
 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.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResult;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -55,6 +55,7 @@ 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;
@@ -74,8 +75,11 @@ 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 ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+            Where where) {
+        final AuthenticationSession session = getAuthenticationSession();
+        return new PropertyVisibilityContext(getDeploymentCategory(), session, interactionInitiatedBy, ownerAdapter, getIdentifier(), where);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -83,30 +87,42 @@ 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 ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+            Where where) {
+        final AuthenticationSession session = getAuthenticationSession();
+        return new PropertyUsabilityContext(getDeploymentCategory(), session, interactionInitiatedBy, ownerAdapter, getIdentifier(), where);
     }
 
     // /////////////////////////////////////////////////////////////
     // Validate
     // /////////////////////////////////////////////////////////////
 
-    @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);
+    private ValidityContext<?> createValidateInteractionContext(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToReferenceAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        final AuthenticationSession session = getAuthenticationSession();
+        return new PropertyModifyContext(getDeploymentCategory(), session, interactionInitiatedBy, ownerAdapter, getIdentifier(), proposedToReferenceAdapter);
     }
 
-    /**
-     * TODO: currently this method is hard-coded to assume all interactions are
-     * initiated {@link InteractionInvocationMethod#BY_USER by user}.
-     */
     @Override
-    public Consent isAssociationValid(final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToReferenceAdapter) {
-        return isAssociationValidResult(ownerAdapter, proposedToReferenceAdapter).createConsent();
+    public Consent isAssociationValid(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        return isAssociationValidResult(ownerAdapter, proposedAdapter, interactionInitiatedBy).createConsent();
     }
 
-    private InteractionResult isAssociationValidResult(final ObjectAdapter ownerAdapter, final ObjectAdapter proposedToReferenceAdapter) {
-        final ValidityContext<?> validityContext = createValidateInteractionContext(getAuthenticationSession(), InteractionInvocationMethod.BY_USER, ownerAdapter, proposedToReferenceAdapter);
+    private InteractionResult isAssociationValidResult(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter proposedToReferenceAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        final AuthenticationSession session = getAuthenticationSession();
+        final ValidityContext<?> validityContext =
+                createValidateInteractionContext(
+                        ownerAdapter, proposedToReferenceAdapter, interactionInitiatedBy
+                );
         return InteractionUtils.isValidResult(this, validityContext);
     }
 
@@ -127,9 +143,12 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter get(final ObjectAdapter ownerAdapter) {
+    public ObjectAdapter get(
+            final ObjectAdapter ownerAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         final PropertyOrCollectionAccessorFacet facet = getFacet(PropertyOrCollectionAccessorFacet.class);
-        final Object referencedPojo = facet.getProperty(ownerAdapter, getAuthenticationSession(), getDeploymentCategory());
+        final Object referencedPojo =
+                facet.getProperty(ownerAdapter, getAuthenticationSession(), getDeploymentCategory(), interactionInitiatedBy);
 
         if (referencedPojo == null) {
             return null;
@@ -138,19 +157,23 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
         return getAdapterManager().adapterFor(referencedPojo, ownerAdapter);
     }
 
-    /**
-     * TODO: currently this method is hard-coded to assume all interactions are
-     * 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
-        ));
+    // UNUSED
+    private PropertyAccessContext createAccessInteractionContext(
+            final ObjectAdapter ownerAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        final ObjectAdapter referencedAdapter = get(ownerAdapter, interactionInitiatedBy);
+        return new PropertyAccessContext(
+                getDeploymentCategory(),
+                getAuthenticationSession(),
+                interactionInitiatedBy,
+                ownerAdapter,
+                getIdentifier(),
+                referencedAdapter);
     }
 
     @Override
-    public boolean isEmpty(final ObjectAdapter ownerAdapter) {
-        return get(ownerAdapter) == null;
+    public boolean isEmpty(final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
+        return get(ownerAdapter, interactionInitiatedBy) == null;
     }
 
     // /////////////////////////////////////////////////////////////
@@ -158,47 +181,60 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
     // /////////////////////////////////////////////////////////////
 
     @Override
-    public void set(final ObjectAdapter ownerAdapter, final ObjectAdapter newReferencedAdapter) {
+    public void set(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter newReferencedAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         if (newReferencedAdapter != null) {
-            setValue(ownerAdapter, newReferencedAdapter);
+            setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
         } else {
-            clearValue(ownerAdapter);
+            clearValue(ownerAdapter, interactionInitiatedBy);
         }
     }
 
     /**
-     * @see #set(ObjectAdapter, ObjectAdapter)
+     * @see MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
      */
     @Deprecated
     @Override
-    public void setAssociation(final ObjectAdapter ownerAdapter, final ObjectAdapter newReferencedAdapter) {
-        setValue(ownerAdapter, newReferencedAdapter);
+    public void setAssociation(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter newReferencedAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
     }
 
-    private void setValue(final ObjectAdapter ownerAdapter, final ObjectAdapter newReferencedAdapter) {
+    private void setValue(
+            final ObjectAdapter ownerAdapter,
+            final ObjectAdapter newReferencedAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         final PropertySetterFacet setterFacet = getFacet(PropertySetterFacet.class);
         if (setterFacet == null) {
             return;
         }
         if (ownerAdapter.representsPersistent() && newReferencedAdapter != null && newReferencedAdapter.isTransient() && !newReferencedAdapter.getSpecification().isParented()) {
             // TODO: move to facet ?
-            throw new IsisException("can't set a reference to a transient object from a persistent one: " + newReferencedAdapter.titleString() + " (transient)");
+            throw new IsisException("can't set a reference to a transient object from a persistent one: " + newReferencedAdapter.titleString(null) + " (transient)");
         }
-        setterFacet.setProperty(ownerAdapter, newReferencedAdapter);
+        setterFacet.setProperty(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
     }
 
     /**
-     * @see #set(ObjectAdapter, ObjectAdapter)
+     * @see MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
      */
     @Deprecated
     @Override
-    public void clearAssociation(final ObjectAdapter ownerAdapter) {
-        clearValue(ownerAdapter);
+    public void clearAssociation(
+            final ObjectAdapter ownerAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        clearValue(ownerAdapter, interactionInitiatedBy);
     }
 
-    private void clearValue(final ObjectAdapter ownerAdapter) {
+    private void clearValue(
+            final ObjectAdapter ownerAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         final PropertyClearFacet facet = getFacet(PropertyClearFacet.class);
-        facet.clearProperty(ownerAdapter);
+        facet.clearProperty(ownerAdapter, interactionInitiatedBy);
     }
 
     // /////////////////////////////////////////////////////////////
@@ -246,23 +282,23 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
     @Override
     public ObjectAdapter[] getChoices(
             final ObjectAdapter ownerAdapter,
-            final AuthenticationSession authenticationSession,
-            final DeploymentCategory deploymentCategory) {
+            final InteractionInitiatedBy interactionInitiatedBy) {
         final PropertyChoicesFacet propertyChoicesFacet = getFacet(PropertyChoicesFacet.class);
-        final Object[] pojoOptions = propertyChoicesFacet == null ? null : propertyChoicesFacet.getChoices(ownerAdapter, getSpecificationLoader(),
-                authenticationSession, deploymentCategory);
-        if (pojoOptions != null) {
-            List<ObjectAdapter> adapters = Lists.transform(
-                    Lists.newArrayList(pojoOptions), ObjectAdapter.Functions.adapterForUsing(getAdapterManager()));
-            return adapters.toArray(new ObjectAdapter[]{});
-        } 
-        // // now incorporated into above choices processing (BoundedFacet is no more)
-        /* else if (BoundedFacetUtils.isBoundedSet(getSpecification())) {
-            return options();
-        } */
-        return null;
+        if (propertyChoicesFacet == null) {
+            return null;
+        }
+        final AuthenticationSession authenticationSession = getAuthenticationSession();
+        final DeploymentCategory deploymentCategory = getDeploymentCategory();
+        final Object[] pojoOptions = propertyChoicesFacet.getChoices(
+                ownerAdapter,
+                getSpecificationLoader(), authenticationSession, deploymentCategory,
+                interactionInitiatedBy);
+        List<ObjectAdapter> adapters = Lists.transform(
+                Lists.newArrayList(pojoOptions), ObjectAdapter.Functions.adapterForUsing(getAdapterManager()));
+        return adapters.toArray(new ObjectAdapter[]{});
     }
 
+    // seems to be UNUSED?
     private <T> ObjectAdapter[] options() {
         final Query<T> query = new QueryFindAllInstances<T>(getSpecification().getFullIdentifier());
         final List<ObjectAdapter> allInstancesAdapter = getQuerySubmitter().allMatchingQuery(query);
@@ -286,10 +322,13 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
             final ObjectAdapter ownerAdapter,
             final String searchArg,
             final AuthenticationSession authenticationSession,
-            final DeploymentCategory deploymentCategory) {
+            final DeploymentCategory deploymentCategory1,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        final DeploymentCategory deploymentCategory = getDeploymentCategory();
+        final AuthenticationSession session = getAuthenticationSession();
         final PropertyAutoCompleteFacet propertyAutoCompleteFacet = getFacet(PropertyAutoCompleteFacet.class);
         final Object[] pojoOptions = propertyAutoCompleteFacet.autoComplete(ownerAdapter, searchArg,
-                authenticationSession, deploymentCategory);
+                session, deploymentCategory, interactionInitiatedBy);
         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/d120bf74/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..65235c3 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,6 +31,7 @@ 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.InteractionInitiatedBy;
 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;
@@ -44,6 +45,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
 
+// REVIEW: UNUSED?
 public final class Dump {
 
     private static DebugBuilder debugBuilder;
@@ -418,7 +420,7 @@ public final class Dump {
                 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 ObjectAdapter obj = field.get(collectionAdapter, InteractionInitiatedBy.FRAMEWORK);
 
                     final String name = field.getId();
                     if (obj == null) {
@@ -482,11 +484,11 @@ public final class Dump {
             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 ObjectAdapter obj = field.get(adapter, InteractionInitiatedBy.FRAMEWORK);
                 final String name = field.getId();
                 graphIndent(level, s);
 
-                if (field.isVisible(authenticationSession, adapter, where).isVetoed()) {
+                if (field.isVisible(adapter, InteractionInitiatedBy.FRAMEWORK, where).isVetoed()) {
                     s.append(name + ": (not visible)");
                     s.append("\n");
                 } else {

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/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..730d84c 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,6 +54,7 @@ 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.InteractionInitiatedBy;
 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;
@@ -200,7 +201,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 +267,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 XmlSnapshot}).
      */
     private Element appendXml(final Place parentPlace, final ObjectAdapter childObject) {
 
@@ -492,8 +493,8 @@ public class XmlSnapshot implements Snapshot {
             }
 
             final OneToOneAssociation oneToOneAssociation = ((OneToOneAssociation) field);
-            final ObjectAdapter referencedObject = oneToOneAssociation.get(fieldPlace.getObject()
-            );
+            final ObjectAdapter referencedObject = oneToOneAssociation.get(fieldPlace.getObject(),
+                    InteractionInitiatedBy.FRAMEWORK);
 
             if (referencedObject == null) {
                 return true; // not a failure if the reference was null
@@ -512,7 +513,7 @@ public class XmlSnapshot implements Snapshot {
             }
 
             final OneToManyAssociation oneToManyAssociation = (OneToManyAssociation) field;
-            final ObjectAdapter collection = oneToManyAssociation.get(fieldPlace.getObject());
+            final ObjectAdapter collection = oneToManyAssociation.get(fieldPlace.getObject(), InteractionInitiatedBy.FRAMEWORK);
             final CollectionFacet facet = collection.getSpecification().getFacet(CollectionFacet.class);
 
             if (LOG.isDebugEnabled()) {
@@ -697,7 +698,7 @@ public class XmlSnapshot implements Snapshot {
 
                 ObjectAdapter value;
                 try {
-                    value = valueAssociation.get(adapter);
+                    value = valueAssociation.get(adapter, InteractionInitiatedBy.FRAMEWORK);
 
                     final ObjectSpecification valueNos = value.getSpecification();
 
@@ -747,7 +748,7 @@ public class XmlSnapshot implements Snapshot {
                 ObjectAdapter referencedObjectAdapter;
 
                 try {
-                    referencedObjectAdapter = oneToOneAssociation.get(adapter);
+                    referencedObjectAdapter = oneToOneAssociation.get(adapter, InteractionInitiatedBy.FRAMEWORK);
 
                     // XML
                     isisMetaModel.setAttributesForReference(xmlReferenceElement, schema.getPrefix(), fullyQualifiedClassName);
@@ -780,7 +781,7 @@ public class XmlSnapshot implements Snapshot {
 
                 ObjectAdapter collection;
                 try {
-                    collection = oneToManyAssociation.get(adapter);
+                    collection = oneToManyAssociation.get(adapter, InteractionInitiatedBy.FRAMEWORK);
                     final ObjectSpecification referencedTypeNos = oneToManyAssociation.getSpecification();
                     final String fullyQualifiedClassName = referencedTypeNos.getFullIdentifier();
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/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..52d942b 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
@@ -39,6 +39,7 @@ import org.apache.isis.applib.services.eventbus.CollectionInteractionEvent;
 import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -126,7 +127,9 @@ public class CollectionAnnotationFacetFactoryTest extends AbstractFacetFactoryJU
                 @Override
                 public Object getProperty(
                         final ObjectAdapter inObject,
-                        final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
+                        final AuthenticationSession authenticationSession,
+                        final DeploymentCategory deploymentCategory,
+                        final InteractionInitiatedBy interactionInitiatedBy) {
                     return null;
                 }
             });
@@ -135,7 +138,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 ObjectAdapter inObject,
+                        final ObjectAdapter value,
+                        final InteractionInitiatedBy interactionInitiatedBy) {
                 }
             });
         }
@@ -143,7 +149,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 ObjectAdapter inObject,
+                        final ObjectAdapter element,
+                        final InteractionInitiatedBy interactionInitiatedBy) {
                 }
             });
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/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..7cb3425 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
@@ -32,6 +32,7 @@ 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.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
@@ -128,7 +129,7 @@ public class ParseableFacetUsingParserTest {
          * will(returnValue(session));
          * 
          * allowing(mockSpecification).createValidityInteractionContext(session,
-         * InteractionInvocationMethod.BY_USER, mockAdapter); }}); ObjectAdapter
+         * InteractionInvocationMethod.USER, mockAdapter); }}); ObjectAdapter
          * adapter = parseableFacetUsingParser.parseTextEntry(null, "xxx");
          * 
          * adapter.getObject();
@@ -137,16 +138,16 @@ public class ParseableFacetUsingParserTest {
 
     @Test(expected = TextEntryParseException.class)
     public void parsingExceptionRethrown() throws Exception {
-        parseableFacetUsingParser.parseTextEntry(null, "invalid", null);
+        parseableFacetUsingParser.parseTextEntry(null, "invalid", InteractionInitiatedBy.USER, null);
     }
 
     @Test(expected = TextEntryParseException.class)
     public void numberFormatExceptionRethrown() throws Exception {
-        parseableFacetUsingParser.parseTextEntry(null, "number", null);
+        parseableFacetUsingParser.parseTextEntry(null, "number", InteractionInitiatedBy.USER, null);
     }
 
     @Test(expected = TextEntryParseException.class)
     public void illegalFormatExceptionRethrown() throws Exception {
-        parseableFacetUsingParser.parseTextEntry(null, "format", null);
+        parseableFacetUsingParser.parseTextEntry(null, "format", InteractionInitiatedBy.USER, null);
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/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..ce02844 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
@@ -40,6 +40,7 @@ import org.apache.isis.applib.services.eventbus.PropertyInteractionEvent;
 import org.apache.isis.applib.spec.Specification;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -129,7 +130,9 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
                 @Override
                 public Object getProperty(
                         final ObjectAdapter inObject,
-                        final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
+                        final AuthenticationSession authenticationSession,
+                        final DeploymentCategory deploymentCategory,
+                        final InteractionInitiatedBy interactionInitiatedBy) {
                     return null;
                 }
             });
@@ -138,7 +141,10 @@ 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 ObjectAdapter inObject,
+                        final ObjectAdapter value,
+                        final InteractionInitiatedBy interactionInitiatedBy) {
                 }
             });
         }
@@ -146,7 +152,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 ObjectAdapter inObject,
+                        final InteractionInitiatedBy interactionInitiatedBy) {
                 }
             });
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFiltersTests.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFiltersTests.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFiltersTests.java
index 4bc719f..5754d1c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFiltersTests.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/feature/ObjectAssociationFiltersTests.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.core.metamodel.spec.feature;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-
 import org.jmock.Expectations;
 import org.jmock.auto.Mock;
 import org.junit.Rule;
@@ -30,10 +28,13 @@ 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.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+
 public class ObjectAssociationFiltersTests {
 
     @Rule
@@ -51,10 +52,12 @@ public class ObjectAssociationFiltersTests {
         context.checking(new Expectations() {
             {
                 never(mockAssociation).containsFacet(HiddenFacet.class);
-                allowing(mockAssociation).isVisible(with(any(AuthenticationSession.class)), with(any(ObjectAdapter.class)), with(equalTo(Where.ANYWHERE)));
+                allowing(mockAssociation).isVisible(with(any(ObjectAdapter.class)), InteractionInitiatedBy.USER, with(equalTo(Where.ANYWHERE)));
             }
         });
-        final Filter<ObjectAssociation> filter = ObjectAssociation.Filters.dynamicallyVisible(mockSession, mockTarget, Where.ANYWHERE);
+        final Filter<ObjectAssociation> filter = ObjectAssociation.Filters.dynamicallyVisible(mockTarget,
+                InteractionInitiatedBy.USER, Where.ANYWHERE
+        );
         filter.accept(mockAssociation);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
index 6117789..259c999 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
@@ -33,6 +33,7 @@ import org.junit.Test;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.TypedHolder;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -70,7 +71,7 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
         private ObjectSpecification objectSpec;
 
         @Override
-        public ObjectAdapter get(final ObjectAdapter owner) {
+        public ObjectAdapter get(final ObjectAdapter owner, final InteractionInitiatedBy interactionInitiatedBy) {
             return null;
         }
 
@@ -85,7 +86,10 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
         }
 
         @Override
-        public String isValid(final ObjectAdapter adapter, final Object proposedValue, final Localization localization) {
+        public String isValid(
+                final ObjectAdapter adapter,
+                final Object proposedValue,
+                final InteractionInitiatedBy interactionInitiatedBy, final Localization localization) {
             return null;
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
index b9806c7..f81b1bc 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
@@ -31,7 +31,7 @@ import org.junit.Test;
 import org.apache.isis.applib.annotation.Where;
 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.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -76,19 +76,21 @@ public class ObjectAssociationAbstractTest {
         objectAssociation = new ObjectAssociationAbstract(facetedMethod, FeatureType.PROPERTY, objectSpecification, new ObjectMemberContext(DeploymentCategory.PRODUCTION, null, null, null, null, null)) {
 
             @Override
-            public ObjectAdapter get(final ObjectAdapter fromObject) {
+            public ObjectAdapter get(
+                    final ObjectAdapter fromObject,
+                    final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
 
             @Override
-            public boolean isEmpty(final ObjectAdapter adapter) {
+            public boolean isEmpty(final ObjectAdapter adapter, final InteractionInitiatedBy interactionInitiatedBy) {
                 return false;
             }
 
             @Override
             public ObjectAdapter[] getChoices(
                     final ObjectAdapter object,
-                    final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
+                    final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
 
@@ -102,12 +104,16 @@ public class ObjectAssociationAbstractTest {
             }
 
             @Override
-            public UsabilityContext<?> createUsableInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter target, Where where) {
+            public UsabilityContext<?> createUsableInteractionContext(
+                    final ObjectAdapter target, final InteractionInitiatedBy interactionInitiatedBy,
+                    Where where) {
                 return null;
             }
 
             @Override
-            public VisibilityContext<?> createVisibleInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObjectAdapter, Where where) {
+            public VisibilityContext<?> createVisibleInteractionContext(
+                    final ObjectAdapter targetObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+                    Where where) {
                 return null;
             }
 
@@ -135,7 +141,9 @@ public class ObjectAssociationAbstractTest {
             public ObjectAdapter[] getAutoComplete(
                     ObjectAdapter object,
                     String searchArg,
-                    final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
+                    final AuthenticationSession authenticationSession,
+                    final DeploymentCategory deploymentCategory,
+                    final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
             @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
index 2dc1409..34df7b2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.annotation.Where;
 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.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -72,20 +72,21 @@ public class ObjectAssociationAbstractTest_alwaysHidden {
                 new ObjectMemberContext(DeploymentCategory.PRODUCTION, null, null, null, null, null)) {
 
             @Override
-            public ObjectAdapter get(final ObjectAdapter fromObject) {
+            public ObjectAdapter get(
+                    final ObjectAdapter fromObject,
+                    final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
 
             @Override
-            public boolean isEmpty(final ObjectAdapter adapter) {
+            public boolean isEmpty(final ObjectAdapter adapter, final InteractionInitiatedBy interactionInitiatedBy) {
                 return false;
             }
 
             @Override
             public ObjectAdapter[] getChoices(
                     final ObjectAdapter object,
-                    final AuthenticationSession authenticationSession,
-                    final DeploymentCategory deploymentCategory) {
+                    final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
 
@@ -100,18 +101,14 @@ public class ObjectAssociationAbstractTest_alwaysHidden {
 
             @Override
             public UsabilityContext<?> createUsableInteractionContext(
-                    final AuthenticationSession session,
-                    final InteractionInvocationMethod invocationMethod,
-                    final ObjectAdapter target,
+                    final ObjectAdapter target, final InteractionInitiatedBy interactionInitiatedBy,
                     final Where where) {
                 return null;
             }
 
             @Override
             public VisibilityContext<?> createVisibleInteractionContext(
-                    final AuthenticationSession session,
-                    final InteractionInvocationMethod invocationMethod,
-                    final ObjectAdapter targetObjectAdapter,
+                    final ObjectAdapter targetObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy,
                     final Where where) {
                 return null;
             }
@@ -141,7 +138,7 @@ public class ObjectAssociationAbstractTest_alwaysHidden {
                     final ObjectAdapter object,
                     final String searchArg,
                     final AuthenticationSession authenticationSession,
-                    final DeploymentCategory deploymentCategory) {
+                    final DeploymentCategory deploymentCategory, final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
             @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 88d82d5..01e04d0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -34,7 +34,7 @@ import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 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.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.consent.InteractionResult;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
@@ -374,7 +374,7 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     }
 
     @Override
-    public Consent isValid(final ObjectAdapter transientObject) {
+    public Consent isValid(final ObjectAdapter transientObject, final InteractionInitiatedBy interactionInitiatedBy) {
         return null;
     }
 
@@ -432,17 +432,19 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
     }
 
     @Override
-    public ObjectValidityContext createValidityInteractionContext(final DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObjectAdapter) {
+    public ObjectValidityContext createValidityInteractionContext(final DeploymentCategory deploymentCategory, final AuthenticationSession session, final InteractionInitiatedBy invocationMethod, final ObjectAdapter targetObjectAdapter) {
         return null;
     }
 
     @Override
-    public ObjectTitleContext createTitleInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObjectAdapter) {
+    public ObjectTitleContext createTitleInteractionContext(final AuthenticationSession session, final InteractionInitiatedBy invocationMethod, final ObjectAdapter targetObjectAdapter) {
         return null;
     }
 
     @Override
-    public InteractionResult isValidResult(final ObjectAdapter transientObject) {
+    public InteractionResult isValidResult(
+            final ObjectAdapter transientObject,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
index 90ac06e..c06273e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureFilePersistor.java
@@ -19,12 +19,25 @@
 
 package org.apache.isis.core.runtime.fixturedomainservice;
 
-import java.io.*;
-import java.util.*;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.google.common.collect.Maps;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 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.parseable.ParseableFacet;
@@ -84,8 +97,10 @@ public class ObjectFixtureFilePersistor {
         try {
             final ObjectAssociation association = object.getSpecification().getAssociation(name);
             if (data.trim().length() == 0) {
-                if (!association.isEmpty(object) && association instanceof OneToOneAssociation) {
-                    ((OneToOneAssociation) association).set(object, null);
+                if (    association instanceof OneToOneAssociation &&
+                        !association.isEmpty(object, InteractionInitiatedBy.FRAMEWORK)) {
+                    final OneToOneAssociation property = (OneToOneAssociation) association;
+                    property.set(object, null, InteractionInitiatedBy.FRAMEWORK);
                 }
             } else {
                 if (association.isOneToManyAssociation()) {
@@ -94,13 +109,13 @@ public class ObjectFixtureFilePersistor {
                     for (int i = 0; i < ids.length; i++) {
                         elements[i] = loaded.get(ids[i]);
                     }
-                    final ObjectAdapter collection = association.get(object);
+                    final ObjectAdapter collection = association.get(object, InteractionInitiatedBy.FRAMEWORK);
                     final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collection);
                     facet.init(collection, elements);
                 } else if (association.getSpecification().isParseable()) {
                     data = data.replaceAll("\\n", "\n");
                     final ParseableFacet facet = association.getSpecification().getFacet(ParseableFacet.class);
-                    final ObjectAdapter value = facet.parseTextEntry(null, data, null);
+                    final ObjectAdapter value = facet.parseTextEntry(null, data, InteractionInitiatedBy.FRAMEWORK, null);
                     ((OneToOneAssociation) association).initAssociation(object, value);
                 } else if (association.isOneToOneAssociation()) {
                     final ObjectAdapter value = loaded.get(data);
@@ -133,8 +148,8 @@ public class ObjectFixtureFilePersistor {
                 continue;
             }
 
-            final ObjectAdapter associatedObject = association.get(adapter);
-            final boolean isEmpty = association.isEmpty(adapter);
+            final ObjectAdapter associatedObject = association.get(adapter, InteractionInitiatedBy.FRAMEWORK);
+            final boolean isEmpty = association.isEmpty(adapter, InteractionInitiatedBy.FRAMEWORK);
             final String associationId = association.getId();
             writer.write("  " + associationId + ": ");
             if (isEmpty) {
@@ -180,7 +195,7 @@ public class ObjectFixtureFilePersistor {
 
 
 class LoadedObjects {
-    private final Map<String, ObjectAdapter> idMap = new HashMap<String, ObjectAdapter>();
+    private final Map<String, ObjectAdapter> idMap = Maps.newHashMap();
     private final Set<Object> objects;
 
     public LoadedObjects(final Set<Object> objects) {

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureService.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureService.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureService.java
index 1f3c0c1..54ebb48 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureService.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/fixturedomainservice/ObjectFixtureService.java
@@ -42,6 +42,7 @@ import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.Persistability;
@@ -100,8 +101,8 @@ public class ObjectFixtureService {
                 continue;
             }
 
-            final ObjectAdapter associatedObject = association.get(adapter);
-            final boolean isEmpty = association.isEmpty(adapter);
+            final ObjectAdapter associatedObject = association.get(adapter, InteractionInitiatedBy.FRAMEWORK);
+            final boolean isEmpty = association.isEmpty(adapter, InteractionInitiatedBy.FRAMEWORK);
             if (isEmpty) {
                 continue;
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
index 1238995..dcc2e7b 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/memento/Memento.java
@@ -40,6 +40,7 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
 import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
 import org.apache.isis.core.metamodel.adapter.oid.TypedOid;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 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.encodeable.EncodableFacet;
@@ -132,15 +133,14 @@ public class Memento implements Serializable {
     private void createAssociationData(final ObjectAdapter adapter, final ObjectData data, final ObjectAssociation objectAssoc) {
         Object assocData;
         if (objectAssoc.isOneToManyAssociation()) {
-            final ObjectAdapter collAdapter = objectAssoc.get(adapter);
+            final ObjectAdapter collAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
             assocData = createCollectionData(collAdapter);
         } else if (objectAssoc.getSpecification().isEncodeable()) {
             final EncodableFacet facet = objectAssoc.getSpecification().getFacet(EncodableFacet.class);
-            final ObjectAdapter value = objectAssoc.get(adapter);
+            final ObjectAdapter value = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
             assocData = facet.toEncodedString(value);
         } else if (objectAssoc.isOneToOneAssociation()) {
-            final ObjectAdapter referencedAdapter = ((OneToOneAssociation) objectAssoc).get(adapter
-            );
+            final ObjectAdapter referencedAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
             assocData = createReferenceData(referencedAdapter);
         } else {
             throw new UnknownTypeException(objectAssoc);
@@ -369,7 +369,7 @@ public class Memento implements Serializable {
     }
 
     private void updateOneToManyAssociation(final ObjectAdapter objectAdapter, final OneToManyAssociation otma, final CollectionData collectionData) {
-        final ObjectAdapter collection = otma.get(objectAdapter);
+        final ObjectAdapter collection = otma.get(objectAdapter, InteractionInitiatedBy.FRAMEWORK);
         final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collection);
         final List<ObjectAdapter> original = Lists.newArrayList();
         for (final ObjectAdapter adapter : facet.iterable(collection)) {
@@ -383,9 +383,9 @@ public class Memento implements Serializable {
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("  association " + otma + " changed, added " + elementAdapter.getOid());
                 }
-                otma.addElement(objectAdapter, elementAdapter);
+                otma.addElement(objectAdapter, elementAdapter, InteractionInitiatedBy.FRAMEWORK);
             } else {
-                otma.removeElement(objectAdapter, elementAdapter);
+                otma.removeElement(objectAdapter, elementAdapter, InteractionInitiatedBy.FRAMEWORK);
             }
         }
 
@@ -393,7 +393,7 @@ public class Memento implements Serializable {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("  association " + otma + " changed, removed " + element.getOid());
             }
-            otma.removeElement(objectAdapter, element);
+            otma.removeElement(objectAdapter, element, InteractionInitiatedBy.FRAMEWORK);
         }
     }
 
@@ -402,7 +402,7 @@ public class Memento implements Serializable {
             otoa.initAssociation(objectAdapter, null);
         } else {
             final ObjectAdapter ref = recreateReference(assocData);
-            if (otoa.get(objectAdapter) != ref) {
+            if (otoa.get(objectAdapter, InteractionInitiatedBy.FRAMEWORK) != ref) {
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("  association " + otoa + " changed to " + ref.getOid());
                 }
@@ -415,6 +415,7 @@ public class Memento implements Serializable {
     // encode, restore
     ////////////////////////////////////////////////
 
+    // UNUSED?
     public void encodedData(final DataOutputStreamExtended outputImpl) throws IOException {
         outputImpl.writeEncodable(data);
     }