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 f82c4459d5e5d3fc5938c4909a2a57b37db9045d
Author: danhaywood <[email protected]>
AuthorDate: Mon Feb 12 06:40:33 2024 +0000

    CAUSEWAY-3676: adds Scenario and Given
---
 .../graphql/model/domain/GqlvDomainObject.java     |  12 +-
 .../graphql/model/domain/GqlvDomainService.java    |  13 +-
 .../viewer/graphql/model/domain/GqlvScenario.java  |  98 ++++++++++
 .../graphql/model/domain/GqlvScenarioGiven.java}   |  53 +++---
 .../viewer/graphql/model/domain/Scenario.java      |   9 +
 viewers/graphql/test/src/test/resources/schema.gql | 199 ++++++++++++++++-----
 .../graphql/viewer/toplevel/GqlvTopLevelQuery.java |  11 +-
 7 files changed, 327 insertions(+), 68 deletions(-)

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/GqlvDomainObject.java
index 11016e04b6..cc05e527bb 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/GqlvDomainObject.java
@@ -18,6 +18,7 @@
  */
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.SortedMap;
 import java.util.TreeMap;
@@ -73,7 +74,16 @@ public class GqlvDomainObject
 
     @Getter private final GraphQLInputObjectType gqlInputObjectType;
 
