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(); } }
