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 5b76d6a6e44c156b1bf0456ac2e4de64fbb8091b
Author: danhaywood <[email protected]>
AuthorDate: Tue Jan 23 18:10:02 2024 +0000

    CAUSEWAY-3676: adds ActionDisabled
---
 .../graphql/model/domain/BookmarkedPojo.java       |  40 ++
 .../viewer/graphql/model/domain/GqlvAction.java    |  54 +-
 ...lvActionHidden.java => GqlvActionDisabled.java} |  51 +-
 .../model/domain/GqlvActionDisabledHolder.java     |  27 +
 .../graphql/model/domain/GqlvActionHidden.java     |  30 +-
 .../model/domain/GqlvActionHiddenHolder.java       |  18 +
 .../graphql/model/domain/GqlvActionHolder.java     |  18 +
 .../graphql/model/domain/GqlvActionInvoke.java     |  24 +-
 .../model/domain/GqlvActionInvokeHolder.java       |  18 +
 .../graphql/model/domain/GqlvActionParameter.java  |  18 +
 .../graphql/model/domain/GqlvAssociation.java      |  18 +
 .../model/domain/GqlvAssociationHolder.java        |  18 +
 .../graphql/model/domain/GqlvCollection.java       |  18 +
 .../graphql/model/domain/GqlvCollectionHolder.java |  18 +
 .../graphql/model/domain/GqlvDomainObject.java     |  18 +
 .../graphql/model/domain/GqlvDomainService.java    |  18 +
 .../viewer/graphql/model/domain/GqlvHolder.java    |  18 +
 .../viewer/graphql/model/domain/GqlvMember.java    |  18 +
 .../graphql/model/domain/GqlvMemberHolder.java     |  18 +
 .../viewer/graphql/model/domain/GqlvMeta.java      |  18 +
 .../graphql/model/domain/GqlvMetaHolder.java       |  18 +
 .../viewer/graphql/model/domain/GqlvMutations.java |  43 +-
 .../graphql/model/domain/GqlvMutationsHolder.java  |  18 +
 .../viewer/graphql/model/domain/GqlvProperty.java  |  18 +
 .../graphql/model/domain/GqlvPropertyHolder.java   |  18 +
 .../model/registry/GraphQLTypeRegistry.java        |  18 +
 .../graphql/viewer/test/domain/DepartmentMenu.java |   8 +
 .../e2e/Domain_IntegTest.create_department._.gql   |   1 +
 ...omain_IntegTest.create_department.approved.json |   1 +
 .../graphql/viewer/test/e2e/Domain_IntegTest.java  |  11 +
 .../e2e/Domain_IntegTest.other_admin_action._.gql  |   9 +
 ...main_IntegTest.other_admin_action.approved.json |  11 +
 .../test/e2e/Schema_IntegTest.schema.approved.json | 666 ++++++++++++++++++++-
 ...chema_IntegTest.schema_types_name.approved.json |   2 +
 .../graphql/test/src/test/resources/schema.gql     |  62 ++
 35 files changed, 1296 insertions(+), 86 deletions(-)

diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/BookmarkedPojo.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/BookmarkedPojo.java
new file mode 100644
index 0000000000..7e9a7aeae7
--- /dev/null
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/BookmarkedPojo.java
@@ -0,0 +1,40 @@
+/*
+ *  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 org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+
+class BookmarkedPojo {
+
+    private final Bookmark bookmark;
+    private final BookmarkService bookmarkService;
+
+    public BookmarkedPojo(
+            final Bookmark bookmark,
+            final BookmarkService bookmarkService) {
+
+        this.bookmark = bookmark;
+        this.bookmarkService = bookmarkService;
+    }
+
+    public Object getTargetPojo() {
+        return bookmarkService.lookup(bookmark).orElseThrow();
+    }
+}
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
index 7cb4bbe7a5..71b8487184 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
@@ -1,6 +1,23 @@
+/*
+ *  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 org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 import org.apache.causeway.viewer.graphql.model.util.TypeNames;
@@ -14,11 +31,12 @@ import static 
graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
 
 @Log4j2
-public class GqlvAction extends GqlvMember<ObjectAction, GqlvActionHolder> 
implements GqlvActionInvokeHolder, GqlvActionHiddenHolder {
+public class GqlvAction extends GqlvMember<ObjectAction, GqlvActionHolder> 
implements GqlvActionInvokeHolder, GqlvActionHiddenHolder, 
GqlvActionDisabledHolder {
 
     private final GraphQLObjectType.Builder gqlObjectTypeBuilder;
     private final GraphQLObjectType gqlObjectType;
     private final GqlvActionHidden hidden;
+    private final GqlvActionDisabled disabled;
     private final GqlvActionInvoke invoke;
     private final BookmarkService bookmarkService;
 
@@ -34,6 +52,7 @@ public class GqlvAction extends GqlvMember<ObjectAction, 
GqlvActionHolder> imple
         this.bookmarkService = bookmarkService;
 
         this.hidden = new GqlvActionHidden(this, codeRegistryBuilder);
+        this.disabled = new GqlvActionDisabled(this, codeRegistryBuilder);
         this.invoke = new GqlvActionInvoke(this, codeRegistryBuilder);
 
         this.gqlObjectType = gqlObjectTypeBuilder.build();
@@ -62,48 +81,31 @@ public class GqlvAction extends GqlvMember<ObjectAction, 
GqlvActionHolder> imple
 
         codeRegistryBuilder.dataFetcher(
                 holder.coordinatesFor(getField()),
-                new Fetcher2());
+                new Fetcher());
 
         hidden.addDataFetcher();
+        disabled.addDataFetcher();
         invoke.addDataFetcher();
     }
 
-    private class Fetcher2 implements DataFetcher<Object> {
+    private class Fetcher implements DataFetcher<Object> {
         @Override
         public Object get(DataFetchingEnvironment environment) {
             Object source = environment.getSource();
             Object domainPojo;
-            if (source instanceof GqlvMutations.Fetcher) {
-                GqlvMutations.Fetcher mutationsFetcher = 
(GqlvMutations.Fetcher) source;
-                domainPojo = mutationsFetcher.getTargetPojo();
+            if (source instanceof BookmarkedPojo) {
+                BookmarkedPojo mutationsBookmarkedPojo = (BookmarkedPojo) 
source;
+                domainPojo = mutationsBookmarkedPojo.getTargetPojo();
             } else {
                 // presumably this is a safe action
                 domainPojo = source;
             }
             return bookmarkService.bookmarkFor(domainPojo)
-                    .map(bookmark -> new Fetcher(bookmark, bookmarkService))
+                    .map(bookmark -> new BookmarkedPojo(bookmark, 
bookmarkService))
                     .orElseThrow();
         }
     }
 
-    static class Fetcher {
-
-        private final Bookmark bookmark;
-        private final BookmarkService bookmarkService;
-
-        public Fetcher(
-                final Bookmark bookmark,
-                final BookmarkService bookmarkService) {
-
-            this.bookmark = bookmark;
-            this.bookmarkService = bookmarkService;
-        }
-
-        public Object getTargetPojo() {
-            return bookmarkService.lookup(bookmark).orElseThrow();
-        }
-    }
-
 
     @Override
     public FieldCoordinates coordinatesFor(GraphQLFieldDefinition 
fieldDefinition) {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHidden.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionDisabled.java
similarity index 60%
copy from 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHidden.java
copy to 
incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionDisabled.java
index 17bed097a6..c42a7fcf20 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHidden.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionDisabled.java
@@ -1,36 +1,47 @@
+/*
+ *  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 java.util.Map;
-
 import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.causeway.core.metamodel.interactions.InteractionUtils;
-import 
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
 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.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.causeway.viewer.graphql.model.types.ScalarMapper;
 
+import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 import graphql.schema.DataFetchingEnvironment;
 import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 
-import lombok.val;
-
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 
 @Log4j2
-public class GqlvActionHidden {
+public class GqlvActionDisabled {
 
     private final GqlvActionHiddenHolder holder;
     private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
     private final GraphQLFieldDefinition field;
 
-    public GqlvActionHidden(
+    public GqlvActionDisabled(
             final GqlvActionHiddenHolder holder,
             final GraphQLCodeRegistry.Builder codeRegistryBuilder
     ) {
@@ -43,8 +54,8 @@ public class GqlvActionHidden {
 
         GraphQLFieldDefinition fieldDefinition =
                 newFieldDefinition()
-                    .name("hidden")
-                    .type(ScalarMapper.typeFor(boolean.class))
+                    .name("disabled")
+                    .type(ScalarMapper.typeFor(String.class))
                     .build();
 
         holder.addField(fieldDefinition);
@@ -54,20 +65,20 @@ public class GqlvActionHidden {
     public void addDataFetcher() {
         codeRegistryBuilder.dataFetcher(
                 holder.coordinatesFor(field),
-                this::hidden
+                this::disabled
         );
     }
 
-    private boolean hidden(
+    private String disabled(
             final DataFetchingEnvironment dataFetchingEnvironment) {
 
         final ObjectAction objectAction = holder.getObjectAction();
 
         Object source = dataFetchingEnvironment.getSource();
         Object domainObjectInstance;
-        if (source instanceof GqlvAction.Fetcher) {
-            GqlvAction.Fetcher fetcher = (GqlvAction.Fetcher) source;
-            domainObjectInstance = fetcher.getTargetPojo();
+        if (source instanceof BookmarkedPojo) {
+            BookmarkedPojo fetched = (BookmarkedPojo) source;
+            domainObjectInstance = fetched.getTargetPojo();
         } else {
             domainObjectInstance = source;
         }
@@ -77,13 +88,13 @@ public class GqlvActionHidden {
                 .loadSpecification(domainObjectInstanceClass);
         if (specification == null) {
             // not expected
-            return true;
+            return String.format("Disabled; could not determine target 
object's type ('%s')", domainObjectInstanceClass.getName());
         }
 
         ManagedObject owner = ManagedObject.adaptSingular(specification, 
domainObjectInstance);
 
-        val visibleConsent = objectAction.isVisible(owner, 
InteractionInitiatedBy.USER, Where.ANYWHERE);
-        return visibleConsent.isVetoed();
+        val usable = objectAction.isUsable(owner, InteractionInitiatedBy.USER, 
Where.ANYWHERE);
+        return usable.getReasonAsString().orElse(null);
     }
 
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionDisabledHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionDisabledHolder.java
new file mode 100644
index 0000000000..8264c7ad72
--- /dev/null
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionDisabledHolder.java
@@ -0,0 +1,27 @@
+/*
+ *  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 org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+
+public interface GqlvActionDisabledHolder extends GqlvHolder {
+
+
+    ObjectAction getObjectAction();
+}
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHidden.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHidden.java
index 17bed097a6..8b4852ec24 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHidden.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHidden.java
@@ -1,16 +1,28 @@
+/*
+ *  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 java.util.Map;
-
 import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.causeway.core.metamodel.interactions.InteractionUtils;
-import 
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
 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.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.causeway.viewer.graphql.model.types.ScalarMapper;
 
 import lombok.extern.log4j.Log4j2;
@@ -65,9 +77,9 @@ public class GqlvActionHidden {
 
         Object source = dataFetchingEnvironment.getSource();
         Object domainObjectInstance;
-        if (source instanceof GqlvAction.Fetcher) {
-            GqlvAction.Fetcher fetcher = (GqlvAction.Fetcher) source;
-            domainObjectInstance = fetcher.getTargetPojo();
+        if (source instanceof BookmarkedPojo) {
+            BookmarkedPojo fetched = (BookmarkedPojo) source;
+            domainObjectInstance = fetched.getTargetPojo();
         } else {
             domainObjectInstance = source;
         }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHiddenHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHiddenHolder.java
index dd809e76b9..a13414ea92 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHiddenHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHiddenHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHolder.java
index 00293a11be..c974fc4c5d 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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;
 
 public interface GqlvActionHolder extends GqlvMemberHolder {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
index 9c38a70313..d7f0b0f3fe 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvoke.java
@@ -1,3 +1,21 @@
+/*
+ *  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.Scalars;
@@ -156,9 +174,9 @@ public class GqlvActionInvoke {
 
         Object source = dataFetchingEnvironment.getSource();
         Object domainObjectInstance;
-        if (source instanceof GqlvAction.Fetcher) {
-            GqlvAction.Fetcher fetcher = (GqlvAction.Fetcher) source;
-            domainObjectInstance = fetcher.getTargetPojo();
+        if (source instanceof BookmarkedPojo) {
+            BookmarkedPojo fetched = (BookmarkedPojo) source;
+            domainObjectInstance = fetched.getTargetPojo();
         } else {
             domainObjectInstance = source;
         }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeHolder.java
index d32aafe916..d8d91cfb70 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParameter.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParameter.java
index c9fc9ba227..1ce04b922d 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParameter.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionParameter.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.apache.causeway.core.metamodel.spec.ObjectSpecification;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
index f3bf1fdd29..a869efcc02 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.apache.causeway.applib.services.metamodel.BeanSort;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationHolder.java
index 55b018ca64..5edfb3b083 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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;
 
 public interface GqlvAssociationHolder extends GqlvMemberHolder {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
index d751cbf17c..1a04a8dfbb 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.springframework.lang.Nullable;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionHolder.java
index ccb0e14306..b35649e084 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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;
 
 public interface GqlvCollectionHolder extends GqlvAssociationHolder {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
index 3852eb200b..b2885fd538 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
@@ -1,3 +1,21 @@
+/*
+ *  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 java.util.Map;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
index 57289a0bf7..913b55d476 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
@@ -1,3 +1,21 @@
+/*
+ *  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 java.util.ArrayList;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvHolder.java
index b181010d9f..c078fe6699 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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.FieldCoordinates;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
index de9373744d..0a6188bfdd 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
index 49a67c8337..a342c617f7 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.apache.causeway.core.metamodel.spec.ObjectSpecification;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
index b112514901..4b2de8e15a 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
@@ -1,3 +1,21 @@
+/*
+ *  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 java.util.Objects;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
index f18041f874..14244c9ae7 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMetaHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.apache.causeway.core.metamodel.spec.ObjectSpecification;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
index 993cac2af1..02c783ffa4 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutations.java
@@ -1,13 +1,27 @@
+/*
+ *  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 java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
-import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
@@ -66,7 +80,6 @@ public class GqlvMutations implements GqlvActionHolder {
     }
 
     public void addAction(final ObjectAction objectAction) {
-//        actionSimples.add(new GqlvActionSimple(this, objectAction, 
codeRegistryBuilder));
         String actionId = objectAction.getId();
         if (!actions.containsKey(actionId)) {
             actions.put(actionId, new GqlvAction(this, objectAction, 
codeRegistryBuilder, bookmarkService));
@@ -75,7 +88,6 @@ public class GqlvMutations implements GqlvActionHolder {
 
 
     boolean hasActions() {
-//        return !actionSimples.isEmpty();
         return !actions.isEmpty();
     }
 
@@ -115,7 +127,7 @@ public class GqlvMutations implements GqlvActionHolder {
                     holder.coordinatesFor(fieldIfAny.get()),
                     (DataFetcher<Object>) environment ->
                         bookmarkService.bookmarkFor(environment.getSource())
-                            .map(bookmark -> new Fetcher(bookmark, 
bookmarkService))
+                            .map(bookmark -> new BookmarkedPojo(bookmark, 
bookmarkService))
                             .orElseThrow());
 
             actions.forEach((id, gqlvAction) -> gqlvAction.addDataFetcher());
@@ -137,21 +149,4 @@ public class GqlvMutations implements GqlvActionHolder {
     }
 
 
-    static class Fetcher {
-
-        private final Bookmark bookmark;
-        private final BookmarkService bookmarkService;
-
-        public Fetcher(
-                final Bookmark bookmark,
-                final BookmarkService bookmarkService) {
-
-            this.bookmark = bookmark;
-            this.bookmarkService = bookmarkService;
-        }
-
-        public Object getTargetPojo() {
-            return bookmarkService.lookup(bookmark).orElseThrow();
-        }
-    }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationsHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationsHolder.java
index 5d3b578961..3ec91ec829 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationsHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationsHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.apache.causeway.core.metamodel.spec.ObjectSpecification;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
index 79edd55f49..6f84b1a289 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
@@ -1,3 +1,21 @@
+/*
+ *  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 org.springframework.lang.Nullable;
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyHolder.java
index 55e319d8b7..956c663d39 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyHolder.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyHolder.java
@@ -1,3 +1,21 @@
+/*
+ *  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;
 
 public interface GqlvPropertyHolder extends GqlvAssociationHolder {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/registry/GraphQLTypeRegistry.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/registry/GraphQLTypeRegistry.java
index 762073c497..9442e40b70 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/registry/GraphQLTypeRegistry.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/registry/GraphQLTypeRegistry.java
@@ -1,3 +1,21 @@
+/*
+ *  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.registry;
 
 import graphql.schema.GraphQLInputObjectType;
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DepartmentMenu.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DepartmentMenu.java
index a909ff9e26..09dbd22060 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DepartmentMenu.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DepartmentMenu.java
@@ -65,4 +65,12 @@ public class DepartmentMenu {
     public void adminAction() {
     }
 
+
+    @Action(semantics = SemanticsOf.NON_IDEMPOTENT)
+    public void otherAdminAction() {
+    }
+    public String disableOtherAdminAction() {
+        return "yup, disabled!";
+    }
+
 }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.create_department._.gql
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.create_department._.gql
index 3b85bd7cb3..b26a4834f9 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.create_department._.gql
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.create_department._.gql
@@ -3,6 +3,7 @@
     _gql_mutations {
       createDepartment {
         hidden
+        disabled
         invoke(name: "newbie") {
           name
         }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.create_department.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.create_department.approved.json
index 35b4dc5693..95c54dba70 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.create_department.approved.json
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.create_department.approved.json
@@ -4,6 +4,7 @@
       "_gql_mutations" : {
         "createDepartment" : {
           "hidden" : false,
+          "disabled" : null,
           "invoke" : {
             "name" : "newbie"
           }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.java
index e1670609e5..fbb2615bca 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.java
@@ -120,6 +120,17 @@ public class Domain_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTestAb
         Approvals.verify(response, jsonOptions());
     }
 
+    @Test
+    @UseReporter(DiffReporter.class)
+    void other_admin_action() throws Exception {
+
+        // when
+        val response = submit();
+
+        // then payload
+        Approvals.verify(response, jsonOptions());
+    }
+
     @Test
     @UseReporter(DiffReporter.class)
     void find_department_and_change_name() throws Exception {
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.other_admin_action._.gql
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.other_admin_action._.gql
new file mode 100644
index 0000000000..81139b4a7f
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.other_admin_action._.gql
@@ -0,0 +1,9 @@
+{
+  university_dept_DepartmentMenu {
+    _gql_mutations {
+      otherAdminAction {
+        disabled
+      }
+    }
+  }
+}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.other_admin_action.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.other_admin_action.approved.json
new file mode 100644
index 0000000000..7c44bc3a62
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Domain_IntegTest.other_admin_action.approved.json
@@ -0,0 +1,11 @@
+{
+  "data" : {
+    "university_dept_DepartmentMenu" : {
+      "_gql_mutations" : {
+        "otherAdminAction" : {
+          "disabled" : "yup, disabled!"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
index b099eba70f..6dd845c48d 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema.approved.json
@@ -1476,6 +1476,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -1956,6 +1967,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -2144,6 +2166,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -2332,6 +2365,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -2605,6 +2649,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -4221,6 +4276,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5083,6 +5149,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5276,6 +5353,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5307,6 +5395,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5364,6 +5463,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5408,6 +5518,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5452,6 +5573,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5544,6 +5676,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5713,6 +5856,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5757,6 +5911,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5801,6 +5966,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5845,6 +6021,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -5920,6 +6107,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6056,6 +6254,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6131,6 +6340,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6175,6 +6395,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6322,6 +6553,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6397,6 +6639,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6553,6 +6806,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6584,6 +6848,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6616,17 +6891,28 @@
           "isDeprecated" : false,
           "deprecationReason" : null
         }, {
-          "name" : "invoke",
+          "name" : "disabled",
           "description" : null,
           "args" : [ ],
           "type" : {
-            "kind" : "OBJECT",
-            "name" : "java_util_concurrent_Callable",
+            "kind" : "SCALAR",
+            "name" : "String",
             "ofType" : null
           },
           "isDeprecated" : false,
           "deprecationReason" : null
-        } ],
+        }, {
+          "name" : "invoke",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "OBJECT",
+            "name" : "java_util_concurrent_Callable",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
+        } ],
         "inputFields" : null,
         "interfaces" : [ ],
         "enumValues" : null,
@@ -6646,6 +6932,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6738,6 +7035,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6795,6 +7103,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6839,6 +7158,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -6883,6 +7213,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7217,6 +7558,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7248,6 +7600,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7292,6 +7655,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7323,6 +7697,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7367,6 +7752,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7411,6 +7807,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7442,6 +7849,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7486,6 +7904,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7530,6 +7959,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7574,6 +8014,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7618,6 +8069,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7662,6 +8124,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7719,6 +8192,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7763,6 +8247,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7807,6 +8302,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -7851,6 +8357,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -8118,6 +8635,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -8337,6 +8865,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -8368,6 +8907,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -8421,6 +8971,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -8467,6 +9028,59 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "otherAdminAction",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "OBJECT",
+            "name" : "university_dept_DepartmentMenu__otherAdminAction",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
+        } ],
+        "inputFields" : null,
+        "interfaces" : [ ],
+        "enumValues" : null,
+        "possibleTypes" : null
+      }, {
+        "kind" : "OBJECT",
+        "name" : "university_dept_DepartmentMenu__otherAdminAction",
+        "description" : null,
+        "fields" : [ {
+          "name" : "hidden",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "Boolean",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
+        }, {
+          "name" : "invoke",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         } ],
         "inputFields" : null,
         "interfaces" : [ ],
@@ -8643,6 +9257,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -8678,6 +9303,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -8722,6 +9358,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
@@ -8766,6 +9413,17 @@
           },
           "isDeprecated" : false,
           "deprecationReason" : null
+        }, {
+          "name" : "disabled",
+          "description" : null,
+          "args" : [ ],
+          "type" : {
+            "kind" : "SCALAR",
+            "name" : "String",
+            "ofType" : null
+          },
+          "isDeprecated" : false,
+          "deprecationReason" : null
         }, {
           "name" : "invoke",
           "description" : null,
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema_types_name.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema_types_name.approved.json
index cbc1a2c9b9..6b78684462 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema_types_name.approved.json
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Schema_IntegTest.schema_types_name.approved.json
@@ -401,6 +401,8 @@
         "name" : "university_dept_DepartmentMenu__findAllDepartments"
       }, {
         "name" : "university_dept_DepartmentMenu__gql_mutations"
+      }, {
+        "name" : "university_dept_DepartmentMenu__otherAdminAction"
       }, {
         "name" : "university_dept_Department__gql_input"
       }, {
diff --git a/incubator/viewers/graphql/test/src/test/resources/schema.gql 
b/incubator/viewers/graphql/test/src/test/resources/schema.gql
index 4525375ec6..f9b0cfed43 100644
--- a/incubator/viewers/graphql/test/src/test/resources/schema.gql
+++ b/incubator/viewers/graphql/test/src/test/resources/schema.gql
@@ -84,6 +84,7 @@ type causeway_applib_PropertyNode__gql_mutations {
 }
 
 type causeway_applib_PropertyNode__streamChildNodes {
+  disabled: String
   hidden: Boolean
   invoke: java_util_stream_Stream
 }
@@ -134,6 +135,7 @@ type causeway_applib_UserMenu {
 }
 
 type causeway_applib_UserMenu__me {
+  disabled: String
   hidden: Boolean
   invoke: causeway_applib_UserMemento
 }
@@ -156,6 +158,7 @@ type causeway_applib_node_ActionNode__gql_mutations {
 }
 
 type causeway_applib_node_ActionNode__streamChildNodes {
+  disabled: String
   hidden: Boolean
   invoke: java_util_stream_Stream
 }
@@ -178,6 +181,7 @@ type causeway_applib_node_CollectionNode__gql_mutations {
 }
 
 type causeway_applib_node_CollectionNode__streamChildNodes {
+  disabled: String
   hidden: Boolean
   invoke: java_util_stream_Stream
 }
@@ -209,6 +213,7 @@ type causeway_conf_ConfigurationMenu {
 }
 
 type causeway_conf_ConfigurationMenu__configuration {
+  disabled: String
   hidden: Boolean
   invoke: causeway_conf_ConfigurationViewmodel
 }
@@ -363,6 +368,7 @@ type causeway_security_LogoutMenu {
 }
 
 type causeway_security_LogoutMenu__logout {
+  disabled: String
   hidden: Boolean
   invoke: String
 }
@@ -459,6 +465,7 @@ type org_apache_causeway_commons_functional_Either {
 }
 
 type org_apache_causeway_commons_functional_Either__accept {
+  disabled: String
   hidden: Boolean
   invoke(leftConsumer: java_util_function_Consumer__gql_input!, rightConsumer: 
java_util_function_Consumer__gql_input!): String
 }
@@ -478,26 +485,31 @@ type 
org_apache_causeway_commons_functional_Either__gql_mutations {
 }
 
 type org_apache_causeway_commons_functional_Either__left {
+  disabled: String
   hidden: Boolean
   invoke: String
 }
 
 type org_apache_causeway_commons_functional_Either__map {
+  disabled: String
   hidden: Boolean
   invoke(leftMapper: java_util_function_Function__gql_input!, rightMapper: 
java_util_function_Function__gql_input!): 
org_apache_causeway_commons_functional_Either
 }
 
 type org_apache_causeway_commons_functional_Either__mapLeft {
+  disabled: String
   hidden: Boolean
   invoke(leftMapper: java_util_function_Function__gql_input!): 
org_apache_causeway_commons_functional_Either
 }
 
 type org_apache_causeway_commons_functional_Either__mapRight {
+  disabled: String
   hidden: Boolean
   invoke(rightMapper: java_util_function_Function__gql_input!): 
org_apache_causeway_commons_functional_Either
 }
 
 type org_apache_causeway_commons_functional_Either__right {
+  disabled: String
   hidden: Boolean
   invoke: String
 }
@@ -510,6 +522,7 @@ type org_apache_causeway_commons_functional_Railway {
 }
 
 type org_apache_causeway_commons_functional_Railway__chain {
+  disabled: String
   hidden: Boolean
   invoke(chainingFunction: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Railway
 }
@@ -528,21 +541,25 @@ type 
org_apache_causeway_commons_functional_Railway__gql_mutations {
 }
 
 type org_apache_causeway_commons_functional_Railway__ifFailure {
+  disabled: String
   hidden: Boolean
   invoke(failureConsumer: 
org_apache_causeway_commons_functional_ThrowingConsumer__gql_input!): 
org_apache_causeway_commons_functional_Railway
 }
 
 type org_apache_causeway_commons_functional_Railway__ifSuccess {
+  disabled: String
   hidden: Boolean
   invoke(successConsumer: 
org_apache_causeway_commons_functional_ThrowingConsumer__gql_input!): 
org_apache_causeway_commons_functional_Railway
 }
 
 type org_apache_causeway_commons_functional_Railway__mapFailure {
+  disabled: String
   hidden: Boolean
   invoke(failureMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Railway
 }
 
 type org_apache_causeway_commons_functional_Railway__mapSuccess {
+  disabled: String
   hidden: Boolean
   invoke(successMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Railway
 }
@@ -553,6 +570,7 @@ type 
org_apache_causeway_commons_functional_ThrowingConsumer {
 }
 
 type org_apache_causeway_commons_functional_ThrowingConsumer__andThen {
+  disabled: String
   hidden: Boolean
   invoke(arg0: java_util_function_Consumer__gql_input!): 
java_util_function_Consumer
 }
@@ -568,6 +586,7 @@ type 
org_apache_causeway_commons_functional_ThrowingConsumer__gql_mutations {
 }
 
 type org_apache_causeway_commons_functional_ThrowingConsumer__throwing {
+  disabled: String
   hidden: Boolean
   invoke(exceptionWrapper: java_util_function_BiFunction__gql_input!): 
org_apache_causeway_commons_functional_ThrowingConsumer
 }
@@ -578,11 +597,13 @@ type 
org_apache_causeway_commons_functional_ThrowingFunction {
 }
 
 type org_apache_causeway_commons_functional_ThrowingFunction__andThen {
+  disabled: String
   hidden: Boolean
   invoke(arg0: java_util_function_Function__gql_input!): 
java_util_function_Function
 }
 
 type org_apache_causeway_commons_functional_ThrowingFunction__compose {
+  disabled: String
   hidden: Boolean
   invoke(arg0: java_util_function_Function__gql_input!): 
java_util_function_Function
 }
@@ -599,6 +620,7 @@ type 
org_apache_causeway_commons_functional_ThrowingFunction__gql_mutations {
 }
 
 type org_apache_causeway_commons_functional_ThrowingFunction__throwing {
+  disabled: String
   hidden: Boolean
   invoke(exceptionWrapper: java_util_function_BiFunction__gql_input!): 
org_apache_causeway_commons_functional_ThrowingFunction
 }
@@ -609,6 +631,7 @@ type 
org_apache_causeway_commons_functional_ThrowingRunnable {
 }
 
 type org_apache_causeway_commons_functional_ThrowingRunnable__callUncatched {
+  disabled: String
   hidden: Boolean
   invoke: String
 }
@@ -627,21 +650,25 @@ type 
org_apache_causeway_commons_functional_ThrowingRunnable__gql_mutations {
 }
 
 type org_apache_causeway_commons_functional_ThrowingRunnable__run {
+  disabled: String
   hidden: Boolean
   invoke: String
 }
 
 type org_apache_causeway_commons_functional_ThrowingRunnable__runUncatched {
+  disabled: String
   hidden: Boolean
   invoke: String
 }
 
 type org_apache_causeway_commons_functional_ThrowingRunnable__toCallable {
+  disabled: String
   hidden: Boolean
   invoke: java_util_concurrent_Callable
 }
 
 type org_apache_causeway_commons_functional_ThrowingRunnable__toRunnable {
+  disabled: String
   hidden: Boolean
   invoke: java_lang_Runnable
 }
@@ -654,21 +681,25 @@ type org_apache_causeway_commons_functional_Try {
 }
 
 type org_apache_causeway_commons_functional_Try__accept {
+  disabled: String
   hidden: Boolean
   invoke(failureConsumer: 
org_apache_causeway_commons_functional_ThrowingConsumer__gql_input!, 
successConsumer: 
org_apache_causeway_commons_functional_ThrowingConsumer__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__flatMapSuccess {
+  disabled: String
   hidden: Boolean
   invoke(successMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__flatMapSuccessAsNullable {
+  disabled: String
   hidden: Boolean
   invoke(successMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__flatMapSuccessWhenPresent {
+  disabled: String
   hidden: Boolean
   invoke(successMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
@@ -702,81 +733,97 @@ type 
org_apache_causeway_commons_functional_Try__gql_mutations {
 }
 
 type org_apache_causeway_commons_functional_Try__ifAbsentFail {
+  disabled: String
   hidden: Boolean
   invoke: org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__ifFailure {
+  disabled: String
   hidden: Boolean
   invoke(exceptionConsumer: 
org_apache_causeway_commons_functional_ThrowingConsumer__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__ifFailureFail {
+  disabled: String
   hidden: Boolean
   invoke: org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__ifSuccess {
+  disabled: String
   hidden: Boolean
   invoke(valueConsumer: 
org_apache_causeway_commons_functional_ThrowingConsumer__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__ifSuccessAsNullable {
+  disabled: String
   hidden: Boolean
   invoke(valueConsumer: 
org_apache_causeway_commons_functional_ThrowingConsumer__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__mapEmptyToFailure {
+  disabled: String
   hidden: Boolean
   invoke: org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__mapFailure {
+  disabled: String
   hidden: Boolean
   invoke(failureMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__mapFailureToSuccess {
+  disabled: String
   hidden: Boolean
   invoke(recoveryMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__mapSuccess {
+  disabled: String
   hidden: Boolean
   invoke(successMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__mapSuccessAsNullable {
+  disabled: String
   hidden: Boolean
   invoke(successMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__mapSuccessWhenPresent {
+  disabled: String
   hidden: Boolean
   invoke(successMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__mapToEither {
+  disabled: String
   hidden: Boolean
   invoke(failureMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!, 
successMapper: 
org_apache_causeway_commons_functional_ThrowingFunction__gql_input!): 
org_apache_causeway_commons_functional_Either
 }
 
 type org_apache_causeway_commons_functional_Try__orCall {
+  disabled: String
   hidden: Boolean
   invoke(fallback: java_util_concurrent_Callable__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__then {
+  disabled: String
   hidden: Boolean
   invoke(next: java_util_concurrent_Callable__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__thenCall {
+  disabled: String
   hidden: Boolean
   invoke(callable: java_util_concurrent_Callable__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
 
 type org_apache_causeway_commons_functional_Try__thenRun {
+  disabled: String
   hidden: Boolean
   invoke(runnable: 
org_apache_causeway_commons_functional_ThrowingRunnable__gql_input!): 
org_apache_causeway_commons_functional_Try
 }
@@ -807,6 +854,7 @@ type 
org_apache_causeway_core_metamodel_inspect_model_MemberNode__gql_mutations
 }
 
 type 
org_apache_causeway_core_metamodel_inspect_model_MemberNode__streamChildNodes {
+  disabled: String
   hidden: Boolean
   invoke: java_util_stream_Stream
 }
@@ -834,16 +882,19 @@ type university_dept_DepartmentMenu {
 }
 
 type university_dept_DepartmentMenu__adminAction {
+  disabled: String
   hidden: Boolean
   invoke: String
 }
 
 type university_dept_DepartmentMenu__createDepartment {
+  disabled: String
   hidden: Boolean
   invoke(deptHead: university_dept_DeptHead__gql_input, name: String!): 
university_dept_Department
 }
 
 type university_dept_DepartmentMenu__findAllDepartments {
+  disabled: String
   hidden: Boolean
   invoke: [university_dept_Department]
 }
@@ -851,6 +902,13 @@ type university_dept_DepartmentMenu__findAllDepartments {
 type university_dept_DepartmentMenu__gql_mutations {
   adminAction: university_dept_DepartmentMenu__adminAction
   createDepartment: university_dept_DepartmentMenu__createDepartment
+  otherAdminAction: university_dept_DepartmentMenu__otherAdminAction
+}
+
+type university_dept_DepartmentMenu__otherAdminAction {
+  disabled: String
+  hidden: Boolean
+  invoke: String
 }
 
 type university_dept_Department__gql_meta {
@@ -872,21 +930,25 @@ type university_dept_DeptHeadMenu {
 }
 
 type university_dept_DeptHeadMenu__findAllDeptHeads {
+  disabled: String
   hidden: Boolean
   invoke: [university_dept_DeptHead]
 }
 
 type university_dept_DeptHeadMenu__findDeptHeadByName {
+  disabled: String
   hidden: Boolean
   invoke(name: String!): university_dept_DeptHead
 }
 
 type university_dept_DeptHead__changeDepartment {
+  disabled: String
   hidden: Boolean
   invoke(department: university_dept_Department__gql_input!): 
university_dept_DeptHead
 }
 
 type university_dept_DeptHead__changeName {
+  disabled: String
   hidden: Boolean
   invoke(newName: String!): university_dept_DeptHead
 }

Reply via email to