You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/02/20 23:33:07 UTC

(causeway) branch CAUSEWAY-3676 updated (2fb16249da -> c2a98c7b0f)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch CAUSEWAY-3676
in repository https://gitbox.apache.org/repos/asf/causeway.git


    from 2fb16249da CAUSEWAY-3676: improves handling of abstract input types
     new a6024982f3 CAUSEWAY-3676: wip on causeway config settings
     new c2a98c7b0f CAUSEWAY-3676: wip on introducing rich and simple schema styles

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../core/config/CausewayConfiguration.java         | 69 ++++++++++++++++++++++
 .../graphql/model/src/main/java/module-info.java   |  1 +
 .../viewer/graphql/model/context/Context.java      |  4 +-
 .../graphql/model/domain/GqlvAbstractCustom.java   |  5 +-
 .../graphql/model/domain/GqlvScenarioStep.java     |  2 +
 .../model/domain/{ => rich}/GqlvAction.java        |  5 +-
 .../model/domain/{ => rich}/GqlvActionInvoke.java  |  5 +-
 .../domain/{ => rich}/GqlvActionInvokeArgs.java    | 17 +++---
 .../domain/{ => rich}/GqlvActionInvokeArgsArg.java | 13 ++--
 .../domain/{ => rich}/GqlvActionInvokeResult.java  | 12 ++--
 .../model/domain/{ => rich}/GqlvActionParams.java  | 10 ++--
 .../domain/{ => rich}/GqlvActionParamsParam.java   |  5 +-
 .../GqlvActionParamsParamAutoComplete.java         |  4 +-
 .../{ => rich}/GqlvActionParamsParamChoices.java   |  4 +-
 .../{ => rich}/GqlvActionParamsParamDatatype.java  |  4 +-
 .../{ => rich}/GqlvActionParamsParamDefault.java   |  4 +-
 .../{ => rich}/GqlvActionParamsParamDisabled.java  |  4 +-
 .../{ => rich}/GqlvActionParamsParamHidden.java    |  5 +-
 .../{ => rich}/GqlvActionParamsParamValidate.java  |  4 +-
 .../domain/{ => rich}/GqlvActionValidity.java      |  3 +-
 .../model/domain/{ => rich}/GqlvAssociation.java   |  2 +-
 .../domain/{ => rich}/GqlvAssociationDatatype.java |  4 +-
 .../domain/{ => rich}/GqlvAssociationGet.java      |  3 +-
 .../model/domain/{ => rich}/GqlvCollection.java    |  3 +-
 .../domain/{ => rich}/GqlvCollectionDatatype.java  |  2 +-
 .../model/domain/{ => rich}/GqlvCollectionGet.java |  2 +-
 .../model/domain/{ => rich}/GqlvDomainObject.java  |  5 +-
 .../model/domain/{ => rich}/GqlvDomainService.java |  4 +-
 .../model/domain/{ => rich}/GqlvMember.java        |  3 +-
 .../domain/{ => rich}/GqlvMemberDisabled.java      |  3 +-
 .../model/domain/{ => rich}/GqlvMemberHidden.java  |  3 +-
 .../graphql/model/domain/{ => rich}/GqlvMeta.java  |  4 +-
 .../model/domain/{ => rich}/GqlvMetaCssClass.java  |  3 +-
 .../model/domain/{ => rich}/GqlvMetaGrid.java      |  3 +-
 .../model/domain/{ => rich}/GqlvMetaIcon.java      |  3 +-
 .../model/domain/{ => rich}/GqlvMetaId.java        |  3 +-
 .../model/domain/{ => rich}/GqlvMetaLayout.java    |  3 +-
 .../domain/{ => rich}/GqlvMetaLogicalTypeName.java |  3 +-
 .../model/domain/{ => rich}/GqlvMetaSaveAs.java    |  3 +-
 .../model/domain/{ => rich}/GqlvMetaTitle.java     |  3 +-
 .../model/domain/{ => rich}/GqlvMetaVersion.java   |  3 +-
 .../domain/{ => rich}/GqlvMutationForAction.java   |  9 ++-
 .../domain/{ => rich}/GqlvMutationForProperty.java |  5 +-
 .../model/domain/{ => rich}/GqlvProperty.java      |  4 +-
 .../{ => rich}/GqlvPropertyAutoComplete.java       |  3 +-
 .../domain/{ => rich}/GqlvPropertyChoices.java     |  3 +-
 .../domain/{ => rich}/GqlvPropertyDatatype.java    |  2 +-
 .../model/domain/{ => rich}/GqlvPropertyGet.java   |  2 +-
 .../domain/{ => rich}/GqlvPropertyGetBlob.java     |  4 +-
 .../{ => rich}/GqlvPropertyGetBlobAbstract.java    |  3 +-
 .../{ => rich}/GqlvPropertyGetBlobBytes.java       |  5 +-
 .../{ => rich}/GqlvPropertyGetBlobMimeType.java    |  2 +-
 .../domain/{ => rich}/GqlvPropertyGetBlobName.java |  2 +-
 .../domain/{ => rich}/GqlvPropertyGetClob.java     |  4 +-
 .../{ => rich}/GqlvPropertyGetClobAbstract.java    |  3 +-
 .../{ => rich}/GqlvPropertyGetClobChars.java       |  5 +-
 .../{ => rich}/GqlvPropertyGetClobMimeType.java    |  2 +-
 .../domain/{ => rich}/GqlvPropertyGetClobName.java |  2 +-
 .../model/domain/{ => rich}/GqlvPropertySet.java   |  3 +-
 .../domain/{ => rich}/GqlvPropertyValidate.java    |  3 +-
 .../rich/GqlvTopLevelRich.java}                    | 25 +++++---
 .../model/toplevel/GqlvTopLevelMutation.java       |  4 +-
 .../GqlvTopLevelQueryForSimpleAndRich.java         | 26 ++++++++
 .../viewer/graphql/model/toplevel/RichSchema.java  | 19 ++++++
 .../graphql/model/toplevel/SimpleSchema.java       | 19 ++++++
 .../integration/GraphQlSourceForCauseway.java      | 46 ++++++++++++---
 66 files changed, 346 insertions(+), 104 deletions(-)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvAction.java (98%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionInvoke.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionInvokeArgs.java (93%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionInvokeArgsArg.java (94%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionInvokeResult.java (97%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionParams.java (90%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionParamsParam.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionParamsParamAutoComplete.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionParamsParamChoices.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionParamsParamDatatype.java (90%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionParamsParamDefault.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionParamsParamDisabled.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionParamsParamHidden.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionParamsParamValidate.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvActionValidity.java (97%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvAssociation.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvAssociationDatatype.java (91%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvAssociationGet.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvCollection.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvCollectionDatatype.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvCollectionGet.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvDomainObject.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvDomainService.java (94%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMember.java (93%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMemberDisabled.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMemberHidden.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMeta.java (97%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMetaCssClass.java (91%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMetaGrid.java (91%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMetaIcon.java (91%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMetaId.java (91%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMetaLayout.java (91%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMetaLogicalTypeName.java (92%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMetaSaveAs.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMetaTitle.java (91%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMetaVersion.java (91%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMutationForAction.java (97%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvMutationForProperty.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvProperty.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyAutoComplete.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyChoices.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyDatatype.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGet.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetBlob.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetBlobAbstract.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetBlobBytes.java (92%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetBlobMimeType.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetBlobName.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetClob.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetClobAbstract.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetClobChars.java (92%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetClobMimeType.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyGetClobName.java (95%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertySet.java (97%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{ => rich}/GqlvPropertyValidate.java (96%)
 rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/{toplevel/GqlvTopLevelQuery.java => domain/rich/GqlvTopLevelRich.java} (79%)
 create mode 100644 viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQueryForSimpleAndRich.java
 create mode 100644 viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/RichSchema.java
 create mode 100644 viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/SimpleSchema.java


(causeway) 01/02: CAUSEWAY-3676: wip on causeway config settings

Posted by da...@apache.org.
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 a6024982f392d97fab720245d69f9223719dfce2
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Feb 20 23:12:14 2024 +0000

    CAUSEWAY-3676: wip on causeway config settings
---
 .../core/config/CausewayConfiguration.java         | 65 ++++++++++++++++++++++
 .../viewer/graphql/model/context/Context.java      |  4 +-
 .../graphql/model/domain/GqlvScenarioStep.java     |  2 +
 .../model/domain/{ => rich}/GqlvAction.java        |  5 +-
 .../model/domain/{ => rich}/GqlvActionInvoke.java  |  5 +-
 .../domain/{ => rich}/GqlvActionInvokeArgs.java    | 17 +++---
 .../domain/{ => rich}/GqlvActionInvokeArgsArg.java | 13 +++--
 .../domain/{ => rich}/GqlvActionInvokeResult.java  | 12 ++--
 .../model/domain/{ => rich}/GqlvActionParams.java  | 10 ++--
 .../domain/{ => rich}/GqlvActionParamsParam.java   |  5 +-
 .../GqlvActionParamsParamAutoComplete.java         |  4 +-
 .../{ => rich}/GqlvActionParamsParamChoices.java   |  4 +-
 .../{ => rich}/GqlvActionParamsParamDatatype.java  |  4 +-
 .../{ => rich}/GqlvActionParamsParamDefault.java   |  4 +-
 .../{ => rich}/GqlvActionParamsParamDisabled.java  |  4 +-
 .../{ => rich}/GqlvActionParamsParamHidden.java    |  5 +-
 .../{ => rich}/GqlvActionParamsParamValidate.java  |  4 +-
 .../domain/{ => rich}/GqlvActionValidity.java      |  3 +-
 .../model/domain/{ => rich}/GqlvAssociation.java   |  2 +-
 .../domain/{ => rich}/GqlvAssociationDatatype.java |  4 +-
 .../domain/{ => rich}/GqlvAssociationGet.java      |  3 +-
 .../model/domain/{ => rich}/GqlvCollection.java    |  3 +-
 .../domain/{ => rich}/GqlvCollectionDatatype.java  |  2 +-
 .../model/domain/{ => rich}/GqlvCollectionGet.java |  2 +-
 .../model/domain/{ => rich}/GqlvDomainObject.java  |  5 +-
 .../model/domain/{ => rich}/GqlvDomainService.java |  4 +-
 .../model/domain/{ => rich}/GqlvMember.java        |  3 +-
 .../domain/{ => rich}/GqlvMemberDisabled.java      |  3 +-
 .../model/domain/{ => rich}/GqlvMemberHidden.java  |  3 +-
 .../graphql/model/domain/{ => rich}/GqlvMeta.java  |  4 +-
 .../model/domain/{ => rich}/GqlvMetaCssClass.java  |  3 +-
 .../model/domain/{ => rich}/GqlvMetaGrid.java      |  3 +-
 .../model/domain/{ => rich}/GqlvMetaIcon.java      |  3 +-
 .../model/domain/{ => rich}/GqlvMetaId.java        |  3 +-
 .../model/domain/{ => rich}/GqlvMetaLayout.java    |  3 +-
 .../domain/{ => rich}/GqlvMetaLogicalTypeName.java |  3 +-
 .../model/domain/{ => rich}/GqlvMetaSaveAs.java    |  3 +-
 .../model/domain/{ => rich}/GqlvMetaTitle.java     |  3 +-
 .../model/domain/{ => rich}/GqlvMetaVersion.java   |  3 +-
 .../domain/{ => rich}/GqlvMutationForAction.java   |  9 ++-
 .../domain/{ => rich}/GqlvMutationForProperty.java |  5 +-
 .../model/domain/{ => rich}/GqlvProperty.java      |  4 +-
 .../{ => rich}/GqlvPropertyAutoComplete.java       |  3 +-
 .../domain/{ => rich}/GqlvPropertyChoices.java     |  3 +-
 .../domain/{ => rich}/GqlvPropertyDatatype.java    |  2 +-
 .../model/domain/{ => rich}/GqlvPropertyGet.java   |  2 +-
 .../domain/{ => rich}/GqlvPropertyGetBlob.java     |  4 +-
 .../{ => rich}/GqlvPropertyGetBlobAbstract.java    |  3 +-
 .../{ => rich}/GqlvPropertyGetBlobBytes.java       |  5 +-
 .../{ => rich}/GqlvPropertyGetBlobMimeType.java    |  2 +-
 .../domain/{ => rich}/GqlvPropertyGetBlobName.java |  2 +-
 .../domain/{ => rich}/GqlvPropertyGetClob.java     |  4 +-
 .../{ => rich}/GqlvPropertyGetClobAbstract.java    |  3 +-
 .../{ => rich}/GqlvPropertyGetClobChars.java       |  5 +-
 .../{ => rich}/GqlvPropertyGetClobMimeType.java    |  2 +-
 .../domain/{ => rich}/GqlvPropertyGetClobName.java |  2 +-
 .../model/domain/{ => rich}/GqlvPropertySet.java   |  3 +-
 .../domain/{ => rich}/GqlvPropertyValidate.java    |  3 +-
 .../model/toplevel/GqlvTopLevelMutation.java       |  4 +-
 .../graphql/model/toplevel/GqlvTopLevelQuery.java  |  6 +-
 60 files changed, 221 insertions(+), 90 deletions(-)

diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index 067b072e45..aed45643f7 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -2346,6 +2346,71 @@ public class CausewayConfiguration {
         @Data
         public static class Graphql {
 
+            public enum SchemaStyle {
+                /**
+                 * Expose only the &quot;simple&quot; schema, defining only fields that return the state of the domain
+                 * objects but with no fields to represent additional facets of state (such as whether
+                 * an action is hidden or disabled).
+                 *
+                 * <p>
+                 *     Suitable for clients where the application logic and state is the responsibility of the client.
+                 * </p>
+                 */
+                SIMPLE_ONLY,
+                /**
+                 * Expose only the &quot;rich&quot; schema, exposing not only fields that return the state of the domain
+                 * objects but <i>also</i> with fields to represent additional facets of state (such as whether
+                 * an action is hidden or disabled).
+                 *
+                 * <p>
+                 *     Suitable for clients where the application logic and state remains in the backend, within the
+                 *     domain model hosted by Causeway.
+                 * </p>
+                 */
+                RICH_ONLY,
+                /**
+                 * Exposes both the simple and rich schemas, with each under a field as defined by
+                 * {@link #getTopLevelFieldNameForSimple()} (by default &quot;simple&quot;) and
+                 * {@link #getTopLevelFieldNameForRich()} (by default &quot;rich&quot;).
+                 */
+                SIMPLE_AND_RICH,
+                ;
+            }
+
+            /**
+             * Which {@link SchemaStyle} to expose.
+             */
+            private SchemaStyle schemaStyle = SchemaStyle.RICH_ONLY;
+
+            /**
+             * If the {@link #getSchemaStyle()} is set to {@link SchemaStyle#SIMPLE_AND_RICH}, defines the name of the
+             * top-level field under which the &quot;simple&quot; schema resides.
+             *
+             * <p>
+             *     Ignored for any other {@link #getSchemaStyle()}.
+             * </p>
+             */
+            private String topLevelFieldNameForSimple = "simple";
+            /**
+             * If the {@link #getSchemaStyle()} is set to {@link SchemaStyle#SIMPLE_AND_RICH}, defines the name of the
+             * top-level field under which the &quot;rich&quot; schema resides.
+             *
+             * <p>
+             *     Ignored for any other {@link #getSchemaStyle()}.
+             * </p>
+             */
+            private String topLevelFieldNameForRich = "rich";
+            /**
+             * If the {@link #getSchemaStyle()} is set to either {@link SchemaStyle#RICH_ONLY} or
+             * {@link SchemaStyle#SIMPLE_AND_RICH}, then determines whether the &quot;Scenario&quot; field is included
+             * in order to allow given/when/then tests to be expressed.
+             *
+             * <p>
+             *     Ignored if the {@link #getSchemaStyle()} is {@link SchemaStyle#SIMPLE_ONLY}.
+             * </p>
+             */
+            private boolean includeTestingFieldInRich = true;
+
             public enum ApiVariant {
                 /**
                  * Exposes only a Query API, of properties, collections and safe (query-onl) actions.
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
index 4eeed6e2b5..2ad778e328 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
@@ -38,8 +38,8 @@ import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.spec.ActionScope;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainObject;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvDomainObject;
+import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvDomainService;
 import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
index d0826236bd..e5fa6b64d9 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioStep.java
@@ -8,6 +8,8 @@ import graphql.schema.DataFetchingEnvironment;
 
 import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvDomainObject;
+import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvDomainService;
 
 import lombok.val;
 
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/rich/GqlvAction.java
similarity index 98%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAction.java
index 73d84df5ce..c07cd39779 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/rich/GqlvAction.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.List;
 import java.util.Map;
@@ -36,6 +36,9 @@ 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.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import org.apache.causeway.viewer.graphql.model.domain.Parent;
+import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
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/rich/GqlvActionInvoke.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvoke.java
index beeb26b8f9..a072931edf 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/rich/GqlvActionInvoke.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLFieldDefinition;
@@ -29,6 +29,9 @@ import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeArgs.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvokeArgs.java
similarity index 93%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeArgs.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvokeArgs.java
index d715a1f347..a105db7ac8 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeArgs.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvokeArgs.java
@@ -16,28 +16,31 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
-
-import graphql.schema.DataFetchingEnvironment;
-
-import lombok.Getter;
-import lombok.extern.log4j.Log4j2;
-import lombok.val;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import graphql.schema.DataFetchingEnvironment;
+
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 
+import lombok.Getter;
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
 @Log4j2
 public class GqlvActionInvokeArgs
         extends GqlvAbstractCustom
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeArgsArg.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvokeArgsArg.java
similarity index 94%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeArgsArg.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvokeArgsArg.java
index f5627da21e..dc4796f3eb 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeArgsArg.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvokeArgsArg.java
@@ -16,9 +16,12 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
+import graphql.schema.GraphQLList;
+
+import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.commons.collections.Can;
@@ -26,16 +29,14 @@ import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 
-import graphql.schema.GraphQLList;
-
 import lombok.Getter;
-import lombok.extern.log4j.Log4j2;
 import lombok.val;
-
-import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
+import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 public class GqlvActionInvokeArgsArg
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeResult.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvokeResult.java
similarity index 97%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeResult.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvokeResult.java
index 1b279c2e5c..4d0d5e12f4 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeResult.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionInvokeResult.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLFieldDefinition;
@@ -26,14 +26,14 @@ import graphql.schema.GraphQLType;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
 import org.springframework.lang.Nullable;
 
 import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
@@ -42,6 +42,8 @@ import org.apache.causeway.viewer.graphql.model.context.Context;
 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.fetcher.BookmarkedPojo;
+import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParams.java
similarity index 90%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParams.java
index a9c301db77..c96aad28e8 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParams.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParams.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -31,6 +31,9 @@ import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
@@ -61,9 +64,8 @@ public class GqlvActionParams
         }
 
         val idx = new AtomicInteger(0);
-        holder.getObjectAction().getParameters().forEach(objectActionParameter -> {
-            params.add(addChildFieldFor(new GqlvActionParamsParam(this, objectActionParameter, this.context, idx.getAndIncrement())));
-        });
+        holder.getObjectAction().getParameters()
+                .forEach(oap -> params.add(addChildFieldFor(new GqlvActionParamsParam(this, oap, this.context, idx.getAndIncrement()))));
 
         if (params.isEmpty()) {
             return;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParam.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParam.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParam.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParam.java
index a5d935a40b..ab0bd68d40 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParam.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParam.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLFieldDefinition;
@@ -28,6 +28,9 @@ import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamAutoComplete.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamAutoComplete.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamAutoComplete.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamAutoComplete.java
index 4273fdf6c1..cd022111f5 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamAutoComplete.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamAutoComplete.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
  import java.util.Collections;
  import java.util.List;
@@ -39,6 +39,8 @@ package org.apache.causeway.viewer.graphql.model.domain;
  import org.apache.causeway.core.metamodel.object.ManagedObject;
  import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
  import org.apache.causeway.viewer.graphql.model.context.Context;
+ import org.apache.causeway.viewer.graphql.model.domain.Environment;
+ import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
  import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
  import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
  import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamChoices.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamChoices.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamChoices.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamChoices.java
index ff039116d9..c7adb18985 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamChoices.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamChoices.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
  import java.util.Collections;
  import java.util.List;
@@ -37,6 +37,8 @@ package org.apache.causeway.viewer.graphql.model.domain;
  import org.apache.causeway.core.metamodel.object.ManagedObject;
  import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
  import org.apache.causeway.viewer.graphql.model.context.Context;
+ import org.apache.causeway.viewer.graphql.model.domain.Environment;
+ import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
  import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
  import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
  import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamDatatype.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamDatatype.java
similarity index 90%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamDatatype.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamDatatype.java
index 04c1f8a27a..3a7a1b5b1f 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamDatatype.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamDatatype.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -24,6 +24,8 @@ import graphql.schema.DataFetchingEnvironment;
 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.TypeNames;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
 
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamDefault.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamDefault.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamDefault.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamDefault.java
index ba466870d2..ec3061eb29 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamDefault.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamDefault.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.Collections;
 
@@ -33,6 +33,8 @@ import org.apache.causeway.core.metamodel.interactions.managed.ParameterNegotiat
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamDisabled.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamDisabled.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamDisabled.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamDisabled.java
index 42830bcbdc..216b9efd22 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamDisabled.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamDisabled.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLFieldDefinition;
@@ -30,6 +30,8 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamHidden.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamHidden.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamHidden.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamHidden.java
index c6937285dd..4d009e587a 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamHidden.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamHidden.java
@@ -16,11 +16,10 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
  import graphql.schema.DataFetchingEnvironment;
  import graphql.schema.GraphQLFieldDefinition;
- import graphql.schema.GraphQLOutputType;
 
  import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
@@ -30,6 +29,8 @@ package org.apache.causeway.viewer.graphql.model.domain;
  import org.apache.causeway.core.metamodel.object.ManagedObject;
  import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
  import org.apache.causeway.viewer.graphql.model.context.Context;
+ import org.apache.causeway.viewer.graphql.model.domain.Environment;
+ import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
  import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
  import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
  import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamValidate.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamValidate.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamValidate.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamValidate.java
index 1872a9dad9..31a4f58746 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParamsParamValidate.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionParamsParamValidate.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLFieldDefinition;
@@ -30,6 +30,8 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionParameterProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionValidity.java
similarity index 97%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionValidity.java
index ae8ff6f8d7..8c5e0e4602 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionValidity.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvActionValidity.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.Map;
 
@@ -33,6 +33,7 @@ import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAssociation.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAssociation.java
index 8c71bd1c11..5b43f14542 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAssociation.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationDatatype.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAssociationDatatype.java
similarity index 91%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationDatatype.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAssociationDatatype.java
index 02b5a220e5..badf89a9d2 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationDatatype.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAssociationDatatype.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -25,6 +25,8 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 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.TypeNames;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
 
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAssociationGet.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAssociationGet.java
index dbb63d0c3c..434af5c22f 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvAssociationGet.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLOutputType;
@@ -26,6 +26,7 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvCollection.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvCollection.java
index 300c786289..32a795a61a 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvCollection.java
@@ -16,11 +16,12 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 
 public class GqlvCollection
         extends GqlvAssociation<OneToManyAssociation, GqlvCollection.Holder>
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionDatatype.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvCollectionDatatype.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionDatatype.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvCollectionDatatype.java
index c6779d1928..7c95a3e962 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionDatatype.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvCollectionDatatype.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvCollectionGet.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvCollectionGet.java
index c26f803680..916524af3f 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvCollectionGet.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.GraphQLOutputType;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvDomainObject.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvDomainObject.java
index cc4849cca0..b08421868f 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvDomainObject.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -35,6 +35,9 @@ import org.apache.causeway.core.metamodel.spec.ActionScope;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 
 import lombok.Getter;
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvDomainService.java
similarity index 94%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvDomainService.java
index a91dbfe3a9..62f28b34f1 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvDomainService.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -27,6 +27,8 @@ import org.apache.causeway.core.config.CausewayConfiguration;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 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 lombok.Getter;
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMember.java
similarity index 93%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMember.java
index 84e251673c..6f1ef6d46f 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMember.java
@@ -16,12 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMemberDisabled.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMemberDisabled.java
index 655dd09176..a775fa3c35 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberDisabled.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMemberDisabled.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLOutputType;
@@ -28,6 +28,7 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMemberHidden.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMemberHidden.java
index e4a71fe928..d6067d8bcb 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHidden.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMemberHidden.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLOutputType;
@@ -28,6 +28,7 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectMemberProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMeta.java
similarity index 97%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMeta.java
index 0d8e976040..6318d3685e 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMeta.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.Optional;
 
@@ -33,6 +33,8 @@ 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.mmproviders.ObjectSpecificationProvider;
 
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaCssClass.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaCssClass.java
similarity index 91%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaCssClass.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaCssClass.java
index 77d9dd781c..92469f4b75 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaCssClass.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaCssClass.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -24,6 +24,7 @@ import graphql.schema.DataFetchingEnvironment;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
 public class GqlvMetaCssClass extends GqlvAbstract {
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaGrid.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaGrid.java
similarity index 91%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaGrid.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaGrid.java
index a9ab27a51a..0007123165 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaGrid.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaGrid.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -24,6 +24,7 @@ import graphql.schema.DataFetchingEnvironment;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
 public class GqlvMetaGrid extends GqlvAbstract {
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaIcon.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaIcon.java
similarity index 91%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaIcon.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaIcon.java
index f9478dbe92..3c513d9191 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaIcon.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaIcon.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -24,6 +24,7 @@ import graphql.schema.DataFetchingEnvironment;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
 public class GqlvMetaIcon extends GqlvAbstract {
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaId.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaId.java
similarity index 91%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaId.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaId.java
index 0d1e170ce7..6abe43e7a5 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaId.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaId.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -25,6 +25,7 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLNonNull.nonNull;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
 public class GqlvMetaId extends GqlvAbstract {
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaLayout.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaLayout.java
similarity index 91%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaLayout.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaLayout.java
index 2a17f67e74..f006968682 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaLayout.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaLayout.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -24,6 +24,7 @@ import graphql.schema.DataFetchingEnvironment;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
 public class GqlvMetaLayout extends GqlvAbstract {
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaLogicalTypeName.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaLogicalTypeName.java
similarity index 92%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaLogicalTypeName.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaLogicalTypeName.java
index 66a1214b4f..73b8dc8b40 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaLogicalTypeName.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaLogicalTypeName.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -25,6 +25,7 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLNonNull.nonNull;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
 public class GqlvMetaLogicalTypeName extends GqlvAbstract {
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaSaveAs.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaSaveAs.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaSaveAs.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaSaveAs.java
index b036fa5d84..b98a398404 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaSaveAs.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaSaveAs.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.GraphQLContext;
 import graphql.Scalars;
@@ -26,6 +26,7 @@ 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.fetcher.BookmarkedPojo;
 
 public class GqlvMetaSaveAs extends GqlvAbstract {
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaTitle.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaTitle.java
similarity index 91%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaTitle.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaTitle.java
index 7072e16929..238b6427e1 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaTitle.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaTitle.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -25,6 +25,7 @@ import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLNonNull.nonNull;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
 public class GqlvMetaTitle extends GqlvAbstract {
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaVersion.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaVersion.java
similarity index 91%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaVersion.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaVersion.java
index 64297d7d13..c4340230b3 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaVersion.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMetaVersion.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.Scalars;
 import graphql.schema.DataFetchingEnvironment;
@@ -24,6 +24,7 @@ import graphql.schema.DataFetchingEnvironment;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
 
 public class GqlvMetaVersion extends GqlvAbstract {
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMutationForAction.java
similarity index 97%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMutationForAction.java
index 3f89482512..e2381c37ca 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMutationForAction.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.ArrayList;
 import java.util.Map;
@@ -31,12 +31,14 @@ import graphql.schema.GraphQLType;
 
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 
 import org.springframework.lang.Nullable;
 
 import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
@@ -49,6 +51,7 @@ import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMutationForProperty.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMutationForProperty.java
index e4c6502436..7f4571df9a 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvMutationForProperty.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.Map;
 import java.util.Optional;
@@ -35,6 +35,9 @@ import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.Environment;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstract;
+import org.apache.causeway.viewer.graphql.model.domain.TypeNames;
 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/GqlvProperty.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvProperty.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvProperty.java
index d06cd8f174..9ce9841d28 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvProperty.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.GraphQLArgument;
 import graphql.schema.GraphQLFieldDefinition;
@@ -26,6 +26,8 @@ import org.apache.causeway.applib.value.Clob;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 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.TypeNames;
 import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyAutoComplete.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyAutoComplete.java
index 5fc36f80bb..45c1b99275 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyAutoComplete.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyAutoComplete.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.stream.Collectors;
 
@@ -30,6 +30,7 @@ import static graphql.schema.GraphQLNonNull.nonNull;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyChoices.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyChoices.java
index 85fee1f404..432f7d463b 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyChoices.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyChoices.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.stream.Collectors;
 
@@ -30,6 +30,7 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyDatatype.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyDatatype.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyDatatype.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyDatatype.java
index 58d5c1cdb7..c33e6cfa0e 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyDatatype.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyDatatype.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.causeway.viewer.graphql.model.context.Context;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGet.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGet.java
index cb8b5e14a1..fc3402b84d 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGet.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.GraphQLOutputType;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlob.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlob.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlob.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlob.java
index 794bcca368..16d9ae7ffa 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlob.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlob.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 
@@ -26,6 +26,8 @@ import org.apache.causeway.core.config.CausewayConfiguration;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobAbstract.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobAbstract.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobAbstract.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobAbstract.java
index b5d0b0ec4d..df0cc21b3d 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobAbstract.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobAbstract.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.Optional;
 import java.util.function.Function;
@@ -28,6 +28,7 @@ import graphql.schema.GraphQLFieldDefinition;
 import org.apache.causeway.applib.value.Blob;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 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.fetcher.BookmarkedPojo;
 
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobBytes.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobBytes.java
similarity index 92%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobBytes.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobBytes.java
index 0f7387e9aa..6f5dffbe80 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobBytes.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobBytes.java
@@ -16,13 +16,10 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
-
-import java.util.Optional;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 
-import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobMimeType.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobMimeType.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobMimeType.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobMimeType.java
index f80bdf3284..10070950d6 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobMimeType.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobMimeType.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobName.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobName.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobName.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobName.java
index 63180d7c17..172bc8f2b9 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetBlobName.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetBlobName.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClob.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClob.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClob.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClob.java
index 75e756dfec..27fdcd832d 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClob.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClob.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 
@@ -26,6 +26,8 @@ import org.apache.causeway.core.config.CausewayConfiguration;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectAssociationProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobAbstract.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobAbstract.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobAbstract.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobAbstract.java
index aa5e3eeb4a..c7663a6956 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobAbstract.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobAbstract.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.Optional;
 import java.util.function.Function;
@@ -28,6 +28,7 @@ import graphql.schema.GraphQLFieldDefinition;
 import org.apache.causeway.applib.value.Blob;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 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.fetcher.BookmarkedPojo;
 
 import lombok.val;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobChars.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobChars.java
similarity index 92%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobChars.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobChars.java
index 7e1e834095..43256a1dda 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobChars.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobChars.java
@@ -16,13 +16,10 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
-
-import java.util.Optional;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 
-import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobMimeType.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobMimeType.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobMimeType.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobMimeType.java
index 9f314203f3..36489b30a4 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobMimeType.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobMimeType.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobName.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobName.java
similarity index 95%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobName.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobName.java
index 5ea781c578..6367996ef3 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetClobName.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyGetClobName.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertySet.java
similarity index 97%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertySet.java
index d45109e3a5..822e3a15c5 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertySet.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.Map;
 
@@ -30,6 +30,7 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 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.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/GqlvPropertyValidate.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyValidate.java
similarity index 96%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyValidate.java
index 6eb5511c23..355428221b 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyValidate.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvPropertyValidate.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.model.domain;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLFieldDefinition;
@@ -28,6 +28,7 @@ import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 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.fetcher.BookmarkedPojo;
 import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
 import org.apache.causeway.viewer.graphql.model.mmproviders.OneToOneAssociationProvider;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelMutation.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelMutation.java
index 7e7ff48946..53d89711ff 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelMutation.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelMutation.java
@@ -13,9 +13,9 @@ import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
 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.GqlvMutationForAction;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvMutationForProperty;
 import org.apache.causeway.viewer.graphql.model.domain.Parent;
+import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvMutationForAction;
+import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvMutationForProperty;
 
 import lombok.val;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
index ad1308039f..f2a325f6f0 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
@@ -8,13 +8,11 @@ import graphql.schema.GraphQLObjectType;
 
 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.GqlvDomainObject;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvDomainObject;
+import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvDomainService;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvScenario;
 import org.apache.causeway.viewer.graphql.model.domain.Parent;
 
-import lombok.val;
-
 public class GqlvTopLevelQuery
         extends GqlvAbstractCustom
         implements Parent {


(causeway) 02/02: CAUSEWAY-3676: wip on introducing rich and simple schema styles

Posted by da...@apache.org.
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 c2a98c7b0f0bc7bf34a0436d8229c7a82d4c6df5
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Feb 20 23:32:36 2024 +0000

    CAUSEWAY-3676: wip on introducing rich and simple schema styles
---
 .../core/config/CausewayConfiguration.java         |  4 ++
 .../graphql/model/src/main/java/module-info.java   |  1 +
 .../graphql/model/domain/GqlvAbstractCustom.java   |  5 ++-
 .../rich/GqlvTopLevelRich.java}                    | 23 +++++++----
 .../GqlvTopLevelQueryForSimpleAndRich.java         | 26 ++++++++++++
 .../viewer/graphql/model/toplevel/RichSchema.java  | 19 +++++++++
 .../graphql/model/toplevel/SimpleSchema.java       | 19 +++++++++
 .../integration/GraphQlSourceForCauseway.java      | 46 ++++++++++++++++++----
 8 files changed, 127 insertions(+), 16 deletions(-)

diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index aed45643f7..6084e42e23 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -2375,6 +2375,10 @@ public class CausewayConfiguration {
                  */
                 SIMPLE_AND_RICH,
                 ;
+
+                public boolean isRich() {
+                    return this == RICH_ONLY || this == SIMPLE_AND_RICH;
+                }
             }
 
             /**
diff --git a/viewers/graphql/model/src/main/java/module-info.java b/viewers/graphql/model/src/main/java/module-info.java
index 4da4776905..5ee6bb25a1 100644
--- a/viewers/graphql/model/src/main/java/module-info.java
+++ b/viewers/graphql/model/src/main/java/module-info.java
@@ -8,6 +8,7 @@ module org.apache.causeway.incubator.viewer.graphql.model {
     exports org.apache.causeway.viewer.graphql.model.context;
     exports org.apache.causeway.viewer.graphql.model.mmproviders;
     exports org.apache.causeway.viewer.graphql.model.fetcher;
+    exports org.apache.causeway.viewer.graphql.model.domain.rich;
 
     requires org.apache.causeway.core.config;
     requires org.apache.causeway.incubator.viewer.graphql.applib;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java
index 714437947a..1d6cee0e5b 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAbstractCustom.java
@@ -39,7 +39,7 @@ public abstract class GqlvAbstractCustom extends GqlvAbstract implements Parent
     protected final GraphQLObjectType.Builder gqlObjectTypeBuilder;
     private final String typeName;
 
-    @Getter(AccessLevel.PROTECTED)
+    @Getter
     private GraphQLObjectType gqlObjectType;
 
     protected GqlvAbstractCustom(
@@ -111,6 +111,9 @@ public abstract class GqlvAbstractCustom extends GqlvAbstract implements Parent
         return this.gqlObjectType;
     }
 
+    public void addDataFetchers() {
+    }
+
     public final FieldCoordinates coordinatesFor(final GraphQLFieldDefinition field) {
         if (gqlObjectType == null) {
             throw new IllegalStateException(
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvTopLevelRich.java
similarity index 79%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvTopLevelRich.java
index f2a325f6f0..639d3962d8 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/rich/GqlvTopLevelRich.java
@@ -1,4 +1,4 @@
-package org.apache.causeway.viewer.graphql.model.toplevel;
+package org.apache.causeway.viewer.graphql.model.domain.rich;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -6,25 +6,28 @@ import java.util.List;
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLObjectType;
 
+import org.apache.causeway.core.config.CausewayConfiguration;
 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.rich.GqlvDomainObject;
-import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvDomainService;
 import org.apache.causeway.viewer.graphql.model.domain.GqlvScenario;
 import org.apache.causeway.viewer.graphql.model.domain.Parent;
 
-public class GqlvTopLevelQuery
+public class GqlvTopLevelRich
         extends GqlvAbstractCustom
         implements Parent {
 
+    private final CausewayConfiguration.Viewer.Graphql graphqlConfiguration;
+
     private final List<GqlvDomainService> domainServices = new ArrayList<>();
     private final List<GqlvDomainObject> domainObjects = new ArrayList<>();
 
     private final GqlvScenario scenario;
 
-    public GqlvTopLevelQuery(final Context context) {
+    public GqlvTopLevelRich(final Context context) {
         super("Query", context);
 
+        graphqlConfiguration = context.causewayConfiguration.getViewer().getGraphql();
+
         // add domain object lookup to top-level query
         context.objectSpecifications().forEach(objectSpec -> {
             switch (objectSpec.getBeanSort()) {
@@ -51,7 +54,11 @@ public class GqlvTopLevelQuery
             }
         });
 
-        addChildFieldFor(scenario = new GqlvScenario(context));
+        if (graphqlConfiguration.isIncludeTestingFieldInRich()) {
+            addChildFieldFor(scenario = new GqlvScenario(context));
+        } else {
+            scenario = null;
+        }
 
         buildObjectType();
     }
@@ -84,6 +91,8 @@ public class GqlvTopLevelQuery
 
         domainObjects.forEach(domainObject -> domainObject.addDataFetcher(this));
 
-        scenario.addDataFetcher(this);
+        if (scenario != null) {
+            scenario.addDataFetcher(this);
+        }
     }
 }
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQueryForSimpleAndRich.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQueryForSimpleAndRich.java
new file mode 100644
index 0000000000..af2f6c1e8c
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQueryForSimpleAndRich.java
@@ -0,0 +1,26 @@
+package org.apache.causeway.viewer.graphql.model.toplevel;
+
+import graphql.schema.DataFetchingEnvironment;
+
+import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+
+public class GqlvTopLevelQueryForSimpleAndRich extends GqlvAbstractCustom {
+
+    private final RichSchema richSchema;
+    private final SimpleSchema simpleSchema;
+
+    public GqlvTopLevelQueryForSimpleAndRich(final Context context) {
+        super("SimpleAndRich", context);
+
+        addChildFieldFor(richSchema = new RichSchema(context));
+        addChildFieldFor(simpleSchema = new SimpleSchema(context));
+
+        buildObjectType();
+    }
+
+    @Override
+    protected Object fetchData(DataFetchingEnvironment environment) {
+        return environment;
+    }
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/RichSchema.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/RichSchema.java
new file mode 100644
index 0000000000..39b6fd0a91
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/RichSchema.java
@@ -0,0 +1,19 @@
+package org.apache.causeway.viewer.graphql.model.toplevel;
+
+import graphql.schema.DataFetchingEnvironment;
+
+import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+
+public class RichSchema extends GqlvAbstractCustom {
+
+    protected RichSchema(final Context context) {
+        super("rich", context);
+
+    }
+
+    @Override
+    protected Object fetchData(DataFetchingEnvironment environment) {
+        return environment;
+    }
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/SimpleSchema.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/SimpleSchema.java
new file mode 100644
index 0000000000..9557001d5a
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/SimpleSchema.java
@@ -0,0 +1,19 @@
+package org.apache.causeway.viewer.graphql.model.toplevel;
+
+import graphql.schema.DataFetchingEnvironment;
+
+import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+
+public class SimpleSchema extends GqlvAbstractCustom {
+
+    protected SimpleSchema(final Context context) {
+        super("simple", context);
+
+    }
+
+    @Override
+    protected Object fetchData(DataFetchingEnvironment environment) {
+        return environment;
+    }
+}
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 2404d5f950..bb314e0351 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -19,12 +19,15 @@
 package org.apache.causeway.viewer.graphql.viewer.integration;
 
 import javax.annotation.PostConstruct;
-import javax.inject.Inject;
 
 import graphql.GraphQL;
 import graphql.execution.SimpleDataFetcherExceptionHandler;
 import graphql.schema.GraphQLSchema;
 
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
+
+import org.apache.causeway.viewer.graphql.model.toplevel.GqlvTopLevelQueryForSimpleAndRich;
+
 import org.springframework.graphql.execution.GraphQlSource;
 import org.springframework.stereotype.Service;
 
@@ -35,13 +38,12 @@ import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
 import org.apache.causeway.viewer.graphql.model.toplevel.GqlvTopLevelMutation;
-import org.apache.causeway.viewer.graphql.model.toplevel.GqlvTopLevelQuery;
+import org.apache.causeway.viewer.graphql.model.domain.rich.GqlvTopLevelRich;
 
-import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 @Service()
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
+//@RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class GraphQlSourceForCauseway implements GraphQlSource {
 
     private final CausewayConfiguration causewayConfiguration;
@@ -49,9 +51,27 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
     private final SpecificationLoader specificationLoader;
     private final GraphQLTypeRegistry graphQLTypeRegistry;
     private final Context context;
-
     private final AsyncExecutionStrategyResolvingWithinInteraction executionStrategy;
 
+    private CausewayConfiguration.Viewer.Graphql graphqlConfiguration;
+
+    public GraphQlSourceForCauseway(
+            final CausewayConfiguration causewayConfiguration,
+            final CausewaySystemEnvironment causewaySystemEnvironment,
+            final SpecificationLoader specificationLoader,
+            final GraphQLTypeRegistry graphQLTypeRegistry,
+            final Context context,
+            final AsyncExecutionStrategyResolvingWithinInteraction executionStrategy) {
+        this.causewayConfiguration = causewayConfiguration;
+        this.causewaySystemEnvironment = causewaySystemEnvironment;
+        this.specificationLoader = specificationLoader;
+        this.graphQLTypeRegistry = graphQLTypeRegistry;
+        this.context = context;
+        this.executionStrategy = executionStrategy;
+
+        this.graphqlConfiguration = causewayConfiguration.getViewer().getGraphql();
+    }
+
     @PostConstruct
     public void init() {
         boolean fullyIntrospect = IntrospectionMode.isFullIntrospect(causewayConfiguration, causewaySystemEnvironment);
@@ -82,11 +102,21 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
             throw new IllegalStateException("Metamodel is not fully introspected");
         }
 
-        // top-level query and mutation type
-        val topLevelQuery = new GqlvTopLevelQuery(context);
+        GqlvAbstractCustom topLevelQuery;
+        switch (graphqlConfiguration.getSchemaStyle()) {
+            case SIMPLE_ONLY:
+                throw new IllegalStateException("SIMPLE_ONLY not yet supported");
+            case RICH_ONLY:
+                topLevelQuery = new GqlvTopLevelRich(context);
+                break;
+            case SIMPLE_AND_RICH:
+            default:
+                topLevelQuery = new GqlvTopLevelQueryForSimpleAndRich(context);
+                break;
+        }
+
         val topLevelMutation = new GqlvTopLevelMutation(context);
 
-        // add the data fetchers
         topLevelQuery.addDataFetchers();
         topLevelMutation.addDataFetchers();