-    public GqlvDomainObject(
+    private static Map<ObjectSpecification, GqlvDomainObject> 
objectByObjectSpec = new LinkedHashMap<>();
+
+    public static GqlvDomainObject of(
+            final ObjectSpecification objectSpec,
+            final GqlvDomainObject.Holder holder,
+            final Context context) {
+        return objectByObjectSpec.computeIfAbsent(objectSpec, x -> new 
GqlvDomainObject(holder, x, context));
+    }
+
+    private GqlvDomainObject(
             final GqlvDomainObject.Holder holder,
             final ObjectSpecification objectSpecification,
             final Context context) {
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/GqlvDomainService.java
index c23f5a2f4b..f7ffc3c04d 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/GqlvDomainService.java
@@ -53,6 +53,7 @@ public class GqlvDomainService implements GqlvAction.Holder {
 
     @Getter private GraphQLFieldDefinition field;
 
+
     String getLogicalTypeName() {
         return objectSpecification.getLogicalTypeName();
     }
@@ -64,7 +65,17 @@ public class GqlvDomainService implements GqlvAction.Holder {
      */
     private GraphQLObjectType gqlObjectType;
 
-    public GqlvDomainService(
+    private static Map<ObjectSpecification, GqlvDomainService> 
serviceByObjectSpec = new LinkedHashMap<>();
+
+    public static GqlvDomainService of(
+            final ObjectSpecification objectSpec,
+            final Holder holder,
+            final Object servicePojo,
+            final Context context) {
+        return serviceByObjectSpec.computeIfAbsent(objectSpec, x -> new 
GqlvDomainService(holder, x, servicePojo, context));
+    }
+
+    private GqlvDomainService(
             final GqlvDomainService.Holder holder,
             final ObjectSpecification objectSpecification,
             final Object servicePojo,
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
new file mode 100644
index 0000000000..162f30e505
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
@@ -0,0 +1,98 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.causeway.viewer.graphql.model.domain;
+
+import graphql.schema.DataFetcher;
+import graphql.schema.FieldCoordinates;
+import graphql.schema.GraphQLFieldDefinition;
+import graphql.schema.GraphQLObjectType;
+
+import static graphql.schema.FieldCoordinates.coordinates;
+import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
+import static graphql.schema.GraphQLObjectType.newObject;
+
+import org.apache.causeway.viewer.graphql.model.context.Context;
+
+import lombok.Getter;
+
+/**
+ * Exposes a domain service (view model or entity) via the GQL viewer.
+ */
+public class GqlvScenario implements GqlvScenarioGiven.Holder {
+
+    private final Holder holder;
+    private final Context context;
+
+    private final GraphQLObjectType.Builder gqlObjectTypeBuilder;
+    private final Scenario scenarioPojo;
+
+    private final GqlvScenarioGiven scenarioGiven;
+
+    @Getter private GraphQLFieldDefinition field;
+
+    private GraphQLObjectType gqlObjectType;
+
+    public GqlvScenario(
+            final GqlvScenario.Holder holder,
+            final Context context) {
+        this.holder = holder;
+        this.context = context;
+
+        this.scenarioPojo = 
context.serviceRegistry.lookupService(Scenario.class).orElseThrow();
+
+        this.gqlObjectTypeBuilder = newObject().name("Scenario"); // TODO: 
probably need to change this type?
+
+        this.scenarioGiven = new GqlvScenarioGiven(this, context);
+
+        this.gqlObjectType = gqlObjectTypeBuilder.build();
+
+        this.field = new 
GraphQLFieldDefinition.Builder().name("Scenario").type(gqlObjectType).build();
+
+        holder.addField(field);
+    }
+
+
+    @Override
+    public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) {
+        gqlObjectTypeBuilder.field(field);
+        return field;
+    }
+
+    @Override
+    public FieldCoordinates coordinatesFor(GraphQLFieldDefinition 
fieldDefinition) {
+        return coordinates(gqlObjectType, fieldDefinition);
+    }
+
+    public void addDataFetchers() {
+        context.codeRegistryBuilder.dataFetcher(
+                holder.coordinatesFor(getField()),
+                (DataFetcher<Object>) environment -> scenarioPojo);
+        // add
+    }
+
+
+    @Override
+    public String toString() {
+        return scenarioPojo.toString();
+    }
+
+    public interface Holder
+            extends GqlvHolder {
+    }
+}
diff --git 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
similarity index 63%
copy from 
viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
copy to 
viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
index dfff9fe35c..c16b4629e0 100644
--- 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
@@ -1,31 +1,38 @@
-package org.apache.causeway.viewer.graphql.viewer.toplevel;
-
-import java.util.ArrayList;
-import java.util.List;
+package org.apache.causeway.viewer.graphql.model.domain;
 
 import graphql.schema.FieldCoordinates;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
-import static graphql.schema.GraphQLObjectType.newObject;
+import lombok.Getter;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+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.GqlvDomainObject;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
 
-import lombok.Getter;
+import static graphql.schema.GraphQLObjectType.newObject;
 
-public class GqlvTopLevelQuery implements GqlvDomainService.Holder, 
GqlvDomainObject.Holder {
+public class GqlvScenarioGiven implements GqlvDomainService.Holder, 
GqlvDomainObject.Holder {
 
-    private static final String OBJECT_TYPE_NAME = "Query";
+    private static final String OBJECT_TYPE_NAME = "Given";
 
     final GraphQLObjectType.Builder objectTypeBuilder;
     @Getter private final GraphQLObjectType objectType;
 
+    private final Holder holder;
+    private final GraphQLFieldDefinition field;
+
     private final List<GqlvDomainService> domainServices = new ArrayList<>();
     private final List<GqlvDomainObject> domainObjects = new ArrayList<>();
 
-    public GqlvTopLevelQuery(final Context context) {
+    public GqlvScenarioGiven(
+            final GqlvScenarioGiven.Holder holder,
+            final Context context) {
+
+        this.holder = holder;
 
         this.objectTypeBuilder = newObject().name(OBJECT_TYPE_NAME);
 
@@ -36,7 +43,7 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
                 case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
                 case ENTITY:     // @DomainObject(nature=ENTITY)
 
-                    domainObjects.add(new GqlvDomainObject(this, objectSpec, 
context));
+                    domainObjects.add(GqlvDomainObject.of(objectSpec, this, 
context));
 
                     break;
             }
@@ -44,13 +51,11 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
 
         // add services to top-level query
         context.objectSpecifications().forEach(objectSpec -> {
-            switch (objectSpec.getBeanSort()) {
-                case MANAGED_BEAN_CONTRIBUTING: // @DomainService
-                    
context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
-                            .ifPresent(servicePojo -> {
-                                domainServices.add(new GqlvDomainService(this, 
objectSpec, servicePojo, context));
-                            });
-                    break;
+            if (Objects.requireNonNull(objectSpec.getBeanSort()) == 
BeanSort.MANAGED_BEAN_CONTRIBUTING) { // @DomainService
+                
context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
+                        .ifPresent(servicePojo -> {
+                            
domainServices.add(GqlvDomainService.of(objectSpec, this, servicePojo, 
context));
+                        });
             }
         });
 
@@ -59,13 +64,17 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
             addField(domainObject.getLookupField());
         }
 
+
         objectType = objectTypeBuilder.build();
+
+        this.field = 
GraphQLFieldDefinition.newFieldDefinition().name("Given").type(objectType).build();
+        this.holder.addField(field);
     }
 
 
     @Override
     public FieldCoordinates coordinatesFor(GraphQLFieldDefinition 
fieldDefinition) {
-        return FieldCoordinates.coordinates(OBJECT_TYPE_NAME, 
fieldDefinition.getName());
+        return FieldCoordinates.coordinates(objectType, fieldDefinition);
     }
 
     @Override
@@ -84,8 +93,10 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
 
 
         domainObjects.forEach(GqlvDomainObject::addDataFetchers);
-
     }
 
+    public interface Holder
+            extends GqlvHolder {
+    }
 
 }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Scenario.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Scenario.java
new file mode 100644
index 0000000000..0b67dbddcb
--- /dev/null
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Scenario.java
@@ -0,0 +1,9 @@
+package org.apache.causeway.viewer.graphql.model.domain;
+
+import org.apache.causeway.applib.annotation.InteractionScope;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class Scenario {
+}
diff --git a/viewers/graphql/test/src/test/resources/schema.gql 
b/viewers/graphql/test/src/test/resources/schema.gql
index b7d6eb65ee..ab93b891dd 100644
--- a/viewers/graphql/test/src/test/resources/schema.gql
+++ b/viewers/graphql/test/src/test/resources/schema.gql
@@ -22,51 +22,48 @@ directive @specifiedBy(
     url: String!
   ) on SCALAR
 
-type Mutation {
-  causeway_applib_PropertyNode__mixedIn(_gqlv_target: 
causeway_applib_PropertyNode__gqlv_input, mixedIn: Boolean!): 
causeway_applib_PropertyNode
-  causeway_applib_node_ActionNode__mixedIn(_gqlv_target: 
causeway_applib_node_ActionNode__gqlv_input, mixedIn: Boolean!): 
causeway_applib_node_ActionNode
-  causeway_applib_node_CollectionNode__mixedIn(_gqlv_target: 
causeway_applib_node_CollectionNode__gqlv_input, mixedIn: Boolean!): 
causeway_applib_node_CollectionNode
-  causeway_applib_node_FacetNode__shadowed(_gqlv_target: 
causeway_applib_node_FacetNode__gqlv_input, shadowed: Boolean!): 
causeway_applib_node_FacetNode
-  causeway_conf_ConfigurationProperty__key(_gqlv_target: 
causeway_conf_ConfigurationProperty__gqlv_input, key: String!): 
causeway_conf_ConfigurationProperty
-  causeway_conf_ConfigurationProperty__value(_gqlv_target: 
causeway_conf_ConfigurationProperty__gqlv_input, value: String!): 
causeway_conf_ConfigurationProperty
-  causeway_schema_metamodel_v2_DomainClassDto__actions(_gqlv_target: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, actions: String!): 
causeway_schema_metamodel_v2_DomainClassDto
-  causeway_schema_metamodel_v2_DomainClassDto__annotations(_gqlv_target: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, annotations: String!): 
causeway_schema_metamodel_v2_DomainClassDto
-  causeway_schema_metamodel_v2_DomainClassDto__collections(_gqlv_target: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, collections: String!): 
causeway_schema_metamodel_v2_DomainClassDto
-  causeway_schema_metamodel_v2_DomainClassDto__facets(_gqlv_target: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, facets: String!): 
causeway_schema_metamodel_v2_DomainClassDto
-  causeway_schema_metamodel_v2_DomainClassDto__id(_gqlv_target: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, id: String!): 
causeway_schema_metamodel_v2_DomainClassDto
-  causeway_schema_metamodel_v2_DomainClassDto__majorVersion(_gqlv_target: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, majorVersion: String): 
causeway_schema_metamodel_v2_DomainClassDto
-  causeway_schema_metamodel_v2_DomainClassDto__minorVersion(_gqlv_target: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, minorVersion: String): 
causeway_schema_metamodel_v2_DomainClassDto
-  causeway_schema_metamodel_v2_DomainClassDto__properties(_gqlv_target: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, properties: String!): 
causeway_schema_metamodel_v2_DomainClassDto
-  causeway_schema_metamodel_v2_DomainClassDto__service(_gqlv_target: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, service: Boolean!): 
causeway_schema_metamodel_v2_DomainClassDto
-  
causeway_testing_fixtures_FixtureResult__fixtureScriptClassName(_gqlv_target: 
causeway_testing_fixtures_FixtureResult__gqlv_input, fixtureScriptClassName: 
String): causeway_testing_fixtures_FixtureResult
-  causeway_testing_fixtures_FixtureResult__key(_gqlv_target: 
causeway_testing_fixtures_FixtureResult__gqlv_input, key: String!): 
causeway_testing_fixtures_FixtureResult
-  causeway_testing_fixtures_FixtureResult__object(_gqlv_target: 
causeway_testing_fixtures_FixtureResult__gqlv_input, object: String!): 
causeway_testing_fixtures_FixtureResult
-  
org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn(_gqlv_target:
 org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input, 
mixedIn: Boolean!): org_apache_causeway_core_metamodel_inspect_model_MemberNode
-  
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__friendlyName(_gqlv_target:
 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_input,
 friendlyName: String!): 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
-  university_admin_AdminMenu__actionWithDisabledParam(firstParam: String!, 
secondParam: String!, thirdParameter: String!): String
-  university_admin_AdminMenu__actionWithHiddenParam(firstParam: String!, 
secondParam: String!): String
-  university_admin_AdminMenu__adminAction: String
-  university_admin_AdminMenu__otherAdminAction: String
-  university_dept_Department__addStaffMember(_gqlv_target: 
university_dept_Department__gqlv_input, staffMember: 
university_dept_StaffMember__gqlv_input!): university_dept_Department
-  university_dept_Department__addStaffMembers(_gqlv_target: 
university_dept_Department__gqlv_input, staffMembers: 
[university_dept_StaffMember__gqlv_input]): university_dept_Department
-  university_dept_Department__changeDeptHead(_gqlv_target: 
university_dept_Department__gqlv_input, newDeptHead: 
university_dept_DeptHead__gqlv_input!): university_dept_Department
-  university_dept_Department__changeName(_gqlv_target: 
university_dept_Department__gqlv_input, newName: String!): 
university_dept_Department
-  university_dept_Department__deptHead(_gqlv_target: 
university_dept_Department__gqlv_input, deptHead: 
university_dept_DeptHead__gqlv_input): university_dept_Department
-  university_dept_Department__name(_gqlv_target: 
university_dept_Department__gqlv_input, name: String!): 
university_dept_Department
-  university_dept_Department__removeStaffMember(_gqlv_target: 
university_dept_Department__gqlv_input, staffMember: 
university_dept_StaffMember__gqlv_input!): university_dept_Department
-  university_dept_Departments__createDepartment(deptHead: 
university_dept_DeptHead__gqlv_input, name: String!): university_dept_Department
-  university_dept_DeptHead__changeDepartment(_gqlv_target: 
university_dept_DeptHead__gqlv_input, department: 
university_dept_Department__gqlv_input!): university_dept_DeptHead
-  university_dept_DeptHead__changeName(_gqlv_target: 
university_dept_DeptHead__gqlv_input, newName: String!): 
university_dept_DeptHead
-  university_dept_DeptHead__department(_gqlv_target: 
university_dept_DeptHead__gqlv_input, department: 
university_dept_Department__gqlv_input): university_dept_DeptHead
-  university_dept_DeptHead__name(_gqlv_target: 
university_dept_DeptHead__gqlv_input, name: String): university_dept_DeptHead
-  university_dept_StaffMember__department(_gqlv_target: 
university_dept_StaffMember__gqlv_input, department: 
university_dept_Department__gqlv_input): university_dept_StaffMember
-  university_dept_StaffMember__grade(_gqlv_target: 
university_dept_StaffMember__gqlv_input, grade: String!): 
university_dept_StaffMember
-  university_dept_StaffMember__name(_gqlv_target: 
university_dept_StaffMember__gqlv_input, name: String!): 
university_dept_StaffMember
-  university_dept_StaffMember__photo(_gqlv_target: 
university_dept_StaffMember__gqlv_input, photo: String): 
university_dept_StaffMember
-  university_dept_Staff__createStaffMember(department: 
university_dept_Department__gqlv_input!, name: String!): 
university_dept_StaffMember
+type Given {
+  _gqlv_lookup__causeway_applib_DomainObjectList(object: 
causeway_applib_DomainObjectList__gqlv_input): causeway_applib_DomainObjectList
+  _gqlv_lookup__causeway_applib_FacetGroupNode(object: 
causeway_applib_FacetGroupNode__gqlv_input): causeway_applib_FacetGroupNode
+  _gqlv_lookup__causeway_applib_ParameterNode(object: 
causeway_applib_ParameterNode__gqlv_input): causeway_applib_ParameterNode
+  _gqlv_lookup__causeway_applib_PropertyNode(object: 
causeway_applib_PropertyNode__gqlv_input): causeway_applib_PropertyNode
+  _gqlv_lookup__causeway_applib_RoleMemento(object: 
causeway_applib_RoleMemento__gqlv_input): causeway_applib_RoleMemento
+  _gqlv_lookup__causeway_applib_TypeNode(object: 
causeway_applib_TypeNode__gqlv_input): causeway_applib_TypeNode
+  _gqlv_lookup__causeway_applib_UserMemento(object: 
causeway_applib_UserMemento__gqlv_input): causeway_applib_UserMemento
+  _gqlv_lookup__causeway_applib_node_ActionNode(object: 
causeway_applib_node_ActionNode__gqlv_input): causeway_applib_node_ActionNode
+  _gqlv_lookup__causeway_applib_node_CollectionNode(object: 
causeway_applib_node_CollectionNode__gqlv_input): 
causeway_applib_node_CollectionNode
+  _gqlv_lookup__causeway_applib_node_FacetAttrNode(object: 
causeway_applib_node_FacetAttrNode__gqlv_input): 
causeway_applib_node_FacetAttrNode
+  _gqlv_lookup__causeway_applib_node_FacetNode(object: 
causeway_applib_node_FacetNode__gqlv_input): causeway_applib_node_FacetNode
+  _gqlv_lookup__causeway_conf_ConfigurationProperty(object: 
causeway_conf_ConfigurationProperty__gqlv_input): 
causeway_conf_ConfigurationProperty
+  _gqlv_lookup__causeway_conf_ConfigurationViewmodel(object: 
causeway_conf_ConfigurationViewmodel__gqlv_input): 
causeway_conf_ConfigurationViewmodel
+  _gqlv_lookup__causeway_feat_ApplicationFeatureViewModel(object: 
causeway_feat_ApplicationFeatureViewModel__gqlv_input): 
causeway_feat_ApplicationFeatureViewModel
+  _gqlv_lookup__causeway_feat_ApplicationNamespace(object: 
causeway_feat_ApplicationNamespace__gqlv_input): 
causeway_feat_ApplicationNamespace
+  _gqlv_lookup__causeway_feat_ApplicationType(object: 
causeway_feat_ApplicationType__gqlv_input): causeway_feat_ApplicationType
+  _gqlv_lookup__causeway_feat_ApplicationTypeAction(object: 
causeway_feat_ApplicationTypeAction__gqlv_input): 
causeway_feat_ApplicationTypeAction
+  _gqlv_lookup__causeway_feat_ApplicationTypeCollection(object: 
causeway_feat_ApplicationTypeCollection__gqlv_input): 
causeway_feat_ApplicationTypeCollection
+  _gqlv_lookup__causeway_feat_ApplicationTypeMember(object: 
causeway_feat_ApplicationTypeMember__gqlv_input): 
causeway_feat_ApplicationTypeMember
+  _gqlv_lookup__causeway_feat_ApplicationTypeProperty(object: 
causeway_feat_ApplicationTypeProperty__gqlv_input): 
causeway_feat_ApplicationTypeProperty
+  _gqlv_lookup__causeway_schema_metamodel_v2_DomainClassDto(object: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input): 
causeway_schema_metamodel_v2_DomainClassDto
+  _gqlv_lookup__causeway_security_LoginRedirect(object: 
causeway_security_LoginRedirect__gqlv_input): causeway_security_LoginRedirect
+  _gqlv_lookup__causeway_testing_fixtures_FixtureResult(object: 
causeway_testing_fixtures_FixtureResult__gqlv_input): 
causeway_testing_fixtures_FixtureResult
+  _gqlv_lookup__java_lang_Runnable(object: java_lang_Runnable__gqlv_input): 
java_lang_Runnable
+  _gqlv_lookup__java_util_Map(object: java_util_Map__gqlv_input): java_util_Map
+  _gqlv_lookup__java_util_SortedMap(object: java_util_SortedMap__gqlv_input): 
java_util_SortedMap
+  _gqlv_lookup__java_util_concurrent_Callable(object: 
java_util_concurrent_Callable__gqlv_input): java_util_concurrent_Callable
+  _gqlv_lookup__java_util_function_BiFunction(object: 
java_util_function_BiFunction__gqlv_input): java_util_function_BiFunction
+  _gqlv_lookup__java_util_function_Consumer(object: 
java_util_function_Consumer__gqlv_input): java_util_function_Consumer
+  _gqlv_lookup__java_util_function_Function(object: 
java_util_function_Function__gqlv_input): java_util_function_Function
+  _gqlv_lookup__java_util_stream_Stream(object: 
java_util_stream_Stream__gqlv_input): java_util_stream_Stream
+  
_gqlv_lookup__org_apache_causeway_core_metamodel_inspect_model_MMNode(object: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): 
org_apache_causeway_core_metamodel_inspect_model_MMNode
+  
_gqlv_lookup__org_apache_causeway_core_metamodel_inspect_model_MemberNode(object:
 org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input): 
org_apache_causeway_core_metamodel_inspect_model_MemberNode
+  
_gqlv_lookup__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript(object:
 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_input):
 org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
+  _gqlv_lookup__university_dept_Department(object: 
university_dept_Department__gqlv_input): university_dept_Department
+  _gqlv_lookup__university_dept_DeptHead(object: 
university_dept_DeptHead__gqlv_input): university_dept_DeptHead
+  _gqlv_lookup__university_dept_StaffMember(object: 
university_dept_StaffMember__gqlv_input): university_dept_StaffMember
 }
 
 type Query {
+  Scenario: Scenario
   _gqlv_lookup__causeway_applib_DomainObjectList(object: 
causeway_applib_DomainObjectList__gqlv_input): causeway_applib_DomainObjectList
   _gqlv_lookup__causeway_applib_FacetGroupNode(object: 
causeway_applib_FacetGroupNode__gqlv_input): causeway_applib_FacetGroupNode
   _gqlv_lookup__causeway_applib_ParameterNode(object: 
causeway_applib_ParameterNode__gqlv_input): causeway_applib_ParameterNode
@@ -114,6 +111,10 @@ type Query {
   university_dept_Staff: university_dept_Staff
 }
 
+type Scenario {
+  Given: Given
+}
+
 type causeway_applib_DomainObjectList {
   _gqlv_meta: causeway_applib_DomainObjectList__gqlv_meta
   actionArguments: 
causeway_applib_DomainObjectList__actionArguments__gqlv_property
@@ -128,6 +129,7 @@ type 
causeway_applib_DomainObjectList__actionArguments__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(actionArguments: String): causeway_applib_DomainObjectList
   validate(actionArguments: String): String
 }
 
@@ -135,6 +137,7 @@ type 
causeway_applib_DomainObjectList__actionId__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(actionId: String): causeway_applib_DomainObjectList
   validate(actionId: String): String
 }
 
@@ -142,6 +145,7 @@ type 
causeway_applib_DomainObjectList__actionOwningFqcn__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(actionOwningFqcn: String): causeway_applib_DomainObjectList
   validate(actionOwningFqcn: String): String
 }
 
@@ -149,6 +153,7 @@ type 
causeway_applib_DomainObjectList__elementTypeFqcn__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(elementTypeFqcn: String!): causeway_applib_DomainObjectList
   validate(elementTypeFqcn: String): String
 }
 
@@ -166,6 +171,7 @@ type causeway_applib_DomainObjectList__title__gqlv_property 
{
   disabled: String
   get: String!
   hidden: Boolean
+  set(title: String!): causeway_applib_DomainObjectList
   validate(title: String): String
 }
 
@@ -185,6 +191,7 @@ type causeway_applib_FacetGroupNode__facets__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(facets: String!): causeway_applib_FacetGroupNode
   validate(facets: String): String
 }
 
@@ -196,6 +203,7 @@ type causeway_applib_FacetGroupNode__gqlv_meta {
 type causeway_applib_FacetGroupNode__parentNode__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parentNode: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): 
causeway_applib_FacetGroupNode
   validate(parentNode: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
 }
 
@@ -220,6 +228,7 @@ type 
causeway_applib_ParameterNode__parameter__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(parameter: String!): causeway_applib_ParameterNode
   validate(parameter: String): String
 }
 
@@ -227,6 +236,7 @@ type 
causeway_applib_ParameterNode__parentNode__gqlv_property {
   disabled: String
   get: causeway_applib_node_ActionNode!
   hidden: Boolean
+  set(parentNode: causeway_applib_node_ActionNode__gqlv_input!): 
causeway_applib_ParameterNode
   validate(parentNode: causeway_applib_node_ActionNode__gqlv_input): String
 }
 
@@ -252,6 +262,7 @@ type causeway_applib_PropertyNode__mixedIn__gqlv_property {
   disabled: String
   get: Boolean!
   hidden: Boolean
+  set(mixedIn: Boolean!): causeway_applib_PropertyNode
   validate(mixedIn: Boolean): String
 }
 
@@ -259,6 +270,7 @@ type 
causeway_applib_PropertyNode__parentNode__gqlv_property {
   disabled: String
   get: causeway_applib_TypeNode!
   hidden: Boolean
+  set(parentNode: causeway_applib_TypeNode__gqlv_input!): 
causeway_applib_PropertyNode
   validate(parentNode: causeway_applib_TypeNode__gqlv_input): String
 }
 
@@ -266,6 +278,7 @@ type causeway_applib_PropertyNode__property__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(property: String!): causeway_applib_PropertyNode
   validate(property: String): String
 }
 
@@ -279,6 +292,7 @@ type 
causeway_applib_RoleMemento__description__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(description: String!): causeway_applib_RoleMemento
   validate(description: String): String
 }
 
