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


The following commit(s) were added to refs/heads/CAUSEWAY-3676 by this push:
     new 69be9a8e77 CAUSEWAY-3676: uses EntityFacet to obtain version of GQLMeta
69be9a8e77 is described below

commit 69be9a8e77f34e4aaf8a7af7185acefdcbc302de
Author: danhaywood <[email protected]>
AuthorDate: Thu Jan 18 19:13:46 2024 +0000

    CAUSEWAY-3676: uses EntityFacet to obtain version of GQLMeta
---
 .../viewer/graphql/viewer/source/GQLMeta.java         | 19 +++++++++++++++----
 .../graphql/viewer/source/ObjectTypeFactory.java      | 16 ++++++----------
 2 files changed, 21 insertions(+), 14 deletions(-)

diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GQLMeta.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GQLMeta.java
index 81ab30f536..508af3e0c9 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GQLMeta.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GQLMeta.java
@@ -20,14 +20,20 @@ package org.apache.causeway.viewer.graphql.viewer.source;
 
 import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.core.metamodel.facets.object.entity.EntityFacet;
+import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 
 import lombok.Data;
 
+import java.util.Objects;
+import java.util.Optional;
+
 @Data
 public class GQLMeta {
 
     private final Bookmark bookmark;
     private final BookmarkService bookmarkService;
+    private final ObjectManager objectManager;
 
     public String logicalTypeName(){
         return bookmark.getLogicalTypeName();
@@ -39,10 +45,15 @@ public class GQLMeta {
 
     public String version(){
         Object domainObject = bookmarkService.lookup(bookmark).orElse(null);
-        if (domainObject == null) return null;
-
-        // TODO: implement; we would like to be this independent of the 
persistence mechanism
-        return null;
+        if (domainObject == null) {
+            return null;
+        }
+        EntityFacet entityFacet = 
objectManager.adapt(domainObject).getSpecification().getFacet(EntityFacet.class);
+        return Optional.ofNullable(entityFacet)
+                .map(x -> x.versionOf(domainObject))
+                .filter(Objects::nonNull)
+                .map(Object::toString)
+                .orElse(null);
     }
 
 }
diff --git 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
index 82469262c8..172fe20914 100644
--- 
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
+++ 
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
@@ -30,6 +30,8 @@ import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
+import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
+
 import org.springframework.stereotype.Component;
 
 import org.apache.causeway.applib.services.bookmark.Bookmark;
@@ -70,6 +72,7 @@ public class ObjectTypeFactory {
 
     private final BookmarkService bookmarkService;
     private final SpecificationLoader specificationLoader;
+    private final ObjectManager objectManager;
 
     private static GraphQLFieldDefinition idField = newFieldDefinition()
             .name("id").type(nonNull(Scalars.GraphQLString)).build();
@@ -462,31 +465,24 @@ public class ObjectTypeFactory {
             final GraphQLObjectType graphQLObjectType) {
 
         
codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates(graphQLObjectType, 
gql_meta), (DataFetcher<Object>) environment -> {
-
-            Bookmark bookmark = 
bookmarkService.bookmarkFor(environment.getSource()).orElse(null);
-            if (bookmark == null) return null; //TODO: is this correct ?
-            return new GQLMeta(bookmark, bookmarkService);
+            return bookmarkService.bookmarkFor(environment.getSource())
+                    .map(bookmark -> new GQLMeta(bookmark, bookmarkService, 
objectManager))
+                    .orElse(null); //TODO: is this correct ?
         });
 
         codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates(metaType, 
idField), (DataFetcher<Object>) environment -> {
-
             GQLMeta gqlMeta = environment.getSource();
-
             return gqlMeta.id();
         });
 
         codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates(metaType, 
logicalTypeNameField), (DataFetcher<Object>) environment -> {
-
             GQLMeta gqlMeta = environment.getSource();
-
             return gqlMeta.logicalTypeName();
         });
 
         if (objectSpecificationBeanSort == BeanSort.ENTITY) {
             
codeRegistryBuilder.dataFetcher(FieldCoordinates.coordinates(metaType, 
versionField), (DataFetcher<Object>) environment -> {
-
                 GQLMeta gqlMeta = environment.getSource();
-
                 return gqlMeta.version();
             });
 

Reply via email to