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

Reply via email to