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 a3726cc126d4bdd910b8b4c3da5c8a53cde7dc38
Author: danhaywood <[email protected]>
AuthorDate: Sun Jan 21 14:37:36 2024 +0000

    CAUSEWAY-3676: makes ObjectTypeBuilder accessible for the Holder interfaces
---
 .../viewer/graphql/model/domain/GqlvAction.java    |  3 --
 .../graphql/model/domain/GqlvDomainObject.java     | 27 ++++++++--------
 .../graphql/model/domain/GqlvDomainService.java    | 19 ++++++------
 .../graphql/model/domain/GqlvMemberHolder.java     |  8 +++++
 .../viewer/graphql/model/domain/GqlvMeta.java      | 19 ++++++------
 .../viewer/graphql/model/domain/GqlvMutations.java | 36 ++++++++++++----------
 6 files changed, 61 insertions(+), 51 deletions(-)

diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
index 91a7737288..d518b8bffd 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
@@ -27,8 +27,6 @@ import static graphql.schema.GraphQLNonNull.nonNull;
 
 public class GqlvAction extends GqlvMember<ObjectAction, GqlvActionHolder> {
 
-    private final GraphQLObjectType.Builder objectTypeBuilder;
-
     public GqlvAction(
             final GqlvActionHolder holder,
             final ObjectAction objectAction,
@@ -36,7 +34,6 @@ public class GqlvAction extends GqlvMember<ObjectAction, 
GqlvActionHolder> {
             final GraphQLCodeRegistry.Builder codeRegistryBuilder
             ) {
         super(holder, objectAction, fieldDefinition(objectAction, 
objectTypeBuilder), codeRegistryBuilder);
-        this.objectTypeBuilder = objectTypeBuilder;
     }
 
     private static GraphQLFieldDefinition fieldDefinition(
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 6b3eab8272..c89cc210a0 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
@@ -21,8 +21,6 @@ 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 static 
org.apache.causeway.viewer.graphql.model.types._Constants.GQL_INPUTTYPE_PREFIX;
-
 import lombok.Getter;
 
 import graphql.Scalars;
@@ -53,7 +51,8 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
 
     @Getter private final GqlvMeta meta;
     @Getter private final GqlvMutations mutators;
-    private final GraphQLObjectType.Builder objectTypeBuilder;
+
+    @Getter private final GraphQLObjectType.Builder gqlObjectTypeBuilder;
 
     String getLogicalTypeName() {
         return objectSpecification.getLogicalTypeName();
@@ -90,12 +89,12 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
         this.objectSpecification = objectSpecification;
         this.codeRegistryBuilder = codeRegistryBuilder;
 
-        this.objectTypeBuilder = 
newObject().name(TypeNames.objectTypeNameFor(objectSpecification));
+        this.gqlObjectTypeBuilder = 
newObject().name(TypeNames.objectTypeNameFor(objectSpecification));
 
         this.meta = new GqlvMeta(this, codeRegistryBuilder, bookmarkService, 
objectManager);
         this.mutators = new GqlvMutations(this, codeRegistryBuilder);
 
-        objectTypeBuilder.field(meta.getMetaField());
+        gqlObjectTypeBuilder.field(meta.getMetaField());
 
         // input object type
         GraphQLInputObjectType.Builder inputTypeBuilder = 
newInputObject().name(TypeNames.inputTypeNameFor(objectSpecification));
@@ -126,7 +125,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                 fieldDefinition = newFieldDefinition()
                         .name(otoa.getId())
                         .type(otoa.isOptional() ? fieldTypeRef : 
nonNull(fieldTypeRef)).build();
-                objectTypeBuilder.field(
+                gqlObjectTypeBuilder.field(
                         fieldDefinition
                         );
 
@@ -142,7 +141,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                                 ? Scalars.GraphQLString
                                 : nonNull(Scalars.GraphQLString));
                 fieldDefinition = valueBuilder.build();
-                objectTypeBuilder.field(fieldDefinition);
+                gqlObjectTypeBuilder.field(fieldDefinition);
 
                 break;
         }
@@ -169,7 +168,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                 fieldDefinition = newFieldDefinition()
                         .name(otom.getId())
                         .type(GraphQLList.list(typeRef)).build();
-                objectTypeBuilder.field(fieldDefinition);
+                gqlObjectTypeBuilder.field(fieldDefinition);
                 break;
 
             case VALUE:
@@ -177,7 +176,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                 fieldDefinition = newFieldDefinition()
                         .name(otom.getId())
                         .type(GraphQLList.list(wrappedType)).build();
-                objectTypeBuilder.field(fieldDefinition);
+                gqlObjectTypeBuilder.field(fieldDefinition);
                 break;
         }
 
@@ -204,7 +203,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
                     .name(_Constants.GQL_MUTATIONS_FIELDNAME)
                     .type(mutatorsType)
                     .build();
-            objectTypeBuilder.field(gql_mutations);
+            gqlObjectTypeBuilder.field(gql_mutations);
         });
 
         return anyActions.get();