@@ -291,6 +305,7 @@ type causeway_applib_RoleMemento__name__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(name: String!): causeway_applib_RoleMemento
   validate(name: String): String
 }
 
@@ -310,6 +325,7 @@ type 
causeway_applib_TypeNode__domainClassDto__gqlv_property {
   disabled: String
   get: causeway_schema_metamodel_v2_DomainClassDto!
   hidden: Boolean
+  set(domainClassDto: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input!): 
causeway_applib_TypeNode
   validate(domainClassDto: 
causeway_schema_metamodel_v2_DomainClassDto__gqlv_input): String
 }
 
@@ -321,6 +337,7 @@ type causeway_applib_TypeNode__gqlv_meta {
 type causeway_applib_TypeNode__parentNode__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parentNode: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): 
causeway_applib_TypeNode
   validate(parentNode: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
 }
 
@@ -343,6 +360,7 @@ type 
causeway_applib_UserMemento__authenticationCode__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(authenticationCode: String!): causeway_applib_UserMemento
   validate(authenticationCode: String): String
 }
 
@@ -351,6 +369,7 @@ type 
causeway_applib_UserMemento__authenticationSource__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(authenticationSource: String!): causeway_applib_UserMemento
   validate(authenticationSource: String): String
 }
 
@@ -358,6 +377,7 @@ type causeway_applib_UserMemento__avatarUrl__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(avatarUrl: String): causeway_applib_UserMemento
   validate(avatarUrl: String): String
 }
 
