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 db5d4d5c66ab4d23642beff33c67642ac14b00a8
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 19:38:53 2024 +0000

    CAUSEWAY-3676: still attempting to add mutator actions to DomainService
---
 .../graphql/model/domain/GqlvDomainObject.java     |  7 -----
 .../graphql/model/domain/GqlvDomainService.java    | 34 +++++++++++++++-------
 .../integration/GraphQlSourceForCauseway.java      | 11 ++++---
 3 files changed, 28 insertions(+), 24 deletions(-)

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 65a5603c13..293e405a18 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
@@ -194,7 +194,6 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
 
 
     void addAction(final ObjectAction objectAction) {
-
         if (objectAction.getSemantics().isSafeInNature()) {
             safeActions.add(new GqlvAction(this, objectAction, 
objectTypeBuilder, codeRegistryBuilder));
         } else {
@@ -203,11 +202,6 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
     }
 
 
-    boolean hasMutators() {
-        return mutators.hasActions();
-    }
-
-
     /**
      * Should be called only after fields etc have been added.
      *
@@ -304,7 +298,6 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
 //                }
 //            });
 
-
     }
 
 
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 350ec76dfa..d1b1bb5777 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
@@ -1,12 +1,9 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
-import graphql.schema.GraphQLArgument;
 import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
-import graphql.schema.GraphQLOutputType;
-
 import lombok.Getter;
 
 import java.util.ArrayList;
@@ -19,9 +16,9 @@ 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.viewer.graphql.model.registry.GraphQLTypeRegistry;
 import org.apache.causeway.viewer.graphql.model.types._Constants;
 import org.apache.causeway.viewer.graphql.model.util._LTN;
-import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
@@ -65,7 +62,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutatorsHolder {
     /**
      * @see #getGqlObjectType()
      */
-    public GraphQLObjectType buildObjectGqlType() {
+    public GraphQLObjectType buildGqlObjectType() {
         if (gqlObjectType != null) {
             throw new IllegalArgumentException(String.format("GqlObjectType 
has already been built for %s", getLogicalTypeName()));
         }
@@ -73,7 +70,7 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutatorsHolder {
     }
 
     /**
-     * @see #buildObjectGqlType()
+     * @see #buildGqlObjectType()
      */
     public GraphQLObjectType getGqlObjectType() {
         if (gqlObjectType == null) {
@@ -92,8 +89,13 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutatorsHolder {
 
 
     public void addAction(final ObjectAction objectAction) {
-        // TODO: either safe or mutator
-        safeActions.add(new GqlvAction(this, objectAction, objectTypeBuilder, 
codeRegistryBuilder));
+        if (objectAction.getSemantics().isSafeInNature()) {
+            safeActions.add(new GqlvAction(this, objectAction, 
objectTypeBuilder, codeRegistryBuilder));
+        } else {
+            // TODO: should register with mutators instead ...
+//            mutators.addAction(objectAction);
+            safeActions.add(new GqlvAction(this, objectAction, 
objectTypeBuilder, codeRegistryBuilder));
+        }
     }
 
     public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
@@ -110,18 +112,28 @@ public class GqlvDomainService implements 
GqlvActionHolder, GqlvMutatorsHolder {
 
         objectActionList.forEach(this::addAction);
 
-
         Optional<GraphQLObjectType> mutatorsTypeIfAny = 
buildMutatorsTypeIfAny();
         mutatorsTypeIfAny.ifPresent(mutatorsType -> {
-
             GraphQLFieldDefinition gql_mutations = newFieldDefinition()
                     .name(_Constants.GQL_MUTATIONS_FIELDNAME)
                     .type(mutatorsType)
                     .build();
             objectTypeBuilder.field(gql_mutations);
-
         });
 
         return !objectActionList.isEmpty();
     }
+
+    public void registerTypesInto(GraphQLTypeRegistry graphQLTypeRegistry) {
+
+        GraphQLObjectType graphQLObjectType = buildGqlObjectType();
+        //graphQLTypeRegistry.addTypeIfNotAlreadyPresent(graphQLObjectType);
+
+        
getMutatorsTypeIfAny().ifPresent(graphQLTypeRegistry::addTypeIfNotAlreadyPresent);
+    }
+
+    public Optional<GraphQLObjectType> getMutatorsTypeIfAny() {
+        return mutators.getMutatorsTypeIfAny();
+    }
+
 }
diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 8fe0391daf..f26ff4d2a6 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -158,25 +158,24 @@ public class GraphQlSourceForCauseway implements 
GraphQlSource {
             final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
 
         serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
-                .ifPresent(service -> {
-                    addDomainServiceToTopLevelQuery(service, objectSpec, 
topLevelQueryStructure, codeRegistryBuilder);
-                });
+            .ifPresent(servicePojo ->
+                addDomainServiceToTopLevelQuery(servicePojo, objectSpec, 
topLevelQueryStructure, codeRegistryBuilder));
     }
 
     private void addDomainServiceToTopLevelQuery(
-            final Object service,
+            final Object servicePojo,
             final ObjectSpecification objectSpec,
             final GqlvTopLevelQuery topLevelQueryStructure,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
 
-        val domainService = new GqlvDomainService(objectSpec, service, 
codeRegistryBuilder);
+        val domainService = new GqlvDomainService(objectSpec, servicePojo, 
codeRegistryBuilder);
 
         boolean actionsAdded = domainService.addActions();
         if (!actionsAdded) {
             return;
         }
 
-        domainService.buildObjectGqlType();
+        domainService.registerTypesInto(graphQLTypeRegistry);
 
         domainService.getSafeActions().forEach(GqlvAction::addDataFetcher);
 

Reply via email to