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 401f22300dece0b3953cb5f6efea49e03e6d2573
Author: danhaywood <[email protected]>
AuthorDate: Sun Jan 21 15:14:19 2024 +0000

    CAUSEWAY-3676: towards mutations fetchers
---
 .../graphql/model/domain/GqlvDomainObject.java     |  6 ++--
 .../graphql/model/domain/GqlvDomainService.java    |  4 +--
 .../viewer/graphql/model/domain/GqlvMutations.java | 34 ++++++++++++++++++++--
 .../graphql/model/domain/GqlvMutationsFetcher.java | 16 ++++++++--
 .../integration/GraphQlSourceForCauseway.java      |  7 ++---
 5 files changed, 54 insertions(+), 13 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 b0bc898a0b..dc7b76da12 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
@@ -249,7 +249,7 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
     }
 
 
-    public void addDataFetchersForMetaData() {
+    public void addDataFetchersForMeta() {
         meta.addDataFetchers();
     }
 
@@ -265,8 +265,8 @@ public class GqlvDomainObject implements GqlvActionHolder, 
GqlvPropertyHolder, G
         getSafeActions().forEach(GqlvAction::addDataFetcher);
     }
 
-    public void addDataFetchersForMutators() {
-        getMutations().addDataFetchersForActions();
+    public void addDataFetchersForMutations() {
+        getMutations().addDataFetchers();
     }
 
 
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 3eb90ee6ed..06b6210098 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
@@ -172,8 +172,8 @@ public class GqlvDomainService implements GqlvActionHolder, 
GqlvMutationsHolder
         getSafeActions().forEach(GqlvAction::addDataFetcher);
     }
 
-    public void addDataFetchersForMutators() {
-        getMutations().addDataFetchersForActions();
+    public void addDataFetchersForMutations() {
+        getMutations().addDataFetchers();
     }
 
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
index 21a08dcb1e..1fadf70a42 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
@@ -1,5 +1,6 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import graphql.schema.DataFetcher;
 import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
@@ -12,11 +13,13 @@ import java.util.List;
 import java.util.Optional;
 
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 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.TypeNames;
 
+import static graphql.schema.FieldCoordinates.coordinates;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
 
@@ -117,7 +120,34 @@ public class GqlvMutations implements GqlvActionHolder {
         return mutationsTypeIfAny.orElse(null);
     }
 
-    public void addDataFetchersForActions() {
-        // TODO
+
+    public void addDataFetchers() {
+
+        if (mutationsFieldIfAny.isPresent()) {
+            codeRegistryBuilder.dataFetcher(
+                    coordinates(getGqlObjectType(), mutationsFieldIfAny.get()),
+                    (DataFetcher<Object>) environment -> {
+                        return 
bookmarkService.bookmarkFor(environment.getSource())
+                                .map(bookmark -> new 
GqlvMutationsFetcher(bookmark, getActions(), bookmarkService, objectManager))
+                                .orElseThrow();
+                    });
+
+            // TODO: loop around actions and set up a fetcher for each.
+//            codeRegistryBuilder.dataFetcher(
+//                    coordinates(getMetaType(), logicalTypeName),
+//                    (DataFetcher<Object>) environment -> 
environment.<GqlvMeta.Fetcher>getSource().logicalTypeName());
+//
+//            codeRegistryBuilder.dataFetcher(
+//                    coordinates(getMetaType(), id),
+//                    (DataFetcher<Object>) environment -> 
environment.<GqlvMeta.Fetcher>getSource().id());
+//
+//            if (domainObject.getBeanSort() == BeanSort.ENTITY) {
+//                codeRegistryBuilder.dataFetcher(
+//                        coordinates(getMetaType(), version),
+//                        (DataFetcher<Object>) environment -> 
environment.<GqlvMeta.Fetcher>getSource().version());
+//            }
+        }
     }
+
+
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationsFetcher.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationsFetcher.java
index 4d72efca58..07a1ae70db 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationsFetcher.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationsFetcher.java
@@ -22,14 +22,26 @@ import java.util.List;
 
 import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 
 import lombok.Data;
 
-@Data
 public class GqlvMutationsFetcher {
 
     private final Bookmark bookmark;
+    private final List<GqlvAction> actions;
     private final BookmarkService bookmarkService;
-    private final List<String> mutatorFieldNames;
+    private final ObjectManager objectManager;
 
+    public GqlvMutationsFetcher(
+            final Bookmark bookmark,
+            final List<GqlvAction> actions,
+            final BookmarkService bookmarkService,
+            final ObjectManager objectManager) {
+
+        this.bookmark = bookmark;
+        this.actions = actions;
+        this.bookmarkService = bookmarkService;
+        this.objectManager = objectManager;
+    }
 }
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 c9abbcfe9d..91d8f46a6d 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
@@ -33,7 +33,6 @@ import 
org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 
-import org.apache.causeway.viewer.graphql.model.domain.GqlvAction;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainObject;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
 import org.apache.causeway.viewer.graphql.viewer.toplevel.GqlvTopLevelQuery;
@@ -187,7 +186,7 @@ public class GraphQlSourceForCauseway implements 
GraphQlSource {
         domainService.registerTypesInto(graphQLTypeRegistry);
 
         domainService.addDataFetchersForSafeActions();
-        domainService.addDataFetchersForMutators();
+        domainService.addDataFetchersForMutations();
 
 
 
@@ -209,12 +208,12 @@ public class GraphQlSourceForCauseway implements 
GraphQlSource {
         domainObject.registerTypesInto(graphQLTypeRegistry);
 
         // create and register data fetchers
-        domainObject.addDataFetchersForMetaData();
+        domainObject.addDataFetchersForMeta();
 
         domainObject.addDataFetchersForProperties();
         domainObject.addDataFetchersForCollections();
         domainObject.addDataFetchersForSafeActions();
-        domainObject.addDataFetchersForMutators();
+        domainObject.addDataFetchersForMutations();
     }
 
 }

Reply via email to