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 2af7585d25093890e01b8da041c23b9ff07c27d5
Author: danhaywood <[email protected]>
AuthorDate: Mon Feb 12 22:27:24 2024 +0000

    CAUSEWAY-3676: makes fetchData abstract hook
---
 .../viewer/graphql/model/domain/GqlvAbstract.java  |   2 +
 .../viewer/graphql/model/domain/GqlvAction.java    |  10 +-
 .../graphql/model/domain/GqlvActionInvoke.java     |   3 +-
 .../graphql/model/domain/GqlvActionParam.java      |  11 +-
 .../model/domain/GqlvActionParamAutoComplete.java  |   3 +-
 .../model/domain/GqlvActionParamChoices.java       |   3 +-
 .../model/domain/GqlvActionParamDefault.java       | 185 ++++++++++-----------
 .../model/domain/GqlvActionParamDisabled.java      |   3 +-
 .../model/domain/GqlvActionParamHidden.java        |   3 +-
 .../model/domain/GqlvActionParamValidate.java      |   3 +-
 .../graphql/model/domain/GqlvActionParams.java     |   3 +-
 .../graphql/model/domain/GqlvActionValidity.java   |   3 +-
 .../graphql/model/domain/GqlvAssociation.java      |   7 +-
 .../graphql/model/domain/GqlvAssociationGet.java   |   3 +-
 .../graphql/model/domain/GqlvCollection.java       |   7 -
 .../graphql/model/domain/GqlvDomainObject.java     |   5 +-
 .../graphql/model/domain/GqlvDomainService.java    |   3 +-
 .../viewer/graphql/model/domain/GqlvMember.java    |  10 +-
 .../graphql/model/domain/GqlvMemberDisabled.java   |   4 +-
 .../graphql/model/domain/GqlvMemberHidden.java     |   4 +-
 .../viewer/graphql/model/domain/GqlvMeta.java      |   3 +-
 .../model/domain/GqlvMutationForAction.java        |   3 +-
 .../model/domain/GqlvMutationForProperty.java      |   3 +-
 .../viewer/graphql/model/domain/GqlvProperty.java  |  18 +-
 .../model/domain/GqlvPropertyAutoComplete.java     |   3 +-
 .../graphql/model/domain/GqlvPropertyChoices.java  |   3 +-
 .../graphql/model/domain/GqlvPropertySet.java      |   3 +-
 .../graphql/model/domain/GqlvPropertyValidate.java |   3 +-
 .../viewer/graphql/model/domain/GqlvScenario.java  |   8 +-
 .../graphql/model/domain/GqlvScenarioGiven.java    |  12 +-
 .../graphql/model/domain/GqlvScenarioName.java     |   3 +-
 .../model/toplevel/GqlvTopLevelMutation.java       |  12 ++
 .../graphql/model/toplevel/GqlvTopLevelQuery.java  |  12 ++
 .../e2e/scenario/Calculator_IntegTest.concat._.gql |   2 +-
 .../Calculator_IntegTest.concat.approved.json      |   2 +-
 35 files changed, 184 insertions(+), 181 deletions(-)

diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstract.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstract.java
index fc68e0857a..dcbe4c8616 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstract.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstract.java
@@ -18,6 +18,7 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLFieldDefinition;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
@@ -46,4 +47,5 @@ public abstract class GqlvAbstract {
         return getField() != null;
     }
 
+    protected abstract Object fetchData(DataFetchingEnvironment environment);
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
index 98c9d53eff..ad2b0d472c 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
@@ -50,7 +50,7 @@ import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 public class GqlvAction
-        extends GqlvMember<ObjectAction, GqlvAction.Holder>
+        extends GqlvMember<ObjectAction, GqlvMember.Holder>
         implements GqlvMemberHidden.Holder<ObjectAction>,
                    GqlvMemberDisabled.Holder<ObjectAction>,
                    GqlvActionInvoke.Holder,
@@ -265,12 +265,4 @@ public class GqlvAction
         }
     }
 
-    private Object fetchData(DataFetchingEnvironment dataFetchingEnvironment) {
-        return BookmarkedPojo.sourceFrom(dataFetchingEnvironment, context);
-    }
-
-
-
-    public interface Holder extends GqlvMember.Holder {
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
index 5324fbef86..6343802ac4 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
@@ -126,7 +126,8 @@ public class GqlvActionInvoke extends GqlvAbstract {
         );
     }
 
