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