@@ -370,6 +390,7 @@ type 
causeway_applib_UserMemento__impersonating__gqlv_property {
   disabled: String
   get: Boolean!
   hidden: Boolean
+  set(impersonating: Boolean!): causeway_applib_UserMemento
   validate(impersonating: Boolean): String
 }
 
@@ -377,6 +398,7 @@ type 
causeway_applib_UserMemento__languageLocale__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(languageLocale: String): causeway_applib_UserMemento
   validate(languageLocale: String): String
 }
 
@@ -384,6 +406,7 @@ type 
causeway_applib_UserMemento__multiTenancyToken__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(multiTenancyToken: String): causeway_applib_UserMemento
   validate(multiTenancyToken: String): String
 }
 
@@ -391,6 +414,7 @@ type causeway_applib_UserMemento__name__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(name: String!): causeway_applib_UserMemento
   validate(name: String): String
 }
 
@@ -398,6 +422,7 @@ type 
causeway_applib_UserMemento__numberFormatLocale__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(numberFormatLocale: String): causeway_applib_UserMemento
   validate(numberFormatLocale: String): String
 }
 
@@ -405,6 +430,7 @@ type causeway_applib_UserMemento__realName__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(realName: String): causeway_applib_UserMemento
   validate(realName: String): String
 }
 
