You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/07/29 14:13:35 UTC

[isis] 02/03: ISIS-2340: ManagedCollection/Action to hold an immutable 'Where' field

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 0e5857cfc522684283eb995283cdcbb2ba1a702b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jul 29 16:11:05 2020 +0200

    ISIS-2340: ManagedCollection/Action to hold an immutable 'Where' field
---
 .../interactions/managed/ActionInteraction.java    |  6 +-
 .../managed/CollectionInteraction.java             |  6 +-
 .../interactions/managed/ManagedAction.java        | 16 ++--
 .../interactions/managed/ManagedCollection.java    | 16 ++--
 .../interactions/managed/ManagedMember.java        |  8 +-
 .../interactions/managed/ManagedProperty.java      |  8 +-
 .../interactions/managed/MemberInteraction.java    | 13 ++-
 .../testdomain/interact/ActionInteractionTest.java | 98 +++++++++++-----------
 .../interact/InteractionTestAbstract.java          |  8 +-
 .../testdomain/interact/NewParameterModelTest.java | 32 +++----
 .../interact/PropertyInteractionTest.java          |  8 +-
 .../interact/ScalarParamNegotiationTest.java       |  6 +-
 .../javafx/ui/components/object/ObjectViewFx.java  | 14 ++--
 .../vaadin/ui/components/object/ObjectViewVaa.java | 14 ++--
 .../common/model/binding/UiComponentFactory.java   |  2 +-
 .../model/menu/MenuUiModel_buildMenuItems.java     |  5 +-
 .../domainobjects/DomainObjectReprRenderer.java    |  8 +-
 .../domainobjects/ObjectActionReprRenderer.java    |  3 +-
 .../ObjectCollectionReprRenderer.java              |  3 +-
 .../ContentNegotiationServiceOrgApacheIsisV1.java  |  3 +-
 .../resources/DomainObjectResourceServerside.java  |  8 +-
 .../viewer/resources/DomainResourceHelper.java     |  6 +-
 .../resources/ObjectAdapterAccessHelper.java       | 16 ++--
 .../viewer/wicket/model/models/ScalarModel.java    | 15 +---
 .../wicket/model/models/ScalarParameterModel.java  | 18 +---
 .../wicket/model/models/ScalarPropertyModel.java   |  8 +-
 26 files changed, 171 insertions(+), 177 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
index 2091ab8..3670203 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteraction.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.interactions.managed;
 import java.util.Optional;
 import java.util.function.Function;
 
+import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.commons.internal.base._Either;
 import org.apache.isis.core.commons.internal.exceptions._Exceptions;
