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 90530c9dd3 CAUSEWAY-3676: improves handling of adding top-level query 
field for service
90530c9dd3 is described below

commit 90530c9dd379b350270dfb1a96223cd61b251392
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 17:33:27 2024 +0000

    CAUSEWAY-3676: improves handling of adding top-level query field for service
---
 .../viewer/source/GqlvServiceStructure.java        | 39 +++++++++++++++++-----
 .../graphql/viewer/source/QueryFieldFactory.java   | 12 ++++---
 2 files changed, 37 insertions(+), 14 deletions(-)

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 f01f75f129..be457e604a 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
@@ -9,8 +9,6 @@ import java.util.Map;
 
 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.OneToManyAssociation;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.viewer.util._BiMap;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
@@ -21,6 +19,9 @@ public class GqlvServiceStructure {
     @Getter private final ObjectSpecification serviceSpec;
     @Getter private final GqlvTopLevelQueryStructure topLevelQueryStructure;
 
+    private GraphQLObjectType.Builder topLevelQueryField;
+
+
     private String getLogicalTypeName() {
         return serviceSpec.getLogicalTypeName();
     }
@@ -49,13 +50,6 @@ public class GqlvServiceStructure {
         gqlObjectTypeBuilder = newObject().name(_LTN.sanitized(serviceSpec));
     }
 
-    public void addTypeToTopLevelQuery() {
-        queryBuilder.field(newFieldDefinition()
-                .name(_LTN.sanitized(serviceSpec))
-                .type(getGraphQlTypeBuilder())
-                .build());
-    }
-
 
     private final _BiMap<ObjectAction, GraphQLFieldDefinition> 
safeActionToField = new _BiMap<>();
     private final _BiMap<ObjectAction, GraphQLFieldDefinition> 
mutatorActionToField = new _BiMap<>();
@@ -91,4 +85,31 @@ public class GqlvServiceStructure {
         }
         return gqlObjectType;
     }
+
+    /**
+     * @see #getTopLevelQueryField()
+     */
+    public GraphQLObjectType.Builder addTopLevelQueryField() {
+        if (topLevelQueryField != null) {
+            throw new IllegalStateException(String.format(
+                    "queryField has already been added to top-level Query, for 
%s", getLogicalTypeName()));
+        }
+        return topLevelQueryField = queryBuilder.field(newFieldDefinition()
+                .name(_LTN.sanitized(serviceSpec))
+                .type(getGraphQlTypeBuilder())
+                .build());
+    }
+
+    /**
+     * @see #addTopLevelQueryField()
+     */
+    public GraphQLObjectType.Builder getTopLevelQueryField() {
+        if (topLevelQueryField == null) {
+            throw new IllegalStateException(String.format(
+                    "queryField has not yet been added to top-level Query, for 
%s", getLogicalTypeName()));
+        }
+        return topLevelQueryField;
+    }
+
+
 }
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 8a78ac7c75..0cbb1c6774 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
@@ -99,14 +99,16 @@ public class QueryFieldFactory {
                 addBehaviour(gqlvServiceStructure, objectAction, 
codeRegistryBuilder);
             });
 
-            gqlvServiceStructure.addTypeToTopLevelQuery();
+            gqlvServiceStructure.addTopLevelQueryField();
+
+            String fieldName = newFieldDefinition()
+                    .name(_LTN.sanitized(serviceSpec))
+                    .type(serviceAsGraphQlType)
+                    .build().getName();
 
             codeRegistryBuilder
             .dataFetcher(
-                    FieldCoordinates.coordinates("Query", newFieldDefinition()
-                        .name(_LTN.sanitized(serviceSpec))
-                        .type(serviceAsGraphQlType)
-                        .build().getName()),
+                    FieldCoordinates.coordinates("Query", fieldName),
                     (DataFetcher<Object>) environment -> service);
         }
     }

Reply via email to