@@ -418,6 +444,7 @@ type 
causeway_applib_UserMemento__timeFormatLocale__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(timeFormatLocale: String): causeway_applib_UserMemento
   validate(timeFormatLocale: String): String
 }
 
@@ -444,6 +471,7 @@ type causeway_applib_node_ActionNode__action__gqlv_property 
{
   disabled: String
   get: String!
   hidden: Boolean
+  set(action: String!): causeway_applib_node_ActionNode
   validate(action: String): String
 }
 
@@ -461,6 +489,7 @@ type 
causeway_applib_node_ActionNode__mixedIn__gqlv_property {
   disabled: String
   get: Boolean!
   hidden: Boolean
+  set(mixedIn: Boolean!): causeway_applib_node_ActionNode
   validate(mixedIn: Boolean): String
 }
 
@@ -468,6 +497,7 @@ type 
causeway_applib_node_ActionNode__parentNode__gqlv_property {
   disabled: String
   get: causeway_applib_TypeNode!
   hidden: Boolean
+  set(parentNode: causeway_applib_TypeNode__gqlv_input!): 
causeway_applib_node_ActionNode
   validate(parentNode: causeway_applib_TypeNode__gqlv_input): String
 }
 
@@ -488,6 +518,7 @@ type 
causeway_applib_node_CollectionNode__collection__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(collection: String!): causeway_applib_node_CollectionNode
   validate(collection: String): String
 }
 
@@ -500,6 +531,7 @@ type 
causeway_applib_node_CollectionNode__mixedIn__gqlv_property {
   disabled: String
   get: Boolean!
   hidden: Boolean
+  set(mixedIn: Boolean!): causeway_applib_node_CollectionNode
   validate(mixedIn: Boolean): String
 }
 
@@ -507,6 +539,7 @@ type 
causeway_applib_node_CollectionNode__parentNode__gqlv_property {
   disabled: String
   get: causeway_applib_TypeNode!
   hidden: Boolean
+  set(parentNode: causeway_applib_TypeNode__gqlv_input!): 
causeway_applib_node_CollectionNode
   validate(parentNode: causeway_applib_TypeNode__gqlv_input): String
 }
 
@@ -526,6 +559,7 @@ type 
causeway_applib_node_FacetAttrNode__facetAttr__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(facetAttr: String!): causeway_applib_node_FacetAttrNode
   validate(facetAttr: String): String
 }
 
@@ -538,6 +572,7 @@ type 
causeway_applib_node_FacetAttrNode__parentNode__gqlv_property {
   disabled: String
   get: causeway_applib_node_FacetNode!
   hidden: Boolean
+  set(parentNode: causeway_applib_node_FacetNode__gqlv_input!): 
causeway_applib_node_FacetAttrNode
   validate(parentNode: causeway_applib_node_FacetNode__gqlv_input): String
 }
 
@@ -558,6 +593,7 @@ type causeway_applib_node_FacetNode__facet__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(facet: String!): causeway_applib_node_FacetNode
   validate(facet: String): String
 }
 
@@ -569,6 +605,7 @@ type causeway_applib_node_FacetNode__gqlv_meta {
 type causeway_applib_node_FacetNode__parentNode__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parentNode: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): 
causeway_applib_node_FacetNode
   validate(parentNode: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
 }
 
@@ -576,6 +613,7 @@ type 
causeway_applib_node_FacetNode__shadowed__gqlv_property {
   disabled: String
   get: Boolean!
   hidden: Boolean
+  set(shadowed: Boolean!): causeway_applib_node_FacetNode
   validate(shadowed: Boolean): String
 }
 
@@ -605,6 +643,7 @@ type 
causeway_conf_ConfigurationProperty__key__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(key: String!): causeway_conf_ConfigurationProperty
   validate(key: String): String
 }
 
@@ -612,6 +651,7 @@ type 
causeway_conf_ConfigurationProperty__value__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(value: String!): causeway_conf_ConfigurationProperty
   validate(value: String): String
 }
 
@@ -662,6 +702,7 @@ type 
causeway_feat_ApplicationFeatureViewModel__memberName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(memberName: String!): causeway_feat_ApplicationFeatureViewModel
   validate(memberName: String): String
 }
 
@@ -669,12 +710,14 @@ type 
causeway_feat_ApplicationFeatureViewModel__namespaceName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(namespaceName: String!): causeway_feat_ApplicationFeatureViewModel
   validate(namespaceName: String): String
 }
 
 type causeway_feat_ApplicationFeatureViewModel__parent__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): 
causeway_feat_ApplicationFeatureViewModel
   validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): 
String
 }
 
