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:08 UTC

[77/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/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
index f3b2eb9..2e5acb4 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adaptermanager/AdapterManagerDefault.java
@@ -39,6 +39,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
 import org.apache.isis.core.metamodel.adapter.oid.*;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.ElementSpecificationProviderFromTypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
@@ -590,14 +591,14 @@ public class AdapterManagerDefault implements AdapterManager, Iterable<ObjectAda
     private void remapContainedAggregatedObject(final ObjectAdapter adapter, final RootOid persistedRootOid) {
         for (final ObjectAssociation association: adapter.getSpecification().getAssociations(Contributed.EXCLUDED)) {
             if (association.isOneToManyAssociation() && !association.isNotPersisted()) {
-                final ObjectAdapter collection = association.get(adapter);
+                final ObjectAdapter collection = association.get(adapter, InteractionInitiatedBy.FRAMEWORK);
                 final CollectionFacet facet = CollectionFacetUtils.getCollectionFacetFromSpec(collection);
                 for (final ObjectAdapter element : facet.iterable(collection)) {
                    remapAggregatedObject(element, persistedRootOid);
                 }
                 
             } else if (association.getSpecification().isParented()) {
-                final ObjectAdapter referencedAdapter = association.get(adapter);
+                final ObjectAdapter referencedAdapter = association.get(adapter, InteractionInitiatedBy.FRAMEWORK);
     
                 if(referencedAdapter == null) {
                     continue;
@@ -621,7 +622,7 @@ public class AdapterManagerDefault implements AdapterManager, Iterable<ObjectAda
 
 	private static Object getCollectionPojo(final OneToManyAssociation association, final ObjectAdapter ownerAdapter) {
         final PropertyOrCollectionAccessorFacet accessor = association.getFacet(PropertyOrCollectionAccessorFacet.class);
-        return accessor.getProperty(ownerAdapter, null, null);
+        return accessor.getProperty(ownerAdapter, null, null, InteractionInitiatedBy.FRAMEWORK);
     }
 
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java
index fb2a81d..219d607 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/objectstore/algorithm/PersistAlgorithmDefault.java
@@ -25,6 +25,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ResolveState;
+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.spec.feature.Contributed;
@@ -90,13 +91,13 @@ class PersistAlgorithmDefault extends PersistAlgorithmAbstract {
                     continue;
                 }
                 if (objectAssoc.isOneToManyAssociation()) {
-                    final ObjectAdapter collection = objectAssoc.get(adapter);
+                    final ObjectAdapter collection = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
                     if (collection == null) {
                         throw new ObjectPersistenceException("Collection " + objectAssoc.getName() + " does not exist in " + adapter.getSpecification().getFullIdentifier());
                     }
                     makePersistent(collection, toPersistObjectSet);
                 } else {
-                    final ObjectAdapter fieldValue = objectAssoc.get(adapter);
+                    final ObjectAdapter fieldValue = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
                     if (fieldValue == null) {
                         continue;
                     }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryFindByPattern.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryFindByPattern.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryFindByPattern.java
index 6ccc43e..3bad9dd 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryFindByPattern.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/query/PersistenceQueryFindByPattern.java
@@ -22,6 +22,7 @@ package org.apache.isis.core.runtime.persistence.query;
 import java.util.List;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.services.container.query.QueryFindByPattern;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -70,18 +71,18 @@ public class PersistenceQueryFindByPattern extends PersistenceQueryBuiltInAbstra
             } 
 
             // if pattern contains empty value then it matches anything
-            if (fld.isEmpty(pattern)) {
+            if (fld.isEmpty(pattern, InteractionInitiatedBy.FRAMEWORK)) {
                 continue;
             }
 
             // find the object to match against, if any
-            final ObjectAdapter reqd = fld.get(pattern);
+            final ObjectAdapter reqd = fld.get(pattern, InteractionInitiatedBy.FRAMEWORK);
             if (reqd == null) {
                 continue;
             }
 
             // find the object; it's a bust if nothing
-            final ObjectAdapter search = fld.get(object);
+            final ObjectAdapter search = fld.get(object, InteractionInitiatedBy.FRAMEWORK);
             if (search == null) {
                 return false;
             }
@@ -95,8 +96,8 @@ public class PersistenceQueryFindByPattern extends PersistenceQueryBuiltInAbstra
             } else {
 
                 // compare the titles
-                final String r = reqd.titleString().toLowerCase();
-                final String s = search.titleString().toLowerCase();
+                final String r = reqd.titleString(null).toLowerCase();
+                final String s = search.titleString(null).toLowerCase();
 
                 // if the pattern does not occur in the object, then it's a bust
                 if (s.indexOf(r) == -1) {

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
index 997cce0..ceea0a7 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/services/background/BackgroundCommandExecution.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.services.command.CommandContext;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOidDefault;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -110,7 +111,8 @@ public abstract class BackgroundCommandExecution extends AbstractIsisSessionTemp
                     }
 
                     final ObjectAdapter[] argAdapters = argAdaptersFor(aim);
-                    final ObjectAdapter resultAdapter = objectAction.execute(targetAdapter, argAdapters);
+                    final ObjectAdapter resultAdapter = objectAction.execute(
+                            targetAdapter, argAdapters, InteractionInitiatedBy.FRAMEWORK);
                     if(resultAdapter != null) {
                         Bookmark resultBookmark = CommandUtil.bookmarkFor(resultAdapter);
                         command.setResult(resultBookmark);

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
index 6e5fb74..2a2f75c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransaction.java
@@ -76,6 +76,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 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.RootOid;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
@@ -1182,7 +1183,7 @@ public class IsisTransaction implements TransactionScopedComponent {
         }
 
         private Object getPropertyValue() {
-            ObjectAdapter referencedAdapter = property.get(objectAdapter);
+            ObjectAdapter referencedAdapter = property.get(objectAdapter, InteractionInitiatedBy.FRAMEWORK);
             return referencedAdapter == null ? null : referencedAdapter.getObject();
         }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/ActionInvocationFacetWrapTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/ActionInvocationFacetWrapTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/ActionInvocationFacetWrapTransaction.java
index 5aabbed..e8e071c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/ActionInvocationFacetWrapTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/ActionInvocationFacetWrapTransaction.java
@@ -24,6 +24,7 @@ import org.slf4j.LoggerFactory;
 
 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.DecoratingFacet;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
@@ -56,12 +57,14 @@ public class ActionInvocationFacetWrapTransaction extends ActionInvocationFacetA
             final ObjectAction owningAction,
             final ObjectAdapter targetAdapter,
             final ObjectAdapter[] argumentAdapters,
-            final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
+            final AuthenticationSession authenticationSession,
+            final DeploymentCategory deploymentCategory,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         final ObjectAdapter result = getTransactionManager().executeWithinTransaction(new TransactionalClosureWithReturnAbstract<ObjectAdapter>() {
             @Override
             public ObjectAdapter execute() {
                 return underlyingFacet.invoke(owningAction, targetAdapter, argumentAdapters, authenticationSession,
-                        deploymentCategory);
+                        deploymentCategory, interactionInitiatedBy);
             }
         });
         return result;
@@ -71,12 +74,14 @@ public class ActionInvocationFacetWrapTransaction extends ActionInvocationFacetA
     public ObjectAdapter invoke(
             final ObjectAdapter targetAdapter,
             final ObjectAdapter[] argumentAdapters,
-            final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
+            final AuthenticationSession authenticationSession,
+            final DeploymentCategory deploymentCategory,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         final ObjectAdapter result = getTransactionManager().executeWithinTransaction(new TransactionalClosureWithReturnAbstract<ObjectAdapter>() {
             @Override
             public ObjectAdapter execute() {
                 return underlyingFacet.invoke(targetAdapter, argumentAdapters, authenticationSession,
-                        deploymentCategory);
+                        deploymentCategory, interactionInitiatedBy);
             }
         });
         return result;

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionAddToFacetWrapTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionAddToFacetWrapTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionAddToFacetWrapTransaction.java
index 9424ae1..0b4e4c6 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionAddToFacetWrapTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionAddToFacetWrapTransaction.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.runtime.transaction.facets;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacetAbstract;
@@ -43,16 +44,19 @@ public class CollectionAddToFacetWrapTransaction extends CollectionAddToFacetAbs
     }
 
     @Override
-    public void add(final ObjectAdapter adapter, final ObjectAdapter referencedAdapter) {
+    public void add(
+            final ObjectAdapter adapter,
+            final ObjectAdapter referencedAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         if (adapter.isTransient()) {
             // NOT !adapter.isPersistent();
             // (value adapters are neither persistent or transient)
-            underlyingFacet.add(adapter, referencedAdapter);
+            underlyingFacet.add(adapter, referencedAdapter, interactionInitiatedBy);
         } else {
             getTransactionManager().executeWithinTransaction(new TransactionalClosureAbstract() {
                 @Override
                 public void execute() {
-                    underlyingFacet.add(adapter, referencedAdapter);
+                    underlyingFacet.add(adapter, referencedAdapter, interactionInitiatedBy);
                 }
             });
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionRemoveFromFacetWrapTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionRemoveFromFacetWrapTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionRemoveFromFacetWrapTransaction.java
index cb39203..0ee20f1 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionRemoveFromFacetWrapTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/CollectionRemoveFromFacetWrapTransaction.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.runtime.transaction.facets;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacetAbstract;
@@ -43,16 +44,19 @@ public class CollectionRemoveFromFacetWrapTransaction extends CollectionRemoveFr
     }
 
     @Override
-    public void remove(final ObjectAdapter adapter, final ObjectAdapter referencedAdapter) {
+    public void remove(
+            final ObjectAdapter adapter,
+            final ObjectAdapter referencedAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         if (adapter.isTransient()) {
             // NOT !adapter.isPersistent();
             // (value adapters are neither persistent or transient)
-            underlyingFacet.remove(adapter, referencedAdapter);
+            underlyingFacet.remove(adapter, referencedAdapter, interactionInitiatedBy);
         } else {
             getTransactionManager().executeWithinTransaction(new TransactionalClosureAbstract() {
                 @Override
                 public void execute() {
-                    underlyingFacet.remove(adapter, referencedAdapter);
+                    underlyingFacet.remove(adapter, referencedAdapter, interactionInitiatedBy);
                 }
             });
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertyClearFacetWrapTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertyClearFacetWrapTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertyClearFacetWrapTransaction.java
index da68a17..0312b04 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertyClearFacetWrapTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertyClearFacetWrapTransaction.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.runtime.transaction.facets;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacetAbstract;
@@ -43,16 +44,16 @@ public class PropertyClearFacetWrapTransaction extends PropertyClearFacetAbstrac
     }
 
     @Override
-    public void clearProperty(final ObjectAdapter adapter) {
+    public void clearProperty(final ObjectAdapter adapter, final InteractionInitiatedBy interactionInitiatedBy) {
         if (adapter.isTransient()) {
             // NOT !adapter.isPersistent();
             // (value adapters are neither persistent or transient)
-            underlyingFacet.clearProperty(adapter);
+            underlyingFacet.clearProperty(adapter, interactionInitiatedBy);
         } else {
             getTransactionManager().executeWithinTransaction(new TransactionalClosureAbstract() {
                 @Override
                 public void execute() {
-                    underlyingFacet.clearProperty(adapter);
+                    underlyingFacet.clearProperty(adapter, interactionInitiatedBy);
                 }
             });
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertySetterFacetWrapTransaction.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertySetterFacetWrapTransaction.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertySetterFacetWrapTransaction.java
index e5f7141..bece4bd 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertySetterFacetWrapTransaction.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/transaction/facets/PropertySetterFacetWrapTransaction.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.runtime.transaction.facets;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetAbstract;
@@ -43,16 +44,19 @@ public class PropertySetterFacetWrapTransaction extends PropertySetterFacetAbstr
     }
 
     @Override
-    public void setProperty(final ObjectAdapter adapter, final ObjectAdapter referencedAdapter) {
+    public void setProperty(
+            final ObjectAdapter adapter,
+            final ObjectAdapter referencedAdapter,
+            final InteractionInitiatedBy interactionInitiatedBy) {
         if (adapter.isTransient()) {
             // NOT !adapter.isPersistent();
             // (value adapters are neither persistent or transient)
-            underlyingFacet.setProperty(adapter, referencedAdapter);
+            underlyingFacet.setProperty(adapter, referencedAdapter, interactionInitiatedBy);
         } else {
             getTransactionManager().executeWithinTransaction(new TransactionalClosureAbstract() {
                 @Override
                 public void execute() {
-                    underlyingFacet.setProperty(adapter, referencedAdapter);
+                    underlyingFacet.setProperty(adapter, referencedAdapter, interactionInitiatedBy);
                 }
             });
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
index 5eaaebe..5c9cce1 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
@@ -27,7 +27,7 @@ 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.Consent;
-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.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
@@ -95,7 +95,7 @@ public class ObjectMemberAbstractTest {
                 return null;
             }
         });
-        final Consent usable = testMember.isUsable(null, persistentAdapter, Where.ANYWHERE);
+        final Consent usable = testMember.isUsable(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
         final boolean allowed = usable.isAllowed();
         assertTrue(allowed);
     }
@@ -109,7 +109,7 @@ public class ObjectMemberAbstractTest {
                 return null;
             }
         });
-        final Consent visible = testMember.isVisible(null, persistentAdapter, Where.ANYWHERE);
+        final Consent visible = testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
         assertTrue(visible.isAllowed());
     }
 
@@ -117,14 +117,14 @@ public class ObjectMemberAbstractTest {
     public void testVisibleWhenTargetPersistentAndHiddenFacetSetToOncePersisted() {
         testMember.addFacet(new HideForContextFacetNone(testMember));
         testMember.addFacet(new HiddenFacetAbstractImpl(When.ONCE_PERSISTED, Where.ANYWHERE, testMember){});
-        assertFalse(testMember.isVisible(null, persistentAdapter, Where.ANYWHERE).isAllowed());
+        assertFalse(testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE).isAllowed());
     }
 
     @Test
     public void testVisibleWhenTargetPersistentAndHiddenFacetSetToUntilPersisted() {
         testMember.addFacet(new HideForContextFacetNone(testMember));
         testMember.addFacet(new HiddenFacetAbstractImpl(When.UNTIL_PERSISTED, Where.ANYWHERE, testMember){});
-        final Consent visible = testMember.isVisible(null, persistentAdapter, Where.ANYWHERE);
+        final Consent visible = testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
         assertTrue(visible.isAllowed());
     }
 
@@ -133,19 +133,19 @@ public class ObjectMemberAbstractTest {
         testMember.addFacet(new HideForContextFacetNone(testMember));
         testMember.addFacet(new HiddenFacetAbstractImpl(When.UNTIL_PERSISTED, Where.ANYWHERE, testMember){});
         
-        final Consent visible = testMember.isVisible(null, transientAdapter, Where.ANYWHERE);
+        final Consent visible = testMember.isVisible(transientAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
         assertFalse(visible.isAllowed());
     }
 
     @Test
     public void testVisibleDeclaratively() {
         testMember.addFacet(new HiddenFacetAbstractAlwaysEverywhere(testMember) {});
-        assertFalse(testMember.isVisible(null, persistentAdapter, Where.ANYWHERE).isAllowed());
+        assertFalse(testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE).isAllowed());
     }
 
     @Test
     public void testVisibleForSessionByDefault() {
-        final Consent visible = testMember.isVisible(null, persistentAdapter, Where.ANYWHERE);
+        final Consent visible = testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
         assertTrue(visible.isAllowed());
     }
 
@@ -157,7 +157,7 @@ public class ObjectMemberAbstractTest {
                 return "Hidden";
             }
         });
-        assertFalse(testMember.isVisible(null, persistentAdapter, Where.ANYWHERE).isAllowed());
+        assertFalse(testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE).isAllowed());
     }
 
     @Test
@@ -168,7 +168,7 @@ public class ObjectMemberAbstractTest {
                 return "hidden";
             }
         });
-        assertFalse(testMember.isVisible(null, persistentAdapter, Where.ANYWHERE).isAllowed());
+        assertFalse(testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE).isAllowed());
     }
 
     @Test
@@ -217,13 +217,19 @@ class ObjectMemberAbstractImpl extends ObjectMemberAbstract {
     }
 
     @Override
-    public UsabilityContext<?> createUsableInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter target, Where where) {
-        return new PropertyUsabilityContext(DeploymentCategory.PRODUCTION, session, invocationMethod, target, getIdentifier(), where);
+    public UsabilityContext<?> createUsableInteractionContext(
+            final ObjectAdapter target, final InteractionInitiatedBy interactionInitiatedBy,
+            Where where) {
+        final AuthenticationSession session = getAuthenticationSession();
+        return new PropertyUsabilityContext(DeploymentCategory.PRODUCTION, session, interactionInitiatedBy, target, getIdentifier(), where);
     }
 
     @Override
-    public VisibilityContext<?> createVisibleInteractionContext(final AuthenticationSession session, final InteractionInvocationMethod invocationMethod, final ObjectAdapter targetObjectAdapter, Where where) {
-        return new PropertyVisibilityContext(DeploymentCategory.PRODUCTION, session, invocationMethod, targetObjectAdapter, getIdentifier(), where);
+    public VisibilityContext<?> createVisibleInteractionContext(
+            final ObjectAdapter targetObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+            Where where) {
+        final AuthenticationSession session = getAuthenticationSession();
+        return new PropertyVisibilityContext(DeploymentCategory.PRODUCTION, session, interactionInitiatedBy, targetObjectAdapter, getIdentifier(), where);
     }
 
     // /////////////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
index c2268d2..61f2b92 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
@@ -30,6 +30,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.QuerySubmitter;
 import org.apache.isis.core.metamodel.adapter.ServicesProvider;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -133,20 +134,20 @@ public class OneToManyAssociationImplTest {
                 one(mockPeer).getFacet(CollectionAddToFacet.class);
                 will(returnValue(mockCollectionAddToFacet));
 
-                one(mockCollectionAddToFacet).add(mockOwnerAdapter, mockAssociatedAdapter);
+                one(mockCollectionAddToFacet).add(mockOwnerAdapter, mockAssociatedAdapter, InteractionInitiatedBy.USER);
             }
         });
