You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/01/19 12:16:11 UTC

(causeway) 01/02: CAUSEWAY-3676: moves more responsibilities into GqlvObjectSpec, building of the GqlObjectType

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 c847467d42d6a539ff28fdf5f026e73d8ab4e235
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Jan 19 12:12:59 2024 +0000

    CAUSEWAY-3676: moves more responsibilities into GqlvObjectSpec, building of the GqlObjectType
---
 .../viewer/graphql/viewer/source/GqlvObjectSpec.java | 20 ++++++++++++++++++++
 .../graphql/viewer/source/ObjectTypeFactory.java     |  7 ++++---
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
index 3f4e3795e8..0b24bae569 100644
--- a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
+++ b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectSpec.java
@@ -41,6 +41,18 @@ public class GqlvObjectSpec {
 
     @Getter private final GraphQLObjectType.Builder gqlObjectTypeBuilder;
 
+    /**
+     * Build using {@link #buildGqlObjectType()}
+     */
+    private GraphQLObjectType gqlObjectType;
+
+    public GraphQLObjectType getGqlObjectType() {
+        if (gqlObjectType == null) {
+            throw new IllegalStateException("GraphQLObjectType has not yet been built for " + getLogicalTypeNameSanitized());
+        }
+        return gqlObjectType;
+    }
+
     public GqlvObjectSpec(final ObjectSpecification objectSpec) {
         this.objectSpec = objectSpec;
         this.gqlObjectTypeBuilder = newObject().name(getLogicalTypeNameSanitized());
@@ -130,4 +142,12 @@ public class GqlvObjectSpec {
                 break;
         }
     }
+
+    public GraphQLObjectType buildGqlObjectType() {
+        if (gqlObjectType != null) {
+            throw new IllegalArgumentException("GqlObjectType has already been built");
+        }
+        gqlObjectType = getGqlObjectTypeBuilder().name(getLogicalTypeNameSanitized()).build();
+        return gqlObjectType;
+    }
 }
diff --git a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
index 688d01988c..3f432f1fec 100644
--- a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
+++ b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
@@ -132,13 +132,13 @@ public class ObjectTypeFactory {
                 addActions(gqlvObjectSpec.getLogicalTypeNameSanitized(), objectSpec, gqlvObjectSpec.getGqlObjectTypeBuilder());
 
         // build and register object type
-        GraphQLObjectType graphQLObjectType = gqlvObjectSpec.getGqlObjectTypeBuilder().name(gqlvObjectSpec.getLogicalTypeNameSanitized()).build();
+        GraphQLObjectType graphQLObjectType = gqlvObjectSpec.buildGqlObjectType();
         graphQLTypeRegistry.addTypeIfNotAlreadyPresent(graphQLObjectType);
 
 
         // create and register data fetchers
         createAndRegisterDataFetchersForMetaData(
-                codeRegistryBuilder, gqlvObjectSpec.getBeanSort(), gqlvObjectSpec.getMetaType(), gqlvObjectSpec.getMetaField(), graphQLObjectType);
+                codeRegistryBuilder, gqlvObjectSpec.getBeanSort(), gqlvObjectSpec.getMetaType(), gqlvObjectSpec.getMetaField(), gqlvObjectSpec.getGqlObjectType(), gqlvObjectSpec);
         if (mutatorsDataForEntity!=null) {
             createAndRegisterDataFetchersForMutators(
                     codeRegistryBuilder, gqlvObjectSpec.getBeanSort(), mutatorsDataForEntity, graphQLObjectType);
@@ -360,7 +360,8 @@ public class ObjectTypeFactory {
             final BeanSort objectSpecificationBeanSort,
             final GraphQLObjectType metaType,
             final GraphQLFieldDefinition gql_meta,
-            final GraphQLObjectType graphQLObjectType) {
+            final GraphQLObjectType graphQLObjectType,
+            final GqlvObjectSpec gqlvObjectSpec) {
 
         codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates(graphQLObjectType, gql_meta), (DataFetcher<Object>) environment -> {
             return bookmarkService.bookmarkFor(environment.getSource())