@@ -682,6 +725,7 @@ type 
causeway_feat_ApplicationFeatureViewModel__typeSimpleName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(typeSimpleName: String!): causeway_feat_ApplicationFeatureViewModel
   validate(typeSimpleName: String): String
 }
 
@@ -708,6 +752,7 @@ type 
causeway_feat_ApplicationNamespace__memberName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(memberName: String!): causeway_feat_ApplicationNamespace
   validate(memberName: String): String
 }
 
@@ -715,12 +760,14 @@ type 
causeway_feat_ApplicationNamespace__namespaceName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(namespaceName: String!): causeway_feat_ApplicationNamespace
   validate(namespaceName: String): String
 }
 
 type causeway_feat_ApplicationNamespace__parent__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): 
causeway_feat_ApplicationNamespace
   validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): 
String
 }
 
@@ -728,6 +775,7 @@ type 
causeway_feat_ApplicationNamespace__typeSimpleName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(typeSimpleName: String!): causeway_feat_ApplicationNamespace
   validate(typeSimpleName: String): String
 }
 
@@ -757,6 +805,7 @@ type 
causeway_feat_ApplicationTypeAction__actionSemantics__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(actionSemantics: String!): causeway_feat_ApplicationTypeAction
   validate(actionSemantics: String): String
 }
 
@@ -769,6 +818,7 @@ type 
causeway_feat_ApplicationTypeAction__memberName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(memberName: String!): causeway_feat_ApplicationTypeAction
   validate(memberName: String): String
 }
 
@@ -776,12 +826,14 @@ type 
causeway_feat_ApplicationTypeAction__namespaceName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(namespaceName: String!): causeway_feat_ApplicationTypeAction
   validate(namespaceName: String): String
 }
 
 type causeway_feat_ApplicationTypeAction__parent__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): 
causeway_feat_ApplicationTypeAction
   validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): 
String
 }
 
@@ -789,6 +841,7 @@ type 
causeway_feat_ApplicationTypeAction__returnType__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(returnType: String!): causeway_feat_ApplicationTypeAction
   validate(returnType: String): String
 }
 
@@ -796,6 +849,7 @@ type 
causeway_feat_ApplicationTypeAction__typeSimpleName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(typeSimpleName: String!): causeway_feat_ApplicationTypeAction
   validate(typeSimpleName: String): String
 }
 
@@ -813,6 +867,7 @@ type 
causeway_feat_ApplicationTypeCollection__derived__gqlv_property {
   disabled: String
   get: Boolean!
   hidden: Boolean
+  set(derived: Boolean!): causeway_feat_ApplicationTypeCollection
   validate(derived: Boolean): String
 }
 
@@ -820,6 +875,7 @@ type 
causeway_feat_ApplicationTypeCollection__elementType__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(elementType: String!): causeway_feat_ApplicationTypeCollection
   validate(elementType: String): String
 }
 
@@ -832,6 +888,7 @@ type 
causeway_feat_ApplicationTypeCollection__memberName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(memberName: String!): causeway_feat_ApplicationTypeCollection
   validate(memberName: String): String
 }
 
@@ -839,12 +896,14 @@ type 
causeway_feat_ApplicationTypeCollection__namespaceName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(namespaceName: String!): causeway_feat_ApplicationTypeCollection
   validate(namespaceName: String): String
 }
 
 type causeway_feat_ApplicationTypeCollection__parent__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): 
causeway_feat_ApplicationTypeCollection
   validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): 
String
 }
 
@@ -852,6 +911,7 @@ type 
causeway_feat_ApplicationTypeCollection__typeSimpleName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(typeSimpleName: String!): causeway_feat_ApplicationTypeCollection
   validate(typeSimpleName: String): String
 }
 
@@ -872,6 +932,7 @@ type 
causeway_feat_ApplicationTypeMember__memberName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(memberName: String!): causeway_feat_ApplicationTypeMember
   validate(memberName: String): String
 }
 
@@ -879,12 +940,14 @@ type 
causeway_feat_ApplicationTypeMember__namespaceName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(namespaceName: String!): causeway_feat_ApplicationTypeMember
   validate(namespaceName: String): String
 }
 
 type causeway_feat_ApplicationTypeMember__parent__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): 
causeway_feat_ApplicationTypeMember
   validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): 
String
 }
 
@@ -892,6 +955,7 @@ type 
causeway_feat_ApplicationTypeMember__typeSimpleName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(typeSimpleName: String!): causeway_feat_ApplicationTypeMember
   validate(typeSimpleName: String): String
 }
 
@@ -911,6 +975,7 @@ type 
causeway_feat_ApplicationTypeProperty__derived__gqlv_property {
   disabled: String
   get: Boolean!
   hidden: Boolean
+  set(derived: Boolean!): causeway_feat_ApplicationTypeProperty
   validate(derived: Boolean): String
 }
 
@@ -923,6 +988,7 @@ type 
causeway_feat_ApplicationTypeProperty__maxLength__gqlv_property {
   disabled: String
   get: Int
   hidden: Boolean
+  set(maxLength: Int): causeway_feat_ApplicationTypeProperty
   validate(maxLength: Int): String
 }
 
@@ -930,6 +996,7 @@ type 
causeway_feat_ApplicationTypeProperty__memberName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(memberName: String!): causeway_feat_ApplicationTypeProperty
   validate(memberName: String): String
 }
 
@@ -937,12 +1004,14 @@ type 
causeway_feat_ApplicationTypeProperty__namespaceName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(namespaceName: String!): causeway_feat_ApplicationTypeProperty
   validate(namespaceName: String): String
 }
 
 type causeway_feat_ApplicationTypeProperty__parent__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): 
causeway_feat_ApplicationTypeProperty
   validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): 
String
 }
 
@@ -950,6 +1019,7 @@ type 
causeway_feat_ApplicationTypeProperty__returnType__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(returnType: String!): causeway_feat_ApplicationTypeProperty
   validate(returnType: String): String
 }
 
@@ -957,6 +1027,7 @@ type 
causeway_feat_ApplicationTypeProperty__typeSimpleName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(typeSimpleName: String!): causeway_feat_ApplicationTypeProperty
   validate(typeSimpleName: String): String
 }
 
@@ -964,6 +1035,7 @@ type 
causeway_feat_ApplicationTypeProperty__typicalLength__gqlv_property {
   disabled: String
   get: Int
   hidden: Boolean
+  set(typicalLength: Int): causeway_feat_ApplicationTypeProperty
   validate(typicalLength: Int): String
 }
 
@@ -988,6 +1060,7 @@ type 
causeway_feat_ApplicationType__memberName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(memberName: String!): causeway_feat_ApplicationType
   validate(memberName: String): String
 }
 
@@ -995,12 +1068,14 @@ type 
causeway_feat_ApplicationType__namespaceName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(namespaceName: String!): causeway_feat_ApplicationType
   validate(namespaceName: String): String
 }
 
 type causeway_feat_ApplicationType__parent__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): 
causeway_feat_ApplicationType
   validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): 
String
 }
 
