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 1df7099678 CAUSEWAY-3676: wip on addActions, to move into 
GqlvObjectSpec (3)
1df7099678 is described below

commit 1df70996780dbccfa756000d5a692ffc6254e679
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 13:02:53 2024 +0000

    CAUSEWAY-3676: wip on addActions, to move into GqlvObjectSpec (3)
---
 .../graphql/viewer/source/GqlvObjectSpec.java      | 17 +++++--
 .../graphql/viewer/source/ObjectTypeFactory.java   | 59 ++++++++--------------
 2 files changed, 33 insertions(+), 43 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 28d1da87ef..d4824b5585 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
@@ -2,9 +2,7 @@ package org.apache.causeway.viewer.graphql.viewer.source;
 
 import graphql.Scalars;
 import graphql.schema.GraphQLFieldDefinition;
-import graphql.schema.GraphQLInputObjectField;
 import graphql.schema.GraphQLInputObjectType;
-import graphql.schema.GraphQLInputType;
 import graphql.schema.GraphQLList;
 import graphql.schema.GraphQLObjectType;
 
@@ -98,12 +96,21 @@ public class GqlvObjectSpec {
 
 
 
-    void addFields() {
+    void addPropertiesAsFields() {
         objectSpec.streamProperties(MixedIn.INCLUDED)
-        .forEach(this::addField);
+        .forEach(this::addSafeActionAsField);
     }
 
-    private void addField(OneToOneAssociation otoa) {
+    public void addSafeActionAsField(GraphQLFieldDefinition fieldDefinition) {
+        getGqlObjectTypeBuilder().field(fieldDefinition);
+    }
+
+    public void addNonSafeActionAsMutatorField(GraphQLFieldDefinition 
fieldDefinition) {
+        mutatorsTypeBuilder.field(fieldDefinition);
+        mutatorsTypeFields.add(fieldDefinition);
+    }
+
+    private void addSafeActionAsField(OneToOneAssociation otoa) {
         ObjectSpecification otoaObjectSpec = otoa.getElementType();
         switch (otoaObjectSpec.getBeanSort()) {
 
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 ad702c1a6a..b3404e13dc 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
@@ -107,7 +107,7 @@ public class ObjectTypeFactory {
         graphQLTypeRegistry.addTypeIfNotAlreadyPresent(inputType);
 
         // add fields
-        gqlvObjectSpec.addFields();
+        gqlvObjectSpec.addPropertiesAsFields();
 
         // add collections
         gqlvObjectSpec.addCollections();
@@ -211,49 +211,32 @@ public class ObjectTypeFactory {
     private static void addAction(
             final GqlvObjectSpec gqlvObjectSpec, final ObjectAction 
objectAction) {
 
-        final GraphQLObjectType.Builder objectTypeBuilder = 
gqlvObjectSpec.getGqlObjectTypeBuilder();
-        final GraphQLObjectType.Builder mutatorsTypeBuilder = 
gqlvObjectSpec.mutatorsTypeBuilder;
-        final List<GraphQLFieldDefinition> mutatorsTypeFields = 
gqlvObjectSpec.mutatorsTypeFields;
+        val fieldName = objectAction.getId();
+        GraphQLFieldDefinition.Builder builder = newFieldDefinition()
+                .name(fieldName)
+                .type((GraphQLOutputType) 
TypeMapper.typeForObjectAction(objectAction));
+        addArguments(objectAction, builder);
+        GraphQLFieldDefinition fieldDefinition = builder.build();
 
         if (objectAction.getSemantics().isSafeInNature()) {
 
-            String fieldName = objectAction.getId();
-            GraphQLFieldDefinition.Builder builder = newFieldDefinition()
-                    .name(fieldName)
-                    .type((GraphQLOutputType) 
TypeMapper.typeForObjectAction(objectAction));
-            if (objectAction.getParameters().isNotEmpty()) {
-                builder.arguments(objectAction.getParameters().stream()
-                        .map(objectActionParameter -> 
GraphQLArgument.newArgument()
-                                .name(objectActionParameter.getId())
-                                .type(objectActionParameter.isOptional()
-                                        ? 
TypeMapper.inputTypeFor(objectActionParameter)
-                                        : 
nonNull(TypeMapper.inputTypeFor(objectActionParameter)))
-                                .build())
-                        .collect(Collectors.toList()));
-            }
-            objectTypeBuilder.field(builder);
+            gqlvObjectSpec.addSafeActionAsField(fieldDefinition);
 
         } else {
+            gqlvObjectSpec.addNonSafeActionAsMutatorField(fieldDefinition);
+        }
+    }
 
-            String fieldName = objectAction.getId();
-            GraphQLFieldDefinition.Builder builder = newFieldDefinition()
-                    .name(fieldName)
-                    .type((GraphQLOutputType) 
TypeMapper.typeForObjectAction(objectAction));
-            if (objectAction.getParameters().isNotEmpty()) {
-                builder.arguments(objectAction.getParameters().stream()
-                        .map(objectActionParameter -> 
GraphQLArgument.newArgument()
-                                .name(objectActionParameter.getId())
-                                .type(objectActionParameter.isOptional()
-                                        ? 
TypeMapper.inputTypeFor(objectActionParameter)
-                                        : 
nonNull(TypeMapper.inputTypeFor(objectActionParameter)))
-                                .build())
-                        .collect(Collectors.toList()));
-            }
-
-            GraphQLFieldDefinition fieldDefinition = builder.build();
-            mutatorsTypeBuilder.field(fieldDefinition);
-            mutatorsTypeFields.add(fieldDefinition);
-
+    private static void addArguments(ObjectAction objectAction, 
GraphQLFieldDefinition.Builder builder) {
+        if (objectAction.getParameters().isNotEmpty()) {
+            builder.arguments(objectAction.getParameters().stream()
+                    .map(objectActionParameter -> GraphQLArgument.newArgument()
+                            .name(objectActionParameter.getId())
+                            .type(objectActionParameter.isOptional()
+                                    ? 
TypeMapper.inputTypeFor(objectActionParameter)
+                                    : 
nonNull(TypeMapper.inputTypeFor(objectActionParameter)))
+                            .build())
+                    .collect(Collectors.toList()));
         }
     }
 

Reply via email to