-    private Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java
index 70117e7009..a79aeb3a6c 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParam.java
@@ -21,21 +21,17 @@ package org.apache.causeway.viewer.graphql.model.domain;
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLFieldDefinition;
 
-import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
-import static graphql.schema.GraphQLObjectType.newObject;
-
 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.ObjectSpecification;
 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.fetcher.BookmarkedPojo;
-import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojoFetcher;
+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.Getter;
 import lombok.val;
@@ -150,7 +146,8 @@ public class GqlvActionParam
         validate.addDataFetcher(this);
     }
 
-    private Object fetchData(DataFetchingEnvironment dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(DataFetchingEnvironment 
dataFetchingEnvironment) {
         return BookmarkedPojo.sourceFrom(dataFetchingEnvironment, context);
     }
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java
index 7a3c554cc3..3925f18dc1 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamAutoComplete.java
@@ -85,7 +85,8 @@ package org.apache.causeway.viewer.graphql.model.domain;
          );
      }
 
-     private List<Object> fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+     @Override
+     protected List<Object> fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
          val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
          val objectSpecification = 
context.specificationLoader.loadSpecification(sourcePojo.getClass());
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java
index 2398cfa101..51caf2a031 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamChoices.java
@@ -77,7 +77,8 @@ package org.apache.causeway.viewer.graphql.model.domain;
          );
      }
 
-     private List<Object> fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+     @Override
+     protected List<Object> fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
          val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
          val objectSpecification = 
