You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/08/28 19:16:09 UTC

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

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotation.java
index b1303ef..6b23f3e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotation.java
@@ -48,11 +48,20 @@ public class ParseableFacetAnnotation extends ParseableFacetAbstract {
     }
 
     public ParseableFacetAnnotation(final Class<?> annotatedClass, final IsisConfiguration configuration, final FacetHolder holder, DeploymentCategory deploymentCategory, final AuthenticationSessionProvider authenticationSessionProvider, final AdapterManager adapterManager, final ServicesInjector dependencyInjector) {
-        this(parserName(annotatedClass, configuration), parserClass(annotatedClass), holder, deploymentCategory, authenticationSessionProvider, adapterManager, dependencyInjector);
+        this(parserName(annotatedClass, configuration), parserClass(annotatedClass), holder, configuration,
+                deploymentCategory, authenticationSessionProvider, adapterManager, dependencyInjector);
     }
 
-    private ParseableFacetAnnotation(final String candidateParserName, final Class<?> candidateParserClass, final FacetHolder holder, DeploymentCategory deploymentCategory, final AuthenticationSessionProvider authenticationSessionProvider, final AdapterManager adapterManager, final ServicesInjector dependencyInjector) {
-        super(candidateParserName, candidateParserClass, holder, deploymentCategory, authenticationSessionProvider, dependencyInjector, adapterManager);
+    private ParseableFacetAnnotation(
+            final String candidateParserName,
+            final Class<?> candidateParserClass,
+            final FacetHolder holder,
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSessionProvider authenticationSessionProvider,
+            final AdapterManager adapterManager,
+            final ServicesInjector dependencyInjector) {
+        super(candidateParserName, candidateParserClass, holder, isisConfiguration, deploymentCategory, authenticationSessionProvider, dependencyInjector, adapterManager);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
index 49810a0..946e4fd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetAnnotationElseConfigurationFactory.java
@@ -65,16 +65,17 @@ public class ParseableFacetAnnotationElseConfigurationFactory extends FacetFacto
 
         // create from annotation, if present
         if (annotation != null) {
-            final ParseableFacetAnnotation facet = new ParseableFacetAnnotation(cls, getIsisConfiguration(), holder, getDeploymentCategory(), authenticationSessionProvider, adapterManager, servicesInjector);
+            final ParseableFacetAnnotation facet = new ParseableFacetAnnotation(cls, getConfiguration(), holder, getDeploymentCategory(), authenticationSessionProvider, adapterManager, servicesInjector);
             if (facet.isValid()) {
                 return facet;
             }
         }
 
         // otherwise, try to create from configuration, if present
-        final String parserName = ParserUtil.parserNameFromConfiguration(cls, getIsisConfiguration());
+        final String parserName = ParserUtil.parserNameFromConfiguration(cls, getConfiguration());
         if (!Strings.isNullOrEmpty(parserName)) {
-            final ParseableFacetFromConfiguration facet = new ParseableFacetFromConfiguration(parserName, holder, getDeploymentCategory(), authenticationSessionProvider, servicesInjector, adapterManager);
+            final ParseableFacetFromConfiguration facet = new ParseableFacetFromConfiguration(parserName, holder,
+                    getConfiguration(), getDeploymentCategory(), authenticationSessionProvider, servicesInjector, adapterManager);
             if (facet.isValid()) {
                 return facet;
             }
@@ -94,7 +95,7 @@ public class ParseableFacetAnnotationElseConfigurationFactory extends FacetFacto
         return runtimeContext.getDeploymentCategory();
     }
 
-    public IsisConfiguration getIsisConfiguration() {
+    public IsisConfiguration getConfiguration() {
         return configuration;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java
index 5a29246..889e0d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java
@@ -20,6 +20,7 @@
 package org.apache.isis.core.metamodel.facets.object.parseable.annotcfg;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -28,7 +29,14 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 
 public class ParseableFacetFromConfiguration extends ParseableFacetAbstract {
 
-    public ParseableFacetFromConfiguration(final String candidateParserName, final FacetHolder holder, DeploymentCategory deploymentCategory, final AuthenticationSessionProvider authenticationSessionProvider, final ServicesInjector dependencyInjector, final AdapterManager adapterManager) {
-        super(candidateParserName, null, holder, deploymentCategory, authenticationSessionProvider, dependencyInjector, adapterManager);
+    public ParseableFacetFromConfiguration(
+            final String candidateParserName,
+            final FacetHolder holder,
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSessionProvider authenticationSessionProvider,
+            final ServicesInjector dependencyInjector,
+            final AdapterManager adapterManager) {
+        super(candidateParserName, null, holder, isisConfiguration, deploymentCategory, authenticationSessionProvider, dependencyInjector, adapterManager);
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
index 705b083..f7eaaaa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.adapters.ParsingException;
 import org.apache.isis.applib.profiles.Localization;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
@@ -44,16 +45,23 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 public class ParseableFacetUsingParser extends FacetAbstract implements ParseableFacet {
 
     private final Parser<?> parser;
+    private final IsisConfiguration configuration;
     private final DeploymentCategory deploymentCategory;
     private final AuthenticationSessionProvider authenticationSessionProvider;
     private final ServicesInjector dependencyInjector;
     private final AdapterManager adapterManager;
 
     public ParseableFacetUsingParser(
-            final Parser<?> parser, final FacetHolder holder, 
-            final DeploymentCategory deploymentCategory, final AuthenticationSessionProvider authenticationSessionProvider, final ServicesInjector dependencyInjector, final AdapterManager adapterManager) {
+            final Parser<?> parser,
+            final FacetHolder holder,
+            final IsisConfiguration isisConfiguration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSessionProvider authenticationSessionProvider,
+            final ServicesInjector dependencyInjector,
+            final AdapterManager adapterManager) {
         super(ParseableFacet.class, holder, Derivation.NOT_DERIVED);
         this.parser = parser;
+        configuration = isisConfiguration;
         this.deploymentCategory = deploymentCategory;
         this.authenticationSessionProvider = authenticationSessionProvider;
         this.dependencyInjector = dependencyInjector;
@@ -76,7 +84,8 @@ public class ParseableFacetUsingParser extends FacetAbstract implements Parseabl
         // (eg pick up any @RegEx on value type)
         if (getFacetHolder().containsFacet(ValueFacet.class)) {
             final ObjectAdapter entryAdapter = getAdapterManager().adapterFor(entry);
-            final ParseValueContext parseValueContext = new ParseValueContext(deploymentCategory, getAuthenticationSessionProvider().getAuthenticationSession(), InteractionInvocationMethod.BY_USER, contextAdapter, getIdentified().getIdentifier(), entryAdapter);
+            final ParseValueContext parseValueContext = new ParseValueContext(configuration, deploymentCategory,
+                    getAuthenticationSessionProvider().getAuthenticationSession(), InteractionInvocationMethod.BY_USER, contextAdapter, getIdentified().getIdentifier(), entryAdapter);
             validate(parseValueContext);
         }
 
@@ -132,24 +141,28 @@ public class ParseableFacetUsingParser extends FacetAbstract implements Parseabl
     // Dependencies (from constructor)
     // /////////////////////////////////////////////////////////
 
+    protected IsisConfiguration getConfiguration() {
+        return configuration;
+    }
+
     /**
      * @return the dependencyInjector
      */
-    public ServicesInjector getDependencyInjector() {
+    protected ServicesInjector getDependencyInjector() {
         return dependencyInjector;
     }
 
     /**
      * @return the authenticationSessionProvider
      */
-    public AuthenticationSessionProvider getAuthenticationSessionProvider() {
+    protected AuthenticationSessionProvider getAuthenticationSessionProvider() {
         return authenticationSessionProvider;
     }
 
     /**
      * @return the adapterManager
      */
-    public AdapterManager getAdapterManager() {
+    protected AdapterManager getAdapterManager() {
         return adapterManager;
     }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeAbstract.java
index 59233c0..7cf70bd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetDeclarativeAbstract.java
@@ -29,8 +29,10 @@ 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.adapter.oid.RootOidDefault;
+import org.apache.isis.core.metamodel.consent.InteractionInvocationMethod;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -90,7 +92,10 @@ public abstract class RecreatableObjectFacetDeclarativeAbstract extends Recreata
             }
 
             if(propertyValue != null) {
-                property.set(viewModelAdapter, adapterManager.adapterFor(propertyValue));
+                final PropertyAccessingContext propertyAccessingContext = property
+                        .createAccessingInteractionContext(null, InteractionInvocationMethod.BY_USER, viewModelAdapter);
+                final ObjectAdapter newValue = adapterManager.adapterFor(propertyValue);
+                property.set(propertyAccessingContext, viewModelAdapter, newValue);
             }
         }
     }
@@ -132,8 +137,11 @@ public abstract class RecreatableObjectFacetDeclarativeAbstract extends Recreata
                 }
 
                 // otherwise, include
-                final ObjectAdapter propertyValueAdapter = property.get(adapterManager.adapterFor(viewModelPojo)
-                );
+                final ObjectAdapter targetAdapter = adapterManager.adapterFor(viewModelPojo);
+                final PropertyAccessingContext propertyAccessingContext = property
+                        .createAccessingInteractionContext(null, InteractionInvocationMethod.BY_USER, targetAdapter);
+                final ObjectAdapter propertyValueAdapter = property.get(targetAdapter,
+                        propertyAccessingContext);
                 if(propertyValueAdapter != null) {
                     final Object propertyValue = propertyValueAdapter.getObject();
                     if(mementoService.canSet(propertyValue)) {

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
index bc41a4c..49dbc9b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
@@ -24,7 +24,6 @@ import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ClassExtensions;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-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.facetapi.FacetHolderImpl;
@@ -73,7 +72,11 @@ public abstract class ValueFacetAbstract extends MultipleValueFacetAbstract impl
         this(newValueSemanticsProviderOrNull(semanticsProviderClass, holder, configuration, context), addFacetsIfInvalid, holder, context);
     }
 
-    public ValueFacetAbstract(final ValueSemanticsProvider<?> semanticsProvider, final AddFacetsIfInvalidStrategy addFacetsIfInvalid, final FacetHolder holder, final ValueSemanticsProviderContext context) {
+    public ValueFacetAbstract(
+            final ValueSemanticsProvider<?> semanticsProvider,
+            final AddFacetsIfInvalidStrategy addFacetsIfInvalid,
+            final FacetHolder holder,
+            final ValueSemanticsProviderContext context) {
         super(type(), holder);
 
         this.semanticsProvider = semanticsProvider;
@@ -125,7 +128,8 @@ public abstract class ValueFacetAbstract extends MultipleValueFacetAbstract impl
             // Parser
             final Parser<?> parser = semanticsProvider.getParser();
             if (parser != null) {
-                facetHolder.addFacet(new ParseableFacetUsingParser(parser, holder, getDeploymentCategory(context), getAuthenticationSessionProvider(), getDependencyInjector(), getAdapterMap()));
+                facetHolder.addFacet(new ParseableFacetUsingParser(parser, holder, context.getConfiguration(),
+                        context.getDeploymentCategory(), getAuthenticationSessionProvider(), getDependencyInjector(), getAdapterMap()));
                 facetHolder.addFacet(new TitleFacetUsingParser(parser, holder, getDependencyInjector()));
                 facetHolder.addFacet(new TypicalLengthFacetUsingParser(parser, holder, getDependencyInjector()));
                 if(parser instanceof Parser2) {
@@ -176,10 +180,6 @@ public abstract class ValueFacetAbstract extends MultipleValueFacetAbstract impl
     // Dependencies (from constructor)
     // /////////////////////////////////////////
 
-    protected DeploymentCategory getDeploymentCategory(final ValueSemanticsProviderContext context) {
-        return context.getDeploymentCategory();
-    }
-
     public AdapterManager getAdapterMap() {
         return context.getAdapterManager();
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
index a53fafa..9c377b5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotationOrConfigurationFactory.java
@@ -102,7 +102,7 @@ public class ValueFacetAnnotationOrConfigurationFactory extends FacetFactoryAbst
         // create from annotation, if present
         final Value annotation = Annotations.getAnnotation(cls, Value.class);
         if (annotation != null) {
-            final ValueFacetAnnotation facet = new ValueFacetAnnotation(cls, holder, getIsisConfiguration(), createValueSemanticsProviderContext());
+            final ValueFacetAnnotation facet = new ValueFacetAnnotation(cls, holder, getConfiguration(), createValueSemanticsProviderContext());
             if (facet.isValid()) {
                 return facet;
             }
@@ -111,7 +111,7 @@ public class ValueFacetAnnotationOrConfigurationFactory extends FacetFactoryAbst
         // otherwise, try to create from configuration, if present
         final String semanticsProviderName = ValueSemanticsProviderUtil.semanticsProviderNameFromConfiguration(cls, configuration);
         if (!Strings.isNullOrEmpty(semanticsProviderName)) {
-            final ValueFacetFromConfiguration facet = new ValueFacetFromConfiguration(semanticsProviderName, holder, getIsisConfiguration(), createValueSemanticsProviderContext());
+            final ValueFacetFromConfiguration facet = new ValueFacetFromConfiguration(semanticsProviderName, holder, getConfiguration(), createValueSemanticsProviderContext());
             if (facet.isValid()) {
                 return facet;
             }
@@ -122,7 +122,9 @@ public class ValueFacetAnnotationOrConfigurationFactory extends FacetFactoryAbst
     }
 
     protected ValueSemanticsProviderContext createValueSemanticsProviderContext() {
-        return new ValueSemanticsProviderContext(getDeploymentCategory(), getAuthenticationSessionProvider(), getSpecificationLoader(), getAdapterManager(), getServicesInjector());
+        return new ValueSemanticsProviderContext(
+                getConfiguration(), getDeploymentCategory(), getAuthenticationSessionProvider(),
+                getSpecificationLoader(), getAdapterManager(), getServicesInjector());
     }
 
     // ////////////////////////////////////////////////////////////////////
@@ -136,7 +138,7 @@ public class ValueFacetAnnotationOrConfigurationFactory extends FacetFactoryAbst
         return runtimeContext.getDeploymentCategory();
     }
 
-    public IsisConfiguration getIsisConfiguration() {
+    public IsisConfiguration getConfiguration() {
         return configuration;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
index 8af29ce..b050b30 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
@@ -74,7 +74,7 @@ public abstract class ValueFacetUsingSemanticsProviderFactory<T> extends FacetFa
 
     public ValueSemanticsProviderContext getContext() {
         if (context == null) {
-            context = new ValueSemanticsProviderContext(getDeploymentCategory(), authenticationSessionProvider, getSpecificationLoader(), adapterManager, servicesInjector);
+            context = new ValueSemanticsProviderContext(getConfiguration(), getDeploymentCategory(), authenticationSessionProvider, getSpecificationLoader(), adapterManager, servicesInjector);
         }
         return context;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderContext.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderContext.java
index 22bd976..5687daf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderContext.java
@@ -17,13 +17,15 @@
 package org.apache.isis.core.metamodel.facets.object.value.vsp;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
 public class ValueSemanticsProviderContext {
-    
+
+    private final IsisConfiguration isisConfiguration;
     private final DeploymentCategory deploymentCategory;
     private final AuthenticationSessionProvider authenticationSessionProvider;
     private final SpecificationLoader specificationLookup;
@@ -31,7 +33,13 @@ public class ValueSemanticsProviderContext {
     private final ServicesInjector dependencyInjector;
 
     public ValueSemanticsProviderContext(
-            final DeploymentCategory deploymentCategory, final AuthenticationSessionProvider authenticationSessionProvider, final SpecificationLoader specificationLookup, final AdapterManager adapterManager, final ServicesInjector dependencyInjector) {
+            final IsisConfiguration configuration,
+            final DeploymentCategory deploymentCategory,
+            final AuthenticationSessionProvider authenticationSessionProvider,
+            final SpecificationLoader specificationLookup,
+            final AdapterManager adapterManager,
+            final ServicesInjector dependencyInjector) {
+        this.isisConfiguration = configuration;
         this.deploymentCategory = deploymentCategory;
         this.authenticationSessionProvider = authenticationSessionProvider;
         this.specificationLookup = specificationLookup;
@@ -39,6 +47,10 @@ public class ValueSemanticsProviderContext {
         this.dependencyInjector = dependencyInjector;
     }
 
+    public IsisConfiguration getConfiguration() {
+        return isisConfiguration;
+    }
+
     public DeploymentCategory getDeploymentCategory() {
         return deploymentCategory;
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/choices/ChoicesFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/choices/ChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/choices/ChoicesFacet.java
index 5aefe69..014135f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/choices/ChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/choices/ChoicesFacet.java
@@ -23,6 +23,7 @@ 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.interactions.AccessContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 public interface ChoicesFacet extends Facet {
@@ -31,7 +32,8 @@ public interface ChoicesFacet extends Facet {
      * Gets a set of choices for this object.
      */
     public Object[] getChoices(
-            ObjectAdapter adapter,
+            final AccessContext<?> accessContext,
+            final ObjectAdapter adapter,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
index 85e572b..4c4a0b0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.MarkerFacetAbstract;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.interactions.ActionArgumentContext;
-import org.apache.isis.core.metamodel.interactions.PropertyModifyContext;
+import org.apache.isis.core.metamodel.interactions.PropertyValidityContext;
 import org.apache.isis.core.metamodel.interactions.ProposedHolder;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
 
@@ -77,7 +77,7 @@ public abstract class MandatoryFacetAbstract extends MarkerFacetAbstract impleme
 
     @Override
     public String invalidates(final ValidityContext<? extends ValidityEvent> context) {
-        if (!(context instanceof PropertyModifyContext) && !(context instanceof ActionArgumentContext)) {
+        if (!(context instanceof PropertyValidityContext) && !(context instanceof ActionArgumentContext)) {
             return null;
         }
         if (!(context instanceof ProposedHolder)) {

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
index 56a5838..dcc1fe0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
@@ -23,6 +23,7 @@ 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.interactions.ActionPromptContext;
 
 /**
  * Obtain autocompletion for each of the parameters of the action.
@@ -35,9 +36,11 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 public interface ActionParameterAutoCompleteFacet extends Facet {
 
     public Object[] autoComplete(
-            ObjectAdapter inObject,
-            String searchArg,
-            final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory);
+            final ActionPromptContext actionPromptContext,
+            final ObjectAdapter inObject,
+            final String searchArg,
+            final AuthenticationSession authenticationSession,
+            final DeploymentCategory deploymentCategory);
     /**
      * The minimum number of characters that need to be entered.
      */

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
index eda2e50..1ab9595 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
@@ -36,6 +36,7 @@ import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacetAbstract;
 import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
@@ -45,7 +46,12 @@ public class ActionParameterAutoCompleteFacetViaMethod extends ActionParameterAu
     private final Class<?> choicesType;
     private final int minLength;
 
-    public ActionParameterAutoCompleteFacetViaMethod(final Method method, final Class<?> choicesType, final FacetHolder holder, final SpecificationLoader specificationLookup, final AdapterManager adapterManager) {
+    public ActionParameterAutoCompleteFacetViaMethod(
+            final Method method,
+            final Class<?> choicesType,
+            final FacetHolder holder,
+            final SpecificationLoader specificationLookup,
+            final AdapterManager adapterManager) {
         super(holder, specificationLookup, adapterManager);
         this.method = method;
         this.choicesType = choicesType;
@@ -83,6 +89,7 @@ public class ActionParameterAutoCompleteFacetViaMethod extends ActionParameterAu
 
     @Override
     public Object[] autoComplete(
+            final ActionPromptContext actionPromptContext,
             final ObjectAdapter owningAdapter,
             final String searchArg,
             final AuthenticationSession authenticationSession,
@@ -100,7 +107,7 @@ public class ActionParameterAutoCompleteFacetViaMethod extends ActionParameterAu
         final List<ObjectAdapter> visibleAdapters =
                 ObjectAdapter.Util.visibleAdapters(
                         collectionAdapter,
-                        authenticationSession, deploymentCategory);
+                        authenticationSession, actionPromptContext.getConfiguration(), deploymentCategory, actionPromptContext);
         final List<Object> visibleObjects = Lists.newArrayList(
                 Iterables.transform(visibleAdapters, ObjectAdapter.Functions.getObject()));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionChoicesFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionChoicesFacet.java
index a7efd0b..8a50b64 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionChoicesFacet.java
@@ -23,6 +23,7 @@ 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.interactions.ActionPromptContext;
 
 /**
  * Obtain choices for each of the parameters of the action.
@@ -34,7 +35,8 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 public interface ActionChoicesFacet extends Facet {
 
     public Object[][] getChoices(
-            ObjectAdapter inObject,
+            final ActionPromptContext actionPromptContext,
+            final ObjectAdapter inObject,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory);
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
index 21a31b3..2ddc819 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
@@ -25,6 +25,7 @@ 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.interactions.ActionPromptContext;
 
 /**
  * Obtain choices for each of the parameters of the action.
@@ -37,6 +38,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 public interface ActionParameterChoicesFacet extends Facet {
 
     public Object[] getChoices(
+            final ActionPromptContext actionPromptContext,
             final ObjectAdapter target,
             final List<ObjectAdapter> arguments,
             final AuthenticationSession authenticationSession,

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
index 028f131..61f6e52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
@@ -26,6 +26,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
 public class ActionParameterChoicesFacetNone extends ActionParameterChoicesFacetAbstract {
@@ -39,7 +40,7 @@ public class ActionParameterChoicesFacetNone extends ActionParameterChoicesFacet
 
     @Override
     public Object[] getChoices(
-            final ObjectAdapter adapter,
+            final ActionPromptContext actionPromptContext, final ObjectAdapter adapter,
             final List<ObjectAdapter> arguments,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
index 4fcd09a..ee9cecd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.TypedHolder;
 import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
@@ -40,6 +41,7 @@ public class ActionParameterChoicesFacetDerivedFromChoicesFacet extends ActionPa
 
     @Override
     public Object[] getChoices(
+            final ActionPromptContext actionPromptContext,
             final ObjectAdapter adapter,
             final List<ObjectAdapter> arguments,
             final AuthenticationSession authenticationSession,
@@ -51,7 +53,7 @@ public class ActionParameterChoicesFacetDerivedFromChoicesFacet extends ActionPa
         if (choicesFacet == null) {
             return new Object[0];
         }
-        return choicesFacet.getChoices(adapter, authenticationSession, deploymentCategory);
+        return choicesFacet.getChoices(actionPromptContext, adapter, authenticationSession, deploymentCategory);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
index 8cb847c..fe65dc3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
@@ -31,12 +31,13 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.CollectionUtils;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
 import org.apache.isis.core.metamodel.spec.DomainModelException;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.facets.CollectionUtils;
 
 public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract implements ImperativeFacet {
 
@@ -84,6 +85,7 @@ public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract impl
 
     @Override
     public Object[][] getChoices(
+            final ActionPromptContext actionPromptContext,
             final ObjectAdapter owningAdapter,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
@@ -98,12 +100,13 @@ public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract impl
         final Object[][] results = new Object[options.length][];
         for (int i = 0; i < results.length; i++) {
             final Class<?> parameterType = method.getParameterTypes()[i];
-            results[i] = handleResults(options[i], parameterType, authenticationSession, deploymentCategory);
+            results[i] = handleResults(actionPromptContext, options[i], parameterType, authenticationSession, deploymentCategory);
         }
         return results;
     }
 
     private Object[] handleResults(
+            final ActionPromptContext actionPromptContext,
             final Object collectionOrArray,
             final Class<?> parameterType,
             final AuthenticationSession authenticationSession,
@@ -117,8 +120,9 @@ public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract impl
         final List<ObjectAdapter> visibleAdapters =
                 ObjectAdapter.Util.visibleAdapters(
                         collectionAdapter,
-                        authenticationSession, deploymentCategory
-                );
+                        authenticationSession,
+                        actionPromptContext.getConfiguration(), deploymentCategory,
+                        actionPromptContext);
         final List<Object> filteredObjects = Lists.newArrayList(
                 Iterables.transform(visibleAdapters, ObjectAdapter.Functions.getObject()));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index d7500e0..2375968 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -35,6 +35,7 @@ import org.apache.isis.core.metamodel.facets.CollectionUtils;
 import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.ActionPromptContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
@@ -80,6 +81,7 @@ public class ActionParameterChoicesFacetViaMethod extends ActionParameterChoices
 
     @Override
     public Object[] getChoices(
+            final ActionPromptContext actionPromptContext,
             final ObjectAdapter adapter,
             final List<ObjectAdapter> argumentsIfAvailable,
             final AuthenticationSession authenticationSession,
@@ -96,8 +98,8 @@ public class ActionParameterChoicesFacetViaMethod extends ActionParameterChoices
         final List<ObjectAdapter> visibleAdapters =
                 ObjectAdapter.Util.visibleAdapters(
                         objectAdapter,
-                        authenticationSession, deploymentCategory
-                );
+                        authenticationSession, actionPromptContext.getConfiguration(), deploymentCategory,
+                        actionPromptContext);
         final List<Object> visibleObjects = Lists.newArrayList(
                 Iterables.transform(visibleAdapters, ObjectAdapter.Functions.getObject()));
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacet.java
index a4e45c9..232816f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacet.java
@@ -23,6 +23,7 @@ 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.interactions.AssociationAccessingContext;
 
 /**
  * The mechanism by which the value of the property can be accessed.
@@ -42,12 +43,13 @@ public interface PropertyOrCollectionAccessorFacet extends Facet {
      *     omitted from that collection, while for a property if the referenced object is invisible then null will be
      *     returned.
      * </p>
-     *
+     * @param associationAccessingContext
      * @param inObject
      * @param authenticationSession - if null, then does _not_ filter out any objects that would otherwise be invisible to the current user
      * @param deploymentCategory
      */
     public Object getProperty(
+            final AssociationAccessingContext<?> associationAccessingContext,
             final ObjectAdapter inObject,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory);

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacetAbstract.java
index 677ed98..46c5e04 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacetAbstract.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
@@ -55,7 +56,8 @@ public abstract class PropertyOrCollectionAccessorFacetAbstract
 
     @Override
     public abstract Object getProperty(
-            ObjectAdapter inObject,
+            final AssociationAccessingContext<?> associationAccessingContext,
+            final ObjectAdapter inObject,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory);
 

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
index 6875e24..4c1b53c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
@@ -32,6 +32,7 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.AssociationAccessingContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
@@ -83,6 +84,7 @@ public class PropertyAccessorFacetViaAccessor
 
     @Override
     public Object getProperty(
+            final AssociationAccessingContext<?> associationAccessingContext,
             final ObjectAdapter owningAdapter,
             final AuthenticationSession authenticationSession,
             final DeploymentCategory deploymentCategory) {
@@ -97,7 +99,8 @@ public class PropertyAccessorFacetViaAccessor
         if(filterForVisibility) {
             final ObjectAdapter referencedAdapter = getAdapterManager().adapterFor(referencedObject);
             final boolean visible = ObjectAdapter.Util
-                    .isVisible(referencedAdapter, authenticationSession, deploymentCategory);
+                    .isVisible(referencedAdapter, authenticationSession, associationAccessingContext.getConfiguration(), deploymentCategory,
+                            associationAccessingContext);
             if (!visible) {
                 return null;
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/PropertyAutoCompleteFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/PropertyAutoCompleteFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/PropertyAutoCompleteFacet.java
index aa5dda3..d934038 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/PropertyAutoCompleteFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/PropertyAutoCompleteFacet.java
@@ -23,6 +23,7 @@ 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.interactions.PropertyAccessingContext;
 
 /**
  * Provides a set of auto-complete choices for a property.
@@ -42,6 +43,7 @@ public interface PropertyAutoCompleteFacet extends Facet {
      * Gets the available auto-complete choices for this property.
      */
     public Object[] autoComplete(
+            final PropertyAccessingContext propertyAccessingContext,
             final ObjectAdapter inObject,
             final String searchArg,
             final AuthenticationSession authenticationSession,

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
deleted file mode 100644
index 3e62cc5..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.properties.autocomplete.method;
-
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.List;
-
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.CollectionUtils;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.ImperativeFacet;
-import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
-import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacetAbstract;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-
-public class PropertyAutoCompleteFacetMethod extends PropertyAutoCompleteFacetAbstract implements ImperativeFacet {
-
-    private final Method method;
-    private final Class<?> choicesClass;
-    private final int minLength;
-
-    private final AdapterManager adapterManager;
-    private SpecificationLoader specificationLoader;
-
-    public PropertyAutoCompleteFacetMethod(
-            final Method method,
-            final Class<?> choicesClass,
-            final FacetHolder holder,
-            final SpecificationLoader specificationLoader,
-            final AdapterManager adapterManager) {
-        super(holder);
-        this.method = method;
-        this.choicesClass = choicesClass;
-        this.specificationLoader = specificationLoader;
-        this.adapterManager = adapterManager;
-        this.minLength = MinLengthUtil.determineMinLength(method);
-    }
-
-    /**
-     * Returns a singleton list of the {@link Method} provided in the
-     * constructor.
-     */
-    @Override
-    public List<Method> getMethods() {
-        return Collections.singletonList(method);
-    }
-
-    @Override
-    public Intent getIntent(final Method method) {
-        return Intent.CHOICES_OR_AUTOCOMPLETE;
-    }
-
-    @Override
-    public int getMinLength() {
-        return minLength;
-    }
-
-    @Override
-    public boolean impliesResolve() {
-        return true;
-    }
-
-    @Override
-    public boolean impliesObjectChanged() {
-        return false;
-    }
-
-    @Override
-    public Object[] autoComplete(
-            final ObjectAdapter owningAdapter,
-            final String searchArg,
-            final AuthenticationSession authenticationSession,
-            final DeploymentCategory deploymentCategory) {
-
-        final Object collectionOrArray = ObjectAdapter.InvokeUtils.invoke(method, owningAdapter, searchArg);
-        if (collectionOrArray == null) {
-            return null;
-        }
-
-        final ObjectAdapter collectionAdapter = getAdapterManager().adapterFor(collectionOrArray);
-
-        final FacetedMethod facetedMethod = (FacetedMethod) getFacetHolder();
-        final Class<?> propertyType = facetedMethod.getType();
-
-        final List<ObjectAdapter> visibleAdapters =
-                ObjectAdapter.Util.visibleAdapters(
-                        collectionAdapter,
-                        authenticationSession, deploymentCategory
-                );
-        final List<Object> filteredObjects = Lists.newArrayList(
-                Iterables.transform(visibleAdapters, ObjectAdapter.Functions.getObject()));
-
-        final ObjectSpecification propertySpec = getSpecification(propertyType);
-        return CollectionUtils.getCollectionAsObjectArray(filteredObjects, propertySpec, getAdapterManager());
-    }
-
-    @Override
-    protected String toStringValues() {
-        return "method=" + method + ",class=" + choicesClass;
-    }
-
-
-
-
-    protected ObjectSpecification getSpecification(final Class<?> type) {
-        return type != null ? getSpecificationLoader().loadSpecification(type) : null;
-    }
-
-    // ////////////////////////////////////////////
-    // Dependencies
-    // ////////////////////////////////////////////
-
-    protected AdapterManager getAdapterManager() {
-        return adapterManager;
-    }
-
-    protected SpecificationLoader getSpecificationLoader() {
-        return specificationLoader;
-    }
-
-
-
-}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
index 3f73199..0ca146c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
@@ -62,7 +62,7 @@ public class PropertyAutoCompleteFacetMethodFactory extends MethodPrefixBasedFac
         processMethodContext.removeMethod(autoCompleteMethod);
 
         final FacetHolder property = processMethodContext.getFacetHolder();
-        FacetUtil.addFacet(new PropertyAutoCompleteFacetMethod(autoCompleteMethod, returnType, property, getSpecificationLoader(), getAdapterManager()));
+        FacetUtil.addFacet(new PropertyAutoCompleteFacetViaMethod(autoCompleteMethod, returnType, property, getSpecificationLoader(), getAdapterManager()));
     }
 
     // ///////////////////////////////////////////////////////

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetViaMethod.java
new file mode 100644
index 0000000..6c69c37
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetViaMethod.java
@@ -0,0 +1,153 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.properties.autocomplete.method;
+
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.CollectionUtils;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
+import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+public class PropertyAutoCompleteFacetViaMethod extends PropertyAutoCompleteFacetAbstract implements ImperativeFacet {
+
+    private final Method method;
+    private final Class<?> choicesClass;
+    private final int minLength;
+
+    private final AdapterManager adapterManager;
+    private SpecificationLoader specificationLoader;
+
+    public PropertyAutoCompleteFacetViaMethod(
+            final Method method,
+            final Class<?> choicesClass,
+            final FacetHolder holder,
+            final SpecificationLoader specificationLoader,
+            final AdapterManager adapterManager) {
+        super(holder);
+        this.method = method;
+        this.choicesClass = choicesClass;
+        this.specificationLoader = specificationLoader;
+        this.adapterManager = adapterManager;
+        this.minLength = MinLengthUtil.determineMinLength(method);
+    }
+
+    /**
+     * Returns a singleton list of the {@link Method} provided in the
+     * constructor.
+     */
+    @Override
+    public List<Method> getMethods() {
+        return Collections.singletonList(method);
+    }
+
+    @Override
+    public Intent getIntent(final Method method) {
+        return Intent.CHOICES_OR_AUTOCOMPLETE;
+    }
+
+    @Override
+    public int getMinLength() {
+        return minLength;
+    }
+
+    @Override
+    public boolean impliesResolve() {
+        return true;
+    }
+
+    @Override
+    public boolean impliesObjectChanged() {
+        return false;
+    }
+
+    @Override
+    public Object[] autoComplete(
+            final PropertyAccessingContext propertyAccessingContext,
+            final ObjectAdapter owningAdapter,
+            final String searchArg,
+            final AuthenticationSession authenticationSession,
+            final DeploymentCategory deploymentCategory) {
+
+        final Object collectionOrArray = ObjectAdapter.InvokeUtils.invoke(method, owningAdapter, searchArg);
+        if (collectionOrArray == null) {
+            return null;
+        }
+
+        final ObjectAdapter collectionAdapter = getAdapterManager().adapterFor(collectionOrArray);
+
+        final FacetedMethod facetedMethod = (FacetedMethod) getFacetHolder();
+        final Class<?> propertyType = facetedMethod.getType();
+
+        final List<ObjectAdapter> visibleAdapters =
+                ObjectAdapter.Util.visibleAdapters(
+                        collectionAdapter,
+                        authenticationSession,
+                        propertyAccessingContext.getConfiguration(),
+                        deploymentCategory,
+                        propertyAccessingContext);
+        final List<Object> filteredObjects = Lists.newArrayList(
+                Iterables.transform(visibleAdapters, ObjectAdapter.Functions.getObject()));
+
+        final ObjectSpecification propertySpec = getSpecification(propertyType);
+        return CollectionUtils.getCollectionAsObjectArray(filteredObjects, propertySpec, getAdapterManager());
+    }
+
+    @Override
+    protected String toStringValues() {
+        return "method=" + method + ",class=" + choicesClass;
+    }
+
+
+
+
+    protected ObjectSpecification getSpecification(final Class<?> type) {
+        return type != null ? getSpecificationLoader().loadSpecification(type) : null;
+    }
+
+    // ////////////////////////////////////////////
+    // Dependencies
+    // ////////////////////////////////////////////
+
+    protected AdapterManager getAdapterManager() {
+        return adapterManager;
+    }
+
+    protected SpecificationLoader getSpecificationLoader() {
+        return specificationLoader;
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/PropertyChoicesFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/PropertyChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/PropertyChoicesFacet.java
index a45b32d..fedc8b0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/PropertyChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/PropertyChoicesFacet.java
@@ -23,6 +23,7 @@ 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.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 
 /**
@@ -47,6 +48,7 @@ public interface PropertyChoicesFacet extends Facet {
      * Gets the available choices for this property.
      */
     public Object[] getChoices(
+            final PropertyAccessingContext propertyAccessingContext,
             final ObjectAdapter adapter,
             final SpecificationLoader specificationLookup,
             final AuthenticationSession authenticationSession,

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java
index a4a7d9c..1c06545 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java
@@ -25,6 +25,7 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacetAbstract;
@@ -37,6 +38,7 @@ public class PropertyChoicesFacetDerivedFromChoicesFacet extends PropertyChoices
 
     @Override
     public Object[] getChoices(
+            final PropertyAccessingContext propertyAccessingContext,
             final ObjectAdapter adapter,
             final SpecificationLoader specificationLookup,
             final AuthenticationSession authenticationSession,
@@ -49,7 +51,7 @@ public class PropertyChoicesFacetDerivedFromChoicesFacet extends PropertyChoices
         if (choicesFacet == null) {
             return new Object[0];
         }
-        return choicesFacet.getChoices(adapter, authenticationSession, deploymentCategory);
+        return choicesFacet.getChoices(propertyAccessingContext, adapter, authenticationSession, deploymentCategory);
     }
 
     public ObjectSpecification getSpecification(final Class<?> type) {

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
index 23fe31d..fde23cf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
@@ -30,6 +30,7 @@ import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
 import org.apache.isis.core.metamodel.facets.CollectionUtils;
@@ -75,7 +76,7 @@ public class PropertyChoicesFacetViaMethod extends PropertyChoicesFacetAbstract
 
     @Override
     public Object[] getChoices(
-            final ObjectAdapter owningAdapter,
+            final PropertyAccessingContext propertyAccessingContext, final ObjectAdapter owningAdapter,
             final SpecificationLoader specificationLookup,
             final AuthenticationSession authenticationSession, final DeploymentCategory deploymentCategory) {
         final Object options = ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java
index 2392c9d..3ee17f3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyClearFacetForDomainEventAbstract.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.facets.DomainEventHelper;
 import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 
 public abstract class PropertyClearFacetForDomainEventAbstract
@@ -61,19 +62,21 @@ public abstract class PropertyClearFacetForDomainEventAbstract
     }
 
     @Override
-    public void clearProperty(ObjectAdapter targetAdapter) {
+    public void clearProperty(
+            final PropertyAccessingContext propertyAccessingContext,
+            final ObjectAdapter targetAdapter) {
         if(clearFacet == null) {
             return;
         }
 
         if(!domainEventHelper.hasEventBusService()) {
-            clearFacet.clearProperty(targetAdapter);
+            clearFacet.clearProperty(propertyAccessingContext, targetAdapter);
             return;
         }
 
 
         // ... post the executing event
-        final Object oldValue = getterFacet.getProperty(targetAdapter, null, null);
+        final Object oldValue = getterFacet.getProperty(propertyAccessingContext, targetAdapter, null, null);
         final PropertyDomainEvent<?, ?> event =
                 domainEventHelper.postEventForProperty(
                         AbstractDomainEvent.Phase.EXECUTING,
@@ -82,10 +85,10 @@ public abstract class PropertyClearFacetForDomainEventAbstract
                         oldValue, null);
 
         // ... perform the property clear
-        clearFacet.clearProperty(targetAdapter);
+        clearFacet.clearProperty(propertyAccessingContext, targetAdapter);
 
         // reading the actual value from the target object, playing it safe...
-        final Object actualNewValue = getterFacet.getProperty(targetAdapter, null, null);
+        final Object actualNewValue = getterFacet.getProperty(propertyAccessingContext, targetAdapter, null, null);
         if(Objects.equal(oldValue, actualNewValue)) {
             // do nothing.
             return;

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
index 860c35e..ffb8c7c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
@@ -32,12 +32,15 @@ import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.core.metamodel.facets.DomainEventHelper;
 import org.apache.isis.core.metamodel.facets.SingleClassValueFacetAbstract;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
+import org.apache.isis.core.metamodel.interactions.PropertyValidityContext;
 import org.apache.isis.core.metamodel.interactions.ProposedHolder;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.ValidityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 
 public abstract class PropertyDomainEventFacetAbstract
         extends SingleClassValueFacetAbstract implements PropertyDomainEventFacet {
@@ -110,7 +113,11 @@ public abstract class PropertyDomainEventFacetAbstract
             return null;
         }
 
-        final Object oldValue = getterFacet.getProperty(ic.getTarget(), ic.getSession(), ic.getDeploymentCategory());
+        PropertyValidityContext pvc = (PropertyValidityContext) ic;
+        final OneToOneAssociation property = pvc.getProperty();
+        final PropertyAccessingContext propertyAccessingContext = property
+                .createAccessingInteractionContext(ic.getSession(), ic.getInvocationMethod(), ic.getTarget());
+        final Object oldValue = getterFacet.getProperty(propertyAccessingContext, ic.getTarget(), ic.getSession(), ic.getDeploymentCategory());
         final Object proposedValue = proposedFrom(ic);
 
         final PropertyDomainEvent<?, ?> event =

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java
index 24c3bb8..4b5398e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterFacetForDomainEventAbstract.java
@@ -29,6 +29,7 @@ import org.apache.isis.core.metamodel.facets.DomainEventHelper;
 import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
 import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 
 public abstract class PropertySetterFacetForDomainEventAbstract
@@ -60,18 +61,20 @@ public abstract class PropertySetterFacetForDomainEventAbstract
     }
 
     @Override
-    public void setProperty(ObjectAdapter targetAdapter, ObjectAdapter newValueAdapter) {
+    public void setProperty(
+            final PropertyAccessingContext propertyAccessingContext, ObjectAdapter targetAdapter,
+            ObjectAdapter newValueAdapter) {
         if(setterFacet == null) {
             return;
         }
         if(!domainEventHelper.hasEventBusService()) {
-            setterFacet.setProperty(targetAdapter, newValueAdapter);
+            setterFacet.setProperty(propertyAccessingContext, targetAdapter, newValueAdapter);
             return;
         }
 
 
         // ... post the executing event
-        final Object oldValue = getterFacet.getProperty(targetAdapter, null, null);
+        final Object oldValue = getterFacet.getProperty(propertyAccessingContext, targetAdapter, null, null);
         final Object newValue = ObjectAdapter.Util.unwrap(newValueAdapter);
 
         final PropertyDomainEvent<?, ?> event =
@@ -82,10 +85,10 @@ public abstract class PropertySetterFacetForDomainEventAbstract
                         oldValue, newValue);
 
         // ... perform the property modification
-        setterFacet.setProperty(targetAdapter, newValueAdapter);
+        setterFacet.setProperty(propertyAccessingContext, targetAdapter, newValueAdapter);
 
         // reading the actual value from the target object, playing it safe...
-        final Object actualNewValue = getterFacet.getProperty(targetAdapter, null, null);
+        final Object actualNewValue = getterFacet.getProperty(propertyAccessingContext, targetAdapter, null, null);
         if(Objects.equal(oldValue, actualNewValue)) {
             // do nothing
             return;

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
index 0b8fc87..b5f299a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacet.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.facets.properties.update.clear;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 
 /**
  * Mechanism for clearing a property of an object (that is, setting it to
@@ -34,5 +35,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
  */
 public interface PropertyClearFacet extends Facet {
 
-    public void clearProperty(ObjectAdapter inObject);
+    public void clearProperty(
+            final PropertyAccessingContext propertyAccessingContext,
+            final ObjectAdapter targetAdapter);
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/4ac11bbc/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
index ce0db84..c01e15a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
@@ -26,6 +26,7 @@ import java.util.List;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessingContext;
 
 public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract implements ImperativeFacet {
 
@@ -61,8 +62,10 @@ public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract
     }
 
     @Override
-    public void clearProperty(final ObjectAdapter owningAdapter) {
-        ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
+    public void clearProperty(
+            final PropertyAccessingContext propertyAccessingContext,
+            final ObjectAdapter targetAdapter) {
+        ObjectAdapter.InvokeUtils.invoke(method, targetAdapter);
     }
 
     @Override