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 c4f3115139 CAUSEWAY-3676: wip towards removing GqlObjectTypeBuilder as 
public ... addActions, mutator fields
c4f3115139 is described below

commit c4f31151391dbdd6ffb388bae945aafac4b0e6f3
Author: danhaywood <[email protected]>
AuthorDate: Fri Jan 19 12:52:37 2024 +0000

    CAUSEWAY-3676: wip towards removing GqlObjectTypeBuilder as public ... 
addActions, mutator fields
---
 .../graphql/viewer/source/GqlvObjectSpec.java      | 13 +++++++
 .../graphql/viewer/source/ObjectTypeFactory.java   | 42 +++++-----------------
 2 files changed, 22 insertions(+), 33 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 b5c7e98e79..28d1da87ef 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
@@ -13,6 +13,9 @@ import graphql.schema.GraphQLTypeReference;
 import lombok.Getter;
 import lombok.val;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
@@ -50,6 +53,11 @@ public class GqlvObjectSpec {
         return (GraphQLObjectType) metaField.getType();
     }
 
+
+    final String mutatorsTypeName;
+    final GraphQLObjectType.Builder mutatorsTypeBuilder;
+    final List<GraphQLFieldDefinition> mutatorsTypeFields = new ArrayList<>();
+
     /**
      * Built using {@link #buildGqlObjectType()}
      */
@@ -72,6 +80,10 @@ public class GqlvObjectSpec {
                         .type(nonNull(Scalars.GraphQLID))
                         .build());
         gqlInputObjectType = inputTypeBuilder.build();
+
+        mutatorsTypeName = getLogicalTypeNameSanitized() + 
"__DomainObject_mutators";
+        mutatorsTypeBuilder = newObject().name(mutatorsTypeName);
+
     }
 
     private GraphQLObjectType metaType() {
@@ -85,6 +97,7 @@ public class GqlvObjectSpec {
     }
 
 
+
     void addFields() {
         objectSpec.streamProperties(MixedIn.INCLUDED)
         .forEach(this::addField);
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 83c3568b75..fda9795828 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
@@ -76,10 +76,6 @@ public class ObjectTypeFactory {
     private final ObjectManager objectManager;
     private final GraphQLTypeRegistry graphQLTypeRegistry;
 
-    static String mutatorsTypeName(final String logicalTypeNameSanitized){
-        return logicalTypeNameSanitized + "__DomainObject_mutators";
-    }
-
     @UtilityClass
     static class Fields {
         static GraphQLFieldDefinition id =
@@ -168,27 +164,26 @@ public class ObjectTypeFactory {
 
     MutatorsDataForEntity addActions(final GqlvObjectSpec gqlvObjectSpec) {
 
-        final String logicalTypeNameSanitized = 
gqlvObjectSpec.getLogicalTypeNameSanitized();
-        final ObjectSpecification objectSpecification = 
gqlvObjectSpec.getObjectSpec();
+        final ObjectSpecification objectSpec = gqlvObjectSpec.getObjectSpec();
         final GraphQLObjectType.Builder objectTypeBuilder = 
gqlvObjectSpec.getGqlObjectTypeBuilder();
 
-        MutatorManager result = mutatorManager(logicalTypeNameSanitized);
 
-        objectSpecification.streamActions(ActionScope.PRODUCTION, 
MixedIn.INCLUDED)
+        objectSpec.streamActions(ActionScope.PRODUCTION, MixedIn.INCLUDED)
                 .forEach(objectAction ->
-                        addAction(objectAction, objectTypeBuilder, 
result.mutatorsTypeBuilder, result.mutatorsTypeFields)
+                        addAction(objectAction, objectTypeBuilder, 
gqlvObjectSpec.mutatorsTypeBuilder, gqlvObjectSpec.mutatorsTypeFields)
                 );
 
-        if (!result.mutatorsTypeFields.isEmpty()){
-            GraphQLObjectType mutatorsType = 
result.mutatorsTypeBuilder.build();
-            graphQLTypeRegistry.addTypeIfNotAlreadyPresent(mutatorsType, 
result.mutatorsTypeName);
+        if (!gqlvObjectSpec.mutatorsTypeFields.isEmpty()){
+            GraphQLObjectType mutatorsType = 
gqlvObjectSpec.mutatorsTypeBuilder.build();
+            graphQLTypeRegistry.addTypeIfNotAlreadyPresent(mutatorsType, 
gqlvObjectSpec.mutatorsTypeName);
+
             GraphQLFieldDefinition gql_mutations = newFieldDefinition()
                     .name(GQL_MUTATIONS_FIELDNAME)
                     .type(mutatorsType)
                     .build();
             objectTypeBuilder.field(gql_mutations);
 
-            return new MutatorsDataForEntity(mutatorsType, 
result.mutatorsTypeFields);
+            return new MutatorsDataForEntity(mutatorsType, 
gqlvObjectSpec.mutatorsTypeFields);
 
 //            // I think we have to create and register data fetcher for 
mutations here, but we can't since we have no objectTypeYet
 //            
codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates(graphQLTypeReference,
 gql_mutations), new DataFetcher<Object>() {
@@ -217,25 +212,6 @@ public class ObjectTypeFactory {
 
     }
 
-    private static MutatorManager mutatorManager(String 
logicalTypeNameSanitized) {
-        val mutatorsTypeName = mutatorsTypeName(logicalTypeNameSanitized);
-        GraphQLObjectType.Builder mutatorsTypeBuilder = 
newObject().name(mutatorsTypeName);
-        final List<GraphQLFieldDefinition> mutatorsTypeFields = new 
ArrayList<>();
-        MutatorManager result = new MutatorManager(mutatorsTypeName, 
mutatorsTypeBuilder, mutatorsTypeFields);
-        return result;
-    }
-
-    private static class MutatorManager {
-        public final String mutatorsTypeName;
-        public final GraphQLObjectType.Builder mutatorsTypeBuilder;
-        public final List<GraphQLFieldDefinition> mutatorsTypeFields;
-
-        public MutatorManager(String mutatorsTypeName, 
GraphQLObjectType.Builder mutatorsTypeBuilder, List<GraphQLFieldDefinition> 
mutatorsTypeFields) {
-            this.mutatorsTypeName = mutatorsTypeName;
-            this.mutatorsTypeBuilder = mutatorsTypeBuilder;
-            this.mutatorsTypeFields = mutatorsTypeFields;
-        }
-    }
 
     private static void addAction(ObjectAction objectAction, 
GraphQLObjectType.Builder objectTypeBuilder, GraphQLObjectType.Builder 
mutatorsTypeBuilder, List<GraphQLFieldDefinition> mutatorsTypeFields) {
         if (objectAction.getSemantics().isSafeInNature()) {
@@ -336,7 +312,7 @@ public class ObjectTypeFactory {
             final Set<GraphQLType> graphQLObjectTypes) {
 
         //TODO: this is not going to work, because we need to dynamically add 
fields
-        String mutatorsTypeName = mutatorsTypeName(logicalTypeNameSanitized);
+        String mutatorsTypeName = logicalTypeNameSanitized + 
"__DomainObject_mutators";
         GraphQLObjectType.Builder mutatorsTypeBuilder = 
newObject().name(mutatorsTypeName);
         GraphQLObjectType mutatorsType = mutatorsTypeBuilder.build();
         graphQLObjectTypes.add(mutatorsType);

Reply via email to