context.specificationLoader.loadSpecification(sourcePojo.getClass());
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java
index af5ca69297..3bc0991c9a 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDefault.java
@@ -1,4 +1,4 @@
- /*
+/*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
  *  distributed with this work for additional information
@@ -18,98 +18,91 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
- 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.types.TypeMapper;
- import org.apache.causeway.viewer.graphql.model.context.Context;
- 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 lombok.val;
- import lombok.extern.log4j.Log4j2;
-
- @Log4j2
- public class GqlvActionParamDefault extends GqlvAbstract {
-
-     private final Holder holder;
-
-     public GqlvActionParamDefault(
-             final Holder holder,
-             final Context context) {
-         super(context);
-         this.holder = holder;
-
-         val objectActionParameter = holder.getObjectActionParameter();
-
-         if (objectActionParameter.hasDefaults()) {
-             val elementType = objectActionParameter.getElementType();
-             val fieldBuilder = newFieldDefinition()
-                     .name("default")
-                     .type(context.typeMapper.outputTypeFor(elementType));
-             holder.addGqlArguments(holder.getObjectAction(), fieldBuilder, 
TypeMapper.InputContext.DEFAULT, holder.getParamNum());
-             setField(fieldBuilder.build());
-         } else {
-             setField(null);
-         }
-     }
-
-     public void addDataFetcher(Parent parent) {
-         context.codeRegistryBuilder.dataFetcher(
-                 parent.coordinatesFor(getField()),
-                 this::fetchData
-         );
-     }
-
-     private Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
-
-         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
-         val objectSpecification = 
context.specificationLoader.loadSpecification(sourcePojo.getClass());
-         if (objectSpecification == null) {
-             return Collections.emptyList();
-         }
-
-         val objectAction = holder.getObjectAction();
-         val managedObject = ManagedObject.adaptSingular(objectSpecification, 
sourcePojo);
-
-         val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
-         val argumentManagedObjects = 
holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
-
-         val managedAction = ManagedAction.of(managedObject, objectAction, 
Where.ANYWHERE);
-         val pendingArgs = ParameterNegotiationModel.of(managedAction, 
argumentManagedObjects);
-         val defaultManagedObject = 
objectActionParameter.getDefault(pendingArgs);
-
-         return defaultManagedObject.getPojo();
-     }
-
-     public interface Holder
-             extends ObjectSpecificationProvider,
-                     ObjectActionProvider,
-                     ObjectActionParameterProvider {
-         GqlvActionParam.Holder getHolder();
-
-         void addGqlArguments(
-                 ObjectAction objectAction,
-                 GraphQLFieldDefinition.Builder fieldBuilder,
-                 TypeMapper.InputContext inputContext,
-                 int paramNum);
-
-         Can<ManagedObject> argumentManagedObjectsFor(
-                 DataFetchingEnvironment dataFetchingEnvironment,
-                 ObjectAction objectAction,
-                 BookmarkService bookmarkService);
-     }
- }
+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.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;
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+public class GqlvActionParamDefault extends GqlvAbstract {
+    private final Holder holder;
+
+    public GqlvActionParamDefault(
+            final Holder holder,
+            final Context context) {
+        super(context);
+        this.holder = holder;
+        val objectActionParameter = holder.getObjectActionParameter();
+        if (objectActionParameter.hasDefaults()) {
+            val elementType = objectActionParameter.getElementType();
+            val fieldBuilder = newFieldDefinition()
+                    .name("default")
+                    .type(context.typeMapper.outputTypeFor(elementType));
+            holder.addGqlArguments(holder.getObjectAction(), fieldBuilder, 
TypeMapper.InputContext.DEFAULT, holder.getParamNum());
+            setField(fieldBuilder.build());
+        } else {
+            setField(null);
+        }
+    }
+
+    public void addDataFetcher(Parent parent) {
+        context.codeRegistryBuilder.dataFetcher(
+                parent.coordinatesFor(getField()),
+                this::fetchData
+        );
+    }
+
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+        val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
+        val objectSpecification = 
context.specificationLoader.loadSpecification(sourcePojo.getClass());
+        if (objectSpecification == null) {
+            return Collections.emptyList();
+        }
+        val objectAction = holder.getObjectAction();
+        val managedObject = ManagedObject.adaptSingular(objectSpecification, 
sourcePojo);
+        val objectActionParameter = 
objectAction.getParameterById(holder.getObjectActionParameter().getId());
+        val argumentManagedObjects = 
holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, 
context.bookmarkService);
+        val managedAction = ManagedAction.of(managedObject, objectAction, 
Where.ANYWHERE);
+        val pendingArgs = ParameterNegotiationModel.of(managedAction, 
argumentManagedObjects);
+        val defaultManagedObject = 
objectActionParameter.getDefault(pendingArgs);
+        return defaultManagedObject.getPojo();
+    }
+
+    public interface Holder
+            extends ObjectSpecificationProvider,
+            ObjectActionProvider,
+            ObjectActionParameterProvider {
+        GqlvActionParam.Holder getHolder();
+
+        void addGqlArguments(
+                ObjectAction objectAction,
+                GraphQLFieldDefinition.Builder fieldBuilder,
+                TypeMapper.InputContext inputContext,
+                int paramNum);
+
+        Can<ManagedObject> argumentManagedObjectsFor(
+                DataFetchingEnvironment dataFetchingEnvironment,
+                ObjectAction objectAction,
+                BookmarkService bookmarkService);
+    }
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java
index ee8dcb76f1..7dd596a560 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamDisabled.java
@@ -65,7 +65,8 @@ public class GqlvActionParamDisabled extends GqlvAbstract {
         );
     }
 
-    private String fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+    @Override
+    protected String fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
         val objectSpecification = 
context.specificationLoader.loadSpecification(sourcePojo.getClass());
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
index 8c2eb259e4..ee97875849 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamHidden.java
@@ -64,7 +64,8 @@ public class GqlvActionParamHidden extends GqlvAbstract {
         );
     }
 
-    private boolean fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java
index 51f1bbd5f0..f830662f77 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamValidate.java
@@ -64,7 +64,8 @@ public class GqlvActionParamValidate extends GqlvAbstract {
         );
     }
 
-    private String fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+    @Override
+    protected String fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
index 36ad45b387..4d656ede8e 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
@@ -104,7 +104,8 @@ public class GqlvActionParams
     }
 
 
-    private Object fetchData(DataFetchingEnvironment dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(DataFetchingEnvironment 
dataFetchingEnvironment) {
         return BookmarkedPojo.sourceFrom(dataFetchingEnvironment, context);
     }
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java
index c48cc939d8..90064a0a04 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java
@@ -75,7 +75,8 @@ public class GqlvActionValidity extends GqlvAbstract {
         );
     }
 
-    private Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         final ObjectAction objectAction = holder.getObjectAction();
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
index c34c3e7edb..831ec97398 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
@@ -18,13 +18,15 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
 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.fetcher.BookmarkedPojo;
 
-public abstract class GqlvAssociation<T extends ObjectAssociation, H extends 
GqlvAssociation.Holder> extends GqlvMember<T, H> {
+public abstract class GqlvAssociation<T extends ObjectAssociation, H extends 
GqlvMember.Holder> extends GqlvMember<T, H> {
 
     public GqlvAssociation(
             final H holder,
@@ -42,7 +44,4 @@ public abstract class GqlvAssociation<T extends 
ObjectAssociation, H extends Gql
         return getObjectMember();
     }
 
-    public interface Holder
-            extends GqlvMember.Holder {
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
index ffb2b6b63f..de73b833ce 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
@@ -76,7 +76,8 @@ public abstract class GqlvAssociationGet<T extends 
ObjectAssociation> extends Gq
         }
     }
 
-    Object fetchData(final DataFetchingEnvironment dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         // TODO: introduce evaluator
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
index cc6f33cf1e..69e98cde4d 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
@@ -76,11 +76,4 @@ public class GqlvCollection
         get.addDataFetcher(this);
     }
 
-    private Object fetchData(DataFetchingEnvironment dataFetchingEnvironment) {
-        return BookmarkedPojo.sourceFrom(dataFetchingEnvironment, context);
-    }
-
-    public interface Holder extends GqlvAssociation.Holder {
-
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
index 8edaace838..1fa4767f53 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
@@ -50,7 +50,7 @@ import lombok.val;
  */
 public class GqlvDomainObject
         extends GqlvAbstractCustom
