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 986897a45f1fb580460c9c519a1f3169f456f8fd Author: danhaywood <[email protected]> AuthorDate: Mon Feb 12 21:46:44 2024 +0000 CAUSEWAY-3676: wip, rationalizing dataFetcher methods --- .../apache/causeway/viewer/graphql/model/domain/GqlvAction.java | 9 +++++++-- .../causeway/viewer/graphql/model/domain/GqlvActionInvoke.java | 4 ++-- .../causeway/viewer/graphql/model/domain/GqlvScenarioName.java | 4 ++-- .../causeway/viewer/graphql/model/fetcher/BookmarkedPojo.java | 9 ++++++++- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java index 1f25d52f6c..98c9d53eff 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java @@ -41,9 +41,9 @@ import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter; import org.apache.causeway.core.metamodel.spec.feature.OneToManyActionParameter; import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter; +import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo; import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import org.apache.causeway.viewer.graphql.model.context.Context; -import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojoFetcher; import lombok.val; import lombok.extern.log4j.Log4j2; @@ -252,7 +252,7 @@ public class GqlvAction public void addDataFetcher(Parent parent) { context.codeRegistryBuilder.dataFetcher( parent.coordinatesFor(getField()), - new BookmarkedPojoFetcher(context.bookmarkService)); + this::fetchData); hidden.addDataFetcher(this); disabled.addDataFetcher(this); @@ -265,6 +265,11 @@ public class GqlvAction } } + private Object fetchData(DataFetchingEnvironment dataFetchingEnvironment) { + return BookmarkedPojo.sourceFrom(dataFetchingEnvironment, context); + } + + public interface Holder extends GqlvMember.Holder { } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java index 2ef852148f..5324fbef86 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java @@ -122,11 +122,11 @@ public class GqlvActionInvoke extends GqlvAbstract { public void addDataFetcher(Parent parent) { context.codeRegistryBuilder.dataFetcher( parent.coordinatesFor(getField()), - this::invoke + this::fetchData ); } - private Object invoke(final DataFetchingEnvironment dataFetchingEnvironment) { + private Object fetchData(final DataFetchingEnvironment dataFetchingEnvironment) { val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment); diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java index 83a4e8c895..9a7aa4cf03 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java @@ -27,10 +27,10 @@ public class GqlvScenarioName extends GqlvAbstract { public void addDataFetchers(Parent parent) { context.codeRegistryBuilder.dataFetcher( parent.coordinatesFor(getField()), - this::scenarioName); + this::fetchData); } - private String scenarioName(DataFetchingEnvironment environment) { + private Object fetchData(DataFetchingEnvironment environment) { val graphQlContext = environment.getGraphQlContext(); return graphQlContext.get(GqlvScenario.KEY_SCENARIO_NAME); } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/fetcher/BookmarkedPojo.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/fetcher/BookmarkedPojo.java index 69f5e54c1f..4f50eda21e 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/fetcher/BookmarkedPojo.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/fetcher/BookmarkedPojo.java @@ -22,6 +22,7 @@ import graphql.schema.DataFetchingEnvironment; import org.apache.causeway.applib.services.bookmark.Bookmark; import org.apache.causeway.applib.services.bookmark.BookmarkService; +import org.apache.causeway.viewer.graphql.model.context.Context; import lombok.val; @@ -39,13 +40,19 @@ public class BookmarkedPojo { } public static Object sourceFrom(DataFetchingEnvironment dataFetchingEnvironment) { - val source = dataFetchingEnvironment.getSource(); return source instanceof BookmarkedPojo ? ((BookmarkedPojo) source).getTargetPojo() : source; } + public static BookmarkedPojo sourceFrom(DataFetchingEnvironment dataFetchingEnvironment, Context context) { + val sourcePojo = sourceFrom(dataFetchingEnvironment); + return context.bookmarkService.bookmarkFor(sourcePojo) + .map(bookmark -> new BookmarkedPojo(bookmark, context.bookmarkService)) + .orElseThrow(); + } + public Object getTargetPojo() { return bookmarkService.lookup(bookmark).orElseThrow(); }