@@ -1014,6 +1089,7 @@ type 
causeway_feat_ApplicationType__typeSimpleName__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(typeSimpleName: String!): causeway_feat_ApplicationType
   validate(typeSimpleName: String): String
 }
 
@@ -1034,6 +1110,7 @@ type 
causeway_schema_metamodel_v2_DomainClassDto__actions__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(actions: String!): causeway_schema_metamodel_v2_DomainClassDto
   validate(actions: String): String
 }
 
@@ -1041,6 +1118,7 @@ type 
causeway_schema_metamodel_v2_DomainClassDto__annotations__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(annotations: String!): causeway_schema_metamodel_v2_DomainClassDto
   validate(annotations: String): String
 }
 
@@ -1048,6 +1126,7 @@ type 
causeway_schema_metamodel_v2_DomainClassDto__collections__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(collections: String!): causeway_schema_metamodel_v2_DomainClassDto
   validate(collections: String): String
 }
 
@@ -1055,6 +1134,7 @@ type 
causeway_schema_metamodel_v2_DomainClassDto__facets__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(facets: String!): causeway_schema_metamodel_v2_DomainClassDto
   validate(facets: String): String
 }
 
@@ -1067,6 +1147,7 @@ type 
causeway_schema_metamodel_v2_DomainClassDto__id__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(id: String!): causeway_schema_metamodel_v2_DomainClassDto
   validate(id: String): String
 }
 
@@ -1074,6 +1155,7 @@ type 
causeway_schema_metamodel_v2_DomainClassDto__majorVersion__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(majorVersion: String): causeway_schema_metamodel_v2_DomainClassDto
   validate(majorVersion: String): String
 }
 
@@ -1081,6 +1163,7 @@ type 
causeway_schema_metamodel_v2_DomainClassDto__minorVersion__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(minorVersion: String): causeway_schema_metamodel_v2_DomainClassDto
   validate(minorVersion: String): String
 }
 
@@ -1088,6 +1171,7 @@ type 
causeway_schema_metamodel_v2_DomainClassDto__properties__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(properties: String!): causeway_schema_metamodel_v2_DomainClassDto
   validate(properties: String): String
 }
 
@@ -1095,6 +1179,7 @@ type 
causeway_schema_metamodel_v2_DomainClassDto__service__gqlv_property {
   disabled: String
   get: Boolean!
   hidden: Boolean
+  set(service: Boolean!): causeway_schema_metamodel_v2_DomainClassDto
   validate(service: Boolean): String
 }
 
@@ -1130,6 +1215,7 @@ type 
causeway_testing_fixtures_FixtureResult__className__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(className: String!): causeway_testing_fixtures_FixtureResult
   validate(className: String): String
 }
 
@@ -1137,6 +1223,7 @@ type 
causeway_testing_fixtures_FixtureResult__fixtureScriptClassName__gqlv_prope
   disabled: String
   get: String
   hidden: Boolean
+  set(fixtureScriptClassName: String): causeway_testing_fixtures_FixtureResult
   validate(fixtureScriptClassName: String): String
 }
 
@@ -1149,12 +1236,14 @@ type 
causeway_testing_fixtures_FixtureResult__key__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(key: String!): causeway_testing_fixtures_FixtureResult
   validate(key: String): String
 }
 
 type causeway_testing_fixtures_FixtureResult__object__gqlv_property {
   disabled: String
   hidden: Boolean
+  set(object: String!): causeway_testing_fixtures_FixtureResult
   validate(object: String): String
 }
 
@@ -1249,6 +1338,7 @@ type 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_meta {
 type 
org_apache_causeway_core_metamodel_inspect_model_MMNode__parentNode__gqlv_property
 {
   disabled: String
   hidden: Boolean
+  set(parentNode: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): 
org_apache_causeway_core_metamodel_inspect_model_MMNode
   validate(parentNode: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
 }
 
@@ -1273,6 +1363,7 @@ type 
org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn__gqlv_
   disabled: String
   get: Boolean!
   hidden: Boolean
+  set(mixedIn: Boolean!): 
org_apache_causeway_core_metamodel_inspect_model_MemberNode
   validate(mixedIn: Boolean): String
 }
 
@@ -1280,6 +1371,7 @@ type 
org_apache_causeway_core_metamodel_inspect_model_MemberNode__parentNode__gq
   disabled: String
   get: causeway_applib_TypeNode!
   hidden: Boolean
+  set(parentNode: causeway_applib_TypeNode__gqlv_input!): 
org_apache_causeway_core_metamodel_inspect_model_MemberNode
   validate(parentNode: causeway_applib_TypeNode__gqlv_input): String
 }
 
@@ -1293,6 +1385,7 @@ type 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__f
   disabled: String
   get: String!
   hidden: Boolean
+  set(friendlyName: String!): 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
   validate(friendlyName: String): String
 }
 
@@ -1305,6 +1398,7 @@ type 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__q
   disabled: String
   get: String!
   hidden: Boolean
+  set(qualifiedName: String!): 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
   validate(qualifiedName: String): String
 }
 
@@ -1324,6 +1418,7 @@ type 
university_admin_AdminMenu__actionWithDisabledParam__firstParam__gqlv_actio
 type university_admin_AdminMenu__actionWithDisabledParam__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeNonIdempotent(firstParam: String!, secondParam: String!, 
thirdParameter: String!): String
   params: 
university_admin_AdminMenu__actionWithDisabledParam__gqlv_action_params
   validate(firstParam: String, secondParam: String, thirdParameter: String): 
String
 }
@@ -1355,6 +1450,7 @@ type 
university_admin_AdminMenu__actionWithHiddenParam__firstParam__gqlv_action_
 type university_admin_AdminMenu__actionWithHiddenParam__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeNonIdempotent(firstParam: String!, secondParam: String!): String
   params: university_admin_AdminMenu__actionWithHiddenParam__gqlv_action_params
   validate(firstParam: String, secondParam: String): String
 }
@@ -1373,12 +1469,14 @@ type 
university_admin_AdminMenu__actionWithHiddenParam__secondParam__gqlv_action
 type university_admin_AdminMenu__adminAction__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeNonIdempotent: String
   validate: String
 }
 
 type university_admin_AdminMenu__otherAdminAction__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeNonIdempotent: String
   validate: String
 }
 
@@ -1881,6 +1979,7 @@ type university_dept_Department {
 type university_dept_Department__addStaffMember__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeIdempotent(staffMember: university_dept_StaffMember__gqlv_input!): 
university_dept_Department
   params: university_dept_Department__addStaffMember__gqlv_action_params
   validate(staffMember: university_dept_StaffMember__gqlv_input): String
 }
@@ -1899,6 +1998,7 @@ type 
university_dept_Department__addStaffMember__staffMember__gqlv_action_parame
 type university_dept_Department__addStaffMembers__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeIdempotent(staffMembers: [university_dept_StaffMember__gqlv_input]): 
