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 e6201b20e0abde81d5a8d33215badd5f6c436a24
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 19:21:22 2024 +0000

    CAUSEWAY-3676: rationalizes DomainObject and DomainService's addActions
---
 .../graphql/model/domain/GqlvDomainObject.java     |  2 +-
 .../graphql/model/domain/GqlvDomainService.java    | 22 +++++++++++++++++++---
 .../integration/GraphQlSourceForCauseway.java      |  2 +-
 3 files changed, 21 insertions(+), 5 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 0e529038e9..65a5603c13 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
@@ -246,7 +246,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
         return mutators.buildMutatorsTypeIfAny();
     }
 
-    public void addActionsAsFields() {
+    public void addActions() {
 
         objectSpecification.streamActions(ActionScope.PRODUCTION, 
MixedIn.INCLUDED)
                 .forEach(this::addAction);
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 1cc57e783e..350ec76dfa 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
@@ -12,11 +12,14 @@ import lombok.Getter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
+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.types._Constants;
 import org.apache.causeway.viewer.graphql.model.util._LTN;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
@@ -93,19 +96,32 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutatorsHolder {
         safeActions.add(new GqlvAction(this, objectAction, objectTypeBuilder, 
codeRegistryBuilder));
     }
 
+    public Optional<GraphQLObjectType> buildMutatorsTypeIfAny() {
+        return mutators.buildMutatorsTypeIfAny();
+    }
 
     /**
      * @return <code>true</code> if any (at least one) actions were added
      */
     public boolean addActions() {
-        List<ObjectAction> objectActionList = 
getObjectSpecification().streamRuntimeActions(MixedIn.INCLUDED)
-                .map(ObjectAction.class::cast)
-                .collect(Collectors.toList());
 
+        List<ObjectAction> objectActionList = 
objectSpecification.streamActions(ActionScope.PRODUCTION, MixedIn.INCLUDED)
+                .collect(Collectors.toList());
 
         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();
     }
 }
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 a3dc60c3bb..8fe0391daf 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
@@ -192,7 +192,7 @@ public class GraphQlSourceForCauseway implements 
GraphQlSource {
 
         gqlvDomainObject.addPropertiesAsFields();
         gqlvDomainObject.addCollectionsAsLists();
-        gqlvDomainObject.addActionsAsFields();
+        gqlvDomainObject.addActions();
 
         // build
         gqlvDomainObject.registerTypesInto(graphQLTypeRegistry);

Reply via email to