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 42c901ff99 CAUSEWAY-3676: fleshing out GqlvServiceStructure
42c901ff99 is described below

commit 42c901ff99e6f48cf6d09750f6977c7ef5f16388
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 16:59:51 2024 +0000

    CAUSEWAY-3676: fleshing out GqlvServiceStructure
---
 .../viewer/source/GqlvServiceStructure.java        | 30 ++++++++++++++++++++++
 .../graphql/viewer/source/QueryFieldFactory.java   |  8 ++----
 2 files changed, 32 insertions(+), 6 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 1e14b0a0e8..64a65ae39e 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
@@ -14,10 +14,20 @@ public class GqlvServiceStructure {
     @Getter private final ObjectSpecification serviceSpec;
     @Getter private final GqlvTopLevelQueryStructure topLevelQueryStructure;
 
+    private String getLogicalTypeName() {
+        return serviceSpec.getLogicalTypeName();
+    }
+
+    public String getLogicalTypeNameSanitized() {
+        return _LTN.sanitized(serviceSpec);
+    }
+
     private final GraphQLObjectType.Builder queryBuilder;
 
     private GraphQLObjectType.Builder gqlObjectTypeBuilder;
 
+    private GraphQLObjectType gqlObjectType;
+
     // TODO - don't expose
     public GraphQLObjectType.Builder getGraphQlTypeBuilder() {
         return gqlObjectTypeBuilder;
@@ -39,4 +49,24 @@ public class GqlvServiceStructure {
                 .build());
     }
 
+    /**
+     * @see #getGqlObjectType()
+     */
+    public GraphQLObjectType buildObjectGqlType() {
+        if (gqlObjectType != null) {
+            throw new IllegalArgumentException(String.format("GqlObjectType 
has already been built for %s", getLogicalTypeName()));
+        }
+        return gqlObjectType = gqlObjectTypeBuilder.build();
+    }
+
+    /**
+     * @see #buildObjectGqlType()
+     */
+    public GraphQLObjectType getGqlObjectType() {
+        if (gqlObjectType == null) {
+            throw new IllegalStateException(String.format(
+                    "GraphQLObjectType has not yet been built for %s", 
getLogicalTypeName()));
+        }
+        return gqlObjectType;
+    }
 }
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 7a8d37db8e..34f406bc0a 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
@@ -78,8 +78,6 @@ public class QueryFieldFactory {
 
         val gqlvServiceStructure = new GqlvServiceStructure(serviceSpec, 
topLevelQueryStructure);
 
-        //final GraphQLObjectType.Builder queryBuilder = 
topLevelQueryStructure.getQueryBuilder();
-
         List<ObjectAction> objectActionList = 
serviceSpec.streamRuntimeActions(MixedIn.INCLUDED)
                 .map(ObjectAction.class::cast)
                 .filter((final ObjectAction x) -> 
x.containsFacet(ActionSemanticsFacet.class))
@@ -91,19 +89,17 @@ public class QueryFieldFactory {
 
             val serviceAsGraphQlType = 
gqlvServiceStructure.getGraphQlTypeBuilder();
 
-
             objectActionList
             .forEach(objectAction -> {
                 addAction(objectAction, serviceAsGraphQlType);
             });
 
-            GraphQLObjectType graphQLObjectType = serviceAsGraphQlType.build();
+
+            GraphQLObjectType graphQLObjectType = 
gqlvServiceStructure.buildObjectGqlType();
 
             objectActionList
             .forEach(objectAction -> {
-
                 addBehaviour(objectAction, graphQLObjectType, 
codeRegistryBuilder);
-
             });
 
             gqlvServiceStructure.addTypeToTopLevelQuery();

Reply via email to