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 600bf98857c118aa41cabeb767c2afad627ae1ac
Author: danhaywood <[email protected]>
AuthorDate: Thu Jan 25 19:16:41 2024 +0000

    CAUSEWAY-3676: introduces XxxProviders, and Evaluator
---
 .../viewer/graphql/model/domain/Evaluator.java     | 19 +++++++++++
 .../graphql/model/domain/GqlvActionParam.java      | 14 +++++---
 .../model/domain/GqlvActionParamDisabled.java      | 39 ++++++++++++++--------
 .../model/domain/GqlvActionParamHidden.java        | 38 ++++++++-------------
 .../graphql/model/domain/GqlvActionParams.java     |  5 +++
 .../graphql/model/domain/GqlvActionValidate.java   |  7 ++--
 .../graphql/model/domain/GqlvAssociationGet.java   |  8 ++---
 .../graphql/model/domain/GqlvDomainObject.java     |  4 +--
 .../graphql/model/domain/GqlvMemberDisabled.java   |  4 ++-
 .../viewer/graphql/model/domain/GqlvMeta.java      | 11 ++++--
 .../graphql/model/domain/GqlvPropertySet.java      |  9 +++--
 .../graphql/model/domain/GqlvPropertyValidate.java |  9 +++--
 ...der.java => ObjectActionParameterProvider.java} |  7 ++--
 ...lvMetaHolder.java => ObjectActionProvider.java} |  7 ++--
 ...aHolder.java => ObjectAssociationProvider.java} |  7 ++--
 ...lvMetaHolder.java => ObjectMemberProvider.java} |  7 ++--
 ...older.java => ObjectSpecificationProvider.java} |  3 +-
 ...lder.java => OneToManyAssociationProvider.java} |  7 ++--
 ...older.java => OneToOneAssociationProvider.java} |  7 ++--
 19 files changed, 118 insertions(+), 94 deletions(-)

diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Evaluator.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Evaluator.java
new file mode 100644
index 0000000000..2bc5f8d7ee
--- /dev/null
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Evaluator.java
@@ -0,0 +1,19 @@
+package org.apache.causeway.viewer.graphql.model.domain;
+
+import lombok.RequiredArgsConstructor;
+
+import org.apache.causeway.commons.collections.Can;
+import 
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
+
+@RequiredArgsConstructor
+abstract class Evaluator<T> {
+    private final T unexpected;
+
+    abstract T evaluate(ActionInteractionHead head, ObjectActionParameter 
objectActionParameter, Can<ManagedObject> argumentManagedObjects);
+
+    public T unexpected() {
+        return unexpected;
+    }
+}
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java
index e31ff8276c..b28aad95ac 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java
@@ -76,6 +76,11 @@ public class GqlvActionParam implements 
GqlvActionParamDisabled.Holder, GqlvActi
         return holder.getObjectSpecification();
     }
 
+    @Override
+    public ObjectAction getObjectMember() {
+        return getObjectAction();
+    }
+
     @Override
     public ObjectAction getObjectAction() {
         return holder.getObjectAction();
@@ -102,11 +107,10 @@ public class GqlvActionParam implements 
GqlvActionParamDisabled.Holder, GqlvActi
         return FieldCoordinates.coordinates(gqlObjectType, fieldDefinition);
     }
 
