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 00205b7ef2791ab731e157d50241b336ad856c8b
Author: danhaywood <[email protected]>
AuthorDate: Sun Jan 21 15:08:28 2024 +0000

    CAUSEWAY-3676: moves responsibility for creating mutations field into 
mutations object
---
 .../graphql/model/domain/GqlvDomainObject.java     |  57 ++--------
 .../graphql/model/domain/GqlvDomainService.java    |  38 ++++---
 .../viewer/graphql/model/domain/GqlvMutations.java |  42 +++++--
 .../test/e2e/Schema_IntegTest.schema.approved.json | 121 ---------------------
 .../graphql/test/src/test/resources/schema.gql     |  11 --
 .../integration/GraphQlSourceForCauseway.java      |  26 +++--
 6 files changed, 83 insertions(+), 212 deletions(-)

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 e938afbfdd..b0bc898a0b 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
@@ -18,7 +18,6 @@ import 
org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
-import org.apache.causeway.viewer.graphql.model.types._Constants;
 import org.apache.causeway.viewer.graphql.model.util.TypeNames;
 
 import lombok.Getter;
@@ -50,7 +49,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
     private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
 
     @Getter private final GqlvMeta meta;
-    @Getter private final GqlvMutations mutators;
+    @Getter private final GqlvMutations mutations;
 
     @Getter private final GraphQLObjectType.Builder gqlObjectTypeBuilder;
 
@@ -92,7 +91,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
         this.gqlObjectTypeBuilder = 
newObject().name(TypeNames.objectTypeNameFor(objectSpecification));
 
         this.meta = new GqlvMeta(this, codeRegistryBuilder, bookmarkService, 
objectManager);
-        this.mutators = new GqlvMutations(this, codeRegistryBuilder, 
bookmarkService, objectManager);
+        this.mutations = new GqlvMutations(this, codeRegistryBuilder, 
bookmarkService, objectManager);
 
         gqlObjectTypeBuilder.field(meta.getMetaField());
 
@@ -197,14 +196,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                     addAction(objectAction);
                 });
 
-        Optional<GraphQLObjectType> mutatorsTypeIfAny = 
buildMutatorsTypeIfAny();
-        mutatorsTypeIfAny.ifPresent(mutatorsType -> {
-            GraphQLFieldDefinition gql_mutations = newFieldDefinition()
-                    .name(_Constants.GQL_MUTATIONS_FIELDNAME)
-                    .type(mutatorsType)
-                    .build();
-            gqlObjectTypeBuilder.field(gql_mutations);
-        });
+        buildMutationsTypeAndFieldIfRequired();
 
         return anyActions.get();
     }
@@ -213,7 +205,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
         if (objectAction.getSemantics().isSafeInNature()) {
             safeActions.add(new GqlvAction(this, objectAction, 
gqlObjectTypeBuilder, codeRegistryBuilder));
         } else {
-            mutators.addAction(objectAction);
+            mutations.addAction(objectAction);
         }
     }
 
@@ -243,17 +235,17 @@ public class GqlvDomainObject implements 
GqlvActionHolder, GqlvPropertyHolder, G
 
 
     /**
-     * @see #buildMutatorsTypeIfAny()
+     * @see #buildMutationsTypeAndFieldIfRequired()
      */