-        association.addElement(mockOwnerAdapter, mockAssociatedAdapter);
+        association.addElement(mockOwnerAdapter, mockAssociatedAdapter, InteractionInitiatedBy.USER);
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void cannotRemoveNull() {
-        association.removeElement(mockOwnerAdapter, null);
+        association.removeElement(mockOwnerAdapter, null, InteractionInitiatedBy.USER);
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void cannotAddNull() {
-        association.addElement(mockOwnerAdapter, null);
+        association.addElement(mockOwnerAdapter, null, InteractionInitiatedBy.USER);
     }
 
     private void allowingPeerToReturnCollectionType() {

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext4.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext4.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext4.java
new file mode 100644
index 0000000..f8ffe58
--- /dev/null
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext4.java
@@ -0,0 +1,31 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.viewer.restfulobjects.rendering;
+
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.runtime.system.DeploymentType;
+
+/**
+ * TODO: roll-up in the future (introduced only so that API does not break)
+ */
+public interface RendererContext4 extends RendererContext3 {
+
+    public InteractionInitiatedBy getInteractionInitiatedBy();
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
index 8fe4620..6b94aef 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
@@ -24,13 +24,16 @@ import javax.ws.rs.core.MediaType;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.DomainTypeReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 
 public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>, T> implements ReprRenderer<R, T> {
 
@@ -40,6 +43,9 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
     protected final JsonRepresentation representation;
     private final Map<String,String> mediaTypeParams = Maps.newLinkedHashMap();
 
+    private final DeploymentType deploymentType;
+    private final InteractionInitiatedBy interactionInitiatedBy;
+
     protected boolean includesSelf;
 
     public ReprRendererAbstract(final RendererContext rendererContext, final LinkFollowSpecs linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
@@ -47,8 +53,38 @@ public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>,
         this.linkFollower = asProvidedElseCreate(linkFollower);
         this.representationType = representationType;
         this.representation = representation;
+
+        this.deploymentType = determineDeploymentTypeFrom(this.rendererContext);
+        this.interactionInitiatedBy = determineInteractionInitiatedByFrom(this.rendererContext);
     }
 
+    private static DeploymentType determineDeploymentTypeFrom(final RendererContext rendererContext) {
+        if(rendererContext instanceof RendererContext3) {
+            return ((RendererContext3) rendererContext).getDeploymentType();
+        } else {
+            return DeploymentType.SERVER; // fallback
+        }
+    }
+
+    private static InteractionInitiatedBy determineInteractionInitiatedByFrom(
+            final RendererContext rendererContext) {
+        if (rendererContext instanceof RepresentationService.Context4) {
+            return ((RepresentationService.Context4) rendererContext).getInteractionInitiatedBy();
+        } else {
+            // fallback
+            return InteractionInitiatedBy.USER;
+        }
+    }
+
+    protected DeploymentType getDeploymentType() {
+        return deploymentType;
+    }
+
+    protected InteractionInitiatedBy getInteractionInitiatedBy() {
+        return interactionInitiatedBy;
+    }
+
+
     public RendererContext getRendererContext() {
         return rendererContext;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
index 28f1c06..474db32 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
@@ -17,19 +17,18 @@
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
 import com.fasterxml.jackson.databind.node.NullNode;
+
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext3;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
 public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbstract<R, ObjectAndMember<T>>, T extends ObjectMember> extends ReprRendererAbstract<R, ObjectAndMember<T>> {
@@ -82,8 +81,14 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
     private final String memberId;
     private final Where where;
 
-    public AbstractObjectMemberReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, String memberId, final RepresentationType representationType, final JsonRepresentation representation, Where where) {
-        super(resourceContext, linkFollower, representationType, representation);
+    public AbstractObjectMemberReprRenderer(
+            final RendererContext rendererContext,
+            final LinkFollowSpecs linkFollower,
+            final String memberId,
+            final RepresentationType representationType,
+            final JsonRepresentation representation,
+            final Where where) {
+        super(rendererContext, linkFollower, representationType, representation);
         this.memberId = memberId;
         this.where = where;
     }
@@ -92,6 +97,7 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
         return memberId;
     }
 
+
     @Override
     public R with(final ObjectAndMember<T> objectAndMember) {
         this.objectAdapter = objectAndMember.getObjectAdapter();
@@ -286,17 +292,12 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
         return visibility().isAllowed();
     }
 
-    protected DeploymentType determineDeploymentTypeFrom(final RendererContext rendererContext) {
-        if(rendererContext instanceof RendererContext3) {
-            return ((RendererContext3) rendererContext).getDeploymentType();
-        } else {
-            return DeploymentType.SERVER; // fallback
-        }
-    }
-
+    /**
+     * Convenience method.
+     */
     protected <F extends Facet> F getMemberSpecFacet(final Class<F> facetType) {
-        final ObjectSpecification otoaSpec = objectMember.getSpecification();
-        return otoaSpec.getFacet(facetType);
+        final ObjectSpecification objetMemberSpec = objectMember.getSpecification();
+        return objetMemberSpec.getFacet(facetType);
     }
 
     protected boolean hasMemberFacet(final Class<? extends Facet> facetType) {
@@ -304,11 +305,11 @@ public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbs
     }
 
     protected Consent usability() {
-        return objectMember.isUsable(getRendererContext().getAuthenticationSession(), objectAdapter, where);
+        return objectMember.isUsable(objectAdapter, getInteractionInitiatedBy(), where);
     }
 
     protected Consent visibility() {
-        return objectMember.isVisible(getRendererContext().getAuthenticationSession(), objectAdapter, where);
+        return objectMember.isVisible(objectAdapter, getInteractionInitiatedBy(), where);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index fa12f8e..d96a01e 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -245,7 +245,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         for (final ObjectAssociation assoc : associations) {
 
             if (mode.checkVisibility()) {
-                final Consent visibility = assoc.isVisible(getRendererContext().getAuthenticationSession(), objectAdapter, rendererContext.getWhere());
+                final Consent visibility = assoc.isVisible(objectAdapter, getInteractionInitiatedBy(), rendererContext.getWhere());
                 if (!visibility.isAllowed()) {
                     continue;
                 }
@@ -278,7 +278,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         for (final ObjectAssociation assoc : associations) {
 
             if (mode.checkVisibility()) {
-                final Consent visibility = assoc.isVisible(getRendererContext().getAuthenticationSession(), objectAdapter, rendererContext.getWhere());
+                final Consent visibility = assoc.isVisible(objectAdapter, getInteractionInitiatedBy(), rendererContext.getWhere());
                 if (!visibility.isAllowed()) {
                     continue;
                 }
@@ -303,7 +303,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
 
     private void addActions(final ObjectAdapter objectAdapter, final List<ObjectAction> actions, final JsonRepresentation members) {
         for (final ObjectAction action : actions) {
-            final Consent visibility = action.isVisible(getRendererContext().getAuthenticationSession(), objectAdapter, rendererContext.getWhere());
+            final Consent visibility = action.isVisible(objectAdapter, getInteractionInitiatedBy(), rendererContext.getWhere());
             if (!visibility.isAllowed()) {
                 continue;
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
index f490dfc..7b5db43 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
@@ -25,13 +25,11 @@ import com.google.common.collect.Maps;
 
 import org.apache.isis.applib.annotation.ActionSemantics;
 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.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
@@ -45,8 +43,8 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
         this(rendererContext, null, null, JsonRepresentation.newMap());
     }
 
-    public ObjectActionReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollowSpecs, String actionId, final JsonRepresentation representation) {
-        super(resourceContext, linkFollowSpecs, actionId, RepresentationType.OBJECT_ACTION, representation, Where.OBJECT_FORMS);
+    public ObjectActionReprRenderer(final RendererContext rendererContext, final LinkFollowSpecs linkFollowSpecs, String actionId, final JsonRepresentation representation) {
+        super(rendererContext, linkFollowSpecs, actionId, RepresentationType.OBJECT_ACTION, representation, Where.OBJECT_FORMS);
     }
 
     @Override
@@ -140,7 +138,7 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
             final List<Object> parameters = Lists.newArrayList();
             for (int i = 0; i < objectMember.getParameterCount(); i++) {
                 final ObjectActionParameter param = objectMember.getParameters().get(i);
-                final Object paramDetails = paramDetails(param);
+                final Object paramDetails = paramDetails(param, getInteractionInitiatedBy());
                 parameters.add(paramDetails);
             }
             representation.mapPut("parameters", parameters);
@@ -148,7 +146,7 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
             final Map<String,Object> parameters = Maps.newLinkedHashMap();
             for (int i = 0; i < objectMember.getParameterCount(); i++) {
                 final ObjectActionParameter param = objectMember.getParameters().get(i);
-                final Object paramDetails = paramDetails(param);
+                final Object paramDetails = paramDetails(param, getInteractionInitiatedBy());
                 parameters.put(param.getId(), paramDetails);
             }
             representation.mapPut("parameters", parameters);
@@ -156,13 +154,13 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
         return this;
     }
 
-    private Object paramDetails(final ObjectActionParameter param) {
+    private Object paramDetails(final ObjectActionParameter param, final InteractionInitiatedBy interactionInitiatedBy) {
         final JsonRepresentation paramRep = JsonRepresentation.newMap();
         paramRep.mapPut("num", param.getNumber());
         paramRep.mapPut("id", param.getId());
         paramRep.mapPut("name", param.getName());
         paramRep.mapPut("description", param.getDescription());
-        final Object paramChoices = choicesFor(param);
+        final Object paramChoices = choicesFor(param, interactionInitiatedBy);
         if (paramChoices != null) {
             paramRep.mapPut("choices", paramChoices);
         }
@@ -173,12 +171,10 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
         return paramRep;
     }
 
-    private Object choicesFor(final ObjectActionParameter param) {
-        final AuthenticationSession authenticationSession = rendererContext.getAuthenticationSession();
-        final DeploymentType deploymentType = determineDeploymentTypeFrom(rendererContext);
-        final DeploymentCategory deploymentCategory = deploymentType.getDeploymentCategory();
-        final ObjectAdapter[] choiceAdapters = param.getChoices(objectAdapter, null, authenticationSession,
-                deploymentCategory);
+    private Object choicesFor(
+            final ObjectActionParameter param,
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        final ObjectAdapter[] choiceAdapters = param.getChoices(objectAdapter, null, interactionInitiatedBy);
         if (choiceAdapters == null || choiceAdapters.length == 0) {
             return null;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
index 809fe7f..09a9214 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
@@ -80,7 +80,7 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
     // ///////////////////////////////////////////////////
 
     private void addValue() {
-        final ObjectAdapter valueAdapter = objectMember.get(objectAdapter);
+        final ObjectAdapter valueAdapter = objectMember.get(objectAdapter, getInteractionInitiatedBy());
         if (valueAdapter == null) {
             return;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index c003978..72fcc07 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -24,9 +24,7 @@ import com.google.common.collect.Lists;
 
 import org.apache.isis.applib.annotation.Render.Type;
 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.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.members.render.RenderFacet;
@@ -36,7 +34,6 @@ import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueFac
 import org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
@@ -81,7 +78,7 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
     // ///////////////////////////////////////////////////
 
     private Object addValue() {
-        final ObjectAdapter valueAdapter = objectMember.get(objectAdapter);
+        final ObjectAdapter valueAdapter = objectMember.get(objectAdapter, getInteractionInitiatedBy());
         
         // use the runtime type if we have a value, else the compile time type of the member otherwise
         final ObjectSpecification spec = valueAdapter != null? valueAdapter.getSpecification(): objectMember.getSpecification();
@@ -201,11 +198,10 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
     }
 
     private Object propertyChoices() {
-        final AuthenticationSession authenticationSession = rendererContext.getAuthenticationSession();
-        final DeploymentType deploymentType = determineDeploymentTypeFrom(rendererContext);
-        final DeploymentCategory deploymentCategory = deploymentType.getDeploymentCategory();
         final ObjectAdapter[] choiceAdapters =
-                objectMember.getChoices(objectAdapter, authenticationSession, deploymentCategory);
+                objectMember.getChoices(
+                        objectAdapter,
+                        getInteractionInitiatedBy());
         if (choiceAdapters == null || choiceAdapters.length == 0) {
             return null;
         }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
index f08aa6f..4028fe5 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
@@ -20,10 +20,12 @@ import javax.ws.rs.core.Response;
 
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext2;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext3;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext4;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberReprMode;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAdapterLinkTo;
@@ -79,4 +81,7 @@ public interface RepresentationService {
     public static interface Context3 extends Context2, RendererContext3 {
         DeploymentType getDeploymentType();
     }
+    public static interface Context4 extends Context3, RendererContext4 {
+        InteractionInitiatedBy getInteractionInitiatedBy();
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
index e358013..3801a78 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
@@ -42,6 +42,7 @@ import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.runtime.system.DeploymentType;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -50,11 +51,11 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.DomainModel;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.RequestParameter;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext3;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext4;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
 
-public class ResourceContext implements RendererContext3 {
+public class ResourceContext implements RendererContext4 {
 
     private final HttpHeaders httpHeaders;
     private final UriInfo uriInfo;
@@ -75,6 +76,7 @@ public class ResourceContext implements RendererContext3 {
 
     private final Where where;
     private final DeploymentType deploymentType;
+    private final InteractionInitiatedBy interactionInitiatedBy;
     private final String urlUnencodedQueryString;
 
     private JsonRepresentation readQueryStringAsMap;
@@ -98,7 +100,8 @@ public class ResourceContext implements RendererContext3 {
             final AdapterManager objectAdapterLookup,
             final SpecificationLoader specificationLoader,
             final IsisConfiguration configuration,
-            final DeploymentType deploymentType) {
+            final DeploymentType deploymentType,
+            final InteractionInitiatedBy interactionInitiatedBy) {
 
         this.httpHeaders = httpHeaders;
         this.providers = providers;
@@ -116,6 +119,7 @@ public class ResourceContext implements RendererContext3 {
         this.specificationLoader = specificationLoader;
         this.where = where;
         this.deploymentType = deploymentType;
+        this.interactionInitiatedBy = interactionInitiatedBy;
 
         init(representationType);
     }
@@ -265,6 +269,11 @@ public class ResourceContext implements RendererContext3 {
     }
 
     @Override
+    public InteractionInitiatedBy getInteractionInitiatedBy() {
+        return interactionInitiatedBy;
+    }
+
+    @Override
     public List<List<String>> getFollowLinks() {
         return followLinks;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
index 3c7b039..2bd8982 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.url.UrlEncodingUtils;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -92,7 +93,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
             throw RestfulObjectsApplicationException.createWithBody(HttpStatusCode.BAD_REQUEST, objectRepr, "Illegal property value");
         }
 
-        final Consent validity = objectAdapter.getSpecification().isValid(objectAdapter);
+        final Consent validity = objectAdapter.getSpecification().isValid(objectAdapter, InteractionInitiatedBy.USER);
         if (validity.isVetoed()) {
             throw RestfulObjectsApplicationException.createWithBody(HttpStatusCode.BAD_REQUEST, objectRepr, validity.getReason());
         }
@@ -152,7 +153,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
             throw RestfulObjectsApplicationException.createWithBody(HttpStatusCode.BAD_REQUEST, argRepr, "Illegal property value");
         }
 
-        final Consent validity = objectAdapter.getSpecification().isValid(objectAdapter);
+        final Consent validity = objectAdapter.getSpecification().isValid(objectAdapter, InteractionInitiatedBy.USER);
         if (validity.isVetoed()) {
             throw RestfulObjectsApplicationException.createWithBody(HttpStatusCode.BAD_REQUEST, argRepr, validity.getReason());
         }
@@ -210,19 +211,21 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         final DomainResourceHelper helper = getDomainResourceHelper(objectAdapter);
         final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(getResourceContext(), objectAdapter);
 
-        final OneToOneAssociation property = accessHelper.getPropertyThatIsVisibleForIntent(propertyId, ObjectAdapterAccessHelper.Intent.MUTATE);
+        final OneToOneAssociation property = accessHelper.getPropertyThatIsVisibleForIntent(propertyId,
+                ObjectAdapterAccessHelper.Intent.MUTATE);
 
         final ObjectSpecification propertySpec = property.getSpecification();
         final String bodyAsString = Util.asStringUtf8(body);
 
-        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), propertySpec).parseAsMapWithSingleValue(bodyAsString);
+        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), propertySpec).parseAsMapWithSingleValue(
+                bodyAsString);
 
-        final Consent consent = property.isAssociationValid(objectAdapter, argAdapter);
+        final Consent consent = property.isAssociationValid(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
         if (consent.isVetoed()) {
             throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
         }
 
-        property.set(objectAdapter, argAdapter);
+        property.set(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
 
         return helper.propertyDetails(
                 propertyId,
@@ -248,12 +251,12 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         final OneToOneAssociation property = accessHelper.getPropertyThatIsVisibleForIntent(
                 propertyId, ObjectAdapterAccessHelper.Intent.MUTATE);
 
-        final Consent consent = property.isAssociationValid(objectAdapter, null);
+        final Consent consent = property.isAssociationValid(objectAdapter, null, InteractionInitiatedBy.USER);
         if (consent.isVetoed()) {
             throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
         }
 
-        property.set(objectAdapter, null);
+        property.set(objectAdapter, null, InteractionInitiatedBy.USER);
 
         return helper.propertyDetails(
                 propertyId,
@@ -311,14 +314,15 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         final ObjectSpecification collectionSpec = collection.getSpecification();
         final String bodyAsString = Util.asStringUtf8(body);
-        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(bodyAsString);
+        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(
+                bodyAsString);
 
-        final Consent consent = collection.isValidToAdd(objectAdapter, argAdapter);
+        final Consent consent = collection.isValidToAdd(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
         if (consent.isVetoed()) {
             throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
         }
 
-        collection.addElement(objectAdapter, argAdapter);
+        collection.addElement(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
 
         return helper.collectionDetails(collectionId, MemberReprMode.WRITE);
     }
@@ -347,14 +351,15 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         final ObjectSpecification collectionSpec = collection.getSpecification();
         final String bodyAsString = Util.asStringUtf8(body);
-        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(bodyAsString);
+        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(
+                bodyAsString);
 
-        final Consent consent = collection.isValidToAdd(objectAdapter, argAdapter);
+        final Consent consent = collection.isValidToAdd(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
         if (consent.isVetoed()) {
             throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
         }
 
-        collection.addElement(objectAdapter, argAdapter);
+        collection.addElement(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
 
         return helper.collectionDetails(collectionId, MemberReprMode.WRITE);
     }
@@ -378,14 +383,15 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
                 collectionId, ObjectAdapterAccessHelper.Intent.MUTATE);
 
         final ObjectSpecification collectionSpec = collection.getSpecification();
-        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(getResourceContext().getUrlUnencodedQueryString());
+        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(
+                getResourceContext().getUrlUnencodedQueryString());
 
-        final Consent consent = collection.isValidToRemove(objectAdapter, argAdapter);
+        final Consent consent = collection.isValidToRemove(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
         if (consent.isVetoed()) {
             throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.UNAUTHORIZED, consent.getReason());
         }
 
-        collection.removeElement(objectAdapter, argAdapter);
+        collection.removeElement(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
 
         return helper.collectionDetails(collectionId, MemberReprMode.WRITE);
     }
@@ -499,7 +505,6 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = getDomainResourceHelper(objectAdapter);
 
-        Where where = getResourceContext().getWhere();
         return helper.invokeAction(actionId, arguments);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index 8d4fe5b..dec8328 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -28,6 +28,7 @@ import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
@@ -37,6 +38,7 @@ import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext3;
+import org.apache.isis.viewer.restfulobjects.rendering.RendererContext4;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectLinkTo;
@@ -51,12 +53,14 @@ import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
 
 public class DomainResourceHelper {
 
-    static class RepresentationServiceContextAdapter implements RepresentationService.Context3 {
+    static class RepresentationServiceContextAdapter implements RepresentationService.Context4 {
 
-        private final RendererContext3 rendererContext;
+        private final RendererContext4 rendererContext;
         private final ObjectAdapterLinkTo adapterLinkTo;
 
-        RepresentationServiceContextAdapter(final RendererContext3 rendererContext, final ObjectAdapterLinkTo adapterLinkTo) {
+        RepresentationServiceContextAdapter(
+                final RendererContext4 rendererContext,
+                final ObjectAdapterLinkTo adapterLinkTo) {
             this.rendererContext = rendererContext;
             this.adapterLinkTo = adapterLinkTo;
         }
@@ -160,6 +164,11 @@ public class DomainResourceHelper {
         public boolean suppressMemberDisabledReason() {
             return rendererContext.suppressMemberDisabledReason();
         }
+
+        @Override
+        public InteractionInitiatedBy getInteractionInitiatedBy() {
+            return rendererContext.getInteractionInitiatedBy();
+        }
     }
 
     private final RepresentationService representationService;
@@ -324,7 +333,7 @@ public class DomainResourceHelper {
 
         // invoke
         final ObjectAdapter[] argArray2 = argAdapters.toArray(new ObjectAdapter[0]);
-        final ObjectAdapter returnedAdapter = action.execute(objectAdapter, argArray2);
+        final ObjectAdapter returnedAdapter = action.execute(objectAdapter, argArray2, InteractionInitiatedBy.USER);
 
         final ObjectAndActionInvocation objectAndActionInvocation =
                 new ObjectAndActionInvocation(this.objectAdapter, action, arguments, returnedAdapter);

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
index 7bb3fa2..0c81132 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import com.google.common.collect.Lists;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
@@ -64,7 +65,9 @@ public class ObjectActionArgHelper {
                 // validate individual arg
                 final ObjectActionParameter parameter = parameters.get(i);
                 final Object argPojo = argAdapter!=null?argAdapter.getObject():null;
-                final String reasonNotValid = parameter.isValid(objectAdapter, argPojo, null);
+                final String reasonNotValid = parameter.isValid(objectAdapter, argPojo, InteractionInitiatedBy.USER,
+                        null
+                );
                 if (reasonNotValid != null) {
                     argRepr.mapPut("invalidReason", reasonNotValid);
                     valid = false;
@@ -77,7 +80,7 @@ public class ObjectActionArgHelper {
 
         // validate all args
         final ObjectAdapter[] argArray = argAdapters.toArray(new ObjectAdapter[0]);
-        final Consent consent = action.isProposedArgumentSetValid(objectAdapter, argArray);
+        final Consent consent = action.isProposedArgumentSetValid(objectAdapter, argArray, InteractionInitiatedBy.USER);
         if (consent.isVetoed()) {
             arguments.mapPut("x-ro-invalidReason", consent.getReason());
             valid = false;

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
index f979b81..a7f5596 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
@@ -17,15 +17,19 @@
 package org.apache.isis.viewer.restfulobjects.server.resources;
 
 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.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.*;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberType;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberType;
 
 /**
  * Utility class that encapsulates the logic for checking access to the specified
@@ -122,14 +126,19 @@ public class ObjectAdapterAccessHelper {
         final Where where = rendererContext.getWhere();
 
         final String memberId = objectMember.getId();
-        final AuthenticationSession authenticationSession = rendererContext.getAuthenticationSession();
-        if (objectMember.isVisible(authenticationSession, objectAdapter, where).isVetoed()) {
+        final Consent visibilityConsent =
+                objectMember.isVisible(
+                        objectAdapter, InteractionInitiatedBy.USER, where);
+        if (visibilityConsent.isVetoed()) {
             throwNotFoundException(memberId, memberType);
         }
         if (intent.isMutate()) {
-            final Consent usable = objectMember.isUsable(authenticationSession, objectAdapter, where);
-            if (usable.isVetoed()) {
-                throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.FORBIDDEN, usable.getReason());
+            final Consent usabilityConsent = objectMember.isUsable(
+                    objectAdapter, InteractionInitiatedBy.USER, where
+            );
+            if (usabilityConsent.isVetoed()) {
+                throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.FORBIDDEN,
+                        usabilityConsent.getReason());
             }
         }
         return objectMember;

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
index 4b41b3c..0548ce4 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
@@ -17,8 +17,10 @@
 package org.apache.isis.viewer.restfulobjects.server.resources;
 
 import java.util.List;
+
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
@@ -68,8 +70,15 @@ public class ObjectAdapterUpdateHelper {
             final ObjectSpecification propertySpec = property.getSpecification();
             final String id = property.getId();
             final JsonRepresentation propertyRepr = propertiesMap.getRepresentation(id);
-            final Consent visibility = property.isVisible(resourceContext.getAuthenticationSession() , objectAdapter, resourceContext.getWhere());
-            final Consent usability = property.isUsable(resourceContext.getAuthenticationSession() , objectAdapter, resourceContext.getWhere());
+            final Consent visibility = property.isVisible(
+                    objectAdapter,
+                    resourceContext.getInteractionInitiatedBy(),
+                    resourceContext.getWhere());
+            final Consent usability = property.isUsable(
+                    objectAdapter,
+                    resourceContext.getInteractionInitiatedBy(),
+                    resourceContext.getWhere()
+            );
 
             final boolean invisible = visibility.isVetoed();
             final boolean disabled = usability.isVetoed();
@@ -127,10 +136,13 @@ public class ObjectAdapterUpdateHelper {
                     continue;
                 }
                 // check if the proposed value is valid
-                final Consent validity = property.isAssociationValid(objectAdapter, valueAdapter);
+                final Consent validity = property.isAssociationValid(objectAdapter, valueAdapter,
+                        InteractionInitiatedBy.USER);
                 if (validity.isAllowed()) {
                     try {
-                        property.set(objectAdapter, valueAdapter);
+                        property.set(
+                                objectAdapter, valueAdapter,
+                                resourceContext.getInteractionInitiatedBy());
                     } catch (final IllegalArgumentException ex) {
                         propertyRepr.mapPut("invalidReason", ex.getMessage());
                         allOk = false;

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
index 896e5fe..7f939b7 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
@@ -38,6 +38,7 @@ import org.apache.isis.core.commons.url.UrlEncodingUtils;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.adapter.oid.OidMarshaller;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.services.ServiceUtil;
 import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
@@ -113,7 +114,7 @@ public abstract class ResourceAbstract {
         this.resourceContext = new ResourceContext(
                 representationType, httpHeaders, providers, uriInfo, request, where, urlUnencodedQueryString, httpServletRequest, httpServletResponse,
                 securityContext, getLocalization(), getAuthenticationSession(), getPersistenceSession(), getAdapterManager(), getSpecificationLoader(), getConfiguration(),
-                getDeploymentType());
+                getDeploymentType(), InteractionInitiatedBy.USER);
     }
 
     protected ResourceContext getResourceContext() {

http://git-wip-us.apache.org/repos/asf/isis/blob/d120bf74/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java
index 55c4bae..8f65ede 100644
--- a/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java
+++ b/core/viewer-restfulobjects-server/src/test/java/org/apache/isis/viewer/restfulobjects/server/ResourceContextTest_ensureCompatibleAcceptHeader.java
@@ -161,7 +161,8 @@ public class ResourceContextTest_ensureCompatibleAcceptHeader {
 
     private ResourceContext instantiateResourceContext(
             final RepresentationType representationType) {
-        return new ResourceContext(representationType, httpHeaders, null, null, null, null, null, httpServletRequest, null, null, null, null, null, null, null, null, null);
+        return new ResourceContext(representationType, httpHeaders, null, null, null, null, null, httpServletRequest, null, null, null, null, null, null, null, null, null,
+                null);
     }
 
 }