@@ -212,7 +211,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
 
     void addAction(final ObjectAction objectAction) {
         if (objectAction.getSemantics().isSafeInNature()) {
-            safeActions.add(new GqlvAction(this, objectAction, 
objectTypeBuilder, codeRegistryBuilder));
+            safeActions.add(new GqlvAction(this, objectAction, 
gqlObjectTypeBuilder, codeRegistryBuilder));
         } else {
             mutators.addAction(objectAction);
         }
@@ -228,7 +227,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
         if (gqlObjectType != null) {
             throw new IllegalArgumentException(String.format("GqlObjectType 
has already been built for %s", getLogicalTypeName()));
         }
-        return gqlObjectType = 
objectTypeBuilder.name(getLogicalTypeNameSanitized()).build();
+        return gqlObjectType = 
gqlObjectTypeBuilder.name(getLogicalTypeNameSanitized()).build();
     }
 
     /**
@@ -247,14 +246,14 @@ public class GqlvDomainObject implements 
GqlvActionHolder, GqlvPropertyHolder, G
      * @see #buildMutatorsTypeIfAny()
      */
     public Optional<GraphQLObjectType> getMutatorsTypeIfAny() {
-        return mutators.getMutatorsTypeIfAny();
+        return mutators.getMutationsTypeIfAny();
     }
 
     /**
      * @see #getMutatorsTypeIfAny()
      */
     public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
-        return mutators.buildMutatorsTypeIfAny();
+        return mutators.buildMutationsTypeIfAny();
     }
 
 
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 5f4f6fc3a9..c779466506 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
@@ -35,7 +35,8 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutationsHolder
     private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
 
     @Getter private final GqlvMutations mutators;
-    private final GraphQLObjectType.Builder objectTypeBuilder;
+
+    @Getter private final GraphQLObjectType.Builder gqlObjectTypeBuilder;
 
     String getLogicalTypeName() {
         return objectSpecification.getLogicalTypeName();
@@ -62,7 +63,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutationsHolder
         this.servicePojo = servicePojo;
         this.codeRegistryBuilder = codeRegistryBuilder;
 
-        this.objectTypeBuilder = 
newObject().name(TypeNames.objectTypeNameFor(objectSpecification));
+        this.gqlObjectTypeBuilder = 
newObject().name(TypeNames.objectTypeNameFor(objectSpecification));
 
         this.mutators = new GqlvMutations(this, codeRegistryBuilder);
 
@@ -86,7 +87,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutationsHolder
                     .name(_Constants.GQL_MUTATIONS_FIELDNAME)
                     .type(mutatorsType)
                     .build();
-            objectTypeBuilder.field(gql_mutations);
+            gqlObjectTypeBuilder.field(gql_mutations);
         });
 
         return anyActions.get();