-    public Optional<GraphQLObjectType> getMutatorsTypeIfAny() {
-        return mutators.getMutationsTypeIfAny();
+    public Optional<GraphQLObjectType> getMutationsTypeIfAny() {
+        return mutations.getMutationsTypeIfAny();
     }
 
     /**
-     * @see #getMutatorsTypeIfAny()
+     * @see #getMutationsTypeIfAny()
      */
-    public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
-        return mutators.buildMutationsTypeIfAny();
+    public Optional<GraphQLObjectType> buildMutationsTypeAndFieldIfRequired() {
+        return mutations.buildMutationsTypeAndFieldIfRequired();
     }
 
 
@@ -274,32 +266,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
     }
 
     public void addDataFetchersForMutators() {
-
-        // TODO: something similar to addFetchers for safe actions, but 
applied to GqlvMutationsFetcher instead; perhaps they share a common interface?
-
-        // earlier code...
-
-//            
codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates(graphQLTypeReference,
 gql_mutations), new DataFetcher<Object>() {
-//                @Override
-//                public Object get(DataFetchingEnvironment environment) 
throws Exception {
-//
-//                    Bookmark bookmark = 
bookmarkService.bookmarkFor(environment.getSource()).orElse(null);
-//                    if (bookmark == null) return null; //TODO: is this 
correct ?
-//                    return new GqlvMutationsFetcher(bookmark, 
bookmarkService, mutatorsTypeFields);
-//                }
-//            });
-//
-//            // for each field something like
-//            
codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates(mutatorsType, 
idField), new DataFetcher<Object>() {
-//                @Override
-//                public Object get(DataFetchingEnvironment environment) 
throws Exception {
-//
-//                    Fetcher gqlMeta = environment.getSource();
-//
-//                    return gqlMeta.id();
-//                }
-//            });
-
+        getMutations().addDataFetchersForActions();
     }
 
 
@@ -322,7 +289,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
         
graphQLTypeRegistry.addTypeIfNotAlreadyPresent(getMeta().getMetaField().getType());
         
graphQLTypeRegistry.addTypeIfNotAlreadyPresent(getGqlInputObjectType());
 
-        
getMutatorsTypeIfAny().ifPresent(graphQLTypeRegistry::addTypeIfNotAlreadyPresent);
+        
getMutationsTypeIfAny().ifPresent(graphQLTypeRegistry::addTypeIfNotAlreadyPresent);
     }
 
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
index abe235c56b..3eb90ee6ed 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
@@ -13,7 +13,6 @@ import 
org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
-import org.apache.causeway.viewer.graphql.model.types._Constants;
 import org.apache.causeway.viewer.graphql.model.util.TypeNames;
 
 import lombok.Getter;
@@ -36,7 +35,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutationsHolder
     @Getter private final Object servicePojo;
     private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
 
-    @Getter private final GqlvMutations mutators;
+    @Getter private final GqlvMutations mutations;
     private final BookmarkService bookmarkService;
     private final ObjectManager objectManager;
 
@@ -71,7 +70,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutationsHolder
 
         this.gqlObjectTypeBuilder = 
newObject().name(TypeNames.objectTypeNameFor(objectSpecification));
 
-        this.mutators = new GqlvMutations(this, codeRegistryBuilder, 
bookmarkService, objectManager);
+        this.mutations = new GqlvMutations(this, codeRegistryBuilder, 
bookmarkService, objectManager);
 
         this.bookmarkService = bookmarkService;
         this.objectManager = objectManager;
@@ -89,14 +88,15 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutationsHolder
                     addAction(objectAction);
                 });
 
-        Optional<GraphQLObjectType> mutatorsTypeIfAny = 
buildMutatorsTypeIfAny();
-        mutatorsTypeIfAny.ifPresent(mutatorsType -> {
-            GraphQLFieldDefinition gql_mutations = newFieldDefinition()
-                    .name(_Constants.GQL_MUTATIONS_FIELDNAME)
-                    .type(mutatorsType)
-                    .build();
-            gqlObjectTypeBuilder.field(gql_mutations);
-        });
+        buildMutatorsTypeIfRequired();
+//        Optional<GraphQLObjectType> mutatorsTypeIfAny = 
buildMutationsTypeAndFieldIfRequired();
+//        mutatorsTypeIfAny.ifPresent(mutatorsType -> {
+//            GraphQLFieldDefinition gql_mutations = newFieldDefinition()
+//                    .name(_Constants.GQL_MUTATIONS_FIELDNAME)
+//                    .type(mutatorsType)
+//                    .build();
+//            gqlObjectTypeBuilder.field(gql_mutations);
+//        });
 
         return anyActions.get();
     }
@@ -137,17 +137,17 @@ public class GqlvDomainService implements 
GqlvActionHolder, GqlvMutationsHolder
 
 
     /**
-     * @see #buildMutatorsTypeIfAny()
+     * @see #buildMutatorsTypeIfRequired()
      */
     public Optional<GraphQLObjectType> getMutatorsTypeIfAny() {
-        return mutators.getMutationsTypeIfAny();
+        return mutations.getMutationsTypeIfAny();
     }
 
     /**
      * @see #getMutatorsTypeIfAny()
      */
