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 0dfb9b3a104fde67ae4d74b54f6c9cc895fcb2e0
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 18:32:27 2024 +0000

    CAUSEWAY-3676: towards moving FieldDefinition creation within GqlvAction (2)
---
 .../viewer/graphql/model/domain/GqlvAction.java    | 28 ++++++++++++++++
 .../graphql/model/domain/GqlvDomainObject.java     | 37 ++++++----------------
 .../viewer/graphql/model/domain/GqlvMutators.java  | 17 ++++++++--
 3 files changed, 52 insertions(+), 30 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 6549c53d61..07e920e4a2 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
@@ -8,14 +8,19 @@ 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 java.util.Map;
+import java.util.stream.Collectors;
+
+import static graphql.schema.GraphQLNonNull.nonNull;
 
 public class GqlvAction extends GqlvMember<ObjectAction, GqlvActionHolder> {
 
@@ -68,4 +73,27 @@ public class GqlvAction extends GqlvMember<ObjectAction, 
GqlvActionHolder> {
         return managedObject.getPojo();
     }
 
+    static void addGqlArguments(
+            final ObjectAction objectAction,
+            final GraphQLFieldDefinition.Builder builder) {
+
+        Can<ObjectActionParameter> parameters = objectAction.getParameters();
+
+        if (parameters.isNotEmpty()) {
+            builder.arguments(parameters.stream()
+                    .map(GqlvAction::gqlArgumentFor)
+                    .collect(Collectors.toList()));
+        }
+    }
+
+    private static GraphQLArgument gqlArgumentFor(final ObjectActionParameter 
objectActionParameter) {
+        return GraphQLArgument.newArgument()
+                .name(objectActionParameter.getId())
+                .type(objectActionParameter.isOptional()
+                        ? TypeMapper.inputTypeFor(objectActionParameter)
+                        : 
nonNull(TypeMapper.inputTypeFor(objectActionParameter)))
+                .build();
+    }
+
+
 }
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 33bf28fef4..35d9a9a98f 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
@@ -23,6 +23,7 @@ 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;
@@ -201,43 +202,23 @@ public class GqlvDomainObject implements 
GqlvActionHolder, GqlvPropertyHolder, G
 
     void addAction(final ObjectAction objectAction) {
 
-        val fieldName = objectAction.getId();
-        GraphQLFieldDefinition.Builder fieldBuilder = newFieldDefinition()
-                .name(fieldName)
-                .type((GraphQLOutputType) 
TypeMapper.typeForObjectAction(objectAction));
-        addGqlArguments(objectAction, fieldBuilder);
-        GraphQLFieldDefinition fieldDefinition = fieldBuilder.build();
 
         if (objectAction.getSemantics().isSafeInNature()) {
+
+            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));
         } else {
-            mutators.addActionAsField(objectAction, fieldDefinition);
-        }
-    }
-
-    private static void addGqlArguments(
-            final ObjectAction objectAction,
-            final GraphQLFieldDefinition.Builder builder) {
 
-        Can<ObjectActionParameter> parameters = objectAction.getParameters();
-
-        if (parameters.isNotEmpty()) {
-            builder.arguments(parameters.stream()
-                    .map(GqlvDomainObject::gqlArgumentFor)
-                    .collect(Collectors.toList()));
+            mutators.addActionAsField(objectAction);
         }
     }
 
-    private static GraphQLArgument gqlArgumentFor(final ObjectActionParameter 
objectActionParameter) {
-        return GraphQLArgument.newArgument()
-                .name(objectActionParameter.getId())
-                .type(objectActionParameter.isOptional()
-                        ? TypeMapper.inputTypeFor(objectActionParameter)
-                        : 
nonNull(TypeMapper.inputTypeFor(objectActionParameter)))
-                .build();
-    }
-
 
     boolean hasMutators() {
         return mutators.hasActions();
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 958bf6bbb3..49def43364 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
@@ -3,6 +3,9 @@ package org.apache.causeway.viewer.graphql.model.domain;
 import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
+import graphql.schema.GraphQLOutputType;
+
+import lombok.val;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -10,10 +13,14 @@ import java.util.List;
 import java.util.Optional;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 import org.apache.causeway.viewer.graphql.model.util._LTN;
 
+import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
 
+import static 
org.apache.causeway.viewer.graphql.model.domain.GqlvAction.addGqlArguments;
+
 public class GqlvMutators implements GqlvActionHolder {
 
     private final GqlvMutatorsHolder holder;
@@ -39,8 +46,14 @@ public class GqlvMutators implements GqlvActionHolder {
     }
 
     public void addActionAsField(
-            final ObjectAction objectAction,
-            final GraphQLFieldDefinition fieldDefinition) {
+            final ObjectAction objectAction) {
+
+        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);
         actions.add(new GqlvAction(holder, objectAction, fieldDefinition, 
codeRegistryBuilder));

Reply via email to