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

danhaywood pushed a commit to branch CAUSEWAY-3676
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 73e4367d0135e812100b1714966dce718594dd19
Author: danhaywood <[email protected]>
AuthorDate: Thu Feb 22 21:17:12 2024 +0000

    CAUSEWAY-3676: working towards simplifying Holder interfaces
---
 .../model/domain/rich/query/GqlvAction.java        | 17 +++++-----
 .../model/domain/rich/query/GqlvActionInvoke.java  | 29 +++-------------
 .../domain/rich/query/GqlvActionInvokeArgs.java    | 19 ++---------
 .../domain/rich/query/GqlvActionInvokeArgsArg.java | 21 ++----------
 .../domain/rich/query/GqlvActionInvokeResult.java  | 31 ++---------------
 .../model/domain/rich/query/GqlvActionParams.java  | 25 ++------------
 .../domain/rich/query/GqlvActionParamsParam.java   | 39 ++++++----------------
 .../query/GqlvActionParamsParamAutoComplete.java   | 31 ++---------------
 .../rich/query/GqlvActionParamsParamChoices.java   | 31 ++---------------
 .../rich/query/GqlvActionParamsParamDatatype.java  | 12 ++-----
 .../rich/query/GqlvActionParamsParamDefault.java   | 32 ++----------------
 .../rich/query/GqlvActionParamsParamDisabled.java  | 26 ++-------------
 .../rich/query/GqlvActionParamsParamHidden.java    | 28 ++--------------
 .../rich/query/GqlvActionParamsParamValidate.java  | 25 ++------------
 .../domain/rich/query/GqlvActionValidity.java      | 19 ++---------
 .../domain/rich/query/GqlvAssociationDatatype.java | 12 ++-----
 .../domain/rich/query/GqlvAssociationGet.java      | 15 ++-------
 .../model/domain/rich/query/GqlvCollection.java    | 12 +++----
 .../domain/rich/query/GqlvCollectionDatatype.java  |  2 +-
 .../model/domain/rich/query/GqlvCollectionGet.java |  5 ++-
 .../domain/rich/query/GqlvMemberDisabled.java      | 12 ++-----
 .../model/domain/rich/query/GqlvMemberHidden.java  | 12 ++-----
 .../model/domain/rich/query/GqlvMemberHolder.java  | 12 +++++++
 .../model/domain/rich/query/GqlvProperty.java      | 25 +++++++-------
 .../rich/query/GqlvPropertyAutoComplete.java       | 13 ++------
 .../domain/rich/query/GqlvPropertyChoices.java     | 16 ++-------
 .../domain/rich/query/GqlvPropertyDatatype.java    |  2 +-
 .../model/domain/rich/query/GqlvPropertyGet.java   | 12 ++-----
 .../domain/rich/query/GqlvPropertyGetBlob.java     | 15 ++-------
 .../rich/query/GqlvPropertyGetBlobAbstract.java    | 10 ++----
 .../rich/query/GqlvPropertyGetBlobBytes.java       |  2 +-
 .../rich/query/GqlvPropertyGetBlobMimeType.java    |  2 +-
 .../domain/rich/query/GqlvPropertyGetBlobName.java |  2 +-
 .../domain/rich/query/GqlvPropertyGetClob.java     | 15 ++-------
 .../rich/query/GqlvPropertyGetClobAbstract.java    | 10 ++----
 .../rich/query/GqlvPropertyGetClobChars.java       |  2 +-
 .../rich/query/GqlvPropertyGetClobMimeType.java    |  2 +-
 .../domain/rich/query/GqlvPropertyGetClobName.java |  2 +-
 .../model/domain/rich/query/GqlvPropertySet.java   | 16 ++-------
 .../domain/rich/query/GqlvPropertyValidate.java    | 16 ++-------
 .../domain/rich/query/HolderActionInvoke.java      | 31 +++++++++++++++++
 .../domain/rich/query/HolderActionInvokeArgs.java  | 21 ++++++++++++
 .../rich/query/HolderActionInvokeArgsArg.java      | 21 ++++++++++++
 .../rich/query/HolderActionInvokeResult.java       | 30 +++++++++++++++++
 .../domain/rich/query/HolderActionParams.java      | 30 +++++++++++++++++
 .../domain/rich/query/HolderActionParamsParam.java | 30 +++++++++++++++++
 .../query/HolderActionParamsParamAutoComplete.java | 33 ++++++++++++++++++
 .../rich/query/HolderActionParamsParamChoices.java | 33 ++++++++++++++++++
 .../query/HolderActionParamsParamDatatype.java     |  9 +++++
 .../rich/query/HolderActionParamsParamDefault.java | 34 +++++++++++++++++++
 .../query/HolderActionParamsParamDisabled.java     | 29 ++++++++++++++++
 .../rich/query/HolderActionParamsParamHidden.java  | 32 ++++++++++++++++++
 .../query/HolderActionParamsParamValidate.java     | 28 ++++++++++++++++
 .../domain/rich/query/HolderActionValidity.java    | 21 ++++++++++++
 .../rich/query/HolderAssociationDatatype.java      | 10 ++++++
 .../domain/rich/query/HolderAssociationGet.java    | 13 ++++++++
 .../domain/rich/query/HolderGetPropertyBlob.java   | 13 ++++++++
 .../rich/query/HolderPropertyAutoComplete.java     | 12 +++++++
 .../domain/rich/query/HolderPropertyChoices.java   | 17 ++++++++++
 .../model/domain/rich/query/HolderPropertyGet.java | 12 +++++++
 .../rich/query/HolderPropertyGetBlobAbstract.java  |  8 +++++
 .../domain/rich/query/HolderPropertyGetClob.java   | 13 ++++++++
 .../rich/query/HolderPropertyGetClobAbstract.java  |  8 +++++
 .../model/domain/rich/query/HolderPropertySet.java | 17 ++++++++++
 .../domain/rich/query/HolderPropertyValidate.java  | 17 ++++++++++
 65 files changed, 638 insertions(+), 513 deletions(-)

diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAction.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAction.java
index fa17c210d1..2c45239fb3 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAction.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAction.java
@@ -40,7 +40,6 @@ import 
org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.Parent;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
-import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GvqlActionUtils;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
@@ -50,13 +49,13 @@ import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 public class GqlvAction
-        extends GqlvMember<ObjectAction, GqlvMemberHolder>
-        implements GqlvMemberHidden.Holder<ObjectAction>,
-                   GqlvMemberDisabled.Holder<ObjectAction>,
-                   GqlvActionInvoke.Holder,
-                   GqlvActionValidity.Holder,
-                   GqlvActionParams.Holder,
-                   Parent {
+        extends GqlvMember<ObjectAction, 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder>
+        implements
+        GqlvMemberHolder<ObjectAction>,
+        HolderActionInvoke,
+        HolderActionValidity,
+        HolderActionParams,
+                   Parent, 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider,
 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider<ObjectAction>,
 org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider {
 
     private final GqlvMemberHidden<ObjectAction> hidden;
     private final GqlvMemberDisabled<ObjectAction> disabled;
@@ -71,7 +70,7 @@ public class GqlvAction
     private final GqlvActionParams params;
 
     public GqlvAction(
-            final GqlvMemberHolder holder,
+            final 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder 
holder,
             final ObjectAction objectAction,
             final Context context) {
         super(holder, objectAction, 
TypeNames.actionTypeNameFor(holder.getObjectSpecification(), objectAction, 
holder.getSchemaType()), context);
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvoke.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvoke.java
index 945beb038e..832501fef3 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvoke.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvoke.java
@@ -34,9 +34,6 @@ import 
org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
@@ -45,15 +42,15 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvActionInvoke
         extends GqlvAbstractCustom
-        implements GqlvActionInvokeResult.Holder,
-                   GqlvActionInvokeArgs.Holder {
+        implements HolderActionInvokeResult,
+        HolderActionInvokeArgs {
 
-    private final Holder holder;
+    private final HolderActionInvoke holder;
     private final GqlvActionInvokeResult result;
     private final GqlvActionInvokeArgs args;
 
     public GqlvActionInvoke(
-            final Holder holder,
+            final HolderActionInvoke holder,
             final Context context) {
         
super(TypeNames.actionInvokeTypeNameFor(holder.getObjectSpecification(), 
holder.getObjectAction(), holder.getSchemaType()), context);
 
@@ -141,24 +138,6 @@ public class GqlvActionInvoke
         return holder.getObjectSpecification();
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    SchemaTypeProvider {
-
-        void addGqlArguments(
-                final ObjectAction objectAction,
-                final GraphQLFieldDefinition.Builder fieldBuilder,
-                final TypeMapper.InputContext inputContext,
-                final int parameterCount);
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment dataFetchingEnvironment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-
-    }
-
     @Override
     public SchemaType getSchemaType() {
         return holder.getSchemaType();
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeArgs.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeArgs.java
index a940663212..566ede3835 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeArgs.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeArgs.java
@@ -35,9 +35,6 @@ import 
org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.Getter;
 import lombok.val;
@@ -46,14 +43,14 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvActionInvokeArgs
         extends GqlvAbstractCustom
-        implements GqlvActionInvokeArgsArg.Holder {
+        implements HolderActionInvokeArgsArg {
 
-    @Getter private final Holder holder;
+    @Getter private final HolderActionInvokeArgs holder;
 
     private final List<GqlvActionInvokeArgsArg> args = new ArrayList<>();
 
     public GqlvActionInvokeArgs(
-            final Holder holder,
+            final HolderActionInvokeArgs holder,
             final Context context) {
         super(TypeNames.actionArgsTypeNameFor(holder.getObjectSpecification(), 
holder.getObjectAction(), holder.getSchemaType()), context);
         this.holder = holder;
@@ -110,14 +107,4 @@ public class GqlvActionInvokeArgs
         return holder.getSchemaType();
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    SchemaTypeProvider {
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment dataFetchingEnvironment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeArgsArg.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeArgsArg.java
index 7436d2f608..66bd91e902 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeArgsArg.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeArgsArg.java
@@ -23,18 +23,11 @@ import graphql.schema.GraphQLList;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
-import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
-import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.Getter;
 import lombok.val;
@@ -44,12 +37,12 @@ import lombok.extern.log4j.Log4j2;
 public class GqlvActionInvokeArgsArg
         extends GqlvAbstract {
 
-    @Getter private final Holder holder;
+    @Getter private final HolderActionInvokeArgsArg holder;
     @Getter private final ObjectActionParameter objectActionParameter;
     @Getter private final int paramNum;
 
     public GqlvActionInvokeArgsArg(
-            final Holder holder,
+            final HolderActionInvokeArgsArg holder,
             final ObjectActionParameter objectActionParameter,
             final Context context,
             final int paramNum) {
@@ -85,14 +78,4 @@ public class GqlvActionInvokeArgsArg
     }
 
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    SchemaTypeProvider {
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment dataFetchingEnvironment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeResult.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeResult.java
index dc2963fb12..fdac25c5c1 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeResult.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionInvokeResult.java
@@ -19,7 +19,6 @@
 package org.apache.causeway.viewer.graphql.model.domain.rich.query;
 
 import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLList;
 import graphql.schema.GraphQLOutputType;
 import graphql.schema.GraphQLType;
@@ -29,15 +28,9 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
-import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
-
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
-
 import org.springframework.lang.Nullable;
 
 import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
-import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -46,9 +39,6 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.exceptions.DisabledException;
 import org.apache.causeway.viewer.graphql.model.exceptions.HiddenException;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
@@ -56,10 +46,10 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvActionInvokeResult extends GqlvAbstract {
 
-    private final GqlvActionInvokeResult.Holder holder;
+    private final HolderActionInvokeResult holder;
 
     public GqlvActionInvokeResult(
-            final GqlvActionInvokeResult.Holder holder,
+            final HolderActionInvokeResult holder,
             final Context context) {
         super(context);
 
@@ -147,21 +137,4 @@ public class GqlvActionInvokeResult extends GqlvAbstract {
     }
 
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    SchemaTypeProvider {
-
-        void addGqlArguments(
-                final ObjectAction objectAction,
-                final GraphQLFieldDefinition.Builder fieldBuilder,
-                final TypeMapper.InputContext inputContext,
-                final int parameterCount);
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment dataFetchingEnvironment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-    }
-
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParams.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParams.java
index f3b4c79eba..e058e28184 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParams.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParams.java
@@ -36,9 +36,6 @@ import 
org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.Getter;
@@ -48,14 +45,14 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvActionParams
         extends GqlvAbstractCustom
-        implements GqlvActionParamsParam.Holder {
+        implements HolderActionParamsParam {
 
-    @Getter private final Holder holder;
+    @Getter private final HolderActionParams holder;
 
     private final List<GqlvActionParamsParam> params = new ArrayList<>();
 
     public GqlvActionParams(
-            final Holder holder,
+            final HolderActionParams holder,
             final Context context) {
         
super(TypeNames.actionParamsTypeNameFor(holder.getObjectSpecification(), 
holder.getObjectAction(), holder.getSchemaType()), context);
         this.holder = holder;
@@ -120,20 +117,4 @@ public class GqlvActionParams
         return holder.getSchemaType();
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    SchemaTypeProvider {
-
-        void addGqlArguments(
-                ObjectAction objectAction,
-                GraphQLFieldDefinition.Builder fieldBuilder,
-                TypeMapper.InputContext inputContext,
-                int paramNum);
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment dataFetchingEnvironment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParam.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParam.java
index 33249873cf..7581e0f62a 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParam.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParam.java
@@ -33,9 +33,6 @@ import 
org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.Getter;
@@ -44,15 +41,15 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvActionParamsParam
         extends GqlvAbstractCustom
-        implements GqlvActionParamsParamHidden.Holder,
-                   GqlvActionParamsParamDisabled.Holder,
-                   GqlvActionParamsParamChoices.Holder,
-                   GqlvActionParamsParamAutoComplete.Holder,
-                   GqlvActionParamsParamDefault.Holder,
-                   GqlvActionParamsParamValidate.Holder,
-                   GqlvActionParamsParamDatatype.Holder {
-
-    @Getter private final Holder holder;
+        implements HolderActionParamsParamHidden,
+        HolderActionParamsParamDisabled,
+        HolderActionParamsParamChoices,
+        HolderActionParamsParamAutoComplete,
+        HolderActionParamsParamDefault,
+        HolderActionParamsParamValidate,
+        HolderActionParamsParamDatatype {
+
+    @Getter private final HolderActionParamsParam holder;
     @Getter private final ObjectActionParameter objectActionParameter;
     @Getter private final int paramNum;
 
@@ -74,7 +71,7 @@ public class GqlvActionParamsParam
     private final GqlvActionParamsParamDatatype datatype;
 
     public GqlvActionParamsParam(
-            final Holder holder,
+            final HolderActionParamsParam holder,
             final ObjectActionParameter oap,
             final Context context,
             final int paramNum) {
@@ -182,20 +179,4 @@ public class GqlvActionParamsParam
         return holder.getSchemaType();
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    SchemaTypeProvider {
-
-        void addGqlArguments(
-                ObjectAction objectAction,
-                GraphQLFieldDefinition.Builder fieldBuilder,
-                TypeMapper.InputContext inputContext,
-                int paramNum);
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment dataFetchingEnvironment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamAutoComplete.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamAutoComplete.java
index e48569dbbd..a38c7c7ea7 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamAutoComplete.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamAutoComplete.java
@@ -24,29 +24,20 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
 
  import graphql.schema.DataFetchingEnvironment;
  import graphql.schema.GraphQLArgument;
- import graphql.schema.GraphQLFieldDefinition;
  import graphql.schema.GraphQLList;
 
  import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
  import static graphql.schema.GraphQLNonNull.nonNull;
 
  import org.apache.causeway.applib.annotation.Where;
- import org.apache.causeway.applib.services.bookmark.BookmarkService;
- import org.apache.causeway.commons.collections.Can;
  import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
  import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
  import 
org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
  import org.apache.causeway.core.metamodel.object.ManagedObject;
- import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
  import org.apache.causeway.viewer.graphql.model.context.Context;
  import org.apache.causeway.viewer.graphql.model.domain.Environment;
  import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
- import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
  import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
  import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
  import lombok.val;
@@ -57,10 +48,10 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
 
      private static final String SEARCH_PARAM_NAME = "search";
 
-     private final Holder holder;
+     private final HolderActionParamsParamAutoComplete holder;
 
      public GqlvActionParamsParamAutoComplete(
-             final Holder holder,
+             final HolderActionParamsParamAutoComplete holder,
              final Context context) {
          super(context);
          this.holder = holder;
@@ -107,22 +98,4 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
                     .collect(Collectors.toList());
      }
 
-     public interface Holder
-             extends ObjectSpecificationProvider,
-                     ObjectActionProvider,
-                     ObjectActionParameterProvider,
-                    SchemaTypeProvider {
-         GqlvActionParamsParam.Holder getHolder();
-
-         void addGqlArguments(
-                 ObjectAction objectAction,
-                 GraphQLFieldDefinition.Builder fieldBuilder,
-                 TypeMapper.InputContext inputContext,
-                 int paramNum);
-
-         Can<ManagedObject> argumentManagedObjectsFor(
-                 Environment environment,
-                 ObjectAction objectAction,
-                 BookmarkService bookmarkService);
-     }
  }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamChoices.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamChoices.java
index aa160e47f4..ff1a5b5c4d 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamChoices.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamChoices.java
@@ -23,28 +23,19 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
  import java.util.stream.Collectors;
 
  import graphql.schema.DataFetchingEnvironment;
- import graphql.schema.GraphQLFieldDefinition;
  import graphql.schema.GraphQLList;
 
  import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
  import org.apache.causeway.applib.annotation.Where;
- import org.apache.causeway.applib.services.bookmark.BookmarkService;
- import org.apache.causeway.commons.collections.Can;
  import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
  import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
  import 
org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
  import org.apache.causeway.core.metamodel.object.ManagedObject;
- import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
  import org.apache.causeway.viewer.graphql.model.context.Context;
  import org.apache.causeway.viewer.graphql.model.domain.Environment;
  import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
- import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
  import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
  import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
  import lombok.val;
@@ -53,10 +44,10 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
  @Log4j2
  public class GqlvActionParamsParamChoices extends GqlvAbstract {
 
-     private final Holder holder;
+     private final HolderActionParamsParamChoices holder;
 
      public GqlvActionParamsParamChoices(
-             final Holder holder,
+             final HolderActionParamsParamChoices holder,
              final Context context) {
          super(context);
          this.holder = holder;
@@ -98,22 +89,4 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
                     .collect(Collectors.toList());
      }
 
-     public interface Holder
-             extends ObjectSpecificationProvider,
-                     ObjectActionProvider,
-                     ObjectActionParameterProvider,
-                    SchemaTypeProvider {
-         GqlvActionParamsParam.Holder getHolder();
-
-         void addGqlArguments(
-                 ObjectAction objectAction,
-                 GraphQLFieldDefinition.Builder fieldBuilder,
-                 TypeMapper.InputContext inputContext,
-                 int paramNum);
-
-         Can<ManagedObject> argumentManagedObjectsFor(
-                 Environment environment,
-                 ObjectAction objectAction,
-                 BookmarkService bookmarkService);
-     }
  }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDatatype.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDatatype.java
index 8c0c25eb36..52e74b7565 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDatatype.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDatatype.java
@@ -25,19 +25,16 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
-import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.val;
 
 public class GqlvActionParamsParamDatatype extends GqlvAbstract {
 
-    private final Holder holder;
+    private final HolderActionParamsParamDatatype holder;
 
     public GqlvActionParamsParamDatatype(
-            final Holder holder,
+            final HolderActionParamsParamDatatype holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -54,9 +51,4 @@ public class GqlvActionParamsParamDatatype extends 
GqlvAbstract {
         return TypeNames.objectTypeNameFor(returnType, holder.getSchemaType());
     }
 
-    public interface Holder
-            extends ObjectActionParameterProvider,
-                    SchemaTypeProvider {
-    }
-
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDefault.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDefault.java
index d2a3ab2190..281b9e6070 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDefault.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDefault.java
@@ -21,26 +21,17 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
 import java.util.Collections;
 
 import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLFieldDefinition;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
-import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.interactions.managed.ManagedAction;
 import 
org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiationModel;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
-import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
@@ -48,10 +39,10 @@ import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 public class GqlvActionParamsParamDefault extends GqlvAbstract {
-    private final Holder holder;
+    private final HolderActionParamsParamDefault holder;
 
     public GqlvActionParamsParamDefault(
-            final Holder holder,
+            final HolderActionParamsParamDefault holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -85,23 +76,4 @@ public class GqlvActionParamsParamDefault extends 
GqlvAbstract {
         return defaultManagedObject.getPojo();
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    ObjectActionParameterProvider,
-                    SchemaTypeProvider {
-
-        GqlvActionParamsParam.Holder getHolder();
-
-        void addGqlArguments(
-                ObjectAction objectAction,
-                GraphQLFieldDefinition.Builder fieldBuilder,
-                TypeMapper.InputContext inputContext,
-                int paramNum);
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment environment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDisabled.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDisabled.java
index a2491b5675..fc3eccdeac 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDisabled.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamDisabled.java
@@ -19,23 +19,16 @@
 package org.apache.causeway.viewer.graphql.model.domain.rich.query;
 
 import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLOutputType;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
-import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
@@ -45,10 +38,10 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvActionParamsParamDisabled extends GqlvAbstract {
 
-    private final Holder holder;
+    private final HolderActionParamsParamDisabled holder;
 
     public GqlvActionParamsParamDisabled(
-            final Holder holder,
+            final HolderActionParamsParamDisabled holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -80,19 +73,4 @@ public class GqlvActionParamsParamDisabled extends 
GqlvAbstract {
         return usable.isVetoed() ? 
usable.getReasonAsString().orElse("Disabled") : null;
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    ObjectActionParameterProvider {
-        void addGqlArguments(
-                ObjectAction objectAction,
-                GraphQLFieldDefinition.Builder fieldBuilder,
-                TypeMapper.InputContext inputContext,
-                int i);
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment environment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamHidden.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamHidden.java
index 6acbe524c3..5219ef309a 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamHidden.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamHidden.java
@@ -23,19 +23,12 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
 
  import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
- import org.apache.causeway.applib.services.bookmark.BookmarkService;
- import org.apache.causeway.commons.collections.Can;
  import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
  import org.apache.causeway.core.metamodel.object.ManagedObject;
- import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
  import org.apache.causeway.viewer.graphql.model.context.Context;
  import org.apache.causeway.viewer.graphql.model.domain.Environment;
  import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
  import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
- import 
org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
  import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
  import lombok.val;
@@ -44,10 +37,10 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
 @Log4j2
 public class GqlvActionParamsParamHidden extends GqlvAbstract {
 
-    private final Holder holder;
+    private final HolderActionParamsParamHidden holder;
 
     public GqlvActionParamsParamHidden(
-            final Holder holder,
+            final HolderActionParamsParamHidden holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -83,21 +76,4 @@ public class GqlvActionParamsParamHidden extends 
GqlvAbstract {
         return visible.isVetoed();
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    ObjectActionParameterProvider,
-                    SchemaTypeProvider {
-
-        void addGqlArguments(
-                ObjectAction objectAction,
-                GraphQLFieldDefinition.Builder fieldBuilder,
-                TypeMapper.InputContext inputContext,
-                int paramNum);
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment environment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamValidate.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamValidate.java
index a8751c00fc..b407de6742 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamValidate.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionParamsParamValidate.java
@@ -19,24 +19,16 @@
 package org.apache.causeway.viewer.graphql.model.domain.rich.query;
 
 import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLOutputType;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
-import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.Environment;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
@@ -45,10 +37,10 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvActionParamsParamValidate extends GqlvAbstract {
 
-    private final Holder holder;
+    private final HolderActionParamsParamValidate holder;
 
     public GqlvActionParamsParamValidate(
-            final Holder holder,
+            final HolderActionParamsParamValidate holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -83,17 +75,4 @@ public class GqlvActionParamsParamValidate extends 
GqlvAbstract {
         return usable.isVetoed() ? 
usable.getReasonAsString().orElse("Invalid") : null;
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    ObjectActionParameterProvider,
-            SchemaTypeProvider {
-
-        void addGqlArgument(ObjectAction objectAction, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext, int paramNum);
-
-        Can<ManagedObject> argumentManagedObjectsFor(
-                Environment environment,
-                ObjectAction objectAction,
-                BookmarkService bookmarkService);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionValidity.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionValidity.java
index 4b1e679e29..b9d9897429 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionValidity.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvActionValidity.java
@@ -21,7 +21,6 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
 import java.util.Map;
 
 import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLOutputType;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
@@ -35,9 +34,6 @@ import 
org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
@@ -46,10 +42,10 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvActionValidity extends GqlvAbstract {
 
-    private final Holder holder;
+    private final HolderActionValidity holder;
 
     public GqlvActionValidity(
-            final Holder holder,
+            final HolderActionValidity holder,
             final Context context
     ) {
         super(context);
@@ -96,15 +92,4 @@ public class GqlvActionValidity extends GqlvAbstract {
         return consent.isVetoed() ? 
consent.getReasonAsString().orElse("Invalid") : null;
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectActionProvider,
-                    SchemaTypeProvider {
-
-        void addGqlArguments(
-                ObjectAction objectAction,
-                GraphQLFieldDefinition.Builder fieldBuilder,
-                TypeMapper.InputContext inputContext,
-                int parameterCount);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociationDatatype.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociationDatatype.java
index 34cea21891..344b40e83f 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociationDatatype.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociationDatatype.java
@@ -26,19 +26,16 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
-import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.val;
 
 public abstract class GqlvAssociationDatatype<T extends ObjectAssociation> 
extends GqlvAbstract {
 
-    private final Holder<T> holder;
+    private final HolderAssociationDatatype<T> holder;
 
     public GqlvAssociationDatatype(
-            final Holder<T> holder,
+            final HolderAssociationDatatype<T> holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -55,9 +52,4 @@ public abstract class GqlvAssociationDatatype<T extends 
ObjectAssociation> exten
         return TypeNames.objectTypeNameFor(returnType, holder.getSchemaType());
     }
 
-    public interface Holder<T extends ObjectAssociation>
-            extends ObjectAssociationProvider<T>,
-                    SchemaTypeProvider {
-    }
-
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociationGet.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociationGet.java
index bccf42ba64..1358463be1 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociationGet.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvAssociationGet.java
@@ -28,18 +28,15 @@ import 
org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.val;
 
 public abstract class GqlvAssociationGet<T extends ObjectAssociation> extends 
GqlvAbstract {
 
-    final Holder<T> holder;
+    final HolderAssociationGet<T> holder;
 
     public GqlvAssociationGet(
-            final Holder<T> holder,
+            final HolderAssociationGet<T> holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -55,7 +52,7 @@ public abstract class GqlvAssociationGet<T extends 
ObjectAssociation> extends Gq
         }
     }
 
-    abstract GraphQLOutputType outputTypeFor(Holder<T> holder);
+    abstract GraphQLOutputType outputTypeFor(HolderAssociationGet<T> holder);
 
     @Override
     protected Object fetchData(final DataFetchingEnvironment environment) {
@@ -79,10 +76,4 @@ public abstract class GqlvAssociationGet<T extends 
ObjectAssociation> extends Gq
                 : null;
     }
 
-    public interface Holder<T extends ObjectAssociation>
-            extends ObjectSpecificationProvider,
-                    ObjectAssociationProvider<T>,
-                    SchemaTypeProvider {
-
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollection.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollection.java
index e81e672685..d29ddd8bb9 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollection.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollection.java
@@ -23,14 +23,12 @@ import 
org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
-import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 
 public class GqlvCollection
-        extends GqlvAssociation<OneToManyAssociation, GqlvMemberHolder>
-        implements GqlvAssociationGet.Holder<OneToManyAssociation>,
-                   GqlvMemberHidden.Holder<OneToManyAssociation>,
-                   GqlvMemberDisabled.Holder<OneToManyAssociation>,
-                   GqlvAssociationDatatype.Holder<OneToManyAssociation> {
+        extends GqlvAssociation<OneToManyAssociation, 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder>
+        implements HolderAssociationGet<OneToManyAssociation>,
+        GqlvMemberHolder<OneToManyAssociation>,
+        HolderAssociationDatatype<OneToManyAssociation>, 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider,
 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider<OneToManyAssociation>,
 org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider {
 
     private final GqlvMemberHidden<OneToManyAssociation> hidden;
     private final GqlvMemberDisabled<OneToManyAssociation> disabled;
@@ -38,7 +36,7 @@ public class GqlvCollection
     private final GqlvCollectionDatatype datatype;
 
     public GqlvCollection(
-            final GqlvMemberHolder holder,
+            final 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder 
holder,
             final OneToManyAssociation otma,
             final Context context
     ) {
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollectionDatatype.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollectionDatatype.java
index 0766f75753..e2026f17ad 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollectionDatatype.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollectionDatatype.java
@@ -24,7 +24,7 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 public class GqlvCollectionDatatype extends 
GqlvAssociationDatatype<OneToManyAssociation> {
 
     public GqlvCollectionDatatype(
-            final Holder<OneToManyAssociation> holder,
+            final HolderAssociationDatatype<OneToManyAssociation> holder,
             final Context context) {
         super(holder, context);
     }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollectionGet.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollectionGet.java
index c830879ff6..5014a0e04c 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollectionGet.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvCollectionGet.java
@@ -22,20 +22,19 @@ import graphql.schema.GraphQLOutputType;
 
 import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 
 import lombok.val;
 
 public class GqlvCollectionGet extends 
GqlvAssociationGet<OneToManyAssociation> {
 
     public GqlvCollectionGet(
-            final Holder holder,
+            final HolderAssociationGet holder,
             final Context context) {
         super(holder, context);
     }
 
     @Override
-    GraphQLOutputType 
outputTypeFor(GqlvAssociationGet.Holder<OneToManyAssociation> holder) {
+    GraphQLOutputType outputTypeFor(HolderAssociationGet<OneToManyAssociation> 
holder) {
         val oneToManyAssociation = holder.getObjectAssociation();
         return 
context.typeMapper.listTypeForElementTypeOf(oneToManyAssociation, 
holder.getSchemaType());
     }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberDisabled.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberDisabled.java
index 4349236ac9..f1c635b3e7 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberDisabled.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberDisabled.java
@@ -30,9 +30,6 @@ import 
org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
@@ -40,10 +37,10 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvMemberDisabled<T extends ObjectMember> extends GqlvAbstract {
 
-    private final Holder<T> holder;
+    private final GqlvMemberHolder<T> holder;
 
     public GqlvMemberDisabled(
-            final Holder<T> holder,
+            final GqlvMemberHolder<T> holder,
             final Context context
     ) {
         super(context);
@@ -73,9 +70,4 @@ public class GqlvMemberDisabled<T extends ObjectMember> 
extends GqlvAbstract {
         return usable.getReasonAsString().orElse(null);
     }
 
-    public interface Holder<T extends ObjectMember>
-            extends ObjectSpecificationProvider,
-                    ObjectMemberProvider<T>,
-                    SchemaTypeProvider {
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberHidden.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberHidden.java
index 0ab6f72d8c..3d6038a253 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberHidden.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberHidden.java
@@ -30,9 +30,6 @@ import 
org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
@@ -40,10 +37,10 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class GqlvMemberHidden<T extends ObjectMember> extends GqlvAbstract {
 
-    private final Holder<T> holder;
+    private final GqlvMemberHolder<T> holder;
 
     public GqlvMemberHidden(
-            final Holder<T> holder,
+            final GqlvMemberHolder<T> holder,
             final Context context
     ) {
         super(context);
@@ -74,9 +71,4 @@ public class GqlvMemberHidden<T extends ObjectMember> extends 
GqlvAbstract {
         return visibleConsent.isVetoed();
     }
 
-    public interface Holder<T extends ObjectMember>
-            extends ObjectSpecificationProvider,
-                    ObjectMemberProvider<T>,
-                    SchemaTypeProvider {
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberHolder.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberHolder.java
new file mode 100644
index 0000000000..7509a78cd9
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMemberHolder.java
@@ -0,0 +1,12 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface GqlvMemberHolder<T extends ObjectMember>
+        extends ObjectSpecificationProvider,
+        ObjectMemberProvider<T>,
+        SchemaTypeProvider {
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvProperty.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvProperty.java
index 5c58a785f5..6d8abc2849 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvProperty.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvProperty.java
@@ -29,23 +29,22 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
-import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
 
 public class GqlvProperty
-        extends GqlvAssociation<OneToOneAssociation, GqlvMemberHolder>
-        implements GqlvMemberHidden.Holder<OneToOneAssociation>,
-        GqlvMemberDisabled.Holder<OneToOneAssociation>,
-        GqlvPropertyGet.Holder,
-        GqlvPropertyChoices.Holder,
-        GqlvPropertyAutoComplete.Holder,
-        GqlvPropertyValidate.Holder,
-        GqlvPropertySet.Holder,
-        GqlvAssociationDatatype.Holder<OneToOneAssociation>,
-        GqlvPropertyGetBlob.Holder,
-        GqlvPropertyGetClob.Holder {
+        extends GqlvAssociation<OneToOneAssociation, 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder>
+        implements
+        GqlvMemberHolder<OneToOneAssociation>,
+        HolderPropertyGet,
+        HolderPropertyChoices,
+        HolderPropertyAutoComplete,
+        HolderPropertyValidate,
+        HolderPropertySet,
+        HolderAssociationDatatype<OneToOneAssociation>,
+        HolderGetPropertyBlob,
+        HolderPropertyGetClob, 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider,
 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider<OneToOneAssociation>,
 org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider {
 
     private final GqlvMemberHidden<OneToOneAssociation> hidden;
     private final GqlvMemberDisabled<OneToOneAssociation> disabled;
@@ -67,7 +66,7 @@ public class GqlvProperty
     private final GqlvPropertyDatatype datatype;
 
     public GqlvProperty(
-            final GqlvMemberHolder holder,
+            final 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMemberHolder 
holder,
             final OneToOneAssociation otoa,
             final Context context) {
         super(holder, otoa, 
TypeNames.propertyTypeNameFor(holder.getObjectSpecification(), otoa, 
holder.getSchemaType()), context);
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyAutoComplete.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyAutoComplete.java
index fcd9efb6d7..8bcf2b19a6 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyAutoComplete.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyAutoComplete.java
@@ -33,9 +33,6 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.val;
 
@@ -43,10 +40,10 @@ public class GqlvPropertyAutoComplete extends GqlvAbstract {
 
     private static final String SEARCH_PARAM_NAME = "search";
 
-    private final Holder holder;
+    private final HolderPropertyAutoComplete holder;
 
     public GqlvPropertyAutoComplete(
-            final Holder holder,
+            final HolderPropertyAutoComplete holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -88,10 +85,4 @@ public class GqlvPropertyAutoComplete extends GqlvAbstract {
                 .collect(Collectors.toList());
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    OneToOneAssociationProvider,
-                    SchemaTypeProvider {
-
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyChoices.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyChoices.java
index 05263d1b92..fd7173aff6 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyChoices.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyChoices.java
@@ -21,31 +21,26 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
 import java.util.stream.Collectors;
 
 import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLList;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
 
 public class GqlvPropertyChoices extends GqlvAbstract {
 
-    final Holder holder;
+    final HolderPropertyChoices holder;
 
     public GqlvPropertyChoices(
-            final Holder holder,
+            final HolderPropertyChoices holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -82,11 +77,4 @@ public class GqlvPropertyChoices extends GqlvAbstract {
                     .collect(Collectors.toList());
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    OneToOneAssociationProvider,
-                    SchemaTypeProvider {
-
-        void addGqlArgument(OneToOneAssociation otoa, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyDatatype.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyDatatype.java
index 2dca4546ff..51da87feb0 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyDatatype.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyDatatype.java
@@ -24,7 +24,7 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 public class GqlvPropertyDatatype extends 
GqlvAssociationDatatype<OneToOneAssociation> {
 
     public GqlvPropertyDatatype(
-            final Holder<OneToOneAssociation> holder,
+            final HolderAssociationDatatype<OneToOneAssociation> holder,
             final Context context) {
         super(holder, context);
     }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGet.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGet.java
index 028602ca94..071f8b3241 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGet.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGet.java
@@ -22,29 +22,21 @@ import graphql.schema.GraphQLOutputType;
 
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.val;
 
 public class GqlvPropertyGet extends GqlvAssociationGet<OneToOneAssociation> {
 
     public GqlvPropertyGet(
-            final Holder holder,
+            final HolderPropertyGet holder,
             final Context context) {
         super(holder, context);
     }
 
     @Override
-    GraphQLOutputType 
outputTypeFor(GqlvAssociationGet.Holder<OneToOneAssociation> holder) {
+    GraphQLOutputType outputTypeFor(HolderAssociationGet<OneToOneAssociation> 
holder) {
         val oneToOneAssociation = holder.getObjectAssociation();
         return context.typeMapper.outputTypeFor(oneToOneAssociation, 
holder.getSchemaType());
     }
 
-    public interface Holder
-            extends GqlvAssociationGet.Holder<OneToOneAssociation>,
-                    SchemaTypeProvider {
-
-        @Override
-        OneToOneAssociation getObjectAssociation();
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlob.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlob.java
index 3bb63dde91..6f93b933af 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlob.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlob.java
@@ -30,16 +30,13 @@ import 
org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 public class GqlvPropertyGetBlob
         extends GqlvAbstractCustom
-        implements GqlvPropertyGetBlobBytes.Holder
+        implements HolderPropertyGetBlobAbstract
 {
 
-    final Holder holder;
+    final HolderGetPropertyBlob holder;
     final GqlvPropertyGetBlobBytes blobName;
     final GqlvPropertyGetBlobMimeType blobMimeType;
     final GqlvPropertyGetBlobName blobBytes;
@@ -47,7 +44,7 @@ public class GqlvPropertyGetBlob
     private final CausewayConfiguration.Viewer.Graphql graphqlConfiguration;
 
     public GqlvPropertyGetBlob(
-            final Holder holder,
+            final HolderGetPropertyBlob holder,
             final Context context) {
         
super(TypeNames.propertyBlobTypeNameFor(holder.getObjectSpecification(), 
holder.getObjectMember(), holder.getSchemaType()), context);
         this.holder = holder;
@@ -113,10 +110,4 @@ public class GqlvPropertyGetBlob
         return holder.getSchemaType();
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectAssociationProvider<OneToOneAssociation>,
-                    SchemaTypeProvider {
-
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobAbstract.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobAbstract.java
index 96be1c52cd..36e89b2e47 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobAbstract.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobAbstract.java
@@ -30,16 +30,15 @@ import 
org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.val;
 
 public abstract class GqlvPropertyGetBlobAbstract extends GqlvAbstract {
 
-    final Holder holder;
+    final HolderPropertyGetBlobAbstract holder;
 
     public GqlvPropertyGetBlobAbstract(
-            final Holder holder,
+            final HolderPropertyGetBlobAbstract holder,
             final Context context, String name) {
         super(context);
         this.holder = holder;
@@ -72,9 +71,4 @@ public abstract class GqlvPropertyGetBlobAbstract extends 
GqlvAbstract {
                 .orElse(null);
     }
 
-    public interface Holder
-            extends GqlvPropertyGet.Holder,
-                    SchemaTypeProvider {
-    }
-
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobBytes.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobBytes.java
index 96f95fc36c..9abca86912 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobBytes.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobBytes.java
@@ -30,7 +30,7 @@ public class GqlvPropertyGetBlobBytes extends 
GqlvPropertyGetBlobAbstract {
     private final String graphqlPath;
 
     public GqlvPropertyGetBlobBytes(
-            final Holder holder,
+            final HolderPropertyGetBlobAbstract holder,
             final Context context) {
         super(holder, context, "bytes");
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobMimeType.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobMimeType.java
index f612f7ea00..c9f54aeec3 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobMimeType.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobMimeType.java
@@ -25,7 +25,7 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 public class GqlvPropertyGetBlobMimeType extends GqlvPropertyGetBlobAbstract {
 
     public GqlvPropertyGetBlobMimeType(
-            final Holder holder,
+            final HolderPropertyGetBlobAbstract holder,
             final Context context) {
         super(holder, context, "mimeType");
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobName.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobName.java
index ee3c3b1745..9fe755af79 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobName.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetBlobName.java
@@ -26,7 +26,7 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 public class GqlvPropertyGetBlobName extends GqlvPropertyGetBlobAbstract {
 
     public GqlvPropertyGetBlobName(
-            final Holder holder,
+            final HolderPropertyGetBlobAbstract holder,
             final Context context) {
         super(holder, context, "name");
     }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClob.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClob.java
index 518fec9c83..20cc95703d 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClob.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClob.java
@@ -30,16 +30,13 @@ import 
org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 public class GqlvPropertyGetClob
         extends GqlvAbstractCustom
-        implements GqlvPropertyGetClobChars.Holder
+        implements HolderPropertyGetClobAbstract
 {
 
-    final Holder holder;
+    final HolderPropertyGetClob holder;
     final GqlvPropertyGetClobName clobName;
     final GqlvPropertyGetClobMimeType clobMimeType;
     final GqlvPropertyGetClobChars clobChars;
@@ -47,7 +44,7 @@ public class GqlvPropertyGetClob
     private final CausewayConfiguration.Viewer.Graphql graphqlConfiguration;
 
     public GqlvPropertyGetClob(
-            final Holder holder,
+            final HolderPropertyGetClob holder,
             final Context context) {
         
super(TypeNames.propertyBlobTypeNameFor(holder.getObjectSpecification(), 
holder.getObjectMember(), holder.getSchemaType()), context);
         this.holder = holder;
@@ -113,10 +110,4 @@ public class GqlvPropertyGetClob
         return holder.getSchemaType();
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    ObjectAssociationProvider<OneToOneAssociation>,
-                    SchemaTypeProvider {
-
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobAbstract.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobAbstract.java
index 70fae768c6..36d2f29650 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobAbstract.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobAbstract.java
@@ -30,16 +30,15 @@ import 
org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 
 import lombok.val;
 
 public abstract class GqlvPropertyGetClobAbstract extends GqlvAbstract {
 
-    final Holder holder;
+    final HolderPropertyGetClobAbstract holder;
 
     public GqlvPropertyGetClobAbstract(
-            final Holder holder,
+            final HolderPropertyGetClobAbstract holder,
             final Context context, String name) {
         super(context);
         this.holder = holder;
@@ -72,9 +71,4 @@ public abstract class GqlvPropertyGetClobAbstract extends 
GqlvAbstract {
                 .orElse(null);
     }
 
-    public interface Holder
-            extends GqlvPropertyGet.Holder,
-                    SchemaTypeProvider {
-    }
-
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobChars.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobChars.java
index b475ee9495..382d6d9879 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobChars.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobChars.java
@@ -30,7 +30,7 @@ public class GqlvPropertyGetClobChars extends 
GqlvPropertyGetClobAbstract {
     private final String graphqlPath;
 
     public GqlvPropertyGetClobChars(
-            final Holder holder,
+            final HolderPropertyGetClobAbstract holder,
             final Context context) {
         super(holder, context, "chars");
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobMimeType.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobMimeType.java
index a40f779143..d7cde052b1 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobMimeType.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobMimeType.java
@@ -25,7 +25,7 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 public class GqlvPropertyGetClobMimeType extends GqlvPropertyGetClobAbstract {
 
     public GqlvPropertyGetClobMimeType(
-            final Holder holder,
+            final HolderPropertyGetClobAbstract holder,
             final Context context) {
         super(holder, context, "mimeType");
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobName.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobName.java
index 357af0ff08..32d53e7a04 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobName.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyGetClobName.java
@@ -26,7 +26,7 @@ import 
org.apache.causeway.viewer.graphql.model.context.Context;
 public class GqlvPropertyGetClobName extends GqlvPropertyGetClobAbstract {
 
     public GqlvPropertyGetClobName(
-            final Holder holder,
+            final HolderPropertyGetClobAbstract holder,
             final Context context) {
         super(holder, context, "name");
     }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertySet.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertySet.java
index b367ef8fd3..0072da69cd 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertySet.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertySet.java
@@ -21,14 +21,12 @@ package 
org.apache.causeway.viewer.graphql.model.domain.rich.query;
 import java.util.Map;
 
 import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLFieldDefinition;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.applib.annotation.Where;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
@@ -36,19 +34,16 @@ import 
org.apache.causeway.viewer.graphql.model.exceptions.DisabledException;
 import org.apache.causeway.viewer.graphql.model.exceptions.HiddenException;
 import org.apache.causeway.viewer.graphql.model.exceptions.InvalidException;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
 
 public class GqlvPropertySet extends GqlvAbstract {
 
-    final Holder holder;
+    final HolderPropertySet holder;
 
     public GqlvPropertySet(
-            final Holder holder,
+            final HolderPropertySet holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -101,11 +96,4 @@ public class GqlvPropertySet extends GqlvAbstract {
         return managedObject; // return the original object because setters 
return void
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    OneToOneAssociationProvider,
-                    SchemaTypeProvider {
-
-        void addGqlArgument(OneToOneAssociation oneToOneAssociation, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyValidate.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyValidate.java
index 60d66b7e66..ee5d15e121 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyValidate.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvPropertyValidate.java
@@ -19,30 +19,25 @@
 package org.apache.causeway.viewer.graphql.model.domain.rich.query;
 
 import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLOutputType;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-import 
org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
 
 public class GqlvPropertyValidate extends GqlvAbstract {
 
-    final Holder holder;
+    final HolderPropertyValidate holder;
 
     public GqlvPropertyValidate(
-            final Holder holder,
+            final HolderPropertyValidate holder,
             final Context context) {
         super(context);
         this.holder = holder;
@@ -76,11 +71,4 @@ public class GqlvPropertyValidate extends GqlvAbstract {
         return valid.isVetoed() ? valid.getReasonAsString().orElse("invalid") 
: null;
     }
 
-    public interface Holder
-            extends ObjectSpecificationProvider,
-                    OneToOneAssociationProvider,
-                    SchemaTypeProvider {
-
-        void addGqlArgument(OneToOneAssociation oneToOneAssociation, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext);
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvoke.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvoke.java
new file mode 100644
index 0000000000..1a3c231261
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvoke.java
@@ -0,0 +1,31 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionInvoke
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        SchemaTypeProvider {
+
+    void addGqlArguments(
+            final ObjectAction objectAction,
+            final GraphQLFieldDefinition.Builder fieldBuilder,
+            final TypeMapper.InputContext inputContext,
+            final int parameterCount);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment dataFetchingEnvironment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvokeArgs.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvokeArgs.java
new file mode 100644
index 0000000000..96e46cb749
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvokeArgs.java
@@ -0,0 +1,21 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderActionInvokeArgs
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        SchemaTypeProvider {
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment dataFetchingEnvironment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvokeArgsArg.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvokeArgsArg.java
new file mode 100644
index 0000000000..1a61bc3a1c
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvokeArgsArg.java
@@ -0,0 +1,21 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderActionInvokeArgsArg
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        SchemaTypeProvider {
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment dataFetchingEnvironment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvokeResult.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvokeResult.java
new file mode 100644
index 0000000000..bce5a111a5
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionInvokeResult.java
@@ -0,0 +1,30 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionInvokeResult
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        SchemaTypeProvider {
+
+    void addGqlArguments(
+            final ObjectAction objectAction,
+            final GraphQLFieldDefinition.Builder fieldBuilder,
+            final TypeMapper.InputContext inputContext,
+            final int parameterCount);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment dataFetchingEnvironment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParams.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParams.java
new file mode 100644
index 0000000000..4f2c773bb3
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParams.java
@@ -0,0 +1,30 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionParams
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        SchemaTypeProvider {
+
+    void addGqlArguments(
+            ObjectAction objectAction,
+            GraphQLFieldDefinition.Builder fieldBuilder,
+            TypeMapper.InputContext inputContext,
+            int paramNum);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment dataFetchingEnvironment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParam.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParam.java
new file mode 100644
index 0000000000..9ea0c078c2
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParam.java
@@ -0,0 +1,30 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionParamsParam
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        SchemaTypeProvider {
+
+    void addGqlArguments(
+            ObjectAction objectAction,
+            GraphQLFieldDefinition.Builder fieldBuilder,
+            TypeMapper.InputContext inputContext,
+            int paramNum);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment dataFetchingEnvironment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamAutoComplete.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamAutoComplete.java
new file mode 100644
index 0000000000..09f509a6f7
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamAutoComplete.java
@@ -0,0 +1,33 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionParamsParamAutoComplete
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        ObjectActionParameterProvider,
+        SchemaTypeProvider {
+    HolderActionParamsParam getHolder();
+
+    void addGqlArguments(
+            ObjectAction objectAction,
+            GraphQLFieldDefinition.Builder fieldBuilder,
+            TypeMapper.InputContext inputContext,
+            int paramNum);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment environment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamChoices.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamChoices.java
new file mode 100644
index 0000000000..b0082c4a51
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamChoices.java
@@ -0,0 +1,33 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionParamsParamChoices
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        ObjectActionParameterProvider,
+        SchemaTypeProvider {
+    HolderActionParamsParam getHolder();
+
+    void addGqlArguments(
+            ObjectAction objectAction,
+            GraphQLFieldDefinition.Builder fieldBuilder,
+            TypeMapper.InputContext inputContext,
+            int paramNum);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment environment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamDatatype.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamDatatype.java
new file mode 100644
index 0000000000..38aa044cf5
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamDatatype.java
@@ -0,0 +1,9 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderActionParamsParamDatatype
+        extends ObjectActionParameterProvider,
+        SchemaTypeProvider {
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamDefault.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamDefault.java
new file mode 100644
index 0000000000..b974e0eca2
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamDefault.java
@@ -0,0 +1,34 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionParamsParamDefault
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        ObjectActionParameterProvider,
+        SchemaTypeProvider {
+
+    HolderActionParamsParam getHolder();
+
+    void addGqlArguments(
+            ObjectAction objectAction,
+            GraphQLFieldDefinition.Builder fieldBuilder,
+            TypeMapper.InputContext inputContext,
+            int paramNum);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment environment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamDisabled.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamDisabled.java
new file mode 100644
index 0000000000..a6b27f9c3a
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamDisabled.java
@@ -0,0 +1,29 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionParamsParamDisabled
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        ObjectActionParameterProvider {
+    void addGqlArguments(
+            ObjectAction objectAction,
+            GraphQLFieldDefinition.Builder fieldBuilder,
+            TypeMapper.InputContext inputContext,
+            int i);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment environment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamHidden.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamHidden.java
new file mode 100644
index 0000000000..2cf3262d10
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamHidden.java
@@ -0,0 +1,32 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionParamsParamHidden
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        ObjectActionParameterProvider,
+        SchemaTypeProvider {
+
+    void addGqlArguments(
+            ObjectAction objectAction,
+            GraphQLFieldDefinition.Builder fieldBuilder,
+            TypeMapper.InputContext inputContext,
+            int paramNum);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment environment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamValidate.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamValidate.java
new file mode 100644
index 0000000000..96114798b0
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionParamsParamValidate.java
@@ -0,0 +1,28 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionParamsParamValidate
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        ObjectActionParameterProvider,
+        SchemaTypeProvider {
+
+    void addGqlArgument(ObjectAction objectAction, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext, int paramNum);
+
+    Can<ManagedObject> argumentManagedObjectsFor(
+            Environment environment,
+            ObjectAction objectAction,
+            BookmarkService bookmarkService);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionValidity.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionValidity.java
new file mode 100644
index 0000000000..49240f89c0
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderActionValidity.java
@@ -0,0 +1,21 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderActionValidity
+        extends ObjectSpecificationProvider,
+        ObjectActionProvider,
+        SchemaTypeProvider {
+
+    void addGqlArguments(
+            ObjectAction objectAction,
+            GraphQLFieldDefinition.Builder fieldBuilder,
+            TypeMapper.InputContext inputContext,
+            int parameterCount);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderAssociationDatatype.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderAssociationDatatype.java
new file mode 100644
index 0000000000..73d86ea872
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderAssociationDatatype.java
@@ -0,0 +1,10 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderAssociationDatatype<T extends ObjectAssociation>
+        extends ObjectAssociationProvider<T>,
+        SchemaTypeProvider {
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderAssociationGet.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderAssociationGet.java
new file mode 100644
index 0000000000..878d21ce33
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderAssociationGet.java
@@ -0,0 +1,13 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderAssociationGet<T extends ObjectAssociation>
+        extends ObjectSpecificationProvider,
+        ObjectAssociationProvider<T>,
+        SchemaTypeProvider {
+
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderGetPropertyBlob.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderGetPropertyBlob.java
new file mode 100644
index 0000000000..bdd1d8fad7
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderGetPropertyBlob.java
@@ -0,0 +1,13 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderGetPropertyBlob
+        extends ObjectSpecificationProvider,
+                ObjectAssociationProvider<OneToOneAssociation>,
+                SchemaTypeProvider {
+
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyAutoComplete.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyAutoComplete.java
new file mode 100644
index 0000000000..cce609a192
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyAutoComplete.java
@@ -0,0 +1,12 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderPropertyAutoComplete
+        extends ObjectSpecificationProvider,
+        OneToOneAssociationProvider,
+        SchemaTypeProvider {
+
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyChoices.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyChoices.java
new file mode 100644
index 0000000000..a355cebddf
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyChoices.java
@@ -0,0 +1,17 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderPropertyChoices
+        extends ObjectSpecificationProvider,
+        OneToOneAssociationProvider,
+        SchemaTypeProvider {
+
+    void addGqlArgument(OneToOneAssociation otoa, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGet.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGet.java
new file mode 100644
index 0000000000..bdccda5dc0
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGet.java
@@ -0,0 +1,12 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderPropertyGet
+        extends HolderAssociationGet<OneToOneAssociation>,
+        SchemaTypeProvider {
+
+    @Override
+    OneToOneAssociation getObjectAssociation();
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGetBlobAbstract.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGetBlobAbstract.java
new file mode 100644
index 0000000000..34fe53293f
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGetBlobAbstract.java
@@ -0,0 +1,8 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderPropertyGetBlobAbstract
+        extends HolderPropertyGet,
+        SchemaTypeProvider {
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGetClob.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGetClob.java
new file mode 100644
index 0000000000..b52e4f9a3e
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGetClob.java
@@ -0,0 +1,13 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderPropertyGetClob
+        extends ObjectSpecificationProvider,
+        ObjectAssociationProvider<OneToOneAssociation>,
+        SchemaTypeProvider {
+
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGetClobAbstract.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGetClobAbstract.java
new file mode 100644
index 0000000000..eea6d61132
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyGetClobAbstract.java
@@ -0,0 +1,8 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+
+public interface HolderPropertyGetClobAbstract
+        extends HolderPropertyGet,
+        SchemaTypeProvider {
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertySet.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertySet.java
new file mode 100644
index 0000000000..f07804dfca
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertySet.java
@@ -0,0 +1,17 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderPropertySet
+        extends ObjectSpecificationProvider,
+        OneToOneAssociationProvider,
+        SchemaTypeProvider {
+
+    void addGqlArgument(OneToOneAssociation oneToOneAssociation, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext);
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyValidate.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyValidate.java
new file mode 100644
index 0000000000..ab58875854
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/HolderPropertyValidate.java
@@ -0,0 +1,17 @@
+package org.apache.causeway.viewer.graphql.model.domain.rich.query;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import 
org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.SchemaTypeProvider;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
+
+public interface HolderPropertyValidate
+        extends ObjectSpecificationProvider,
+        OneToOneAssociationProvider,
+        SchemaTypeProvider {
+
+    void addGqlArgument(OneToOneAssociation oneToOneAssociation, 
GraphQLFieldDefinition.Builder fieldBuilder, TypeMapper.InputContext 
inputContext);
+}

Reply via email to