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 bbc61f8f49a36ae38680985e84a8ad6047bf91ea
Author: danhaywood <[email protected]>
AuthorDate: Thu Feb 22 21:01:25 2024 +0000

    moves GqlvMeta to common
---
 .../model/domain/common/query/GqlvMetaFetcher.java | 112 +++++++++++++++++++++
 .../{simple => common}/query/GqlvMetaSaveAs.java   |   5 +-
 .../rich/mutation/GqlvMutationForAction.java       |   1 -
 .../rich/mutation/GqlvMutationForProperty.java     |   1 -
 .../graphql/model/domain/rich/query/GqlvMeta.java  | 101 +------------------
 .../model/domain/rich/query/GqlvMetaCssClass.java  |   3 +-
 .../model/domain/rich/query/GqlvMetaGrid.java      |   3 +-
 .../model/domain/rich/query/GqlvMetaIcon.java      |   3 +-
 .../model/domain/rich/query/GqlvMetaId.java        |   3 +-
 .../model/domain/rich/query/GqlvMetaLayout.java    |   3 +-
 .../domain/rich/query/GqlvMetaLogicalTypeName.java |   3 +-
 .../model/domain/rich/query/GqlvMetaSaveAs.java    |  65 ------------
 .../model/domain/rich/query/GqlvMetaTitle.java     |   3 +-
 .../model/domain/rich/query/GqlvMetaVersion.java   |   3 +-
 .../model/domain/simple/query/GqlvMeta.java        | 111 +-------------------
 .../domain/simple/query/GqlvMetaCssClass.java      |   3 +-
 .../model/domain/simple/query/GqlvMetaGrid.java    |   3 +-
 .../model/domain/simple/query/GqlvMetaIcon.java    |   3 +-
 .../model/domain/simple/query/GqlvMetaId.java      |   3 +-
 .../model/domain/simple/query/GqlvMetaLayout.java  |   3 +-
 .../simple/query/GqlvMetaLogicalTypeName.java      |   3 +-
 .../model/domain/simple/query/GqlvMetaTitle.java   |   3 +-
 .../model/domain/simple/query/GqlvMetaVersion.java |   3 +-
 23 files changed, 153 insertions(+), 291 deletions(-)

diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvMetaFetcher.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvMetaFetcher.java
new file mode 100644
index 0000000000..86b91e624a
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvMetaFetcher.java
@@ -0,0 +1,112 @@
+package org.apache.causeway.viewer.graphql.model.domain.common.query;
+
+import lombok.val;
+
+import java.util.Optional;
+
+import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.core.config.CausewayConfiguration;
+import 
org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.causeway.core.metamodel.facets.object.entity.EntityFacet;
+import org.apache.causeway.core.metamodel.facets.object.layout.LayoutFacet;
+import org.apache.causeway.core.metamodel.object.Bookmarkable;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
+
+/**
+ * Metadata for every domain object.
+ */
+public class GqlvMetaFetcher {
+
+    private final Bookmark bookmark;
+    private final BookmarkService bookmarkService;
+    private final ObjectManager objectManager;
+    private final CausewayConfiguration causewayConfiguration;
+    private final String graphqlPath;
+
+    public GqlvMetaFetcher(
+            final Bookmark bookmark,
+            final BookmarkService bookmarkService,
+            final ObjectManager objectManager,
+            final CausewayConfiguration causewayConfiguration
+    ) {
+        this.bookmark = bookmark;
+        this.bookmarkService = bookmarkService;
+        this.objectManager = objectManager;
+        this.causewayConfiguration = causewayConfiguration;
+        this.graphqlPath = 
causewayConfiguration.valueOf("spring.graphql.path").orElse("/graphql");
+    }
+
+    public String logicalTypeName() {
+        return bookmark.getLogicalTypeName();
+    }
+
+    public String id() {
+        return bookmark.getIdentifier();
+    }
+
+    public String version() {
+        return managedObject()
+                .map(managedObject -> {
+                    val domainPojo = managedObject.getPojo();
+                    val entityFacet = 
managedObject.getSpecification().getFacet(EntityFacet.class);
+                    if (entityFacet != null) {
+                        val object = entityFacet.versionOf(domainPojo);
+                        return object != null ? object.toString() : null;
+                    } else {
+                        return null;
+                    }
+                }).orElse(null);
+    }
+
+    public Bookmark bookmark() {
+        return bookmark;
+    }
+
+    public String title() {
+        return managedObject()
+                .map(ManagedObject::getTitle)
+                .orElse(null);
+    }
+
+    public String cssClass() {
+        return managedObject()
+                .map(managedObject -> {
+                    val facet = 
managedObject.getSpecification().getFacet(CssClassFacet.class);
+                    return facet != null ? facet.cssClass(managedObject) : 
null;
+                })
+                .orElse(null);
+    }
+
+    public String layout() {
+        return managedObject()
+                .map(managedObject -> {
+                    val facet = 
managedObject.getSpecification().getFacet(LayoutFacet.class);
+                    return facet != null ? facet.layout(managedObject) : null;
+                })
+                .orElse(null);
+    }
+
+    public String grid() {
+        return resource("grid");
+    }
+
+    public String icon() {
+        return resource("icon");
+    }
+
+    private String resource(String resource) {
+        return managedObject()
+                .flatMap(Bookmarkable::getBookmark
+                ).map(bookmark -> String.format(
+                        "//%s/object/%s:%s/%s/%s",
+                        graphqlPath, bookmark.getLogicalTypeName(), 
bookmark.getIdentifier(), 
causewayConfiguration.getViewer().getGraphql().getMetaData().getFieldName(), 
resource))
+                .orElse(null);
+    }
+
+    private Optional<ManagedObject> managedObject() {
+        return bookmarkService.lookup(bookmark)
+                .map(objectManager::adapt);
+    }
+}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaSaveAs.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvMetaSaveAs.java
similarity index 92%
rename from 
viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaSaveAs.java
rename to 
viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvMetaSaveAs.java
index b8f8f682f1..662fe82b00 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaSaveAs.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/GqlvMetaSaveAs.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain.simple.query;
+package org.apache.causeway.viewer.graphql.model.domain.common.query;
 
 import graphql.GraphQLContext;
 import graphql.Scalars;
