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