-        implements GqlvAction.Holder, GqlvProperty.Holder, 
GqlvCollection.Holder, GqlvMeta.Holder {
+        implements GqlvMember.Holder, GqlvMeta.Holder {
 
     @Getter private final ObjectSpecification objectSpecification;
 
@@ -168,7 +168,8 @@ public class GqlvDomainObject
         actions.forEach((id, action) -> action.addDataFetcher(this));
     }
 
-    private Object fetchData(DataFetchingEnvironment environment) {
+    @Override
+    protected Object fetchData(DataFetchingEnvironment environment) {
         Object target = environment.getArgument("object");
         return GqlvAction.asPojo(getObjectSpecification(), target, 
this.context.bookmarkService)
                 .orElse(null);
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
index 3c9677549d..d0467925fc 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
@@ -98,7 +98,8 @@ public class GqlvDomainService
         }
     }
 
-    private Object fetchData(DataFetchingEnvironment environment) {
+    @Override
+    protected Object fetchData(DataFetchingEnvironment environment) {
         return getServicePojo();
     }
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
index d7751f2c49..9aabeb5195 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
@@ -18,13 +18,12 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import graphql.schema.GraphQLFieldDefinition;
-
 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.fetcher.BookmarkedPojo;
 import 
org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 
-import graphql.schema.GraphQLObjectType;
+import graphql.schema.DataFetchingEnvironment;
 
 import lombok.Getter;
 
@@ -49,6 +48,11 @@ public abstract class GqlvMember<T extends ObjectMember, H 
extends GqlvMember.Ho
         return objectMember.getFeatureIdentifier().getFullIdentityString();
     }
 
+    @Override
+    protected Object fetchData(DataFetchingEnvironment 
dataFetchingEnvironment) {
+        return BookmarkedPojo.sourceFrom(dataFetchingEnvironment, context);
+    }
+
     public interface Holder
             extends ObjectSpecificationProvider {
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
index 37d013ee37..115c14b5ae 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
@@ -59,8 +59,8 @@ public class GqlvMemberDisabled<T extends ObjectMember> 
extends GqlvAbstract {
         );
     }
 
-    private String fetchData(
-            final DataFetchingEnvironment dataFetchingEnvironment) {
+    @Override
+    protected String fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java
index 0baf237c8e..2928490117 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java
@@ -59,8 +59,8 @@ public class GqlvMemberHidden<T extends ObjectMember> extends 
GqlvAbstract {
         );
     }
 
-    private boolean fetchData(
-            final DataFetchingEnvironment dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
index 6a540dc31f..cedc1250e6 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
@@ -91,7 +91,8 @@ public class GqlvMeta extends GqlvAbstractCustom {
         }
     }
 
-    private Fetcher fetchData(DataFetchingEnvironment environment) {
+    @Override
+    public Object fetchData(final DataFetchingEnvironment environment) {
         return context.bookmarkService.bookmarkFor(environment.getSource())
                 .map(bookmark -> new Fetcher(bookmark, 
context.bookmarkService, context.objectManager))
                 .orElseThrow();
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java
index d62d6439c9..5b01b9ed3e 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java
@@ -122,7 +122,8 @@ public class GqlvMutationForAction extends GqlvAbstract {
         );
     }
 
-    private Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val isService = objectSpec.getBeanSort().isManagedBeanContributing();
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java
index ec148c55e6..c5088fab9f 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java
@@ -92,7 +92,8 @@ public class GqlvMutationForProperty extends GqlvAbstract {
         }
     }
 
-    private Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
 
         Object target = dataFetchingEnvironment.getArgument(argumentName);
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
index 2ae32a0d9b..f60c262077 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
@@ -18,25 +18,19 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLArgument;
 import graphql.schema.GraphQLFieldDefinition;
 
-import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
-import static graphql.schema.GraphQLObjectType.newObject;
-
 import org.apache.causeway.core.config.CausewayConfiguration;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojoFetcher;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
 
 public class GqlvProperty
-        extends GqlvAssociation<OneToOneAssociation, GqlvProperty.Holder>
+        extends GqlvAssociation<OneToOneAssociation, GqlvMember.Holder>
         implements GqlvMemberHidden.Holder<OneToOneAssociation>,
                    GqlvMemberDisabled.Holder<OneToOneAssociation>,
                    GqlvPropertyGet.Holder,
@@ -154,12 +148,4 @@ public class GqlvProperty
         }
     }
 