university_dept_Department
   params: university_dept_Department__addStaffMembers__gqlv_action_params
   validate(staffMembers: [university_dept_StaffMember__gqlv_input]): String
 }
@@ -1917,6 +2017,7 @@ type 
university_dept_Department__addStaffMembers__staffMembers__gqlv_action_para
 type university_dept_Department__changeDeptHead__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeIdempotent(newDeptHead: university_dept_DeptHead__gqlv_input!): 
university_dept_Department
   params: university_dept_Department__changeDeptHead__gqlv_action_params
   validate(newDeptHead: university_dept_DeptHead__gqlv_input): String
 }
@@ -1936,6 +2037,7 @@ type 
university_dept_Department__changeDeptHead__newDeptHead__gqlv_action_parame
 type university_dept_Department__changeName__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeIdempotent(newName: String!): university_dept_Department
   params: university_dept_Department__changeName__gqlv_action_params
   validate(newName: String): String
 }
@@ -1956,6 +2058,7 @@ type university_dept_Department__deptHead__gqlv_property {
   disabled: String
   get: university_dept_DeptHead
   hidden: Boolean
+  set(deptHead: university_dept_DeptHead__gqlv_input): 
university_dept_Department
   validate(deptHead: university_dept_DeptHead__gqlv_input): String
 }
 
@@ -1969,12 +2072,14 @@ type university_dept_Department__name__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(name: String!): university_dept_Department
   validate(name: String): String
 }
 
 type university_dept_Department__removeStaffMember__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeIdempotent(staffMember: university_dept_StaffMember__gqlv_input!): 
university_dept_Department
   params: university_dept_Department__removeStaffMember__gqlv_action_params
   validate(staffMember: university_dept_StaffMember__gqlv_input): String
 }
@@ -2012,6 +2117,7 @@ type 
university_dept_Departments__createDepartment__deptHead__gqlv_action_parame
 type university_dept_Departments__createDepartment__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeNonIdempotent(deptHead: university_dept_DeptHead__gqlv_input, name: 
String!): university_dept_Department
   params: university_dept_Departments__createDepartment__gqlv_action_params
   validate(deptHead: university_dept_DeptHead__gqlv_input, name: String): 
String
 }
@@ -2070,6 +2176,7 @@ type 
university_dept_DeptHead__changeDepartment__department__gqlv_action_paramet
 type university_dept_DeptHead__changeDepartment__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeIdempotent(department: university_dept_Department__gqlv_input!): 
university_dept_DeptHead
   params: university_dept_DeptHead__changeDepartment__gqlv_action_params
   validate(department: university_dept_Department__gqlv_input): String
 }
@@ -2081,6 +2188,7 @@ type 
university_dept_DeptHead__changeDepartment__gqlv_action_params {
 type university_dept_DeptHead__changeName__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeIdempotent(newName: String!): university_dept_DeptHead
   params: university_dept_DeptHead__changeName__gqlv_action_params
   validate(newName: String): String
 }
@@ -2101,6 +2209,7 @@ type university_dept_DeptHead__department__gqlv_property {
   disabled: String
   get: university_dept_Department
   hidden: Boolean
+  set(department: university_dept_Department__gqlv_input): 
university_dept_DeptHead
   validate(department: university_dept_Department__gqlv_input): String
 }
 
@@ -2114,6 +2223,7 @@ type university_dept_DeptHead__name__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(name: String): university_dept_DeptHead
   validate(name: String): String
 }
 
@@ -2166,6 +2276,7 @@ type 
university_dept_StaffMember__department__gqlv_property {
   disabled: String
   get: university_dept_Department
   hidden: Boolean
+  set(department: university_dept_Department__gqlv_input): 
university_dept_StaffMember
   validate(department: university_dept_Department__gqlv_input): String
 }
 
@@ -2180,6 +2291,7 @@ type university_dept_StaffMember__grade__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(grade: String!): university_dept_StaffMember
   validate(grade: String): String
 }
 
@@ -2187,6 +2299,7 @@ type university_dept_StaffMember__name__gqlv_property {
   disabled: String
   get: String!
   hidden: Boolean
+  set(name: String!): university_dept_StaffMember
   validate(name: String): String
 }
 
@@ -2194,6 +2307,7 @@ type university_dept_StaffMember__photo__gqlv_property {
   disabled: String
   get: String
   hidden: Boolean
+  set(photo: String): university_dept_StaffMember
   validate(photo: String): String
 }
 
@@ -2207,6 +2321,7 @@ type 
university_dept_Staff__createStaffMember__department__gqlv_action_parameter
 type university_dept_Staff__createStaffMember__gqlv_action {
   disabled: String
   hidden: Boolean
+  invokeNonIdempotent(department: university_dept_Department__gqlv_input!, 
name: String!): university_dept_StaffMember
   params: university_dept_Staff__createStaffMember__gqlv_action_params
   validate(department: university_dept_Department__gqlv_input, name: String): 
String
 }
diff --git 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
 
b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
index dfff9fe35c..ff5ca87aca 100644
--- 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
+++ 
b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
@@ -12,10 +12,11 @@ import static graphql.schema.GraphQLObjectType.newObject;
 import org.apache.causeway.viewer.graphql.model.context.Context;
 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.GqlvScenario;
 
 import lombok.Getter;
 
-public class GqlvTopLevelQuery implements GqlvDomainService.Holder, 
GqlvDomainObject.Holder {
+public class GqlvTopLevelQuery implements GqlvDomainService.Holder, 
GqlvDomainObject.Holder, GqlvScenario.Holder {
 
     private static final String OBJECT_TYPE_NAME = "Query";
 
@@ -25,6 +26,8 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
     private final List<GqlvDomainService> domainServices = new ArrayList<>();
     private final List<GqlvDomainObject> domainObjects = new ArrayList<>();
 
+    private final GqlvScenario scenario;
+
     public GqlvTopLevelQuery(final Context context) {
 
         this.objectTypeBuilder = newObject().name(OBJECT_TYPE_NAME);
@@ -36,7 +39,7 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
                 case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
                 case ENTITY:     // @DomainObject(nature=ENTITY)
 
-                    domainObjects.add(new GqlvDomainObject(this, objectSpec, 
context));
+                    domainObjects.add(GqlvDomainObject.of(objectSpec, this, 
context));
 
                     break;
             }
@@ -48,7 +51,7 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
                 case MANAGED_BEAN_CONTRIBUTING: // @DomainService
                     
context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
                             .ifPresent(servicePojo -> {
-                                domainServices.add(new GqlvDomainService(this, 
objectSpec, servicePojo, context));
+                                
domainServices.add(GqlvDomainService.of(objectSpec, this, servicePojo, 
context));
                             });
                     break;
             }
@@ -59,6 +62,8 @@ public class GqlvTopLevelQuery implements 
GqlvDomainService.Holder, GqlvDomainOb
             addField(domainObject.getLookupField());
         }
 
+        scenario = new GqlvScenario(this, context);
+
         objectType = objectTypeBuilder.build();
     }
 

Reply via email to