You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/11/30 07:38:56 UTC

[isis] branch master updated: ISIS-2904: housekeeping: rename ActionType -> ActionScope

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new cecb199  ISIS-2904: housekeeping: rename ActionType -> ActionScope
cecb199 is described below

commit cecb19985593ba4695ecf34c2e4b0908d7a56e31
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Nov 30 08:36:59 2021 +0100

    ISIS-2904: housekeeping: rename ActionType -> ActionScope
---
 .../actions/action/ActionOverloadingValidator.java |  4 +--
 .../ObjectSpecificationPostProcessorAbstract.java  | 13 ++--------
 ...ectionParamDefaultsAndChoicesPostProcessor.java |  4 +--
 .../spec/{ActionType.java => ActionScope.java}     | 22 ++++++++++------
 .../core/metamodel/spec/feature/ObjectAction.java  |  6 ++---
 .../spec/feature/ObjectActionContainer.java        | 30 +++++++++++-----------
 .../spec/feature/memento/ActionMemento.java        |  4 +--
 .../specloader/specimpl/ObjectActionDefault.java   | 14 +++++-----
 .../specloader/specimpl/ObjectMemberContainer.java |  6 ++---
 .../specimpl/ObjectSpecificationAbstract.java      | 18 ++++++-------
 .../specimpl/dflt/ObjectSpecificationDefault.java  |  6 ++---
 .../testspec/ObjectSpecificationStub.java          | 16 +++++-------
 .../menubars/bootstrap3/MenuBarsServiceBS3.java    |  8 +++---
 .../sitemap/SitemapServiceDefault.java             |  6 ++---
 .../rendering/service/swagger/internal/Util.java   | 11 ++++----
 .../wicket/model/models/ScalarParameterModel.java  |  4 +--
 .../wicket/model/util/PageParameterUtils.java      |  4 +--
 17 files changed, 83 insertions(+), 93 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionOverloadingValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionOverloadingValidator.java
index f2e7ad3..876d65d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionOverloadingValidator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionOverloadingValidator.java
@@ -23,7 +23,7 @@ import javax.inject.Inject;
 import org.apache.isis.applib.services.metamodel.BeanSort;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelVisitingValidatorAbstract;
@@ -56,7 +56,7 @@ extends MetaModelVisitingValidatorAbstract {
 
             val overloadedNames = _Sets.<String>newHashSet();
 
-            spec.streamActions(ActionType.ANY, MixedIn.EXCLUDED, oa->{
+            spec.streamActions(ActionScope.ANY, MixedIn.EXCLUDED, oa->{
                 overloadedNames.add(oa.getFeatureIdentifier().getMemberLogicalName());
             })
             .count(); // consumer the stream
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
index 98b9954..6054df4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/ObjectSpecificationPostProcessorAbstract.java
@@ -18,12 +18,10 @@
  */
 package org.apache.isis.core.metamodel.postprocessors;
 
-import org.apache.isis.commons.collections.ImmutableEnumSet;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.HasFacetHolder;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.spec.ActionType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -53,14 +51,13 @@ implements ObjectSpecificationPostProcessor {
 
         doPostProcess(objectSpecification);
 
-        val actionTypes = inferActionTypes();
-        objectSpecification.streamActions(actionTypes, MixedIn.INCLUDED)
+        objectSpecification.streamRuntimeActions(MixedIn.INCLUDED)
                 .forEach(objectAction -> {
                     objectAction.streamParameters()
                     .forEach(param -> doPostProcess(objectSpecification, objectAction, param));
                 });
 
-        objectSpecification.streamActions(actionTypes, MixedIn.INCLUDED)
+        objectSpecification.streamRuntimeActions(MixedIn.INCLUDED)
                 .forEach(act -> doPostProcess(objectSpecification, act));
 
         objectSpecification.streamProperties(MixedIn.INCLUDED).
@@ -77,12 +74,6 @@ implements ObjectSpecificationPostProcessor {
     protected abstract void doPostProcess(ObjectSpecification objectSpecification, OneToOneAssociation prop);
     protected abstract void doPostProcess(ObjectSpecification objectSpecification, OneToManyAssociation coll);
 
-    protected final ImmutableEnumSet<ActionType> inferActionTypes() {
-        return getMetaModelContext().getSystemEnvironment().isPrototyping()
-                ? ActionType.USER_AND_PROTOTYPE
-                : ActionType.USER_ONLY;
-    }
-
     protected static FacetedMethod facetedMethodFor(final ObjectMember objectMember) {
         // TODO: hacky, need to copy facet onto underlying peer, not to the action/association itself.
         val objectMemberImpl = (ObjectMemberAbstract) objectMember;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/collparam/DeriveCollectionParamDefaultsAndChoicesPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/collparam/DeriveCollectionParamDefaultsAndChoicesPostProcessor.java
index bfb2ca8..02bd1a5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/collparam/DeriveCollectionParamDefaultsAndChoicesPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/collparam/DeriveCollectionParamDefaultsAndChoicesPostProcessor.java
@@ -66,8 +66,6 @@ extends ObjectSpecificationPostProcessorAbstract {
     @Override
     protected void doPostProcess(final ObjectSpecification objectSpecification, final OneToManyAssociation collection) {
 
-        val actionTypes = inferActionTypes();
-
         // ... see if any of its actions has a collection parameter of the same type
         //
         // eg Order#getItems() and Order#removeItems(List<OrderItem>)
@@ -80,7 +78,7 @@ extends ObjectSpecificationPostProcessorAbstract {
         final ObjectActionParameter.Predicates.ScalarParameter whetherScalarParamOfType =
                 new ObjectActionParameter.Predicates.ScalarParameter(specification);
 
-        objectSpecification.streamActions(actionTypes, MixedIn.INCLUDED)
+        objectSpecification.streamRuntimeActions(MixedIn.INCLUDED)
         .filter(ObjectAction.Predicates.choicesFromAndHavingCollectionParameterFor(collection))
         .forEach(action->{
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionScope.java
similarity index 62%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionScope.java
index baccac5..344d27a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionType.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ActionScope.java
@@ -19,24 +19,30 @@
 package org.apache.isis.core.metamodel.spec;
 
 import org.apache.isis.commons.collections.ImmutableEnumSet;
+import org.apache.isis.core.config.environment.IsisSystemEnvironment;
 
-public enum ActionType {
-    USER,
+public enum ActionScope {
+    PRODUCTION,
     PROTOTYPE;
 
     public String getName() {
         return name();
     }
 
+    public boolean isProduction() {
+        return this == PRODUCTION;
+    }
+
     public boolean isPrototype() {
         return this == PROTOTYPE;
     }
 
-    public boolean isUser() {
-        return this == USER;
-    }
+    public static final ImmutableEnumSet<ActionScope> PRODUCTION_ONLY = ImmutableEnumSet.of(ActionScope.PRODUCTION);
+    public static final ImmutableEnumSet<ActionScope> ANY = ImmutableEnumSet.allOf(ActionScope.class);
 
-    public static final ImmutableEnumSet<ActionType> USER_ONLY = ImmutableEnumSet.of(ActionType.USER);
-    public static final ImmutableEnumSet<ActionType> USER_AND_PROTOTYPE = ImmutableEnumSet.of(ActionType.USER, ActionType.PROTOTYPE);
-    public static final ImmutableEnumSet<ActionType> ANY = ImmutableEnumSet.allOf(ActionType.class);
+    public static ImmutableEnumSet<ActionScope> forEnvironment(final IsisSystemEnvironment systemEnvironment) {
+        return systemEnvironment.isPrototyping()
+            ? ActionScope.ANY
+            : ActionScope.PRODUCTION_ONLY;
+    }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index 51d890a..a26b920 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -46,7 +46,7 @@ import org.apache.isis.core.metamodel.facets.members.layout.group.LayoutGroupFac
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.interactions.InteractionHead;
 import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -73,7 +73,7 @@ public interface ObjectAction extends ObjectMember {
         && ObjectAction.Util.isNoParameters(this);
     }
 
-    ActionType getType();
+    ActionScope getType();
 
     boolean isPrototype();
 
@@ -354,7 +354,7 @@ public interface ObjectAction extends ObjectMember {
 
     public static final class Predicates {
 
-        public static Predicate<ObjectAction> ofActionType(final ActionType type) {
+        public static Predicate<ObjectAction> ofActionType(final ActionScope type) {
             return (final ObjectAction oa) -> oa.getType() == type;
         }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
index 6e1fc48..9853554 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionContainer.java
@@ -27,25 +27,25 @@ import org.springframework.lang.Nullable;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.commons.collections.ImmutableEnumSet;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 
 public interface ObjectActionContainer {
 
     // -- ACTION LOOKUP (INHERITANCE CONSIDERED)
 
     /**
-     * Similar to {@link #getDeclaredAction(String, ActionType)},
+     * Similar to {@link #getDeclaredAction(String, ActionScope)},
      * but also considering any inherited object members. (mixed-in included)
      * @param id
      * @param type
      *
      * @implSpec If not found on the current 'type' search for the 'nearest' match in super-types,
      * and if nothing found there, search the interfaces. Special care needs to be taken, as the
-     * {@link ActionType} might be redeclared when inheriting from a super-type or interface.
+     * {@link ActionScope} might be redeclared when inheriting from a super-type or interface.
      */
-    Optional<ObjectAction> getAction(String id, @Nullable ActionType type);
+    Optional<ObjectAction> getAction(String id, @Nullable ActionScope type);
 
-    default ObjectAction getActionElseFail(String id, @Nullable ActionType type) {
+    default ObjectAction getActionElseFail(String id, @Nullable ActionScope type) {
         return getAction(id, type)
                 .orElseThrow(()->_Exceptions.noSuchElement("id=%s type=%s",
                         id,
@@ -72,12 +72,12 @@ public interface ObjectActionContainer {
      *
      * @see #getDeclaredAction(String)
      */
-    Optional<ObjectAction> getDeclaredAction(String id, @Nullable ActionType type);
+    Optional<ObjectAction> getDeclaredAction(String id, @Nullable ActionScope type);
 
     /**
-     * Shortcut to {@link #getDeclaredAction(String, ActionType)} with {@code ActionType = null},
+     * Shortcut to {@link #getDeclaredAction(String, ActionScope)} with {@code ActionType = null},
      * meaning where action type is <i>any</i>.
-     * @see #getDeclaredAction(String, ActionType)
+     * @see #getDeclaredAction(String, ActionScope)
      */
     default Optional<ObjectAction> getDeclaredAction(String id) {
         return getDeclaredAction(id, null);
@@ -92,7 +92,7 @@ public interface ObjectActionContainer {
      * @param onActionOverloaded - callback on overloaded action detected
      */
     Stream<ObjectAction> streamActions(
-            ImmutableEnumSet<ActionType> actionTypes,
+            ImmutableEnumSet<ActionScope> actionTypes,
             MixedIn mixedIn,
             Consumer<ObjectAction> onActionOverloaded);
 
@@ -102,7 +102,7 @@ public interface ObjectActionContainer {
      * @param mixedIn - whether to include mixed in actions
      */
     default Stream<ObjectAction> streamActions(
-            ImmutableEnumSet<ActionType> actionTypes,
+            ImmutableEnumSet<ActionScope> actionTypes,
             MixedIn mixedIn) {
         return streamActions(actionTypes, mixedIn, __->{});
     }
@@ -112,7 +112,7 @@ public interface ObjectActionContainer {
      * @param actionType
      * @param mixedIn - whether to include mixed in actions
      */
-    default Stream<ObjectAction> streamActions(ActionType actionType, MixedIn mixedIn) {
+    default Stream<ObjectAction> streamActions(ActionScope actionType, MixedIn mixedIn) {
         return streamActions(ImmutableEnumSet.of(actionType), mixedIn);
     }
 
@@ -121,7 +121,7 @@ public interface ObjectActionContainer {
      * @param mixedIn - whether to include mixed in actions
      */
     default Stream<ObjectAction> streamAnyActions(MixedIn mixedIn) {
-        return streamActions(ActionType.ANY, mixedIn);
+        return streamActions(ActionScope.ANY, mixedIn);
     }
 
     /**
@@ -137,14 +137,14 @@ public interface ObjectActionContainer {
      * Returns an array of actions of the specified type, including or excluding
      * contributed actions as required.
      */
-    Stream<ObjectAction> streamDeclaredActions(ImmutableEnumSet<ActionType> actionTypes, MixedIn mixedIn);
+    Stream<ObjectAction> streamDeclaredActions(ImmutableEnumSet<ActionScope> actionTypes, MixedIn mixedIn);
 
-    default Stream<ObjectAction> streamDeclaredActions(ActionType type, MixedIn mixedIn) {
+    default Stream<ObjectAction> streamDeclaredActions(ActionScope type, MixedIn mixedIn) {
         return streamDeclaredActions(ImmutableEnumSet.of(type), mixedIn);
     }
 
     default Stream<ObjectAction> streamDeclaredActions(MixedIn mixedIn) {
-        return streamDeclaredActions(ActionType.ANY, mixedIn);
+        return streamDeclaredActions(ActionScope.ANY, mixedIn);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionMemento.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionMemento.java
index 16b0927..a220304 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionMemento.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/memento/ActionMemento.java
@@ -22,7 +22,7 @@ import java.io.Serializable;
 import java.util.function.Supplier;
 
 import org.apache.isis.applib.Identifier;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
@@ -50,7 +50,7 @@ public class ActionMemento implements Serializable {
     @Getter private final @NonNull Identifier identifier;
 
     @EqualsAndHashCode.Exclude
-    private final @NonNull ActionType actionType; // not strictly required, but helps with load/unmarshal
+    private final @NonNull ActionScope actionType; // not strictly required, but helps with load/unmarshal
 
     // -- FACTORY
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
index dfc1878..265ad5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -54,7 +54,7 @@ import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 import org.apache.isis.core.metamodel.interactions.VisibilityContext;
 import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -71,8 +71,8 @@ public class ObjectActionDefault
 extends ObjectMemberAbstract
 implements ObjectAction {
 
-    public static ActionType getType(final String typeStr) {
-        final ActionType type = ActionType.valueOf(typeStr);
+    public static ActionScope getType(final String typeStr) {
+        final ActionScope type = ActionScope.valueOf(typeStr);
         if (type == null) {
             throw new IllegalArgumentException();
         }
@@ -147,14 +147,14 @@ implements ObjectAction {
     // -- TYPE
 
     @Override
-    public ActionType getType() {
+    public ActionScope getType() {
         return getType(this);
     }
 
-    private static ActionType getType(final FacetHolder facetHolder) {
+    private static ActionScope getType(final FacetHolder facetHolder) {
         return facetHolder.containsFacet(PrototypeFacet.class)
-            ? ActionType.PROTOTYPE
-            : ActionType.USER;
+            ? ActionScope.PROTOTYPE
+            : ActionScope.PRODUCTION;
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
index 81e271c..0f55786 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberContainer.java
@@ -28,7 +28,7 @@ import org.apache.isis.commons.collections.ImmutableEnumSet;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.Hierarchical;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -62,7 +62,7 @@ implements
     // -- ACTIONS
 
     @Override
-    public Optional<ObjectAction> getAction(final String id, @Nullable final ActionType type) {
+    public Optional<ObjectAction> getAction(final String id, @Nullable final ActionScope type) {
 
         val declaredAction = getDeclaredAction(id); // no inheritance nor type considered
 
@@ -82,7 +82,7 @@ implements
 
     @Override
     public Stream<ObjectAction> streamActions(
-            final ImmutableEnumSet<ActionType> actionTypes,
+            final ImmutableEnumSet<ActionScope> actionTypes,
             final MixedIn mixedIn,
             final Consumer<ObjectAction> onActionOverloaded) {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 3d04e3e..86badb2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -75,7 +75,7 @@ import org.apache.isis.core.metamodel.interactions.InteractionContext;
 import org.apache.isis.core.metamodel.interactions.InteractionUtils;
 import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
 import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -156,7 +156,7 @@ implements ObjectSpecification {
             _Lazy.threadSafe(()->Can.ofCollection(objectActions));
 
     // partitions and caches objectActions by type; updated in sortCacheAndUpdateActions()
-    private final ListMultimap<ActionType, ObjectAction> objectActionsByType =
+    private final ListMultimap<ActionScope, ObjectAction> objectActionsByType =
             _Multimaps.newConcurrentListMultimap();
 
     // -- INTERFACES
@@ -378,7 +378,7 @@ implements ObjectSpecification {
             this.objectActions.addAll(orderedActions);
             unmodifiableActions.clear(); // invalidate
 
-            for (val actionType : ActionType.values()) {
+            for (val actionType : ActionScope.values()) {
                 val objectActionForType = objectActionsByType.getOrElseNew(actionType);
                 objectActionForType.clear();
                 objectActions.stream()
@@ -696,15 +696,13 @@ implements ObjectSpecification {
 
     @Override
     public Stream<ObjectAction> streamRuntimeActions(final MixedIn mixedIn) {
-        val actionTypes = getMetaModelContext().getSystemEnvironment().isPrototyping()
-                ? ActionType.USER_AND_PROTOTYPE
-                : ActionType.USER_ONLY;
-        return streamActions(actionTypes, mixedIn);
+        val actionScopes = ActionScope.forEnvironment(getMetaModelContext().getSystemEnvironment());
+        return streamActions(actionScopes, mixedIn);
     }
 
     @Override
     public Stream<ObjectAction> streamDeclaredActions(
-            final ImmutableEnumSet<ActionType> actionTypes,
+            final ImmutableEnumSet<ActionScope> actionTypes,
             final MixedIn mixedIn) {
         introspectUpTo(IntrospectionState.FULLY_INTROSPECTED);
 
@@ -753,7 +751,7 @@ implements ObjectSpecification {
         }
         val mixinMethodName = mixinFacet.value();
 
-        specification.streamActions(ActionType.ANY, MixedIn.INCLUDED)
+        specification.streamActions(ActionScope.ANY, MixedIn.INCLUDED)
         .filter(_SpecPredicates::isMixedInAssociation)
         .map(ObjectActionDefault.class::cast)
         .map(_MixedInMemberFactory.mixedInAssociation(this, mixinType, mixinMethodName))
@@ -802,7 +800,7 @@ implements ObjectSpecification {
 
         val mixinMethodName = mixinFacet.value();
 
-        mixinSpec.streamActions(ActionType.ANY, MixedIn.EXCLUDED)
+        mixinSpec.streamActions(ActionScope.ANY, MixedIn.EXCLUDED)
         // value types only support constructor mixins
         .filter(this::whenIsValueThenIsAlsoConstructorMixin)
         .filter(_SpecPredicates::isMixedInAction)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 584b50a..0ddc5cf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -49,7 +49,7 @@ import org.apache.isis.core.metamodel.facets.all.named.MemberNamedFacetForStatic
 import org.apache.isis.core.metamodel.facets.object.introspection.IntrospectionPolicyFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.services.classsubstitutor.ClassSubstitutorRegistry;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -263,7 +263,7 @@ implements FacetHolder {
     @Override
     public Optional<ObjectAction> getDeclaredAction(
             final @Nullable String id,
-            final @Nullable ActionType type) {
+            final @Nullable ActionScope type) {
 
         introspectUpTo(IntrospectionState.FULLY_INTROSPECTED);
 
@@ -271,7 +271,7 @@ implements FacetHolder {
                 ? Optional.empty()
                 : streamDeclaredActions(
                         type==null
-                            ? ActionType.ANY
+                            ? ActionScope.ANY
                             : ImmutableEnumSet.of(type),
                         MixedIn.INCLUDED)
                     .filter(action->
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 0153e9a..5a25eb0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -46,7 +46,7 @@ import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacet
 import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
 import org.apache.isis.core.metamodel.interactions.ObjectTitleContext;
 import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
@@ -172,7 +172,7 @@ implements ObjectSpecification {
     }
 
     @Override
-    public Optional<ObjectAction> getDeclaredAction(final String id, final ActionType type) {
+    public Optional<ObjectAction> getDeclaredAction(final String id, final ActionScope type) {
         val nameParmsIdentityString = id.substring(0, id.indexOf('('));
         val action = lookupObjectAction(nameParmsIdentityString);
 
@@ -306,7 +306,7 @@ implements ObjectSpecification {
     }
 
     @Override
-    public Stream<ObjectAction> streamDeclaredActions(final ImmutableEnumSet<ActionType> types, final MixedIn contributed) {
+    public Stream<ObjectAction> streamDeclaredActions(final ImmutableEnumSet<ActionScope> types, final MixedIn contributed) {
         return null;
     }
 
@@ -346,14 +346,14 @@ implements ObjectSpecification {
     }
 
     @Override
-    public Optional<ObjectAction> getAction(final String id, final ActionType type) {
+    public Optional<ObjectAction> getAction(final String id, final ActionScope type) {
         // poorly implemented, inheritance not supported
         return getDeclaredAction(id, type);
     }
 
     @Override
     public Stream<ObjectAction> streamActions(
-            final ImmutableEnumSet<ActionType> types,
+            final ImmutableEnumSet<ActionScope> types,
             final MixedIn contributed,
             final Consumer<ObjectAction> onActionOverloaded) {
         // poorly implemented, inheritance not supported
@@ -374,10 +374,8 @@ implements ObjectSpecification {
 
     @Override
     public Stream<ObjectAction> streamRuntimeActions(final MixedIn mixedIn) {
-        val actionTypes = getMetaModelContext().getSystemEnvironment().isPrototyping()
-                ? ActionType.USER_AND_PROTOTYPE
-                : ActionType.USER_ONLY;
-        return streamActions(actionTypes, mixedIn);
+        val actionScopes = ActionScope.forEnvironment(getMetaModelContext().getSystemEnvironment());
+        return streamActions(actionScopes, mixedIn);
     }
 
     @Override
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3.java
index e227875..370e1d3 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/menubars/bootstrap3/MenuBarsServiceBS3.java
@@ -69,7 +69,7 @@ import org.apache.isis.core.metamodel.facets.members.layout.group.LayoutGroupFac
 import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
 import org.apache.isis.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet;
 import org.apache.isis.core.metamodel.services.grid.GridServiceDefault;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
@@ -324,8 +324,8 @@ implements MenuBarsService {
         .filter(with(menuBarPos))
         .forEach(serviceAdapter->{
 
-            streamServiceActions(serviceAdapter, ActionType.USER).forEach(serviceActions::add);
-            streamServiceActions(serviceAdapter, ActionType.PROTOTYPE).forEach(serviceActions::add);
+            streamServiceActions(serviceAdapter, ActionScope.PRODUCTION).forEach(serviceActions::add);
+            streamServiceActions(serviceAdapter, ActionScope.PROTOTYPE).forEach(serviceActions::add);
 
         });
 
@@ -446,7 +446,7 @@ implements MenuBarsService {
 
     private Stream<ServiceAndAction> streamServiceActions(
             final ManagedObject serviceAdapter,
-            final ActionType actionType) {
+            final ActionScope actionType) {
         final ObjectSpecification serviceSpec = serviceAdapter.getSpecification();
 
         // skip if annotated to not be included in repository menu using @DomainService
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sitemap/SitemapServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sitemap/SitemapServiceDefault.java
index b4d9fce..ff8b028 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sitemap/SitemapServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sitemap/SitemapServiceDefault.java
@@ -43,7 +43,7 @@ import org.apache.isis.applib.services.sitemap.SitemapService;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
@@ -118,7 +118,7 @@ public class SitemapServiceDefault implements SitemapService {
                     val grid = toGrid(actionElementType.getCorrespondingClass(), Style.CURRENT);
                     grid.visit(new Grid.VisitorAdapter() {
                         @Override public void visit(final ActionLayoutData actionLayoutData) {
-                            actionElementType.getAction(actionLayoutData.getId(), ActionType.USER)
+                            actionElementType.getAction(actionLayoutData.getId(), ActionScope.PRODUCTION)
                             .ifPresent(action->{
                                 flushGroupStack.run();
                                 val describedAs = action.getCanonicalDescription()
@@ -177,7 +177,7 @@ public class SitemapServiceDefault implements SitemapService {
     private Optional<ObjectAction> lookupAction(final ServiceActionLayoutData actionLayout) {
         return specificationLoader
         .specForLogicalTypeName(actionLayout.getLogicalTypeName())
-        .map(typeSpec->typeSpec.getAction(actionLayout.getId(), ActionType.USER).orElse(null));
+        .map(typeSpec->typeSpec.getAction(actionLayout.getId(), ActionScope.PRODUCTION).orElse(null));
     }
 
     private Grid toGrid(final Class<?> domainClass, final Style style) {
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Util.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Util.java
index cad1ced..6f53bd2 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Util.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/swagger/internal/Util.java
@@ -29,7 +29,7 @@ import org.apache.isis.commons.collections.ImmutableEnumSet;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
@@ -140,7 +140,7 @@ public final class Util {
             final ObjectSpecification objectSpec,
             final Visibility visibility,
             final ClassExcluder classExcluder) {
-        val actionTypes = actionTypesFor(visibility);
+        val actionTypes = actionScopesFor(visibility);
 
         return objectSpec.streamActions(actionTypes, MixedIn.INCLUDED)
                 .filter(objectAction->
@@ -160,14 +160,13 @@ public final class Util {
         return response;
     }
 
-    static ImmutableEnumSet<ActionType> actionTypesFor(final Visibility visibility) {
+    static ImmutableEnumSet<ActionScope> actionScopesFor(final Visibility visibility) {
         switch (visibility) {
         case PUBLIC:
-            return ActionType.USER_ONLY;
         case PRIVATE:
-            return ActionType.USER_ONLY;
+            return ActionScope.PRODUCTION_ONLY;
         case PRIVATE_WITH_PROTOTYPING:
-            return ActionType.USER_AND_PROTOTYPE;
+            return ActionScope.ANY;
         }
         throw _Exceptions.unmatchedCase(visibility);
     }
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
index 55883e4..c961333 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarParameterModel.java
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.wicket.model.models;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedValue;
 import org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationModel;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.MixedIn;
@@ -98,7 +98,7 @@ implements ParameterUiModel {
 
     @Override
     protected Can<ObjectAction> calcAssociatedActions() {
-        return getScalarTypeSpec().streamActions(ActionType.ANY, MixedIn.INCLUDED)
+        return getScalarTypeSpec().streamActions(ActionScope.ANY, MixedIn.INCLUDED)
                 .collect(Can.toCan());
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java
index cf2186d..f317b7a 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/PageParameterUtils.java
@@ -39,7 +39,7 @@ import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.primitives._Ints;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
-import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ActionScope;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -221,7 +221,7 @@ public class PageParameterUtils {
         val owningLogicalTypeName = PageParameterNames.ACTION_OWNING_SPEC.getStringFrom(pageParameters);
         val owningLogicalType = specLoader.lookupLogicalTypeElseFail(owningLogicalTypeName);
 
-        final ActionType actionType = PageParameterNames.ACTION_TYPE.getEnumFrom(pageParameters, ActionType.class);
+        final ActionScope actionType = PageParameterNames.ACTION_TYPE.getEnumFrom(pageParameters, ActionScope.class);
         final String actionNameParms = PageParameterNames.ACTION_ID.getStringFrom(pageParameters);
 
         val action = specLoader