-    public static interface Holder extends GqlvHolder {
-
-        ObjectSpecification getObjectSpecification();
-
-        ObjectAction getObjectAction();
+    public static interface Holder
+            extends GqlvHolder,
+                    ObjectSpecificationProvider,
+                    ObjectActionProvider {
 
         GqlvActionParams.Holder getHolder();
 
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java
index beadbc1654..84dafb6e6e 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java
@@ -18,21 +18,20 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.Consent;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import 
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
@@ -54,7 +53,7 @@ public class GqlvActionParamDisabled {
         this.holder = holder;
         this.context = context;
 
-        GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition()
+        val fieldBuilder = newFieldDefinition()
                 .name("disabled")
                 .type(TypeMapper.scalarTypeFor(String.class));
         addGqlArguments(holder.getObjectAction(), fieldBuilder, 
TypeMapper.InputContext.DISABLE);
@@ -72,16 +71,28 @@ public class GqlvActionParamDisabled {
     private String disabled(
             final DataFetchingEnvironment dataFetchingEnvironment) {
 
-        final ObjectAction objectAction = holder.getObjectAction();
+        val evaluator = new Evaluator<>("Disabled") {
+
+            @Override
+            public String evaluate(ActionInteractionHead head, 
ObjectActionParameter objectActionParameter, final Can<ManagedObject> 
argumentManagedObjects) {
+                Consent usable = objectActionParameter.isUsable(head, 
argumentManagedObjects, InteractionInitiatedBy.USER);
+                return usable.isVetoed() ? 
usable.getReasonAsString().orElse("Disabled") : null;
+            }
+
+        };
 
+        return evaluate(holder, context, dataFetchingEnvironment, evaluator);
+    }
+
+    static <T> T evaluate(ObjectActionParameterProvider holder, Context 
context, DataFetchingEnvironment dataFetchingEnvironment, Evaluator<T> 
evaluator) {
+        final ObjectAction objectAction = holder.getObjectAction();
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
         val sourcePojoClass = sourcePojo.getClass();
         val specificationLoader = objectAction.getSpecificationLoader();
         val objectSpecification = 
specificationLoader.loadSpecification(sourcePojoClass);
         if (objectSpecification == null) {
-            // not expected
-            return "Disabled";
+            return evaluator.unexpected();
         }
 
         val managedObject = ManagedObject.adaptSingular(objectSpecification, 
sourcePojo);
@@ -89,18 +100,18 @@ public class GqlvActionParamDisabled {
 
         val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
 
-        val argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
+        final Can<ManagedObject> argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
 
-        Consent usable = objectActionParameter.isUsable(actionInteractionHead, 
argumentManagedObjects, InteractionInitiatedBy.USER);
-        return usable.isVetoed() ? 
usable.getReasonAsString().orElse("Disabled") : null;
+        return evaluator.evaluate(actionInteractionHead, 
objectActionParameter, argumentManagedObjects);
     }
 
-    public interface Holder extends GqlvHolder {
+    public interface Holder
+            extends GqlvHolder,
+                    ObjectSpecificationProvider,
+                    ObjectActionProvider,
+                    ObjectActionParameterProvider {
 
         GqlvActionParam.Holder getHolder();
 
-        ObjectSpecification getObjectSpecification();
-        ObjectAction getObjectAction();
-        ObjectActionParameter getObjectActionParameter();
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
index 638c2594d9..1a11538f8d 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
@@ -19,8 +19,10 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.Consent;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import 
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
 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;
@@ -69,35 +71,21 @@ public class GqlvActionParamHidden {
 
     private boolean hidden(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
-        final ObjectAction objectAction = holder.getObjectAction();
+        val evaluator = new Evaluator<>(true) {
 
-        val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
+            @Override
+            public Boolean evaluate(ActionInteractionHead head, 
ObjectActionParameter objectActionParameter, final Can<ManagedObject> 
argumentManagedObjects) {
+                Consent visible = objectActionParameter.isVisible(head, 
argumentManagedObjects, InteractionInitiatedBy.USER);
+                return visible.isVetoed();
+            }
+        };
 
-        val sourcePojoClass = sourcePojo.getClass();
-        val specificationLoader = objectAction.getSpecificationLoader();
-        val objectSpecification = 
specificationLoader.loadSpecification(sourcePojoClass);
-        if (objectSpecification == null) {
-            // not expected
-            return true;
-        }
-
-        val managedObject = ManagedObject.adaptSingular(objectSpecification, 
sourcePojo);
-        val actionInteractionHead = 
objectAction.interactionHead(managedObject);
-
-        val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
-
-        val argumentManagedObjects = 
GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
-
-        Consent visible = 
objectActionParameter.isVisible(actionInteractionHead, argumentManagedObjects, 
InteractionInitiatedBy.USER);
-        return visible.isVetoed();
+        return GqlvActionParamDisabled.evaluate(holder, context, 
dataFetchingEnvironment, evaluator);
     }
 
-    public interface Holder extends GqlvHolder {
-
+    public interface Holder
+            extends GqlvHolder,
+                    ObjectActionParameterProvider {
         GqlvActionParam.Holder getHolder();
-
-        ObjectAction getObjectAction();
-
-        ObjectActionParameter getObjectActionParameter();
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
index ae77f7d35e..078bb1beda 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
@@ -79,6 +79,11 @@ public class GqlvActionParams implements 
GqlvActionParam.Holder {
         return holder.getObjectSpecification();
     }
 
+    @Override
+    public ObjectAction getObjectMember() {
+        return getObjectAction();
+    }
+
     @Override
     public ObjectAction getObjectAction() {
         return holder.getObjectAction();
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidate.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidate.java
index 548740b9f6..b1c1a018f4 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidate.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidate.java
@@ -112,9 +112,10 @@ public class GqlvActionValidate {
         return consent.isVetoed() ? 
consent.getReasonAsString().orElse("Invalid") : null;
     }
 
-    public interface Holder extends GqlvHolder {
+    public interface Holder
+            extends GqlvHolder,
+                    ObjectSpecificationProvider,
+                    ObjectActionProvider {
 
-        ObjectSpecification getObjectSpecification();
-        ObjectAction getObjectAction();
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
index f3674c301c..948c8e7989 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
@@ -105,10 +105,10 @@ public abstract class GqlvAssociationGet<T extends 
ObjectAssociation> {
                 : null;
     }
 
-    public interface Holder<T extends ObjectAssociation> extends GqlvHolder {
+    public interface Holder<T extends ObjectAssociation>
+            extends GqlvHolder,
+                    ObjectSpecificationProvider,
+                    ObjectAssociationProvider<T> {
 
-        ObjectSpecification getObjectSpecification();
-
-        T getObjectAssociation();
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
index 99a295ccde..a7e0812ba3 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
@@ -22,7 +22,6 @@ import java.util.Map;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.spec.ActionScope;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
@@ -34,7 +33,6 @@ import lombok.Getter;
 
 import graphql.Scalars;
 import graphql.schema.FieldCoordinates;
-import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLInputObjectType;
 import graphql.schema.GraphQLObjectType;
@@ -47,7 +45,7 @@ import static graphql.schema.GraphQLObjectType.newObject;
 /**
  * Exposes a domain object (view model or entity) via the GQL viewer.
  */
-public class GqlvDomainObject implements GqlvAction.Holder, 
GqlvProperty.Holder, GqlvCollection.Holder, GqlvMetaHolder {
+public class GqlvDomainObject implements GqlvAction.Holder, 
GqlvProperty.Holder, GqlvCollection.Holder, GqlvMeta.Holder {
 
     @Getter private final ObjectSpecification objectSpecification;
     private final Context context;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
index b765992697..b91ce4686c 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
@@ -89,7 +89,9 @@ public class GqlvMemberDisabled {
         return usable.getReasonAsString().orElse(null);
     }
 
-    public interface Holder extends GqlvHolder {
+    public interface Holder
+            extends GqlvHolder,
+                    ObjectSpecificationProvider{
 
         ObjectSpecification getObjectSpecification();
 
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
index 537ee5f91b..f41e16ca7f 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
@@ -34,7 +34,6 @@ import lombok.val;
 
 import graphql.Scalars;
 import graphql.schema.DataFetcher;
-import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
@@ -49,7 +48,7 @@ public class GqlvMeta {
     static GraphQLFieldDefinition logicalTypeName = 
newFieldDefinition().name("logicalTypeName").type(nonNull(Scalars.GraphQLString)).build();
     static GraphQLFieldDefinition version = 
newFieldDefinition().name("version").type(Scalars.GraphQLString).build();
 
-    private final GqlvMetaHolder holder;
+    private final Holder holder;
 
     private final Context context;
     private final ObjectManager objectManager;
@@ -57,7 +56,7 @@ public class GqlvMeta {
     @Getter private final GraphQLFieldDefinition metaField;
 
     public GqlvMeta(
-            final GqlvMetaHolder holder,
+            final Holder holder,
             final Context context,
             final ObjectManager objectManager
     ) {
@@ -151,4 +150,10 @@ public class GqlvMeta {
         }
 
     }
+
+    public interface Holder
+            extends GqlvHolder,
+                    ObjectSpecificationProvider {
+
+    }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
index 1c50c02da3..f39711ab88 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
@@ -119,13 +119,12 @@ public class GqlvPropertySet {
         return managedObject; // return the original object because setters 
return void
     }
 
-    public interface Holder extends GqlvHolder {
+    public interface Holder
+            extends GqlvHolder,
+                    ObjectSpecificationProvider,
+                    OneToOneAssociationProvider {
 
         GqlvProperty.Holder getHolder();
 
-        ObjectSpecification getObjectSpecification();
-
-        OneToOneAssociation getOneToOneAssociation();
-
     }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
index c4f8b3273a..d607c8ebed 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
@@ -111,11 +111,10 @@ public class GqlvPropertyValidate {
         return consent.isVetoed() ? 
consent.getReasonAsString().orElse("invalid") : null;
     }
 
-    public interface Holder extends GqlvHolder {
-
-        ObjectSpecification getObjectSpecification();
-
-        OneToOneAssociation getOneToOneAssociation();
+    public interface Holder
+            extends GqlvHolder,
+                    ObjectSpecificationProvider,
+                    OneToOneAssociationProvider {
 
         GqlvProperty.Holder getHolder();
     }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectActionParameterProvider.java
similarity index 80%
copy from 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
copy to 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectActionParameterProvider.java
index 14244c9ae7..98642c992b 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectActionParameterProvider.java
@@ -18,9 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-public interface GqlvMetaHolder extends GqlvHolder {
-    ObjectSpecification getObjectSpecification();
+import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
 
+public interface ObjectActionParameterProvider extends ObjectActionProvider {
+    ObjectActionParameter getObjectActionParameter();
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectActionProvider.java
similarity index 82%
copy from 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
copy to 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectActionProvider.java
index 14244c9ae7..45dfe01e58 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectActionProvider.java
@@ -18,9 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-public interface GqlvMetaHolder extends GqlvHolder {
-    ObjectSpecification getObjectSpecification();
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 
+public interface ObjectActionProvider extends 
ObjectMemberProvider<ObjectAction> {
+    ObjectAction getObjectAction();
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectAssociationProvider.java
similarity index 80%
copy from 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
copy to 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectAssociationProvider.java
index 14244c9ae7..f9ca318fd9 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectAssociationProvider.java
@@ -18,9 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-public interface GqlvMetaHolder extends GqlvHolder {
-    ObjectSpecification getObjectSpecification();
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 
+public interface ObjectAssociationProvider<T extends ObjectAssociation> 
extends ObjectMemberProvider<T> {
+    T getObjectAssociation();
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectMemberProvider.java
similarity index 83%
copy from 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
copy to 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectMemberProvider.java
index 14244c9ae7..e1ffb7afaf 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectMemberProvider.java
@@ -18,9 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-public interface GqlvMetaHolder extends GqlvHolder {
-    ObjectSpecification getObjectSpecification();
+import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
 
+public interface ObjectMemberProvider<T extends ObjectMember> {
+    T getObjectMember();
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectSpecificationProvider.java
similarity index 94%
copy from 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
copy to 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectSpecificationProvider.java
index 14244c9ae7..5ef002274f 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/ObjectSpecificationProvider.java
@@ -20,7 +20,6 @@ package org.apache.causeway.viewer.graphql.model.domain;
 
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 
-public interface GqlvMetaHolder extends GqlvHolder {
+public interface ObjectSpecificationProvider {
     ObjectSpecification getObjectSpecification();
-
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/OneToManyAssociationProvider.java
similarity index 79%
copy from 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
copy to 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/OneToManyAssociationProvider.java
index 14244c9ae7..5bd93507e9 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/OneToManyAssociationProvider.java
@@ -18,9 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-public interface GqlvMetaHolder extends GqlvHolder {
-    ObjectSpecification getObjectSpecification();
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 
+public interface OneToManyAssociationProvider extends 
ObjectAssociationProvider<OneToManyAssociation> {
+    OneToManyAssociation getOneToManyAssociation();
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/OneToOneAssociationProvider.java
similarity index 79%
rename from 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
rename to 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/OneToOneAssociationProvider.java
index 14244c9ae7..93ed7a5746 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/OneToOneAssociationProvider.java
@@ -18,9 +18,8 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
-
-public interface GqlvMetaHolder extends GqlvHolder {
-    ObjectSpecification getObjectSpecification();
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 
+public interface OneToOneAssociationProvider extends 
ObjectAssociationProvider<OneToOneAssociation> {
+    OneToOneAssociation getOneToOneAssociation();
 }

Reply via email to