@@ -50,9 +51,10 @@ public final class ActionInteraction extends MemberInteraction<ManagedAction, Ac
 
     public static final ActionInteraction start(
             @NonNull final ManagedObject owner,
-            @NonNull final String memberId) {
+            @NonNull final String memberId,
+            @NonNull final Where where) {
 
-        val managedAction = ManagedAction.lookupAction(owner, memberId);
+        val managedAction = ManagedAction.lookupAction(owner, memberId, where);
 
         final _Either<ManagedAction, InteractionVeto> chain = managedAction.isPresent()
                 ? _Either.left(managedAction.get())
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/CollectionInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/CollectionInteraction.java
index a06c797..ba7a34a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/CollectionInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/CollectionInteraction.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.interactions.managed;
 import java.util.Optional;
 import java.util.function.Function;
 
+import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.internal.base._Either;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedMember.MemberType;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -32,9 +33,10 @@ public final class CollectionInteraction extends MemberInteraction<ManagedCollec
 
     public static final CollectionInteraction start(
             @NonNull final ManagedObject owner,
-            @NonNull final String memberId) {
+            @NonNull final String memberId,
+            @NonNull final Where where) {
     
-        val managedCollection = ManagedCollection.lookupCollection(owner, memberId);
+        val managedCollection = ManagedCollection.lookupCollection(owner, memberId, where);
         
         final _Either<ManagedCollection, InteractionVeto> chain = managedCollection.isPresent()
                 ? _Either.left(managedCollection.get())
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
index 941622e..a632755 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedAction.java
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.interactions.managed;
 
 import java.util.Optional;
 
+import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.routing.RoutingService;
@@ -43,16 +44,18 @@ public final class ManagedAction extends ManagedMember {
     
     public static final ManagedAction of(
             final @NonNull ManagedObject owner, 
-            final @NonNull ObjectAction action) {
-        return new ManagedAction(owner, action);
+            final @NonNull ObjectAction action,
+            final @NonNull Where where) {
+        return new ManagedAction(owner, action, where);
     }
     
     public static final Optional<ManagedAction> lookupAction(
             @NonNull final ManagedObject owner,
-            @NonNull final String memberId) {
+            @NonNull final String memberId,
+            @NonNull final Where where) {
         
         return ManagedMember.<ObjectAction>lookup(owner, MemberType.ACTION, memberId)
-        .map(objectAction -> of(owner, objectAction));
+        .map(objectAction -> of(owner, objectAction, where));
     }
     
     // -- IMPLEMENTATION
@@ -63,9 +66,10 @@ public final class ManagedAction extends ManagedMember {
 
     private ManagedAction(
             final @NonNull ManagedObject owner, 
-            final @NonNull ObjectAction action) {
+            final @NonNull ObjectAction action,
+            final @NonNull Where where) {
         
-        super(owner);
+        super(owner, where);
         this.action = action;
         this.interactionHead = action.interactionHead(owner);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedCollection.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedCollection.java
index 6db7b79..d1e2e97 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedCollection.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.interactions.managed;
 import java.util.Optional;
 import java.util.stream.Stream;
 
+import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -37,16 +38,18 @@ public final class ManagedCollection extends ManagedMember {
     
     public static final ManagedCollection of(
             final @NonNull ManagedObject owner, 
-            final @NonNull OneToManyAssociation collection) {
-        return new ManagedCollection(owner, collection);
+            final @NonNull OneToManyAssociation collection,
+            final @NonNull Where where) {
+        return new ManagedCollection(owner, collection, where);
     }
     
     public static final Optional<ManagedCollection> lookupCollection(
             @NonNull final ManagedObject owner,
-            @NonNull final String memberId) {
+            @NonNull final String memberId,
+            @NonNull final Where where) {
         
         return ManagedMember.<OneToManyAssociation>lookup(owner, MemberType.COLLECTION, memberId)
-        .map(objectAction -> of(owner, objectAction));
+        .map(objectAction -> of(owner, objectAction, where));
     }
     
     // -- IMPLEMENTATION
@@ -55,9 +58,10 @@ public final class ManagedCollection extends ManagedMember {
     
     private ManagedCollection(
             final @NonNull ManagedObject owner, 
-            final @NonNull OneToManyAssociation collection) {
+            final @NonNull OneToManyAssociation collection,
+            final @NonNull Where where) {
         
-        super(owner);
+        super(owner, where);
         this.collection = collection;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
index 4a06c25..7e7d675 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedMember.java
@@ -92,6 +92,8 @@ public abstract class ManagedMember implements ManagedFeature {
     public ManagedObject getOwner() {
         return owner = EntityUtil.reattach(owner);
     }
+    
+    @Getter @NonNull private final Where where;
 
     /**
      * Allows a managed property of a view model to replace its owner with a clone.
@@ -142,8 +144,7 @@ public abstract class ManagedMember implements ManagedFeature {
      * @param where
      * @return non-empty if hidden
      */
-    public Optional<InteractionVeto> checkVisibility(
-            @NonNull final Where where) {
+    public Optional<InteractionVeto> checkVisibility() {
 
         try {
             val visibilityConsent = 
@@ -166,8 +167,7 @@ public abstract class ManagedMember implements ManagedFeature {
      * @param where
      * @return non-empty if not usable/editable (meaning if read-only)
      */
-    public Optional<InteractionVeto> checkUsability(
-            @NonNull final Where where) {
+    public Optional<InteractionVeto> checkUsability() {
         
         try {
             
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedProperty.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedProperty.java
index 8e51bd8..92d2eda 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedProperty.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ManagedProperty.java
@@ -57,15 +57,13 @@ public final class ManagedProperty extends ManagedMember {
     // -- IMPLEMENTATION
     
     @Getter private final OneToOneAssociation property;
-    @Getter private final Where where;
     
     private ManagedProperty(
             final @NonNull ManagedObject owner, 
             final @NonNull OneToOneAssociation property,
             final @NonNull Where where) {
-        super(owner);
+        super(owner, where);
         this.property = property;
-        this.where = where;
     }
 
     @Override
@@ -129,8 +127,8 @@ public final class ManagedProperty extends ManagedMember {
         val property = getProperty();
         val owner = getOwner();
         
-        return property.isVisible(owner, InteractionInitiatedBy.FRAMEWORK, where).isAllowed() 
-                && property.isVisible(owner, InteractionInitiatedBy.USER, where).isAllowed()
+        return property.isVisible(owner, InteractionInitiatedBy.FRAMEWORK, getWhere()).isAllowed() 
+                && property.isVisible(owner, InteractionInitiatedBy.USER, getWhere()).isAllowed()
             ? property.get(owner, InteractionInitiatedBy.USER)
             : ManagedObject.empty(property.getSpecification());
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/MemberInteraction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/MemberInteraction.java
index 9d26050..075e715 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/MemberInteraction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/MemberInteraction.java
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.interactions.managed;
 import java.util.Optional;
 import java.util.function.Function;
 
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.internal.base._Casts;
 import org.apache.isis.core.commons.internal.base._Either;
 
@@ -44,9 +43,9 @@ public abstract class MemberInteraction<T extends ManagedMember, H extends Membe
         this.chain = chain;
     }
     
-    public H checkVisibility(@NonNull final Where where) {
+    public H checkVisibility() {
         chain = chain.leftRemap(property->{
-            val visibilityVeto = property.checkVisibility(where);
+            val visibilityVeto = property.checkVisibility();
             return visibilityVeto.isPresent()
                 ? _Either.right(visibilityVeto.get()) 
                 : _Either.left(property); 
@@ -54,9 +53,9 @@ public abstract class MemberInteraction<T extends ManagedMember, H extends Membe
         return _Casts.uncheckedCast(this);
     }
     
-    public H checkUsability(@NonNull final Where where) {
+    public H checkUsability() {
         chain = chain.leftRemap(property->{
-            val usablitiyVeto = property.checkUsability(where);
+            val usablitiyVeto = property.checkUsability();
             return usablitiyVeto.isPresent()
                 ? _Either.right(usablitiyVeto.get()) 
                 : _Either.left(property); 
@@ -70,9 +69,9 @@ public abstract class MemberInteraction<T extends ManagedMember, H extends Membe
      * @param intent
      * @return self
      */
-    public H checkUsability(@NonNull final Where where, @NonNull final AccessIntent intent) {
+    public H checkUsability(@NonNull final AccessIntent intent) {
         if(intent.isMutate()) {
-            return checkUsability(where);
+            return checkUsability();
         }
         return _Casts.uncheckedCast(this);
     }
diff --git a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/ActionInteractionTest.java b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/ActionInteractionTest.java
index a3f624e..e27285e 100644
--- a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/ActionInteractionTest.java
+++ b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/ActionInteractionTest.java
@@ -65,24 +65,24 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_whenEnabled_shouldHaveNoVeto() {
 
-        val managedAction = startActionInteractionOn(InteractionDemo.class, "noArgEnabled")
+        val managedAction = startActionInteractionOn(InteractionDemo.class, "noArgEnabled", Where.OBJECT_FORMS)
                 .getManagedAction().get(); // should not throw  
 
-        assertFalse(managedAction.checkVisibility(Where.OBJECT_FORMS).isPresent()); // is visible
-        assertFalse(managedAction.checkUsability(Where.OBJECT_FORMS).isPresent()); // can invoke 
+        assertFalse(managedAction.checkVisibility().isPresent()); // is visible
+        assertFalse(managedAction.checkUsability().isPresent()); // can invoke 
     }
     
     @Test 
     void actionInteraction_whenDisabled_shouldHaveVeto() {
 
-        val managedAction = startActionInteractionOn(InteractionDemo.class, "noArgDisabled")
+        val managedAction = startActionInteractionOn(InteractionDemo.class, "noArgDisabled", Where.OBJECT_FORMS)
                 .getManagedAction().get(); // should not throw  
 
 
-        assertFalse(managedAction.checkVisibility(Where.OBJECT_FORMS).isPresent()); // is visible
+        assertFalse(managedAction.checkVisibility().isPresent()); // is visible
 
         // cannot invoke
-        val veto = managedAction.checkUsability(Where.OBJECT_FORMS).get(); // should not throw
+        val veto = managedAction.checkUsability().get(); // should not throw
         assertNotNull(veto);
 
         assertEquals("Disabled for demonstration.", veto.getReason());
@@ -91,9 +91,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_whenEnabled_shouldProvideProperDecoratorModels() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "noArgEnabled")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "noArgEnabled", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         val disablingUiModel = DisablingUiModel.of(actionInteraction);
         assertFalse(disablingUiModel.isPresent());
@@ -102,9 +102,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_whenDisabled_shouldProvideProperDecoratorModels() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "noArgDisabled")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "noArgDisabled", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         val disablingUiModel = DisablingUiModel.of(actionInteraction).get();
         assertEquals("Disabled for demonstration.", disablingUiModel.getReason());
@@ -113,9 +113,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_whenEnabled_shouldProvideActionMetadata() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         val managedAction = actionInteraction.getManagedAction().get(); // should not throw
         val actionMeta = managedAction.getAction();
@@ -126,9 +126,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test    
     void mixinActionInteraction_whenDisabled_shouldProvideActionMetadata() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgDisabled")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgDisabled", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
         
         assertFalse(actionInteraction.getManagedAction().isPresent()); // since usability should be vetoed
         assertTrue(actionInteraction.getMetamodel().isPresent()); // but should always provide access to metamodel
@@ -140,9 +140,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test
     void actionInteraction_whenEnabled_shouldAllowInvocation() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "noArgEnabled")
-        .checkVisibility(Where.OBJECT_FORMS)
-        .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "noArgEnabled", Where.OBJECT_FORMS)
+        .checkVisibility()
+        .checkUsability();
         
         val pendingArgs = actionInteraction.startParameterNegotiation().get();
         val resultOrVeto = actionInteraction.invokeWith(pendingArgs);
@@ -153,14 +153,14 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test
     void actionInteraction_whenDisabled_shouldVetoInvocation() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "noArgDisabled")
-        .checkVisibility(Where.OBJECT_FORMS)
-        .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "noArgDisabled", Where.OBJECT_FORMS)
+        .checkVisibility()
+        .checkUsability();
         
         assertFalse(actionInteraction.startParameterNegotiation().isPresent());
 
         // even though when assembling valid parameters ...
-        val pendingArgs = startActionInteractionOn(InteractionDemo.class, "noArgDisabled")
+        val pendingArgs = startActionInteractionOn(InteractionDemo.class, "noArgDisabled", Where.OBJECT_FORMS)
                 .startParameterNegotiation().get();
         
         // we should not be able to invoke the action
@@ -172,9 +172,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test
     void actionInteraction_withParams_shouldProduceCorrectResult() throws Throwable {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled")
-        .checkVisibility(Where.OBJECT_FORMS)
-        .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+        .checkVisibility()
+        .checkUsability();
         
         val params = Can.of(objectManager.adapt(12), objectManager.adapt(34));
         
@@ -190,9 +190,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test
     void actionInteraction_withTooManyParams_shouldIgnoreOverflow() throws Throwable {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled")
-        .checkVisibility(Where.OBJECT_FORMS)
-        .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+        .checkVisibility()
+        .checkUsability();
         
         val params = Can.of(objectManager.adapt(12), objectManager.adapt(34), objectManager.adapt(99));
         
@@ -208,9 +208,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test
     void actionInteraction_withTooLittleParams_shouldIgnoreUnderflow() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled")
-        .checkVisibility(Where.OBJECT_FORMS)
-        .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+        .checkVisibility()
+        .checkUsability();
         
         val params = Can.of(objectManager.adapt(12));
         
@@ -227,9 +227,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_shouldProvideParameterDefaults() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         val managedAction = actionInteraction.getManagedAction().get(); // should not throw
         val pendingArgs = managedAction.getInteractionHead().defaults();
@@ -246,9 +246,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_whenHavingChoices_shouldProvideProperParameterDefaults() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "multiInt")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "multiInt", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         val managedAction = actionInteraction.getManagedAction().get(); // should not throw
         val pendingArgs = managedAction.getInteractionHead().defaults();
@@ -282,9 +282,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_whenHavingEnumChoices_shouldProvideProperParameterDefaults() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "multiEnum")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "multiEnum", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         val managedAction = actionInteraction.getManagedAction().get(); // should not throw
         val pendingArgs = managedAction.getInteractionHead().defaults();
@@ -318,9 +318,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_shouldProvideChoices() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         assertTrue(actionInteraction.getManagedAction().isPresent(), "action is expected to be usable");
 
@@ -341,9 +341,9 @@ class ActionInteractionTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_shouldProvideParameterBinding() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         assertTrue(actionInteraction.getManagedAction().isPresent(), "action is expected to be usable");
         
diff --git a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/InteractionTestAbstract.java b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/InteractionTestAbstract.java
index e9e05d9..dc67adb 100644
--- a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/InteractionTestAbstract.java
+++ b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/InteractionTestAbstract.java
@@ -50,10 +50,10 @@ abstract class InteractionTestAbstract extends IsisIntegrationTestAbstract {
 //        new javafx.embed.swing.JFXPanel(); // Initializes the JavaFx Platform
 //    }
 
-    protected ActionInteraction startActionInteractionOn(Class<?> type, String actionId) {
+    protected ActionInteraction startActionInteractionOn(Class<?> type, String actionId, Where where) {
         val viewModel = factoryService.viewModel(type);
         val managedObject = objectManager.adapt(viewModel);
-        return ActionInteraction.start(managedObject, actionId);
+        return ActionInteraction.start(managedObject, actionId, where);
     }
     
     protected PropertyInteraction startPropertyInteractionOn(Class<?> type, String propertyId, Where where) {
@@ -62,10 +62,10 @@ abstract class InteractionTestAbstract extends IsisIntegrationTestAbstract {
         return PropertyInteraction.start(managedObject, propertyId, where);
     }
     
-    protected CollectionInteraction startCollectionInteractionOn(Class<?> type, String collectionId) {
+    protected CollectionInteraction startCollectionInteractionOn(Class<?> type, String collectionId, Where where) {
         val viewModel = factoryService.viewModel(type);
         val managedObject = objectManager.adapt(viewModel);
-        return CollectionInteraction.start(managedObject, collectionId);
+        return CollectionInteraction.start(managedObject, collectionId, where);
     }
 
     
diff --git a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/NewParameterModelTest.java b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/NewParameterModelTest.java
index f790950..dcd02f3 100644
--- a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/NewParameterModelTest.java
+++ b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/NewParameterModelTest.java
@@ -76,7 +76,7 @@ class NewParameterModelTest extends InteractionTestAbstract {
     @Test
     void paramAnnotations_whenNpm_shouldBeRecognized() {
 
-        val param0Metamodel = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
+        val param0Metamodel = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
                 .getMetamodel().get().getParameters().getElseFail(0);
         
         // as with first param's @Parameter(maxLength = 2)
@@ -95,9 +95,9 @@ class NewParameterModelTest extends InteractionTestAbstract {
     @Test
     void actionInteraction_withParams_shouldProduceCorrectResult() throws Throwable {
 
-        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
-        .checkVisibility(Where.OBJECT_FORMS)
-        .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+        .checkVisibility()
+        .checkUsability();
         
         val params = Can.of(objectManager.adapt(12), objectManager.adapt(34));
         
@@ -113,9 +113,9 @@ class NewParameterModelTest extends InteractionTestAbstract {
     @Test
     void actionInteraction_withTooManyParams_shouldIgnoreOverflow() throws Throwable {
 
-        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
-        .checkVisibility(Where.OBJECT_FORMS)
-        .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+        .checkVisibility()
+        .checkUsability();
         
         val params =  Can.of(objectManager.adapt(12), objectManager.adapt(34), objectManager.adapt(99));
         
@@ -131,9 +131,9 @@ class NewParameterModelTest extends InteractionTestAbstract {
     @Test
     void actionInteraction_withTooLittleParams_shouldIgnoreUnderflow() throws Throwable {
 
-        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
-        .checkVisibility(Where.OBJECT_FORMS)
-        .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+        .checkVisibility()
+        .checkUsability();
         
         val params = Can.<ManagedObject>of();
         
@@ -149,9 +149,9 @@ class NewParameterModelTest extends InteractionTestAbstract {
     @Test
     void actionInteraction_shouldProvideParameterDefaults() {
 
-        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         val managedAction = actionInteraction.getManagedAction().get(); // should not throw
         val pendingArgs = managedAction.getInteractionHead().defaults();
@@ -169,9 +169,9 @@ class NewParameterModelTest extends InteractionTestAbstract {
     @Test 
     void actionInteraction_shouldProvideChoices() {
 
-        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionNpmDemo.class, "biArgEnabled", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         assertTrue(actionInteraction.getManagedAction().isPresent(), "action is expected to be usable");
 
diff --git a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/PropertyInteractionTest.java b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/PropertyInteractionTest.java
index 65b8879..0b0e0da 100644
--- a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/PropertyInteractionTest.java
+++ b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/PropertyInteractionTest.java
@@ -61,8 +61,8 @@ class PropertyInteractionTest extends InteractionTestAbstract {
         val managedProperty = startPropertyInteractionOn(InteractionDemo.class, "stringMultiline", Where.OBJECT_FORMS)
                 .getManagedProperty().get(); // should not throw  
 
-        assertFalse(managedProperty.checkVisibility(Where.OBJECT_FORMS).isPresent()); // is visible
-        assertFalse(managedProperty.checkUsability(Where.OBJECT_FORMS).isPresent()); // can edit
+        assertFalse(managedProperty.checkVisibility().isPresent()); // is visible
+        assertFalse(managedProperty.checkUsability().isPresent()); // can edit
     }
     
     @Test 
@@ -72,10 +72,10 @@ class PropertyInteractionTest extends InteractionTestAbstract {
                 .getManagedProperty().get(); // should not throw  
 
 
-        assertFalse(managedProperty.checkVisibility(Where.OBJECT_FORMS).isPresent()); // is visible
+        assertFalse(managedProperty.checkVisibility().isPresent()); // is visible
 
         // verify we cannot edit
-        val veto = managedProperty.checkUsability(Where.OBJECT_FORMS).get(); // should not throw
+        val veto = managedProperty.checkUsability().get(); // should not throw
         assertNotNull(veto);
 
         assertEquals("Disabled for demonstration.", veto.getReason());
diff --git a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/ScalarParamNegotiationTest.java b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/ScalarParamNegotiationTest.java
index ad74c6c..bd9c5e1 100644
--- a/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/ScalarParamNegotiationTest.java
+++ b/examples/smoketests/stable/src/test/java/org/apache/isis/testdomain/interact/ScalarParamNegotiationTest.java
@@ -79,9 +79,9 @@ class ScalarParamNegotiationTest extends InteractionTestAbstract {
     @BeforeEach
     void setUpSimulatedUi() {
 
-        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "negotiate")
-                .checkVisibility(Where.OBJECT_FORMS)
-                .checkUsability(Where.OBJECT_FORMS);
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "negotiate", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
 
         assertTrue(actionInteraction.getManagedAction().isPresent(), "action is expected to be usable");
         
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
index 93d3740..4253f7e 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/components/object/ObjectViewFx.java
@@ -163,12 +163,12 @@ public class ObjectViewFx extends VBox {
             protected void onAction(Pane container, ActionLayoutData actionData) {
                 
                 val owner = objectInteractor.getManagedObject();
-                val interaction = ActionInteraction.start(owner, actionData.getId());
-                interaction.checkVisibility(Where.OBJECT_FORMS)
+                val interaction = ActionInteraction.start(owner, actionData.getId(), Where.OBJECT_FORMS);
+                interaction.checkVisibility()
                 .getManagedAction()
                 .ifPresent(managedAction -> {
                     
-                    interaction.checkUsability(Where.OBJECT_FORMS);
+                    interaction.checkUsability();
                     
                     val uiButton = _fx.add(container, 
                             uiComponentFactory.buttonFor(
@@ -188,11 +188,11 @@ public class ObjectViewFx extends VBox {
                 val formPane = (FormPane) container;
                 
                 val interaction = PropertyInteraction.start(owner, propertyData.getId(), Where.OBJECT_FORMS);
-                interaction.checkVisibility(Where.OBJECT_FORMS)
+                interaction.checkVisibility()
                 .getManagedProperty()
                 .ifPresent(managedProperty -> {
                     
-                    interaction.checkUsability(Where.OBJECT_FORMS);
+                    interaction.checkUsability();
                     
                     val request = UiComponentFactory.ComponentRequest.of(
                             managedProperty,
@@ -220,8 +220,8 @@ public class ObjectViewFx extends VBox {
                 
                 val owner = objectInteractor.getManagedObject();
                 
-                CollectionInteraction.start(owner, collectionData.getId())
-                .checkVisibility(Where.OBJECT_FORMS)
+                CollectionInteraction.start(owner, collectionData.getId(), Where.OBJECT_FORMS)
+                .checkVisibility()
                 .getManagedCollection()
                 .ifPresent(managedCollection -> {
                     
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
index 5830352..d6e5e6c 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/components/object/ObjectViewVaa.java
@@ -180,12 +180,12 @@ public class ObjectViewVaa extends VerticalLayout {
             protected void onAction(HasComponents container, ActionLayoutData actionData) {
                 
                 val owner = objectInteractor.getManagedObject();
-                val interaction = ActionInteraction.start(owner, actionData.getId());
-                interaction.checkVisibility(Where.OBJECT_FORMS)
+                val interaction = ActionInteraction.start(owner, actionData.getId(), Where.OBJECT_FORMS);
+                interaction.checkVisibility()
                 .getManagedAction()
                 .ifPresent(managedAction -> {
                     
-                    interaction.checkUsability(Where.OBJECT_FORMS);
+                    interaction.checkUsability();
                     
                     val uiButton = _vaa.add(container, 
                             uiComponentFactory.buttonFor(
@@ -204,11 +204,11 @@ public class ObjectViewVaa extends VerticalLayout {
                 val owner = objectInteractor.getManagedObject();
                 
                 val interaction = PropertyInteraction.start(owner, propertyData.getId(), Where.OBJECT_FORMS);
-                interaction.checkVisibility(Where.OBJECT_FORMS)
+                interaction.checkVisibility()
                 .getManagedProperty()
                 .ifPresent(managedProperty -> {
                     
-                    interaction.checkUsability(Where.OBJECT_FORMS);
+                    interaction.checkUsability();
                     
                     val uiProperty = _vaa.add(container, 
                             uiComponentFactory.componentFor(
@@ -231,8 +231,8 @@ public class ObjectViewVaa extends VerticalLayout {
                 
                 val owner = objectInteractor.getManagedObject();
                 
-                CollectionInteraction.start(owner, collectionData.getId())
-                .checkVisibility(Where.OBJECT_FORMS)
+                CollectionInteraction.start(owner, collectionData.getId(), Where.OBJECT_FORMS)
+                .checkVisibility()
                 .getManagedCollection()
                 .ifPresent(managedCollection -> {
                     _vaa.add(container, new H3(managedCollection.getName()));
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/UiComponentFactory.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/UiComponentFactory.java
index 225d72d..af1e2f4 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/UiComponentFactory.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/binding/UiComponentFactory.java
@@ -145,7 +145,7 @@ public interface UiComponentFactory<B, C> {
         }
 
         public boolean isReadOnly() {
-            return ((ManagedProperty)managedFeature).checkUsability(where).isPresent();
+            return ((ManagedProperty)managedFeature).checkUsability().isPresent();
         }
 
         @Deprecated
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel_buildMenuItems.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel_buildMenuItems.java
index dd5dab3..064c387 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel_buildMenuItems.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/menu/MenuUiModel_buildMenuItems.java
@@ -64,14 +64,15 @@ final class MenuUiModel_buildMenuItems {
                         continue;
                     }
 
-                    val managedAction = ManagedAction.lookupAction(serviceAdapter, actionLayoutData.getId())
+                    val managedAction = ManagedAction
+                            .lookupAction(serviceAdapter, actionLayoutData.getId(), Where.EVERYWHERE)
                             .orElse(null);
                     if (managedAction == null) {
                         log.warn("No such action {}", actionLayoutData.getId());
                         continue;
                     }
                     
-                    val visibilityVeto = managedAction.checkVisibility(Where.EVERYWHERE);
+                    val visibilityVeto = managedAction.checkVisibility();
                     if (visibilityVeto.isPresent()) {
                         continue;
                     }
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index 9417ac1..00bb6cb 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -365,7 +365,9 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             final ObjectCollectionReprRenderer renderer =
                     new ObjectCollectionReprRenderer(getResourceContext(), linkFollowerForColl, collection.getId(), collectionRepresentation);
 
-            renderer.with(ManagedCollection.of(objectAdapter, collection)).usingLinkTo(linkToBuilder);
+            val where = resourceContext.getWhere();
+            
+            renderer.with(ManagedCollection.of(objectAdapter, collection, where)).usingLinkTo(linkToBuilder);
             if(mode.isEventSerialization()) {
                 renderer.asEventSerialization();
             }
@@ -390,7 +392,9 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
                     new ObjectActionReprRenderer(getResourceContext(), linkFollowSpecs, action.getId(), 
                             JsonRepresentation.newMap());
 
-            renderer.with(ManagedAction.of(objectAdapter, action)).usingLinkTo(linkToBuilder);
+            val where = resourceContext.getWhere();
+            
+            renderer.with(ManagedAction.of(objectAdapter, action, where)).usingLinkTo(linkToBuilder);
             members.mapPut(action.getId(), renderer.render());
         });
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
index cfb1687..f8d5715 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
@@ -78,8 +78,9 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
      */
     @Override
     protected void followDetailsLink(final JsonRepresentation detailsLink) {
+        val where = resourceContext.getWhere();
         final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(getResourceContext(), getLinkFollowSpecs(), null, JsonRepresentation.newMap());
-        renderer.with(ManagedAction.of(objectAdapter, objectMember)).usingLinkTo(linkTo).asFollowed();
+        renderer.with(ManagedAction.of(objectAdapter, objectMember, where)).usingLinkTo(linkTo).asFollowed();
         detailsLink.mapPut("value", renderer.render());
     }
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
index e0c5de0..1fb8c28 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
@@ -138,10 +138,11 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
      */
     @Override
     protected void followDetailsLink(final JsonRepresentation detailsLink) {
+        val where = resourceContext.getWhere();
         final JsonRepresentation representation = JsonRepresentation.newMap();
         final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getResourceContext(), getLinkFollowSpecs(), null,
                 representation);
-        renderer.with(ManagedCollection.of(objectAdapter, objectMember)).asFollowed();
+        renderer.with(ManagedCollection.of(objectAdapter, objectMember, where)).asFollowed();
         detailsLink.mapPut("value", renderer.render());
     }
 
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java
index fdb9ca9..b1bac9f 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java
@@ -323,9 +323,8 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
             if (!visibilityConsent.isAllowed()) {
                 return;
             }
-
-            val managedCollection = ManagedCollection.of(owner, collection);
             
+            val managedCollection = ManagedCollection.of(owner, collection, where);
 
             appendCollectionTo(resourceContext, managedCollection, collectionRepresentation, suppression);
         });
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
index 07f67cc..ceac803 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
@@ -453,8 +453,8 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         val objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         
         PropertyInteraction.start(objectAdapter, propertyId, resourceContext.getWhere())
-        .checkVisibility(resourceContext.getWhere())
-        .checkUsability(resourceContext.getWhere(), AccessIntent.MUTATE)
+        .checkVisibility()
+        .checkUsability(AccessIntent.MUTATE)
         .modifyProperty(property->{
             val proposedNewValue = new JsonParserHelper(resourceContext, property.getSpecification())
                     .parseAsMapWithSingleValue(Util.asStringUtf8(body));
@@ -485,8 +485,8 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         val objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         
         PropertyInteraction.start(objectAdapter, propertyId, resourceContext.getWhere())
-        .checkVisibility(resourceContext.getWhere())
-        .checkUsability(resourceContext.getWhere(), AccessIntent.MUTATE)
+        .checkVisibility()
+        .checkUsability(AccessIntent.MUTATE)
         .modifyProperty(property->null)
         .validateElseThrow(InteractionFailureHandler::onFailure);
 
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java
index 37bc759..ef14dbb 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java
@@ -205,9 +205,9 @@ class DomainResourceHelper {
         val where = resourceContext.getWhere();
         
         // lombok issue, needs explicit cast here 
-        val actionInteraction = (ActionInteraction) ActionInteraction.start(objectAdapter, actionId)
-        .checkVisibility(where)
-        .checkUsability(where, intent)
+        val actionInteraction = (ActionInteraction) ActionInteraction.start(objectAdapter, actionId, where)
+        .checkVisibility()
+        .checkUsability(intent)
         .checkSemanticConstraint(semanticConstraint);
 
         val pendingArgs = actionInteraction.startParameterNegotiation().orElse(null);
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectAdapterAccessHelper.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectAdapterAccessHelper.java
index 2f03f5d..c5040c2 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectAdapterAccessHelper.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectAdapterAccessHelper.java
@@ -57,9 +57,9 @@ public class ObjectAdapterAccessHelper {
             @NonNull final SemanticConstraint semanticConstraint) {
         
         return ActionInteraction
-                .start(managedObject, actionId)
-                .checkVisibility(where)
-                .checkUsability(where, AccessIntent.MUTATE)
+                .start(managedObject, actionId, where)
+                .checkVisibility()
+                .checkUsability(AccessIntent.MUTATE)
                 .checkSemanticConstraint(semanticConstraint)
                 .getManagedActionElseThrow(InteractionFailureHandler::onFailure);
     }
@@ -70,8 +70,8 @@ public class ObjectAdapterAccessHelper {
         
         return PropertyInteraction
                 .start(managedObject, propertyId, where)
-                .checkVisibility(where)
-                .checkUsability(where, intent)
+                .checkVisibility()
+                .checkUsability(intent)
                 .getManagedPropertyElseThrow(InteractionFailureHandler::onFailure);
         
     }
@@ -81,9 +81,9 @@ public class ObjectAdapterAccessHelper {
             @NonNull final AccessIntent intent) {
 
         return CollectionInteraction
-                .start(managedObject, collectionId)
-                .checkVisibility(where)
-                .checkUsability(where, intent)
+                .start(managedObject, collectionId, where)
+                .checkVisibility()
+                .checkUsability(intent)
                 .getManagedCollectionElseThrow(InteractionFailureHandler::onFailure);
 
     }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 97a97d9..fa35355 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -23,7 +23,6 @@ import java.util.List;
 import java.util.Optional;
 
 import org.apache.isis.applib.annotation.PromptStyle;
-import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.commons.collections.Can;
 import org.apache.isis.core.commons.internal.base._NullSafe;
 import org.apache.isis.core.commons.internal.collections._Lists;
@@ -199,19 +198,9 @@ implements HasRenderingHints, ScalarUiModel, LinksProvider, FormExecutorContext
         setObject(adapter);
     }
 
-    public boolean whetherHidden() {
-        final Where where = getRenderingHint().asWhere();
-        return whetherHidden(where);
-    }
-
-    protected abstract boolean whetherHidden(Where where);
-
-    public String whetherDisabled() {
-        final Where where = getRenderingHint().asWhere();
-        return whetherDisabled(where);
-    }
+    public abstract boolean whetherHidden();
 
-    protected abstract String whetherDisabled(Where where);
+    public abstract String whetherDisabled();
 
     public abstract String validate(ManagedObject proposedAdapter);
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
index bf701df..f76fee9 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
@@ -74,21 +74,11 @@ implements ParameterUiModel {
     public ManagedAction getManagedAction() {
         if(managedAction==null) {
             val actionOwner = getParentUiModel().load();
-            managedAction = ManagedAction.of(actionOwner, getMetaModel().getAction()); 
+            // TODO 'where' is not used until whetherDisabled and whetherHidden are implemented
+            managedAction = ManagedAction.of(actionOwner, getMetaModel().getAction(), Where.ANYWHERE);  
         }
         return managedAction;  
     }
-    
-//    private transient ManagedParameter managedParameter;
-//    
-//    public ManagedParameter getManagedParameter() {
-//        if(managedParameter==null) {
-//            val parameter = getMetaModel();
-//            managedParameter = getManagedAction().managedParameter(parameter.getNumber()); 
-//        }
-//        return managedParameter;  
-//    } 
-    
 
     @Override
     public ObjectSpecification getScalarTypeSpec() {
@@ -106,13 +96,13 @@ implements ParameterUiModel {
     }
 
     @Override
-    public String whetherDisabled(Where where) {
+    public String whetherDisabled() {
         // always enabled TODO this is not true
         return null;
     }
 
     @Override
-    public boolean whetherHidden(Where where) {
+    public boolean whetherHidden() {
         // always enabled TODO this is not true
         return false;
     }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
index f77293a..dc2ae69 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarPropertyModel.java
@@ -104,16 +104,16 @@ implements PropertyUiModel {
     }
 
     @Override
-    public boolean whetherHidden(final Where where) {
+    public boolean whetherHidden() {
         return getManagedProperty()
-                .checkVisibility(where)
+                .checkVisibility()
                 .isPresent();
     }
 
     @Override
-    public String whetherDisabled(final Where where) {
+    public String whetherDisabled() {
         return getManagedProperty()
-                .checkUsability(where)
+                .checkUsability()
                 .map(InteractionVeto::getReason)
                 .orElse(null);
     }