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 95cd298dfbc33744b924250ca5b159c52f3318bf
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 18:38:30 2024 +0000

    CAUSEWAY-3676: moves responsibility to creating fieldDefinition into 
GqlvAction
---
 .../viewer/graphql/model/domain/GqlvAction.java    | 28 ++++++++++++++++++----
 .../graphql/model/domain/GqlvDomainObject.java     | 18 ++------------
 .../graphql/model/domain/GqlvDomainService.java    | 12 +++++-----
 .../viewer/graphql/model/domain/GqlvMutators.java  |  2 +-
 .../test/e2e/Schema_IntegTest.schema.approved.json | 20 +++++++++++-----
 .../graphql/test/src/test/resources/schema.gql     |  4 ++--
 6 files changed, 49 insertions(+), 35 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 07e920e4a2..7b3811658b 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
@@ -7,30 +7,50 @@ 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.model.types.TypeMapper;
 
-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.val;
 
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 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,
-            final GraphQLFieldDefinition fieldDefinition,
+            final GraphQLObjectType.Builder objectTypeBuilder,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder
             ) {
-        super(holder, objectAction, fieldDefinition, codeRegistryBuilder);
+        super(holder, objectAction, fieldDefinition(objectAction, 
objectTypeBuilder), codeRegistryBuilder);
+        this.objectTypeBuilder = objectTypeBuilder;
+    }
+
+    private static GraphQLFieldDefinition fieldDefinition(
+            final ObjectAction objectAction,
+            final GraphQLObjectType.Builder objectTypeBuilder) {
+        val fieldName = objectAction.getId();
+        GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition()
+                .name(fieldName)
+                .type((GraphQLOutputType) 
TypeMapper.typeForObjectAction(objectAction));
+        addGqlArguments(objectAction, fieldBuilder);
+        GraphQLFieldDefinition fieldDefinition = fieldBuilder.build();
+
+        objectTypeBuilder.field(fieldDefinition);
+        return fieldDefinition;
     }
 
     public ObjectAction getObjectAction() {
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 35d9a9a98f..5fa061b1bb 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
@@ -5,17 +5,14 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.applib.services.metamodel.BeanSort;
-import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.spec.ActionScope;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
@@ -23,20 +20,16 @@ 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._LTN;
 
-import static 
org.apache.causeway.viewer.graphql.model.domain.GqlvAction.addGqlArguments;
 import static 
org.apache.causeway.viewer.graphql.model.types._Constants.GQL_INPUTTYPE_PREFIX;
 
 import lombok.Getter;
-import lombok.val;
 
 import graphql.Scalars;
-import graphql.schema.GraphQLArgument;
 import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLInputObjectType;
 import graphql.schema.GraphQLList;
 import graphql.schema.GraphQLObjectType;
-import graphql.schema.GraphQLOutputType;
 import graphql.schema.GraphQLType;
 import graphql.schema.GraphQLTypeReference;
 
@@ -202,17 +195,10 @@ public class GqlvDomainObject implements 
GqlvActionHolder, GqlvPropertyHolder, G
 
     void addAction(final ObjectAction objectAction) {
 
-
         if (objectAction.getSemantics().isSafeInNature()) {
+            GraphQLObjectType.Builder objectTypeBuilder = 
getGqlObjectTypeBuilder();
 
-            val fieldName = objectAction.getId();
-            GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition()
-                    .name(fieldName)
-                    .type((GraphQLOutputType) 
TypeMapper.typeForObjectAction(objectAction));
-            addGqlArguments(objectAction, fieldBuilder);
-            GraphQLFieldDefinition fieldDefinition = fieldBuilder.build();
-            getGqlObjectTypeBuilder().field(fieldDefinition);
-            safeActions.add(new GqlvAction(this, objectAction, 
fieldDefinition, codeRegistryBuilder));
+            safeActions.add(new GqlvAction(this, objectAction, 
objectTypeBuilder, codeRegistryBuilder));
         } else {
 
             mutators.addActionAsField(objectAction);
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 5afe4b6ccf..39aa4e4e34 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
@@ -33,7 +33,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutatorsHolder {
         return objectSpecification.getLogicalTypeName();
     }
 
-    private final GraphQLObjectType.Builder gqlObjectTypeBuilder;
+    private final GraphQLObjectType.Builder objectTypeBuilder;
 
     private GraphQLObjectType gqlObjectType;
 
@@ -48,7 +48,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutatorsHolder {
 
         this.mutators = new GqlvMutators(this, codeRegistryBuilder);
 
-        this.gqlObjectTypeBuilder = 
newObject().name(_LTN.sanitized(objectSpecification));
+        this.objectTypeBuilder = 
newObject().name(_LTN.sanitized(objectSpecification));
     }
 
 
@@ -65,7 +65,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutatorsHolder {
         if (gqlObjectType != null) {
             throw new IllegalArgumentException(String.format("GqlObjectType 
has already been built for %s", getLogicalTypeName()));
         }
-        return gqlObjectType = gqlObjectTypeBuilder.build();
+        return gqlObjectType = objectTypeBuilder.build();
     }
 
     /**
@@ -82,7 +82,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutatorsHolder {
     public GraphQLFieldDefinition createTopLevelQueryField() {
         return newFieldDefinition()
                 .name(_LTN.sanitized(objectSpecification))
-                .type(gqlObjectTypeBuilder)
+                .type(objectTypeBuilder)
                 .build();
     }
 
@@ -103,10 +103,10 @@ public class GqlvDomainService implements 
GqlvActionHolder, GqlvMutatorsHolder {
                     .collect(Collectors.toList()));
         }
         GraphQLFieldDefinition fieldDefinition = fieldBuilder.build();
-        gqlObjectTypeBuilder.field(fieldDefinition);
+        objectTypeBuilder.field(fieldDefinition);
 
         // TODO: either safe or mutator
-        safeActions.add(new GqlvAction(this, objectAction, fieldDefinition, 
codeRegistryBuilder));
+        safeActions.add(new GqlvAction(this, objectAction, objectTypeBuilder, 
codeRegistryBuilder));
     }
 
 
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java
index 49def43364..912704705c 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutators.java
@@ -56,7 +56,7 @@ public class GqlvMutators implements GqlvActionHolder {
         GraphQLFieldDefinition fieldDefinition = fieldBuilder.build();
 
         objectTypeBuilder.field(fieldDefinition);
-        actions.add(new GqlvAction(holder, objectAction, fieldDefinition, 
codeRegistryBuilder));
+        actions.add(new GqlvAction(holder, objectAction, objectTypeBuilder, 
codeRegistryBuilder));
     }
 
     private final List<GqlvAction> actions = new ArrayList<>();
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
index de2b263869..e39e7c964c 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
@@ -6858,9 +6858,13 @@
             "name" : "name",
             "description" : null,
             "type" : {
-              "kind" : "SCALAR",
-              "name" : "String",
-              "ofType" : null
+              "kind" : "NON_NULL",
+              "name" : null,
+              "ofType" : {
+                "kind" : "SCALAR",
+                "name" : "String",
+                "ofType" : null
+              }
             },
             "defaultValue" : null
           }, {
@@ -7029,9 +7033,13 @@
             "name" : "name",
             "description" : null,
             "type" : {
-              "kind" : "SCALAR",
-              "name" : "String",
-              "ofType" : null
+              "kind" : "NON_NULL",
+              "name" : null,
+              "ofType" : {
+                "kind" : "SCALAR",
+                "name" : "String",
+                "ofType" : null
+              }
             },
             "defaultValue" : null
           } ],
diff --git a/incubator/viewers/graphql/test/src/test/resources/schema.gql 
b/incubator/viewers/graphql/test/src/test/resources/schema.gql
index 1086e5bcc4..21aca7cbaa 100644
--- a/incubator/viewers/graphql/test/src/test/resources/schema.gql
+++ b/incubator/viewers/graphql/test/src/test/resources/schema.gql
@@ -589,7 +589,7 @@ type university_dept_Department {
 }
 
 type university_dept_DepartmentMenu {
-  createDepartment(deptHead: _gql_input__university_dept_DeptHead, name: 
String): university_dept_Department
+  createDepartment(deptHead: _gql_input__university_dept_DeptHead, name: 
String!): university_dept_Department
   findAllDepartments: [university_dept_Department]
 }
 
@@ -608,7 +608,7 @@ type university_dept_DeptHead {
 
 type university_dept_DeptHeadMenu {
   findAllDeptHeads: [university_dept_DeptHead]
-  findDeptHeadByName(name: String): university_dept_DeptHead
+  findDeptHeadByName(name: String!): university_dept_DeptHead
 }
 
 type university_dept_DeptHead__meta {

Reply via email to