@@ -27,6 +27,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GvqlActionUtils;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 
@@ -48,7 +49,7 @@ public class GqlvMetaSaveAs extends GqlvAbstract {
     @Override
     protected Object fetchData(DataFetchingEnvironment environment) {
         String ref = environment.getArgument("ref");
-        GqlvMeta.Fetcher source = environment.getSource();
+        GqlvMetaFetcher source = environment.getSource();
         String originalKey = GvqlActionUtils.keyFor(ref);
         GraphQLContext graphQlContext = environment.getGraphQlContext();
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/GqlvMutationForAction.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/GqlvMutationForAction.java
index 88328fa332..66c02be5cd 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/GqlvMutationForAction.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/GqlvMutationForAction.java
@@ -38,7 +38,6 @@ import 
org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 
 import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GvqlActionUtils;
 import org.apache.causeway.viewer.graphql.model.domain.rich.query.GqlvAction;
-import 
org.apache.causeway.viewer.graphql.model.domain.rich.query.GqlvMetaSaveAs;
 
 import org.springframework.lang.Nullable;
 
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/GqlvMutationForProperty.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/GqlvMutationForProperty.java
index ad0bdbf784..616972a307 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/GqlvMutationForProperty.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/mutation/GqlvMutationForProperty.java
@@ -40,7 +40,6 @@ import 
org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.domain.SchemaType;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GvqlActionUtils;
-import 
org.apache.causeway.viewer.graphql.model.domain.rich.query.GqlvMetaSaveAs;
 import org.apache.causeway.viewer.graphql.model.exceptions.DisabledException;
 import org.apache.causeway.viewer.graphql.model.exceptions.HiddenException;
 import org.apache.causeway.viewer.graphql.model.exceptions.InvalidException;
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMeta.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMeta.java
index 0d8d7986aa..87a57bc9eb 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMeta.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMeta.java
@@ -35,7 +35,9 @@ import 
org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaHolder;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaSaveAs;
 
 import lombok.val;
 
@@ -125,106 +127,9 @@ public class GqlvMeta extends GqlvAbstractCustom {
     @Override
     public Object fetchData(final DataFetchingEnvironment environment) {
         return context.bookmarkService.bookmarkFor(environment.getSource())
-                .map(bookmark -> new Fetcher(bookmark, 
context.bookmarkService, context.objectManager, context.causewayConfiguration))
+                .map(bookmark -> new GqlvMetaFetcher(bookmark, 
context.bookmarkService, context.objectManager, context.causewayConfiguration))
                 .orElseThrow();
     }
 
 
-    /**
-     * Metadata for every domain object.
-     */
-    static class Fetcher {
-
-        private final Bookmark bookmark;
-        private final BookmarkService bookmarkService;
-        private final ObjectManager objectManager;
-        private final CausewayConfiguration causewayConfiguration;
-        private final String graphqlPath;
-
-        Fetcher(
-                final Bookmark bookmark,
-                final BookmarkService bookmarkService,
-                final ObjectManager objectManager,
-                final CausewayConfiguration causewayConfiguration
-        ) {
-            this.bookmark = bookmark;
-            this.bookmarkService = bookmarkService;
-            this.objectManager = objectManager;
-            this.causewayConfiguration = causewayConfiguration;
-            this.graphqlPath = 
causewayConfiguration.valueOf("spring.graphql.path").orElse("/graphql");
-        }
-
-        public String logicalTypeName(){
-            return bookmark.getLogicalTypeName();
-        }
-
-        public String id(){
-            return bookmark.getIdentifier();
-        }
-
-        public String version(){
-            return managedObject()
-                    .map(managedObject -> {
-                        val domainPojo = managedObject.getPojo();
-                        val entityFacet = 
managedObject.getSpecification().getFacet(EntityFacet.class);
-                        if (entityFacet != null) {
-                            val object = entityFacet.versionOf(domainPojo);
-                            return object != null ? object.toString() : null;
-                        } else {
-                            return null;
-                        }
-                    }).orElse(null);
-        }
-
-        public Bookmark bookmark() {
-            return bookmark;
-        }
-
-        public String title() {
-            return managedObject()
-                    .map(ManagedObject::getTitle)
-                    .orElse(null);
-        }
-
-        public String cssClass() {
-            return managedObject()
-                    .map(managedObject -> {
-                        val facet = 
managedObject.getSpecification().getFacet(CssClassFacet.class);
-                        return facet != null ? facet.cssClass(managedObject) : 
null;
-                    })
-                    .orElse(null);
-        }
-
-        public String layout() {
-            return managedObject()
-                    .map(managedObject -> {
-                        val facet = 
managedObject.getSpecification().getFacet(LayoutFacet.class);
-                        return facet != null ? facet.layout(managedObject) : 
null;
-                    })
-                    .orElse(null);
-        }
-
-        public String grid() {
-            return resource("grid");
-        }
-
-        public String icon() {
-            return resource("icon");
-        }
-
-        private String resource(String resource) {
-            return managedObject()
-                    .flatMap(Bookmarkable::getBookmark
-                    ).map(bookmark -> String.format(
-                            "//%s/object/%s:%s/%s/%s",
-                            graphqlPath, bookmark.getLogicalTypeName(), 
bookmark.getIdentifier(), 
causewayConfiguration.getViewer().getGraphql().getMetaData().getFieldName(), 
resource) )
-                    .orElse(null);
-        }
-
-        private Optional<ManagedObject> managedObject() {
-            return bookmarkService.lookup(bookmark)
-                    .map(objectManager::adapt);
-        }
-    }
-
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaCssClass.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaCssClass.java
index 849084358d..69bf9eeab7 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaCssClass.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaCssClass.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaCssClass extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaCssClass extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().cssClass();
+        return environment.<GqlvMetaFetcher>getSource().cssClass();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaGrid.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaGrid.java
index 3aaf0f7fc1..6326500dde 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaGrid.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaGrid.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaGrid extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaGrid extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().grid();
+        return environment.<GqlvMetaFetcher>getSource().grid();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaIcon.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaIcon.java
index 5727ffcb0f..a4e10e298f 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaIcon.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaIcon.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaIcon extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaIcon extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().icon();
+        return environment.<GqlvMetaFetcher>getSource().icon();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaId.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaId.java
index bcd2017bdc..977c124d95 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaId.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaId.java
@@ -26,6 +26,7 @@ import static graphql.schema.GraphQLNonNull.nonNull;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaId extends GqlvAbstract {
 
@@ -37,7 +38,7 @@ public class GqlvMetaId extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().id();
+        return environment.<GqlvMetaFetcher>getSource().id();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaLayout.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaLayout.java
index f558234c26..fbf418fde6 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaLayout.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaLayout.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaLayout extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaLayout extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().layout();
+        return environment.<GqlvMetaFetcher>getSource().layout();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaLogicalTypeName.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaLogicalTypeName.java
index 10bafbf158..3e4c969168 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaLogicalTypeName.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaLogicalTypeName.java
@@ -26,6 +26,7 @@ import static graphql.schema.GraphQLNonNull.nonNull;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaLogicalTypeName extends GqlvAbstract {
 
@@ -37,7 +38,7 @@ public class GqlvMetaLogicalTypeName extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().logicalTypeName();
+        return environment.<GqlvMetaFetcher>getSource().logicalTypeName();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaSaveAs.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaSaveAs.java
deleted file mode 100644
index c928a0bfc4..0000000000
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaSaveAs.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.graphql.model.domain.rich.query;
-
-import graphql.GraphQLContext;
-import graphql.Scalars;
-import graphql.schema.DataFetchingEnvironment;
-import graphql.schema.GraphQLArgument;
-
-import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
-
-import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
-import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GvqlActionUtils;
-import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
-
-public class GqlvMetaSaveAs extends GqlvAbstract {
-
-    public GqlvMetaSaveAs(final Context context) {
-        super(context);
-
-        setField(newFieldDefinition()
-                    .name("saveAs")
-                    .type(Scalars.GraphQLString)
-                    .argument(new GraphQLArgument.Builder()
-                            .name("ref")
-                            .type(Scalars.GraphQLString)
-                    )
-                    .build());
-    }
-
-    @Override
-    protected Object fetchData(DataFetchingEnvironment environment) {
-        String ref = environment.getArgument("ref");
-        GqlvMeta.Fetcher source = environment.getSource();
-        String originalKey = GvqlActionUtils.keyFor(ref);
-        GraphQLContext graphQlContext = environment.getGraphQlContext();
-
-        // we ensure the key hasn't been used already
-        int i = 2; // we start at 2 deliberately, so save "cust", "cust-2", 
"cust-3" ... etc if there is a clash
-        String key = originalKey;
-        while (graphQlContext.hasKey(key)) {
-            key = originalKey + "-" + (i++);
-        }
-        graphQlContext.put(key, new BookmarkedPojo(source.bookmark(), 
context.bookmarkService));
-        return ref;
-    }
-
-}
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaTitle.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaTitle.java
index e44be380db..00490327c4 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaTitle.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaTitle.java
@@ -26,6 +26,7 @@ import static graphql.schema.GraphQLNonNull.nonNull;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaTitle extends GqlvAbstract {
 
@@ -37,7 +38,7 @@ public class GqlvMetaTitle extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().title();
+        return environment.<GqlvMetaFetcher>getSource().title();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaVersion.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaVersion.java
index f5e9c1aefd..5005a3506f 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaVersion.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/query/GqlvMetaVersion.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaVersion extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaVersion extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().version();
+        return environment.<GqlvMetaFetcher>getSource().version();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMeta.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMeta.java
index 0ad7ac091e..499fbe1b9f 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMeta.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMeta.java
@@ -18,24 +18,16 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain.simple.query;
 
-import java.util.Optional;
-
 import graphql.schema.DataFetchingEnvironment;
 
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.core.config.CausewayConfiguration;
-import 
org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet;
-import org.apache.causeway.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.causeway.core.metamodel.facets.object.layout.LayoutFacet;
-import org.apache.causeway.core.metamodel.object.Bookmarkable;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
 import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaHolder;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaSaveAs;
 
 import lombok.val;
 
@@ -125,106 +117,9 @@ public class GqlvMeta extends GqlvAbstractCustom {
     @Override
     public Object fetchData(final DataFetchingEnvironment environment) {
         return context.bookmarkService.bookmarkFor(environment.getSource())
-                .map(bookmark -> new Fetcher(bookmark, 
context.bookmarkService, context.objectManager, context.causewayConfiguration))
+                .map(bookmark -> new GqlvMetaFetcher(bookmark, 
context.bookmarkService, context.objectManager, context.causewayConfiguration))
                 .orElseThrow();
     }
 
 
-    /**
-     * Metadata for every domain object.
-     */
-    static class Fetcher {
-
-        private final Bookmark bookmark;
-        private final BookmarkService bookmarkService;
-        private final ObjectManager objectManager;
-        private final CausewayConfiguration causewayConfiguration;
-        private final String graphqlPath;
-
-        Fetcher(
-                final Bookmark bookmark,
-                final BookmarkService bookmarkService,
-                final ObjectManager objectManager,
-                final CausewayConfiguration causewayConfiguration
-        ) {
-            this.bookmark = bookmark;
-            this.bookmarkService = bookmarkService;
-            this.objectManager = objectManager;
-            this.causewayConfiguration = causewayConfiguration;
-            this.graphqlPath = 
causewayConfiguration.valueOf("spring.graphql.path").orElse("/graphql");
-        }
-
-        public String logicalTypeName(){
-            return bookmark.getLogicalTypeName();
-        }
-
-        public String id(){
-            return bookmark.getIdentifier();
-        }
-
-        public String version(){
-            return managedObject()
-                    .map(managedObject -> {
-                        val domainPojo = managedObject.getPojo();
-                        val entityFacet = 
managedObject.getSpecification().getFacet(EntityFacet.class);
-                        if (entityFacet != null) {
-                            val object = entityFacet.versionOf(domainPojo);
-                            return object != null ? object.toString() : null;
-                        } else {
-                            return null;
-                        }
-                    }).orElse(null);
-        }
-
-        public Bookmark bookmark() {
-            return bookmark;
-        }
-
-        public String title() {
-            return managedObject()
-                    .map(ManagedObject::getTitle)
-                    .orElse(null);
-        }
-
-        public String cssClass() {
-            return managedObject()
-                    .map(managedObject -> {
-                        val facet = 
managedObject.getSpecification().getFacet(CssClassFacet.class);
-                        return facet != null ? facet.cssClass(managedObject) : 
null;
-                    })
-                    .orElse(null);
-        }
-
-        public String layout() {
-            return managedObject()
-                    .map(managedObject -> {
-                        val facet = 
managedObject.getSpecification().getFacet(LayoutFacet.class);
-                        return facet != null ? facet.layout(managedObject) : 
null;
-                    })
-                    .orElse(null);
-        }
-
-        public String grid() {
-            return resource("grid");
-        }
-
-        public String icon() {
-            return resource("icon");
-        }
-
-        private String resource(String resource) {
-            return managedObject()
-                    .flatMap(Bookmarkable::getBookmark
-                    ).map(bookmark -> String.format(
-                            "//%s/object/%s:%s/%s/%s",
-                            graphqlPath, bookmark.getLogicalTypeName(), 
bookmark.getIdentifier(), 
causewayConfiguration.getViewer().getGraphql().getMetaData().getFieldName(), 
resource) )
-                    .orElse(null);
-        }
-
-        private Optional<ManagedObject> managedObject() {
-            return bookmarkService.lookup(bookmark)
-                    .map(objectManager::adapt);
-        }
-    }
-
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaCssClass.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaCssClass.java
index 163e124fc2..a17c3de695 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaCssClass.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaCssClass.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaCssClass extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaCssClass extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().cssClass();
+        return environment.<GqlvMetaFetcher>getSource().cssClass();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaGrid.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaGrid.java
index d3c9a56e9a..efc4a59c0e 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaGrid.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaGrid.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaGrid extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaGrid extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().grid();
+        return environment.<GqlvMetaFetcher>getSource().grid();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaIcon.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaIcon.java
index 55fde2c8af..ccd373c591 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaIcon.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaIcon.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaIcon extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaIcon extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().icon();
+        return environment.<GqlvMetaFetcher>getSource().icon();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaId.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaId.java
index f2eed4e396..3bae79df2b 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaId.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaId.java
@@ -26,6 +26,7 @@ import static graphql.schema.GraphQLNonNull.nonNull;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaId extends GqlvAbstract {
 
@@ -37,7 +38,7 @@ public class GqlvMetaId extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().id();
+        return environment.<GqlvMetaFetcher>getSource().id();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaLayout.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaLayout.java
index c46a275fb5..34d188b7dc 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaLayout.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaLayout.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaLayout extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaLayout extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().layout();
+        return environment.<GqlvMetaFetcher>getSource().layout();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaLogicalTypeName.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaLogicalTypeName.java
index 50db9c16c3..0de4985277 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaLogicalTypeName.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaLogicalTypeName.java
@@ -26,6 +26,7 @@ import static graphql.schema.GraphQLNonNull.nonNull;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaLogicalTypeName extends GqlvAbstract {
 
@@ -37,7 +38,7 @@ public class GqlvMetaLogicalTypeName extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().logicalTypeName();
+        return environment.<GqlvMetaFetcher>getSource().logicalTypeName();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaTitle.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaTitle.java
index c2ecd2cd10..1fb39f3e0e 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaTitle.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaTitle.java
@@ -26,6 +26,7 @@ import static graphql.schema.GraphQLNonNull.nonNull;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaTitle extends GqlvAbstract {
 
@@ -37,7 +38,7 @@ public class GqlvMetaTitle extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().title();
+        return environment.<GqlvMetaFetcher>getSource().title();
     }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaVersion.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaVersion.java
index 58967daaf7..590a8d11b2 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaVersion.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/simple/query/GqlvMetaVersion.java
@@ -25,6 +25,7 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import 
org.apache.causeway.viewer.graphql.model.domain.common.query.GqlvMetaFetcher;
 
 public class GqlvMetaVersion extends GqlvAbstract {
 
@@ -36,7 +37,7 @@ public class GqlvMetaVersion extends GqlvAbstract {
 
     @Override
     protected String fetchData(DataFetchingEnvironment environment) {
-        return environment.<GqlvMeta.Fetcher>getSource().version();
+        return environment.<GqlvMetaFetcher>getSource().version();
     }
 
 }


Reply via email to