-    private Object fetchData(DataFetchingEnvironment dataFetchingEnvironment) {
-        return BookmarkedPojo.sourceFrom(dataFetchingEnvironment, context);
-    }
-
-
-    public interface Holder
-            extends GqlvAssociation.Holder {
-    }
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java
index f40328f20d..0f1abe5a0a 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java
@@ -87,7 +87,8 @@ public class GqlvPropertyAutoComplete extends GqlvAbstract {
         }
     }
 
-    List<Object> fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java
index 2e6d34a5f5..a6358d4d8d 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java
@@ -83,7 +83,8 @@ public class GqlvPropertyChoices extends GqlvAbstract {
         }
     }
 
-    List<Object> fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
index a7b0c4b4d5..0d608cff5f 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
@@ -85,7 +85,8 @@ public class GqlvPropertySet extends GqlvAbstract {
         }
     }
 
-    Object fetchData(final DataFetchingEnvironment dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
index acc7059bf2..2a4f98d60f 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
@@ -70,7 +70,8 @@ public class GqlvPropertyValidate extends GqlvAbstract {
         }
     }
 
-    Object fetchData(final DataFetchingEnvironment dataFetchingEnvironment) {
+    @Override
+    protected Object fetchData(final DataFetchingEnvironment 
dataFetchingEnvironment) {
 
         val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
index 9674a5c7ff..f6dcfe9b9c 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
@@ -19,15 +19,10 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
 import graphql.Scalars;
-import graphql.schema.DataFetcher;
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLArgument;
 import graphql.schema.GraphQLFieldDefinition;
 
-import static graphql.schema.FieldCoordinates.coordinates;
-import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
-import static graphql.schema.GraphQLObjectType.newObject;
-
 import org.apache.causeway.viewer.graphql.model.context.Context;
 
 /**
@@ -73,7 +68,8 @@ public class GqlvScenario
         scenarioGiven.addDataFetchers(this);
     }
 
-    private DataFetchingEnvironment fetchData(DataFetchingEnvironment 
environment) {
+    @Override
+    protected DataFetchingEnvironment fetchData(DataFetchingEnvironment 
environment) {
         String scenarioName = environment.getArgument("name");
         environment.getGraphQlContext().put(KEY_SCENARIO_NAME, scenarioName);
         return environment;
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
index c37dc92e40..52430791e3 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
@@ -1,17 +1,14 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import graphql.schema.DataFetcher;
-import graphql.schema.DataFetchingEnvironment;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
+import graphql.schema.DataFetchingEnvironment;
+
 import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 
-import static graphql.schema.GraphQLObjectType.newObject;
-
 public class GqlvScenarioGiven
         extends GqlvAbstractCustom
         implements Parent {
@@ -60,7 +57,7 @@ public class GqlvScenarioGiven
     public void addDataFetchers(Parent parent) {
         context.codeRegistryBuilder.dataFetcher(
                 parent.coordinatesFor(getField()),
-                GqlvScenarioGiven::fetchData);
+                this::fetchData);
 
         domainServices.forEach(domainService -> {
             boolean actionsAdded = domainService.hasActions();
@@ -72,7 +69,8 @@ public class GqlvScenarioGiven
         domainObjects.forEach(domainObject -> 
domainObject.addDataFetchers(this));
     }
 
-    private static DataFetchingEnvironment fetchData(DataFetchingEnvironment 
environment) {
+    @Override
+    protected DataFetchingEnvironment fetchData(DataFetchingEnvironment 
environment) {
         return environment;
     }
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java
index 9a7aa4cf03..2d5aaed682 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java
@@ -30,7 +30,8 @@ public class GqlvScenarioName extends GqlvAbstract {
                 this::fetchData);
     }
 
-    private Object fetchData(DataFetchingEnvironment environment) {
+    @Override
+    protected Object fetchData(DataFetchingEnvironment environment) {
         val graphQlContext = environment.getGraphQlContext();
         return graphQlContext.get(GqlvScenario.KEY_SCENARIO_NAME);
     }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelMutation.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelMutation.java
index 547e627411..7608449710 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelMutation.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelMutation.java
@@ -3,6 +3,7 @@ package org.apache.causeway.viewer.graphql.model.toplevel;
 import java.util.ArrayList;
 import java.util.List;
 
+import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLObjectType;
 
 import static graphql.schema.GraphQLObjectType.newObject;
@@ -46,6 +47,17 @@ public class GqlvTopLevelMutation
         buildObjectType();
     }
 
+    /**
+     * Never used.
+     *
+     * @param environment
+     * @return
+     */
+    @Override
+    protected Object fetchData(DataFetchingEnvironment environment) {
+        return null;
+    }
+
     public void addAction(ObjectSpecification objectSpec, final ObjectAction 
objectAction) {
         val gqlvMutationForAction = new GqlvMutationForAction(objectSpec, 
objectAction, context);
         addChildField(gqlvMutationForAction.getField());
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
index eff065063f..8696374203 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
@@ -3,6 +3,7 @@ package org.apache.causeway.viewer.graphql.model.toplevel;
 import java.util.ArrayList;
 import java.util.List;
 
+import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLObjectType;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
@@ -62,6 +63,17 @@ public class GqlvTopLevelQuery
         buildObjectType();
     }
 
+    /**
+     * Never used.
+     *
+     * @param environment
+     * @return
+     */
+    @Override
+    protected Object fetchData(DataFetchingEnvironment environment) {
+        return null;
+    }
+
     @Override
     public GraphQLObjectType getGqlObjectType() {
         return super.getGqlObjectType();
diff --git 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat._.gql
 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat._.gql
index a07ae57dbf..88cf551654 100644
--- 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat._.gql
+++ 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat._.gql
@@ -1,5 +1,5 @@
 {
-  Scenario(name: "Fizz buzz"){
+  Scenario(name: "Fizz and buzz are concatenated together"){
     Name
     Given {
       university_calc_Calculator {
diff --git 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json
 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json
index 6aadf438a5..6f44d5df24 100644
--- 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json
+++ 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json
@@ -1,7 +1,7 @@
 {
   "data" : {
     "Scenario" : {
-      "Name" : "Fizz buzz",
+      "Name" : "Fizz and buzz are concatenated together",
       "Given" : {
         "university_calc_Calculator" : {
           "concat" : {


Reply via email to