-    public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
-        return mutators.buildMutationsTypeIfAny();
+    public Optional<GraphQLObjectType> buildMutatorsTypeIfRequired() {
+        return mutations.buildMutationsTypeAndFieldIfRequired();
     }
 
 
@@ -168,4 +168,12 @@ public class GqlvDomainService implements 
GqlvActionHolder, GqlvMutationsHolder
         
getMutatorsTypeIfAny().ifPresent(graphQLTypeRegistry::addTypeIfNotAlreadyPresent);
     }
 
+    public void addDataFetchersForSafeActions() {
+        getSafeActions().forEach(GqlvAction::addDataFetcher);
+    }
+
+    public void addDataFetchersForMutators() {
+        getMutations().addDataFetchersForActions();
+    }
+
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
index 7a467ea319..21a08dcb1e 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
@@ -1,6 +1,7 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
 import graphql.schema.GraphQLCodeRegistry;
+import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
 import lombok.Getter;
@@ -13,6 +14,7 @@ import java.util.Optional;
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.types._Constants;
 import org.apache.causeway.viewer.graphql.model.util.TypeNames;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
@@ -31,11 +33,17 @@ public class GqlvMutations implements GqlvActionHolder {
     @Getter final GraphQLObjectType.Builder gqlObjectTypeBuilder;
 
     /**
-     * Built lazily using {@link #buildMutationsTypeIfAny()}
+     * Built lazily using {@link #buildMutationsTypeAndFieldIfRequired()}
      */
     @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
     private Optional<GraphQLObjectType> mutationsTypeIfAny;
 
+    /**
+     * Built lazily using {@link #buildMutationsTypeAndFieldIfRequired()}
+     */
+    @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
+    private Optional<GraphQLFieldDefinition> mutationsFieldIfAny;
+
     public GqlvMutations(
             final GqlvMutationsHolder holder,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder,
@@ -63,12 +71,12 @@ public class GqlvMutations implements GqlvActionHolder {
 
 
     /**
-     * @see #buildMutationsTypeIfAny()
+     * @see #buildMutationsTypeAndFieldIfRequired()
      */
     public Optional<GraphQLObjectType> getMutationsTypeIfAny() {
         //noinspection OptionalAssignedToNull
         if (mutationsTypeIfAny == null) {
-            throw new IllegalArgumentException(String.format("Gql MutatorsType 
has not yet been built for %s", 
holder.getObjectSpecification().getLogicalTypeName()));
+            throw new IllegalArgumentException(String.format("Gql mutators 
type and field has not yet been built for %s", 
holder.getObjectSpecification().getLogicalTypeName()));
         }
         return mutationsTypeIfAny;
     }
@@ -76,14 +84,32 @@ public class GqlvMutations implements GqlvActionHolder {
     /**
      * @see #getMutationsTypeIfAny()
      */
-    public Optional<GraphQLObjectType> buildMutationsTypeIfAny() {
+    public Optional<GraphQLObjectType> buildMutationsTypeAndFieldIfRequired() {
         //noinspection OptionalAssignedToNull
         if (mutationsTypeIfAny != null) {
-            throw new IllegalArgumentException("Gql MutatorsType has already 
been built for " + holder.getObjectSpecification().getLogicalTypeName());
+            throw new IllegalArgumentException("Gql mutations type and field 
has already been built for " + 
holder.getObjectSpecification().getLogicalTypeName());
+        }
+        if (hasActions()) {
+
+            // create the type
+            GraphQLObjectType mutationsType = gqlObjectTypeBuilder.build();
+            this.mutationsTypeIfAny = Optional.of(mutationsType);
+
+            // create the field
+            GraphQLFieldDefinition mutationsField = newFieldDefinition()
+                    .name(_Constants.GQL_MUTATIONS_FIELDNAME)
+                    .type(mutationsType)
+                    .build();
+            mutationsFieldIfAny = Optional.of(mutationsField);
+
+            // register the field into the owning type
+            gqlObjectTypeBuilder.field(mutationsField);
+
+        } else {
+            mutationsFieldIfAny = Optional.empty();
+            mutationsTypeIfAny = Optional.empty();
         }
-        return mutationsTypeIfAny = hasActions()
-                ? Optional.of(gqlObjectTypeBuilder.build())
-                : Optional.empty();
+        return mutationsTypeIfAny;
     }
 
     @Override
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
index 48597cbcc3..fd611a8a3e 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
@@ -1364,17 +1364,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : "causeway_applib_PropertyNode__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -1970,17 +1959,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : "causeway_applib_node_ActionNode__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -2127,17 +2105,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : "causeway_applib_node_CollectionNode__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -4866,17 +4833,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : 
"org_apache_causeway_commons_functional_Either__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -5141,17 +5097,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : 
"org_apache_causeway_commons_functional_Railway__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -5362,17 +5307,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : 
"org_apache_causeway_commons_functional_ThrowingConsumer__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -5511,17 +5445,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : 
"org_apache_causeway_commons_functional_ThrowingFunction__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -5684,17 +5607,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : 
"org_apache_causeway_commons_functional_ThrowingRunnable__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -5870,17 +5782,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : "org_apache_causeway_commons_functional_Try__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -6549,17 +6450,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : 
"org_apache_causeway_core_metamodel_inspect_model_MemberNode__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -6969,17 +6859,6 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        }, {
-          "name" : "_gql_mutations",
-          "description" : null,
-          "args" : [ ],
-          "type" : {
-            "kind" : "OBJECT",
-            "name" : "university_dept_DeptHead__mutations",
-            "ofType" : null
-          },
-          "isDeprecated" : false,
-          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
diff --git a/incubator/viewers/graphql/test/src/test/resources/schema.gql 
b/incubator/viewers/graphql/test/src/test/resources/schema.gql
index 0bbeabb0c6..25cdac1a1c 100644
--- a/incubator/viewers/graphql/test/src/test/resources/schema.gql
+++ b/incubator/viewers/graphql/test/src/test/resources/schema.gql
@@ -68,7 +68,6 @@ type causeway_applib_ParameterNode__meta {
 
 type causeway_applib_PropertyNode {
   _gql_meta: causeway_applib_PropertyNode__meta
-  _gql_mutations: causeway_applib_PropertyNode__mutations
   mixedIn: String!
   parentNode: causeway_applib_TypeNode!
   property: String!
@@ -130,7 +129,6 @@ type causeway_applib_UserMenu {
 
 type causeway_applib_node_ActionNode {
   _gql_meta: causeway_applib_node_ActionNode__meta
-  _gql_mutations: causeway_applib_node_ActionNode__mutations
   action: String!
   mixedIn: String!
   parentNode: causeway_applib_TypeNode!
@@ -147,7 +145,6 @@ type causeway_applib_node_ActionNode__mutations {
 
 type causeway_applib_node_CollectionNode {
   _gql_meta: causeway_applib_node_CollectionNode__meta
-  _gql_mutations: causeway_applib_node_CollectionNode__mutations
   collection: String!
   mixedIn: String!
   parentNode: causeway_applib_TypeNode!
@@ -423,7 +420,6 @@ type java_util_stream_Stream__meta {
 
 type org_apache_causeway_commons_functional_Either {
   _gql_meta: org_apache_causeway_commons_functional_Either__meta
-  _gql_mutations: org_apache_causeway_commons_functional_Either__mutations
   left: String!
   right: String!
 }
@@ -444,7 +440,6 @@ type 
org_apache_causeway_commons_functional_Either__mutations {
 
 type org_apache_causeway_commons_functional_Railway {
   _gql_meta: org_apache_causeway_commons_functional_Railway__meta
-  _gql_mutations: org_apache_causeway_commons_functional_Railway__mutations
   failure: String!
   success: String!
 }
@@ -464,7 +459,6 @@ type 
org_apache_causeway_commons_functional_Railway__mutations {
 
 type org_apache_causeway_commons_functional_ThrowingConsumer {
   _gql_meta: org_apache_causeway_commons_functional_ThrowingConsumer__meta
-  _gql_mutations: 
org_apache_causeway_commons_functional_ThrowingConsumer__mutations
 }
 
 type org_apache_causeway_commons_functional_ThrowingConsumer__meta {
@@ -479,7 +473,6 @@ type 
org_apache_causeway_commons_functional_ThrowingConsumer__mutations {
 
 type org_apache_causeway_commons_functional_ThrowingFunction {
   _gql_meta: org_apache_causeway_commons_functional_ThrowingFunction__meta
-  _gql_mutations: 
org_apache_causeway_commons_functional_ThrowingFunction__mutations
 }
 
 type org_apache_causeway_commons_functional_ThrowingFunction__meta {
@@ -495,7 +488,6 @@ type 
org_apache_causeway_commons_functional_ThrowingFunction__mutations {
 
 type org_apache_causeway_commons_functional_ThrowingRunnable {
   _gql_meta: org_apache_causeway_commons_functional_ThrowingRunnable__meta
-  _gql_mutations: 
org_apache_causeway_commons_functional_ThrowingRunnable__mutations
 }
 
 type org_apache_causeway_commons_functional_ThrowingRunnable__meta {
@@ -513,7 +505,6 @@ type 
org_apache_causeway_commons_functional_ThrowingRunnable__mutations {
 
 type org_apache_causeway_commons_functional_Try {
   _gql_meta: org_apache_causeway_commons_functional_Try__meta
-  _gql_mutations: org_apache_causeway_commons_functional_Try__mutations
   failure: String!
   success: String!
 }
@@ -557,7 +548,6 @@ type 
org_apache_causeway_core_metamodel_inspect_model_MMNode__meta {
 
 type org_apache_causeway_core_metamodel_inspect_model_MemberNode {
   _gql_meta: org_apache_causeway_core_metamodel_inspect_model_MemberNode__meta
-  _gql_mutations: 
org_apache_causeway_core_metamodel_inspect_model_MemberNode__mutations
   mixedIn: String!
   parentNode: causeway_applib_TypeNode!
 }
@@ -601,7 +591,6 @@ type university_dept_Department__meta {
 
 type university_dept_DeptHead {
   _gql_meta: university_dept_DeptHead__meta
-  _gql_mutations: university_dept_DeptHead__mutations
   department: university_dept_Department
   name: String
 }
diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 9b89e2b524..c9abbcfe9d 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -52,7 +52,6 @@ import graphql.GraphQL;
 import graphql.execution.DataFetcherExceptionHandler;
 import graphql.execution.DataFetcherExceptionHandlerParameters;
 import graphql.execution.DataFetcherExceptionHandlerResult;
-import graphql.execution.instrumentation.tracing.TracingInstrumentation;
 import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLSchema;
 
@@ -187,7 +186,10 @@ public class GraphQlSourceForCauseway implements 
GraphQlSource {
 
         domainService.registerTypesInto(graphQLTypeRegistry);
 
-        domainService.getSafeActions().forEach(GqlvAction::addDataFetcher);
+        domainService.addDataFetchersForSafeActions();
+        domainService.addDataFetchersForMutators();
+
+
 
         topLevelQueryStructure.addFieldFor(domainService, codeRegistryBuilder);
     }
@@ -197,22 +199,22 @@ public class GraphQlSourceForCauseway implements 
GraphQlSource {
             final ObjectSpecification objectSpec,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
 
-        val gqlvDomainObject = new GqlvDomainObject(objectSpec, 
codeRegistryBuilder, bookmarkService, objectManager);
+        val domainObject = new GqlvDomainObject(objectSpec, 
codeRegistryBuilder, bookmarkService, objectManager);
 
-        gqlvDomainObject.addPropertiesAsFields();
-        gqlvDomainObject.addCollectionsAsLists();
-        gqlvDomainObject.addActions();
+        domainObject.addPropertiesAsFields();
+        domainObject.addCollectionsAsLists();
+        domainObject.addActions();
 
         // build
-        gqlvDomainObject.registerTypesInto(graphQLTypeRegistry);
+        domainObject.registerTypesInto(graphQLTypeRegistry);
 
         // create and register data fetchers
-        gqlvDomainObject.addDataFetchersForMetaData();
+        domainObject.addDataFetchersForMetaData();
 
-        gqlvDomainObject.addDataFetchersForProperties();
-        gqlvDomainObject.addDataFetchersForCollections();
-        gqlvDomainObject.addDataFetchersForSafeActions();
-        gqlvDomainObject.getMutators().addDataFetchersForActions();
+        domainObject.addDataFetchersForProperties();
+        domainObject.addDataFetchersForCollections();
+        domainObject.addDataFetchersForSafeActions();
+        domainObject.addDataFetchersForMutators();
     }
 
 }

Reply via email to