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


The following commit(s) were added to refs/heads/CAUSEWAY-3676 by this push:
     new 252f41e686 CAUSEWAY-3676: moves responsibility
252f41e686 is described below

commit 252f41e686bdd73d07888deb03f2731272fee2cb
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 18:26:20 2024 +0000

    CAUSEWAY-3676: moves responsibility
---
 .../graphql/viewer/source/GqlvServiceBehaviour.java   |  2 +-
 .../graphql/viewer/source/GqlvServiceStructure.java   | 15 ++-------------
 .../viewer/source/GqlvTopLevelQueryStructure.java     | 19 +++++++++++++++++--
 .../graphql/viewer/source/QueryFieldFactory.java      | 11 +----------
 4 files changed, 21 insertions(+), 26 deletions(-)

diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
index 7eca805b32..454aa2b20e 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceBehaviour.java
@@ -24,7 +24,7 @@ import 
org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 public class GqlvServiceBehaviour {
 
     private final GqlvServiceStructure structure;
-    private final Object service;
+    final Object service;
     private final SpecificationLoader specificationLoader;
     private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
 
diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
index 4e5889c6b3..b9588152e5 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvServiceStructure.java
@@ -1,28 +1,18 @@
 package org.apache.causeway.viewer.graphql.viewer.source;
 
-import graphql.schema.DataFetcher;
-import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.FieldCoordinates;
 import graphql.schema.GraphQLArgument;
-import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
 import graphql.schema.GraphQLOutputType;
 
 import lombok.Getter;
-import lombok.val;
 
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import org.apache.causeway.commons.collections.Can;
-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.viewer.util._BiMap;
 
@@ -103,7 +93,7 @@ public class GqlvServiceStructure {
     /**
      * @see #getTopLevelQueryField()
      */
-    public GraphQLFieldDefinition addTopLevelQueryField() {
+    public GraphQLFieldDefinition buildTopLevelQueryField() {
         if (topLevelQueryField != null) {
             throw new IllegalStateException(String.format(
                     "queryField has already been added to top-level Query, for 
%s", getLogicalTypeName()));
@@ -112,12 +102,11 @@ public class GqlvServiceStructure {
                 .name(_LTN.sanitized(serviceSpec))
                 .type(gqlObjectTypeBuilder)
                 .build();
-        queryBuilder.field(topLevelQueryField);
         return topLevelQueryField;
     }
 
     /**
-     * @see #addTopLevelQueryField()
+     * @see #buildTopLevelQueryField()
      */
     public GraphQLFieldDefinition getTopLevelQueryField() {
         if (topLevelQueryField == null) {
diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
index 88ca9bd7ea..0e88c15c9c 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvTopLevelQueryStructure.java
@@ -1,13 +1,14 @@
 package org.apache.causeway.viewer.graphql.viewer.source;
 
 import graphql.Scalars;
+import graphql.schema.DataFetcher;
+import graphql.schema.FieldCoordinates;
+import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
 import lombok.Getter;
 
-import java.util.Optional;
-
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
 
@@ -53,4 +54,18 @@ public class GqlvTopLevelQueryStructure {
         return queryType;
     }
 
+    public void addFieldFor(
+            final GqlvServiceStructure serviceStructure,
+            final GqlvServiceBehaviour serviceBehaviour,
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
+
+        GraphQLFieldDefinition topLevelQueryField = 
serviceStructure.buildTopLevelQueryField();
+        queryBuilder.field(topLevelQueryField);
+
+        codeRegistryBuilder.dataFetcher(
+                // TODO: it would be nice to make these typesafe...
+                FieldCoordinates.coordinates("Query", 
topLevelQueryField.getName()),
+                (DataFetcher<Object>) environment -> serviceBehaviour.service);
+
+    }
 }
diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
index 3016d61eb0..2cc1a8aac5 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
@@ -34,10 +34,7 @@ import 
org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 
-import graphql.schema.DataFetcher;
-import graphql.schema.FieldCoordinates;
 import graphql.schema.GraphQLCodeRegistry;
-import graphql.schema.GraphQLFieldDefinition;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -85,13 +82,7 @@ public class QueryFieldFactory {
 
         
serviceStructure.getSafeActions().entrySet().forEach(serviceBehaviour::addDataFetcher);
 
-        // instead, should delegate to GqlvTopLevelQueryStructure and then 
GqlvTopLevelQueryBehaviour
-        GraphQLFieldDefinition topLevelQueryField = 
serviceStructure.addTopLevelQueryField();
-
-        codeRegistryBuilder.dataFetcher(
-                // TODO: it would be nice to make these typesafe...
-                FieldCoordinates.coordinates("Query", 
topLevelQueryField.getName()),
-                (DataFetcher<Object>) environment -> service);
+        topLevelQueryStructure.addFieldFor(serviceStructure, serviceBehaviour, 
codeRegistryBuilder);
     }
 
 }

Reply via email to