@@ -94,11 +95,11 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutationsHolder
 
     void addAction(final ObjectAction objectAction) {
         if (objectAction.getSemantics().isSafeInNature()) {
-            safeActions.add(new GqlvAction(this, objectAction, 
objectTypeBuilder, codeRegistryBuilder));
+            safeActions.add(new GqlvAction(this, objectAction, 
gqlObjectTypeBuilder, codeRegistryBuilder));
         } else {
              // TODO: should register with mutators instead ...
 //            mutators.addAction(objectAction);
-            safeActions.add(new GqlvAction(this, objectAction, 
objectTypeBuilder, codeRegistryBuilder));
+            safeActions.add(new GqlvAction(this, objectAction, 
gqlObjectTypeBuilder, codeRegistryBuilder));
         }
     }
 
@@ -112,7 +113,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutationsHolder
         if (gqlObjectType != null) {
             throw new IllegalArgumentException(String.format("GqlObjectType 
has already been built for %s", getLogicalTypeName()));
         }
-        return gqlObjectType = objectTypeBuilder.build();
+        return gqlObjectType = gqlObjectTypeBuilder.build();
     }
 
     /**
@@ -131,21 +132,21 @@ public class GqlvDomainService implements 
GqlvActionHolder, GqlvMutationsHolder
      * @see #buildMutatorsTypeIfAny()
      */
     public Optional<GraphQLObjectType> getMutatorsTypeIfAny() {
-        return mutators.getMutatorsTypeIfAny();
+        return mutators.getMutationsTypeIfAny();
     }
 
     /**
      * @see #getMutatorsTypeIfAny()
      */
     public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
-        return mutators.buildMutatorsTypeIfAny();
+        return mutators.buildMutationsTypeIfAny();
     }
 
 
     public GraphQLFieldDefinition createTopLevelQueryField() {
         return newFieldDefinition()
                 .name(TypeNames.objectTypeNameFor(objectSpecification))
-                .type(objectTypeBuilder)
+                .type(gqlObjectTypeBuilder)
                 .build();
     }
 
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
index 4d29b59656..44af9c9878 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
@@ -3,5 +3,13 @@ package org.apache.causeway.viewer.graphql.model.domain;
 import graphql.schema.GraphQLObjectType;
 
 public interface GqlvMemberHolder  {
+    /**
+     * For use when building the type, ie adding the member to the type.
+     */
+    GraphQLObjectType.Builder getGqlObjectTypeBuilder();
+
+    /**
+     * For use once the type has been built, ie by the fetchers.
+     */
     GraphQLObjectType getGqlObjectType();
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
index 84c928f6d0..d0b213b6c9 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
@@ -51,13 +51,10 @@ public class GqlvMeta {
         this.bookmarkService = bookmarkService;
         this.objectManager = objectManager;
 
+        // we can build the metafield and meta type eagerly because we know 
exactly which fields it has.
         metaField = 
newFieldDefinition().name("_gql_meta").type(buildMetaType()).build();
     }
 
-    GraphQLObjectType getMetaType() {
-        return (GraphQLObjectType) metaField.getType();
-    }
-
     private GraphQLObjectType buildMetaType() {
         val metaTypeBuilder = 
newObject().name(TypeNames.metaTypeNameFor(domainObject.getObjectSpecification()));
         metaTypeBuilder.field(id);
@@ -68,6 +65,10 @@ public class GqlvMeta {
         return metaTypeBuilder.build();
     }
 
+    GraphQLObjectType getMetaType() {
+        return (GraphQLObjectType) metaField.getType();
+    }
+
     public void addDataFetchers() {
 
         codeRegistryBuilder.dataFetcher(
@@ -75,17 +76,17 @@ public class GqlvMeta {
                 (DataFetcher<Object>) environment -> {
                     return bookmarkService.bookmarkFor(environment.getSource())
                             .map(bookmark -> new Fetcher(bookmark, 
bookmarkService, objectManager))
-                            .orElse(null); //TODO: is this correct ?
+                            .orElseThrow();
                 });
 
-        codeRegistryBuilder.dataFetcher(
-                coordinates(getMetaType(), id),
-                (DataFetcher<Object>) environment -> 
environment.<Fetcher>getSource().id());
-
         codeRegistryBuilder.dataFetcher(
                 coordinates(getMetaType(), logicalTypeName),
                 (DataFetcher<Object>) environment -> 
environment.<Fetcher>getSource().logicalTypeName());
 
+        codeRegistryBuilder.dataFetcher(
+                coordinates(getMetaType(), id),
+                (DataFetcher<Object>) environment -> 
environment.<Fetcher>getSource().id());
+
         if (domainObject.getBeanSort() == BeanSort.ENTITY) {
             codeRegistryBuilder.dataFetcher(
                     coordinates(getMetaType(), version),
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 d5320aa02e..c79c2561c9 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
@@ -3,6 +3,8 @@ package org.apache.causeway.viewer.graphql.model.domain;
 import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLObjectType;
 
+import lombok.Getter;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -19,13 +21,16 @@ public class GqlvMutations implements GqlvActionHolder {
     private final GqlvMutationsHolder holder;
     private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
 
-    final GraphQLObjectType.Builder objectTypeBuilder;
+    /**
+     * Used to build {@link #mutationsTypeIfAny}.
+     */
+    @Getter final GraphQLObjectType.Builder gqlObjectTypeBuilder;
 
     /**
-     * Built lazily using {@link #buildMutatorsTypeIfAny()}
+     * Built lazily using {@link #buildMutationsTypeIfAny()}
      */
     @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
-    private Optional<GraphQLObjectType> mutatorsTypeIfAny;
+    private Optional<GraphQLObjectType> mutationsTypeIfAny;
 
     public GqlvMutations(
             final GqlvMutationsHolder holder,
@@ -34,12 +39,11 @@ public class GqlvMutations implements GqlvActionHolder {
         this.holder = holder;
         this.codeRegistryBuilder = codeRegistryBuilder;
 
-        objectTypeBuilder = 
newObject().name(TypeNames.mutationsTypeNameFor(this.holder.getObjectSpecification()));
-
+        gqlObjectTypeBuilder = 
newObject().name(TypeNames.mutationsTypeNameFor(this.holder.getObjectSpecification()));
     }
 
     public void addAction(final ObjectAction objectAction) {
-        actions.add(new GqlvAction(this, objectAction, objectTypeBuilder, 
codeRegistryBuilder));
+        actions.add(new GqlvAction(this, objectAction, gqlObjectTypeBuilder, 
codeRegistryBuilder));
     }
 
     private final List<GqlvAction> actions = new ArrayList<>();
@@ -51,32 +55,32 @@ public class GqlvMutations implements GqlvActionHolder {
 
 
     /**
-     * @see #buildMutatorsTypeIfAny()
+     * @see #buildMutationsTypeIfAny()
      */
-    public Optional<GraphQLObjectType> getMutatorsTypeIfAny() {
+    public Optional<GraphQLObjectType> getMutationsTypeIfAny() {
         //noinspection OptionalAssignedToNull
-        if (mutatorsTypeIfAny == null) {
+        if (mutationsTypeIfAny == null) {
             throw new IllegalArgumentException(String.format("Gql MutatorsType 
has not yet been built for %s", 
holder.getObjectSpecification().getLogicalTypeName()));
         }
-        return mutatorsTypeIfAny;
+        return mutationsTypeIfAny;
     }
 
     /**
-     * @see #getMutatorsTypeIfAny()
+     * @see #getMutationsTypeIfAny()
      */
-    public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
+    public Optional<GraphQLObjectType> buildMutationsTypeIfAny() {
         //noinspection OptionalAssignedToNull
-        if (mutatorsTypeIfAny != null) {
+        if (mutationsTypeIfAny != null) {
             throw new IllegalArgumentException("Gql MutatorsType has already 
been built for " + holder.getObjectSpecification().getLogicalTypeName());
         }
-        return mutatorsTypeIfAny = hasActions()
-                ? Optional.of(objectTypeBuilder.build())
+        return mutationsTypeIfAny = hasActions()
+                ? Optional.of(gqlObjectTypeBuilder.build())
                 : Optional.empty();
     }
 
     @Override
     public GraphQLObjectType getGqlObjectType() {
-        return mutatorsTypeIfAny.orElse(null);
+        return mutationsTypeIfAny.orElse(null);
     }
 
     public void addDataFetchersForActions() {

Reply via email to