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

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

commit e59f731f1e08dc7efc63ca033903f0cc27a07146
Author: danhaywood <[email protected]>
AuthorDate: Thu Sep 28 18:51:26 2023 +0100

    CAUSEWAY-3546: adds isEnabled/isDisabled to both ...
    
    ... CommandPublishingFacet and ExecutionPublishingFacet.
    
    The logic previously was always installing a facet, and interpreting its 
existence as enabled
---
 .../action/ActionAnnotationFacetFactory.java       |   4 +-
 .../publish/command/CommandPublishingFacet.java    |   8 +-
 .../command/CommandPublishingFacetAbstract.java    |   4 +-
 .../CommandPublishingFacetForActionAnnotation.java | 101 ++++++++++-------
 ...ishingFacetForActionAnnotationAsConfigured.java |  47 +++++++-
 ...dPublishingFacetForActionFromConfiguration.java |  80 +++++++++++++
 ...ommandPublishingFacetForPropertyAnnotation.java |  75 ++++++++-----
 ...hingFacetForPropertyAnnotationAsConfigured.java |  28 ++++-
 ...blishingFacetForPropertyFromConfiguration.java} |  30 ++++-
 ...onPublishingActionFacetForActionAnnotation.java | 107 ------------------
 ...ActionFacetForActionAnnotationAsConfigured.java |  31 ------
 .../execution/ExecutionPublishingFacet.java        |   5 +-
 .../ExecutionPublishingFacetAbstract.java          |   2 +-
 ...xecutionPublishingFacetForActionAnnotation.java | 124 +++++++++++++++++++++
 ...ishingFacetForActionAnnotationAsConfigured.java |  75 +++++++++++++
 ...nPublishingFacetForActionFromConfiguration.java |  78 +++++++++++++
 ...utionPublishingFacetForPropertyAnnotation.java} |  69 ++++++++----
 ...ingFacetForPropertyAnnotationAsConfigured.java} |  30 ++++-
 ...blishingFacetForPropertyFromConfiguration.java} |  30 ++++-
 ...ertyFacetForPropertyAnnotationAsConfigured.java |  29 -----
 .../property/PropertyAnnotationFacetFactory.java   |   4 +-
 ...tationFacetFactoryTest_executionPublishing.java |  14 +--
 .../FixtureResult.columnOrder.fallback.txt         |   5 +
 23 files changed, 684 insertions(+), 296 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index e1ac1db48d..3a95fd1367 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -40,7 +40,7 @@ import 
org.apache.causeway.core.metamodel.facets.actions.action.typeof.TypeOfFac
 import 
org.apache.causeway.core.metamodel.facets.actions.fileaccept.FileAcceptFacetForActionAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.members.layout.group.LayoutGroupFacetForActionAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForActionAnnotation;
-import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingActionFacetForActionAnnotation;
+import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionAnnotation;
 import 
org.apache.causeway.core.metamodel.specloader.validator.ValidationFailureUtils;
 
 import lombok.val;
@@ -201,7 +201,7 @@ extends FacetFactoryAbstract {
 
         // check for @Action(executionPublishing=...)
         addFacetIfPresent(
-                ExecutionPublishingActionFacetForActionAnnotation
+                ExecutionPublishingFacetForActionAnnotation
                 .create(actionIfAny, getConfiguration(), facetedMethod));      
  // check for @Action(executionPublishing=...)
 
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacet.java
index 1678c328f7..353506e62d 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacet.java
@@ -26,6 +26,7 @@ import 
org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.services.publishing.CommandPublisher;
 
 import lombok.NonNull;
+import lombok.val;
 
 /**
  * Indicates that details of the action invocation or property edit,
@@ -40,9 +41,12 @@ import lombok.NonNull;
  */
 public interface CommandPublishingFacet extends Facet {
 
-    public CommandDtoProcessor getProcessor();
+    CommandDtoProcessor getProcessor();
 
     public static boolean isPublishingEnabled(final @NonNull FacetHolder 
facetHolder) {
-        return facetHolder.containsFacet(CommandPublishingFacet.class);
+        val facet = facetHolder.getFacet(CommandPublishingFacet.class);
+        return facet != null && facet.isEnabled();
     }
+
+    boolean isEnabled();
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetAbstract.java
index 9a524effd3..15bcb0a30d 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetAbstract.java
@@ -31,7 +31,7 @@ public abstract class CommandPublishingFacetAbstract
 extends FacetAbstract
 implements CommandPublishingFacet {
 
-    private static final Class<? extends Facet> type() {
+    private static Class<? extends Facet> type() {
         return CommandPublishingFacet.class;
     }
 
@@ -87,4 +87,6 @@ implements CommandPublishingFacet {
         super.visitAttributes(visitor);
         visitor.accept("dtoProcessor", processor);
     }
+
+
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
index afbb98bad9..26c2cbf3ac 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
@@ -32,7 +32,29 @@ import 
org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanti
 
 import lombok.val;
 
-public class CommandPublishingFacetForActionAnnotation extends 
CommandPublishingFacetAbstract {
+public abstract class CommandPublishingFacetForActionAnnotation extends 
CommandPublishingFacetAbstract {
+
+    static class Enabled extends CommandPublishingFacetForActionAnnotation {
+        Enabled(CommandDtoProcessor processor, FacetHolder holder, 
ServiceInjector servicesInjector) {
+            super(processor, holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class Disabled extends CommandPublishingFacetForActionAnnotation {
+        Disabled(CommandDtoProcessor processor, FacetHolder holder, 
ServiceInjector servicesInjector) {
+            super(processor, holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
 
     public static Optional<CommandPublishingFacet> create(
             final Optional<Action> actionsIfAny,
@@ -48,57 +70,54 @@ public class CommandPublishingFacetForActionAnnotation 
extends CommandPublishing
         .filter(action -> action.commandPublishing() != 
Publishing.NOT_SPECIFIED)
         .<CommandPublishingFacet>map(action -> {
 
-            Publishing commandPublishing = action.commandPublishing();
+            Publishing publishing = action.commandPublishing();
             final Class<? extends CommandDtoProcessor> processorClass = 
action.commandDtoProcessor();
             final CommandDtoProcessor processor = 
newProcessorElseNull(processorClass);
 
             if(processor != null) {
-                commandPublishing = Publishing.ENABLED;
+                publishing = Publishing.ENABLED;
             }
 
-            switch (commandPublishing) {
-            case AS_CONFIGURED:
-                switch (publishingPolicy) {
-                case NONE:
-                    return null;
-                case IGNORE_QUERY_ONLY:
-                case IGNORE_SAFE:
-                    if (hasSafeSemantics(holder)) {
-                        return null;
+            switch (publishing) {
+                case AS_CONFIGURED:
+                    switch (publishingPolicy) {
+                        case NONE:
+                            return new 
CommandPublishingFacetForActionAnnotationAsConfigured.None(holder, 
servicesInjector);
+                        case IGNORE_QUERY_ONLY:
+                        case IGNORE_SAFE:
+                            return hasSafeSemantics(holder)
+                                    ? new 
CommandPublishingFacetForActionAnnotationAsConfigured.IgnoreSafe(holder, 
servicesInjector)
+                                    : new 
CommandPublishingFacetForActionAnnotationAsConfigured.IgnoreSafeYetNot(holder, 
servicesInjector);
+                        case ALL:
+                            return new 
CommandPublishingFacetForActionAnnotationAsConfigured.All(holder, 
servicesInjector);
+                        default:
+                            throw new 
IllegalStateException(String.format("configured commandPublishing policy '%s' 
not recognised", publishingPolicy));
                     }
-                    // else fall through
+                case DISABLED:
+                    return new 
CommandPublishingFacetForActionAnnotation.Disabled(processor, holder, 
servicesInjector);
+                case ENABLED:
+                    return new 
CommandPublishingFacetForActionAnnotation.Enabled(processor, holder, 
servicesInjector);
                 default:
-                    return new 
CommandPublishingFacetForActionAnnotationAsConfigured(
-                            holder, servicesInjector);
-                }
-            case DISABLED:
-                return null;
-            case ENABLED:
-                return new CommandPublishingFacetForActionAnnotation(
-                        processor, holder, servicesInjector);
-            default:
+                    throw new 
IllegalStateException(String.format("commandPublishing '%s' not recognised", 
publishing));
             }
-            throw new IllegalStateException("command '" + commandPublishing + 
"' not recognised");
         })
-
         ,
-
         () -> {
+            // if not specified
             switch (publishingPolicy) {
-            case NONE:
-                return null;
-            case IGNORE_QUERY_ONLY:
-            case IGNORE_SAFE:
-                if (hasSafeSemantics(holder)) {
-                    return null;
-                }
-                // else fall through
-            default:
-                return CommandPublishingFacetFromConfiguration.create(holder, 
servicesInjector);
+                case NONE:
+                    return new 
CommandPublishingFacetForActionFromConfiguration.None(holder, servicesInjector);
+                case IGNORE_QUERY_ONLY:
+                case IGNORE_SAFE:
+                    return hasSafeSemantics(holder)
+                            ? new 
CommandPublishingFacetForActionFromConfiguration.IgnoreSafe(holder, 
servicesInjector)
+                            : new 
CommandPublishingFacetForActionFromConfiguration.IgnoreSafeYetNot(holder, 
servicesInjector);
+                case ALL:
+                    return new 
CommandPublishingFacetForActionFromConfiguration.All(holder, servicesInjector);
+                default:
+                    throw new IllegalStateException(String.format("configured 
commandPublishing policy '%s' not recognised", publishingPolicy));
             }
-        }
-
-        );
+        });
     }
 
     private static boolean hasSafeSemantics(final FacetHolder holder) {
@@ -106,10 +125,7 @@ public class CommandPublishingFacetForActionAnnotation 
extends CommandPublishing
         if(actionSemanticsFacet == null) {
             throw new IllegalStateException("Require ActionSemanticsFacet in 
order to process");
         }
-        if(actionSemanticsFacet.value().isSafeInNature()) {
-            return true;
-        }
-        return false;
+        return actionSemanticsFacet.value().isSafeInNature();
     }
 
     CommandPublishingFacetForActionAnnotation(
@@ -119,5 +135,4 @@ public class CommandPublishingFacetForActionAnnotation 
extends CommandPublishing
         super(processor, holder, servicesInjector);
     }
 
-
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotationAsConfigured.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotationAsConfigured.java
index 5c166291e5..cfa812debb 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotationAsConfigured.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotationAsConfigured.java
@@ -21,7 +21,51 @@ package 
org.apache.causeway.core.metamodel.facets.members.publish.command;
 import org.apache.causeway.applib.services.inject.ServiceInjector;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 
-public class CommandPublishingFacetForActionAnnotationAsConfigured extends 
CommandPublishingFacetForActionAnnotation {
+public abstract class CommandPublishingFacetForActionAnnotationAsConfigured 
extends CommandPublishingFacetForActionAnnotation {
+
+    static class All extends 
CommandPublishingFacetForActionAnnotationAsConfigured {
+        All(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class None extends 
CommandPublishingFacetForActionAnnotationAsConfigured {
+        None(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    static class IgnoreSafe extends 
CommandPublishingFacetForActionAnnotationAsConfigured {
+        IgnoreSafe(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    static class IgnoreSafeYetNot extends 
CommandPublishingFacetForActionAnnotationAsConfigured {
+        IgnoreSafeYetNot(FacetHolder holder, ServiceInjector servicesInjector) 
{
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
 
     CommandPublishingFacetForActionAnnotationAsConfigured(
             final FacetHolder holder,
@@ -29,5 +73,4 @@ public class 
CommandPublishingFacetForActionAnnotationAsConfigured extends Comma
         super(null, holder, servicesInjector);
     }
 
-
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionFromConfiguration.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionFromConfiguration.java
new file mode 100644
index 0000000000..ca2cdf62ef
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionFromConfiguration.java
@@ -0,0 +1,80 @@
+/*
+ *  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.core.metamodel.facets.members.publish.command;
+
+import org.apache.causeway.applib.services.inject.ServiceInjector;
+import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+
+public abstract class CommandPublishingFacetForActionFromConfiguration extends 
CommandPublishingFacetAbstract {
+
+    static class All extends CommandPublishingFacetForActionFromConfiguration {
+
+        All(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class None extends CommandPublishingFacetForActionFromConfiguration 
{
+
+        None(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    static class IgnoreSafe extends 
CommandPublishingFacetForActionFromConfiguration {
+
+        IgnoreSafe(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    static class IgnoreSafeYetNot extends 
CommandPublishingFacetForActionFromConfiguration {
+
+        IgnoreSafeYetNot(FacetHolder holder, ServiceInjector servicesInjector) 
{
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    CommandPublishingFacetForActionFromConfiguration(
+            final FacetHolder holder,
+            final ServiceInjector servicesInjector) {
+        super(null, holder, servicesInjector);
+    }
+
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
index ca62b789a4..132d7c0959 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
@@ -31,7 +31,29 @@ import 
org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 
 import lombok.val;
 
-public class CommandPublishingFacetForPropertyAnnotation extends 
CommandPublishingFacetAbstract {
+public abstract class CommandPublishingFacetForPropertyAnnotation extends 
CommandPublishingFacetAbstract {
+
+    static class Enabled extends CommandPublishingFacetForPropertyAnnotation {
+        Enabled(CommandDtoProcessor processor, FacetHolder holder, 
ServiceInjector servicesInjector) {
+            super(processor, holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class Disabled extends CommandPublishingFacetForPropertyAnnotation {
+        Disabled(CommandDtoProcessor processor, FacetHolder holder, 
ServiceInjector servicesInjector) {
+            super(processor, holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
 
     public static Optional<CommandPublishingFacet> create(
             final Optional<Property> propertyIfAny,
@@ -46,50 +68,51 @@ public class CommandPublishingFacetForPropertyAnnotation 
extends CommandPublishi
             propertyIfAny
             .filter(property -> property.commandPublishing() != 
Publishing.NOT_SPECIFIED)
             .map(property -> {
-                Publishing commandReification = property.commandPublishing();
+                Publishing publishing = property.commandPublishing();
 
-                final Class<? extends CommandDtoProcessor> processorClass =
-                        property.commandDtoProcessor();
+                final Class<? extends CommandDtoProcessor> processorClass = 
property.commandDtoProcessor();
                 final CommandDtoProcessor processor = 
newProcessorElseNull(processorClass);
 
                 if(processor != null) {
-                    commandReification = Publishing.ENABLED;
+                    publishing = Publishing.ENABLED;
                 }
-                switch (commandReification) {
-                case AS_CONFIGURED:
-                    switch (publishingPolicy) {
-                    case NONE:
-                        return null;
+                switch (publishing) {
+                    case AS_CONFIGURED:
+                        switch (publishingPolicy) {
+                            case NONE:
+                                return new 
CommandPublishingFacetForPropertyAnnotationAsConfigured.None(holder, 
servicesInjector);
+                            case ALL:
+                                return new 
CommandPublishingFacetForPropertyAnnotationAsConfigured.All(holder, 
servicesInjector);
+                            default:
+                                throw new 
IllegalStateException(String.format("configured publishingPolicy '%s' not 
recognised", publishingPolicy));
+                        }
+                    case DISABLED:
+                        return new 
CommandPublishingFacetForPropertyAnnotation.Disabled(processor, holder, 
servicesInjector);
+                    case ENABLED:
+                        return new 
CommandPublishingFacetForPropertyAnnotation.Enabled(processor, holder, 
servicesInjector);
                     default:
-                        return (CommandPublishingFacet)new 
CommandPublishingFacetForPropertyAnnotationAsConfigured(holder, 
servicesInjector);
-                    }
-                case DISABLED:
-                    return null;
-                case ENABLED:
-                    return new 
CommandPublishingFacetForPropertyAnnotation(holder, processor, 
servicesInjector);
-                default:
+                        throw new 
IllegalStateException(String.format("commandPublishing '%s' not recognised", 
publishing));
                 }
-                throw new IllegalStateException("command '" + 
commandReification + "' not recognised");
             })
-
             ,
-
+            // if not specified
             () -> {
                 switch (publishingPolicy) {
-                case NONE:
-                    return null;
-                default:
-                    return 
CommandPublishingFacetFromConfiguration.create(holder, servicesInjector);
+                    case NONE:
+                        return new 
CommandPublishingFacetForPropertyFromConfiguration.None(holder, 
servicesInjector);
+                    case ALL:
+                        return new 
CommandPublishingFacetForPropertyFromConfiguration.All(holder, 
servicesInjector);
+                    default:
+                        throw new 
IllegalStateException(String.format("configured publishingPolicy '%s' not 
recognised", publishingPolicy));
                 }
             }
-
         );
     }
 
 
     CommandPublishingFacetForPropertyAnnotation(
-            final FacetHolder holder,
             final CommandDtoProcessor processor,
+            final FacetHolder holder,
             final ServiceInjector servicesInjector) {
         super(processor, holder, servicesInjector);
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotationAsConfigured.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotationAsConfigured.java
index 0b7a573a68..793ac6c262 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotationAsConfigured.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotationAsConfigured.java
@@ -21,12 +21,32 @@ package 
org.apache.causeway.core.metamodel.facets.members.publish.command;
 import org.apache.causeway.applib.services.inject.ServiceInjector;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 
-public class CommandPublishingFacetForPropertyAnnotationAsConfigured extends 
CommandPublishingFacetForPropertyAnnotation {
+public abstract class CommandPublishingFacetForPropertyAnnotationAsConfigured 
extends CommandPublishingFacetForPropertyAnnotation {
 
-    CommandPublishingFacetForPropertyAnnotationAsConfigured(
-            final FacetHolder holder, final ServiceInjector servicesInjector) {
-        super(holder, null, servicesInjector);
+    static class All extends 
CommandPublishingFacetForPropertyAnnotationAsConfigured {
+        All(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
     }
 
+    static class None extends 
CommandPublishingFacetForPropertyAnnotationAsConfigured {
+        None(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
 
+    CommandPublishingFacetForPropertyAnnotationAsConfigured(
+            final FacetHolder holder, final ServiceInjector servicesInjector) {
+        super(null, holder, servicesInjector);
+    }
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetFromConfiguration.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyFromConfiguration.java
similarity index 60%
rename from 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetFromConfiguration.java
rename to 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyFromConfiguration.java
index 818038d8d7..f1fc44f434 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetFromConfiguration.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyFromConfiguration.java
@@ -21,15 +21,33 @@ package 
org.apache.causeway.core.metamodel.facets.members.publish.command;
 import org.apache.causeway.applib.services.inject.ServiceInjector;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 
-public class CommandPublishingFacetFromConfiguration extends 
CommandPublishingFacetAbstract {
+public abstract class CommandPublishingFacetForPropertyFromConfiguration 
extends CommandPublishingFacetAbstract {
 
-    public static CommandPublishingFacet create(
-            final FacetHolder holder,
-            final ServiceInjector servicesInjector) {
-        return new CommandPublishingFacetFromConfiguration(holder, 
servicesInjector);
+    static class All extends 
CommandPublishingFacetForPropertyFromConfiguration {
+
+        All(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class None extends 
CommandPublishingFacetForPropertyFromConfiguration {
+
+        None(FacetHolder holder, ServiceInjector servicesInjector) {
+            super(holder, servicesInjector);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
     }
 
-    private CommandPublishingFacetFromConfiguration(
+    CommandPublishingFacetForPropertyFromConfiguration(
             final FacetHolder holder,
             final ServiceInjector servicesInjector) {
         super(null, holder, servicesInjector);
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotation.java
deleted file mode 100644
index 7f55be2d45..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotation.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.core.metamodel.facets.members.publish.execution;
-
-import java.util.Optional;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.Publishing;
-import org.apache.causeway.commons.internal.base._Optionals;
-import org.apache.causeway.core.config.CausewayConfiguration;
-import org.apache.causeway.core.config.metamodel.facets.ActionConfigOptions;
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-import 
org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
-
-import lombok.val;
-
-public class ExecutionPublishingActionFacetForActionAnnotation
-extends ExecutionPublishingFacetAbstract {
-
-    public static Optional<ExecutionPublishingFacet> create(
-            final Optional<Action> actionsIfAny,
-            final CausewayConfiguration configuration,
-            final FacetHolder holder) {
-
-        val publishingPolicy = 
ActionConfigOptions.actionExecutionPublishingPolicy(configuration);
-
-        return _Optionals.orNullable(
-
-        actionsIfAny
-        .map(Action::executionPublishing)
-        .filter(publishing -> publishing != Publishing.NOT_SPECIFIED)
-        .<ExecutionPublishingFacet>map(publishing -> {
-            switch (publishing) {
-            case AS_CONFIGURED:
-
-                switch (publishingPolicy) {
-                case NONE:
-                    return null;
-                case IGNORE_QUERY_ONLY:
-                case IGNORE_SAFE:
-                    if (hasSafeSemantics(holder)) {
-                        return null;
-                    }
-                    // else fall through
-                default:
-                    return new 
ExecutionPublishingActionFacetForActionAnnotationAsConfigured(holder);
-                }
-            case DISABLED:
-                return null;
-            case ENABLED:
-                return new 
ExecutionPublishingActionFacetForActionAnnotation(holder);
-            default:
-            }
-            throw new IllegalStateException("publishing '" + publishing + "' 
not recognised");
-        })
-
-        ,
-
-        () -> {
-            switch (publishingPolicy) {
-            case NONE:
-                return null;
-            case IGNORE_QUERY_ONLY:
-            case IGNORE_SAFE:
-                if (hasSafeSemantics(holder)) {
-                    return null;
-                }
-                // else fall through
-            default:
-                return new 
ExecutionPublishingActionFacetFromConfiguration(holder);
-            }
-        }
-
-        );
-    }
-
-    private static boolean hasSafeSemantics(final FacetHolder holder) {
-        final ActionSemanticsFacet actionSemanticsFacet = 
holder.getFacet(ActionSemanticsFacet.class);
-        if(actionSemanticsFacet == null) {
-            throw new IllegalStateException("Require ActionSemanticsFacet in 
order to process");
-        }
-
-        return actionSemanticsFacet.value().isSafeInNature();
-    }
-
-    ExecutionPublishingActionFacetForActionAnnotation(
-            final FacetHolder holder) {
-        super(holder);
-    }
-
-}
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotationAsConfigured.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotationAsConfigured.java
deleted file mode 100644
index 606d406712..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotationAsConfigured.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.core.metamodel.facets.members.publish.execution;
-
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-
-public class ExecutionPublishingActionFacetForActionAnnotationAsConfigured
-extends ExecutionPublishingActionFacetForActionAnnotation {
-
-    public ExecutionPublishingActionFacetForActionAnnotationAsConfigured(
-            final FacetHolder holder) {
-        super(holder);
-    }
-
-}
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacet.java
index 6b06cd0ab2..511f30fc8b 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacet.java
@@ -42,8 +42,9 @@ import lombok.val;
 public interface ExecutionPublishingFacet extends Facet {
 
     public static boolean isPublishingEnabled(final @NonNull FacetHolder 
facetHolder) {
-        val executionPublishingFacet = 
facetHolder.getFacet(ExecutionPublishingFacet.class);
-        return executionPublishingFacet!=null;
+        val facet = facetHolder.getFacet(ExecutionPublishingFacet.class);
+        return facet != null && facet.isEnabled();
     }
 
+    boolean isEnabled();
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetAbstract.java
index c53a1312ee..0623f9d36d 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetAbstract.java
@@ -26,7 +26,7 @@ public abstract class ExecutionPublishingFacetAbstract
 extends FacetAbstract
 implements ExecutionPublishingFacet {
 
-    private static final Class<? extends Facet> type() {
+    private static Class<? extends Facet> type() {
         return ExecutionPublishingFacet.class;
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotation.java
new file mode 100644
index 0000000000..cf84dca10c
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotation.java
@@ -0,0 +1,124 @@
+/*
+ *  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.core.metamodel.facets.members.publish.execution;
+
+import java.util.Optional;
+
+import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.Publishing;
+import org.apache.causeway.commons.internal.base._Optionals;
+import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.core.config.metamodel.facets.ActionConfigOptions;
+import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+
+import lombok.val;
+
+public abstract class ExecutionPublishingFacetForActionAnnotation extends 
ExecutionPublishingFacetAbstract {
+
+    static class Enabled extends ExecutionPublishingFacetForActionAnnotation {
+        Enabled(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class Disabled extends ExecutionPublishingFacetForActionAnnotation {
+        Disabled(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    public static Optional<ExecutionPublishingFacet> create(
+            final Optional<Action> actionsIfAny,
+            final CausewayConfiguration configuration,
+            final FacetHolder holder) {
+
+        val publishingPolicy = 
ActionConfigOptions.actionExecutionPublishingPolicy(configuration);
+
+        return _Optionals.orNullable(
+
+        actionsIfAny
+        .map(Action::executionPublishing)
+        .filter(publishing -> publishing != Publishing.NOT_SPECIFIED)
+        .<ExecutionPublishingFacet>map(publishing -> {
+            switch (publishing) {
+                case AS_CONFIGURED:
+                    switch (publishingPolicy) {
+                        case NONE:
+                            return new 
ExecutionPublishingFacetForActionAnnotationAsConfigured.None(holder);
+                        case IGNORE_QUERY_ONLY:
+                        case IGNORE_SAFE:
+                            return hasSafeSemantics(holder)
+                                    ? new 
ExecutionPublishingFacetForActionAnnotationAsConfigured.IgnoreSafe(holder)
+                                    : new 
ExecutionPublishingFacetForActionAnnotationAsConfigured.IgnoreSafeYetNot(holder);
+                        case ALL:
+                            return new 
ExecutionPublishingFacetForActionAnnotationAsConfigured.All(holder);
+                        default:
+                            throw new 
IllegalStateException(String.format("configured executionPublishing policy '%s' 
not recognised", publishingPolicy));
+                        }
+                case DISABLED:
+                    return new 
ExecutionPublishingFacetForActionAnnotation.Disabled(holder);
+                case ENABLED:
+                    return new 
ExecutionPublishingFacetForActionAnnotation.Enabled(holder);
+                default:
+                    throw new 
IllegalStateException(String.format("executionPublishing '%s' not recognised", 
publishing));
+            }
+        })
+        ,
+        () -> {
+            // if not specified
+            switch (publishingPolicy) {
+                case NONE:
+                    return new 
ExecutionPublishingFacetForActionFromConfiguration.None(holder);
+                case IGNORE_QUERY_ONLY:
+                case IGNORE_SAFE:
+                    return hasSafeSemantics(holder)
+                            ? new 
ExecutionPublishingFacetForActionFromConfiguration.IgnoreSafe(holder)
+                            : new 
ExecutionPublishingFacetForActionFromConfiguration.IgnoreSafeYetNot(holder);
+                case ALL:
+                    return new 
ExecutionPublishingFacetForActionFromConfiguration.All(holder);
+                default:
+                    throw new IllegalStateException(String.format("configured 
executionPublishing policy '%s' not recognised", publishingPolicy));
+            }
+        });
+    }
+
+    private static boolean hasSafeSemantics(final FacetHolder holder) {
+        final ActionSemanticsFacet actionSemanticsFacet = 
holder.getFacet(ActionSemanticsFacet.class);
+        if(actionSemanticsFacet == null) {
+            throw new IllegalStateException("Require ActionSemanticsFacet in 
order to process");
+        }
+        return actionSemanticsFacet.value().isSafeInNature();
+    }
+
+    ExecutionPublishingFacetForActionAnnotation(final FacetHolder holder) {
+        super(holder);
+    }
+
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotationAsConfigured.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotationAsConfigured.java
new file mode 100644
index 0000000000..c5c76ea074
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionAnnotationAsConfigured.java
@@ -0,0 +1,75 @@
+/*
+ *  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.core.metamodel.facets.members.publish.execution;
+
+import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+
+public abstract class ExecutionPublishingFacetForActionAnnotationAsConfigured
+extends ExecutionPublishingFacetForActionAnnotation {
+
+    static class All extends 
ExecutionPublishingFacetForActionAnnotationAsConfigured {
+        All(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class None extends 
ExecutionPublishingFacetForActionAnnotationAsConfigured {
+        None(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    static class IgnoreSafe extends 
ExecutionPublishingFacetForActionAnnotationAsConfigured {
+        IgnoreSafe(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    static class IgnoreSafeYetNot extends 
ExecutionPublishingFacetForActionAnnotationAsConfigured {
+        IgnoreSafeYetNot(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+
+    public ExecutionPublishingFacetForActionAnnotationAsConfigured(final 
FacetHolder holder) {
+        super(holder);
+    }
+
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionFromConfiguration.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionFromConfiguration.java
new file mode 100644
index 0000000000..cdc723b4ae
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForActionFromConfiguration.java
@@ -0,0 +1,78 @@
+/*
+ *  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.core.metamodel.facets.members.publish.execution;
+
+import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+
+public abstract class ExecutionPublishingFacetForActionFromConfiguration
+extends ExecutionPublishingFacetAbstract {
+
+    static class All extends 
ExecutionPublishingFacetForActionFromConfiguration {
+
+        All(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class None extends 
ExecutionPublishingFacetForActionFromConfiguration {
+
+        None(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    static class IgnoreSafe extends 
ExecutionPublishingFacetForActionFromConfiguration {
+
+        IgnoreSafe(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    static class IgnoreSafeYetNot extends 
ExecutionPublishingFacetForActionFromConfiguration {
+
+        IgnoreSafeYetNot(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    public ExecutionPublishingFacetForActionFromConfiguration(final 
FacetHolder holder) {
+        super(holder);
+    }
+
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
similarity index 51%
rename from 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotation.java
rename to 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
index 91ea71be6b..a6af7734f4 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotation.java
@@ -29,9 +29,31 @@ import 
org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 
 import lombok.val;
 
-public class ExecutionPublishingPropertyFacetForPropertyAnnotation
+public abstract class ExecutionPublishingFacetForPropertyAnnotation
 extends ExecutionPublishingFacetAbstract {
 
+    static class Enabled extends ExecutionPublishingFacetForPropertyAnnotation 
{
+        Enabled(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class Disabled extends 
ExecutionPublishingFacetForPropertyAnnotation {
+        Disabled(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
     public static Optional<ExecutionPublishingFacet> create(
             final Optional<Property> propertyIfAny,
             final CausewayConfiguration configuration,
@@ -47,40 +69,39 @@ extends ExecutionPublishingFacetAbstract {
             .map(publishing -> {
 
                 switch (publishing) {
-                case AS_CONFIGURED:
-                    switch (publishingPolicy) {
-                    case NONE:
-                        return null;
+                    case AS_CONFIGURED:
+                        switch (publishingPolicy) {
+                            case NONE:
+                                return new 
ExecutionPublishingFacetForPropertyAnnotationAsConfigured.None(holder);
+                            case ALL:
+                                return new 
ExecutionPublishingFacetForPropertyAnnotationAsConfigured.All(holder);
+                            default:
+                                throw new 
IllegalStateException(String.format("configured publishingPolicy '%s' not 
recognised", publishingPolicy));
+                        }
+                    case DISABLED:
+                        return new 
ExecutionPublishingFacetForPropertyAnnotation.Disabled(holder);
+                    case ENABLED:
+                        return new 
ExecutionPublishingFacetForPropertyAnnotation.Enabled(holder);
                     default:
-                        return (ExecutionPublishingFacet)
-                                new 
ExecutionPublishingPropertyFacetForPropertyAnnotationAsConfigured(holder);
-                    }
-                case DISABLED:
-                    return null;
-                case ENABLED:
-                    return new 
ExecutionPublishingPropertyFacetForPropertyAnnotation(holder);
-                default:
+                        throw new 
IllegalStateException(String.format("executionPublishing '%s' not recognised", 
publishing));
                 }
-                return null;
-
             })
-
             ,
-
+            // if not specified
             () -> {
                 switch (publishingPolicy) {
-                case NONE:
-                    return null;
-                default:
-                    return new 
ExecutionPublishingPropertyFacetFromConfiguration(holder);
+                    case NONE:
+                        return new 
ExecutionPublishingFacetForPropertyFromConfiguration.None(holder);
+                    case ALL:
+                        return new 
ExecutionPublishingFacetForPropertyFromConfiguration.All(holder);
+                    default:
+                        throw new 
IllegalStateException(String.format("configured publishingPolicy '%s' not 
recognised", publishingPolicy));
                 }
             }
-
         );
-
     }
 
-    public ExecutionPublishingPropertyFacetForPropertyAnnotation(final 
FacetHolder holder) {
+    public ExecutionPublishingFacetForPropertyAnnotation(final FacetHolder 
holder) {
         super(holder);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetFromConfiguration.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotationAsConfigured.java
similarity index 57%
rename from 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetFromConfiguration.java
rename to 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotationAsConfigured.java
index 56b0fa5b52..5256119dc5 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetFromConfiguration.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyAnnotationAsConfigured.java
@@ -20,12 +20,32 @@ package 
org.apache.causeway.core.metamodel.facets.members.publish.execution;
 
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 
-public class ExecutionPublishingActionFacetFromConfiguration
-extends ExecutionPublishingFacetAbstract {
+public abstract class ExecutionPublishingFacetForPropertyAnnotationAsConfigured
+extends ExecutionPublishingFacetForPropertyAnnotation {
 
-    public ExecutionPublishingActionFacetFromConfiguration(
-            final FacetHolder holder) {
-        super(holder);
+    static class All extends 
ExecutionPublishingFacetForPropertyAnnotationAsConfigured {
+        All(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
     }
 
+    static class None extends 
ExecutionPublishingFacetForPropertyAnnotationAsConfigured {
+        None(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    public ExecutionPublishingFacetForPropertyAnnotationAsConfigured(final 
FacetHolder holder) {
+        super(holder);
+    }
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetFromConfiguration.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyFromConfiguration.java
similarity index 54%
rename from 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetFromConfiguration.java
rename to 
core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyFromConfiguration.java
index 06726b5dd2..e31b71b026 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetFromConfiguration.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingFacetForPropertyFromConfiguration.java
@@ -18,12 +18,38 @@
  */
 package org.apache.causeway.core.metamodel.facets.members.publish.execution;
 
+import org.apache.causeway.applib.services.inject.ServiceInjector;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
+import 
org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForPropertyFromConfiguration;
 
-public class ExecutionPublishingPropertyFacetFromConfiguration
+public abstract class ExecutionPublishingFacetForPropertyFromConfiguration
 extends ExecutionPublishingFacetAbstract {
 
-    public ExecutionPublishingPropertyFacetFromConfiguration(final FacetHolder 
holder) {
+    static class All extends 
ExecutionPublishingFacetForPropertyFromConfiguration {
+
+        All(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return true;
+        }
+    }
+
+    static class None extends 
ExecutionPublishingFacetForPropertyFromConfiguration {
+
+        None(FacetHolder holder) {
+            super(holder);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return false;
+        }
+    }
+
+    public ExecutionPublishingFacetForPropertyFromConfiguration(final 
FacetHolder holder) {
         super(holder);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotationAsConfigured.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotationAsConfigured.java
deleted file mode 100644
index 0a1097cfcd..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotationAsConfigured.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.core.metamodel.facets.members.publish.execution;
-
-import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
-
-public class ExecutionPublishingPropertyFacetForPropertyAnnotationAsConfigured
-extends ExecutionPublishingPropertyFacetForPropertyAnnotation {
-
-    public 
ExecutionPublishingPropertyFacetForPropertyAnnotationAsConfigured(final 
FacetHolder holder) {
-        super(holder);
-    }
-}
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index e33c6c360d..d362da3316 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -33,7 +33,7 @@ import 
org.apache.causeway.core.metamodel.facets.FacetedMethod;
 import 
org.apache.causeway.core.metamodel.facets.actions.contributing.ContributingFacetAbstract;
 import 
org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
 import 
org.apache.causeway.core.metamodel.facets.members.publish.command.CommandPublishingFacetForPropertyAnnotation;
-import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingPropertyFacetForPropertyAnnotation;
+import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForPropertyAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import 
org.apache.causeway.core.metamodel.facets.properties.projection.ProjectingFacetFromPropertyAnnotation;
 import 
org.apache.causeway.core.metamodel.facets.properties.property.disabled.DisabledFacetForPropertyAnnotation;
@@ -218,7 +218,7 @@ extends FacetFactoryAbstract {
 
         // check for @Property(executionPublishing=...)
         addFacetIfPresent(
-                ExecutionPublishingPropertyFacetForPropertyAnnotation
+                ExecutionPublishingFacetForPropertyAnnotation
                 .create(propertyIfAny, getConfiguration(), holder));
     }
 
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
index 7d8b6dfdf0..ca0c5ef886 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
@@ -32,8 +32,8 @@ import 
org.apache.causeway.core.config.metamodel.facets.ActionConfigOptions;
 import org.apache.causeway.core.metamodel.facetapi.Facet;
 import 
org.apache.causeway.core.metamodel.facets.FacetFactory.ProcessMethodContext;
 import 
org.apache.causeway.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
-import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingActionFacetForActionAnnotation;
-import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingActionFacetFromConfiguration;
+import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionAnnotation;
+import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacetForActionFromConfiguration;
 import 
org.apache.causeway.core.metamodel.facets.members.publish.execution.ExecutionPublishingFacet;
 
 import lombok.val;
@@ -82,7 +82,7 @@ extends ActionAnnotationFacetFactoryTest {
             // then
             final Facet facet = 
facetedMethod.getFacet(ExecutionPublishingFacet.class);
             assertNotNull(facet);
-            assertTrue(facet instanceof 
ExecutionPublishingActionFacetFromConfiguration);
+            assertTrue(facet instanceof 
ExecutionPublishingFacetForActionFromConfiguration);
         });
     }
 
@@ -123,7 +123,7 @@ extends ActionAnnotationFacetFactoryTest {
             // then
             final Facet facet = 
facetedMethod.getFacet(ExecutionPublishingFacet.class);
             assertNotNull(facet);
-            assertTrue(facet instanceof 
ExecutionPublishingActionFacetFromConfiguration);
+            assertTrue(facet instanceof 
ExecutionPublishingFacetForActionFromConfiguration);
         });
     }
 
@@ -163,7 +163,7 @@ extends ActionAnnotationFacetFactoryTest {
             // then
             final Facet facet = 
facetedMethod.getFacet(ExecutionPublishingFacet.class);
             assertNotNull(facet);
-            final ExecutionPublishingActionFacetForActionAnnotation facetImpl 
= (ExecutionPublishingActionFacetForActionAnnotation) facet;
+            final ExecutionPublishingFacetForActionAnnotation facetImpl = 
(ExecutionPublishingFacetForActionAnnotation) facet;
             _Blackhole.consume(facetImpl);
             assertNoMethodsRemoved();
         });
@@ -218,7 +218,7 @@ extends ActionAnnotationFacetFactoryTest {
             // then
             final Facet facet = 
facetedMethod.getFacet(ExecutionPublishingFacet.class);
             assertNotNull(facet);
-            assertTrue(facet instanceof 
ExecutionPublishingActionFacetForActionAnnotation);
+            assertTrue(facet instanceof 
ExecutionPublishingFacetForActionAnnotation);
             assertNoMethodsRemoved();
         });
     }
@@ -239,7 +239,7 @@ extends ActionAnnotationFacetFactoryTest {
             // then
             final Facet facet = 
facetedMethod.getFacet(ExecutionPublishingFacet.class);
             assertNotNull(facet);
-            assertTrue(facet instanceof 
ExecutionPublishingActionFacetForActionAnnotation);
+            assertTrue(facet instanceof 
ExecutionPublishingFacetForActionAnnotation);
         });
     }
 
diff --git 
a/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureResult.columnOrder.fallback.txt
 
b/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureResult.columnOrder.fallback.txt
new file mode 100644
index 0000000000..9bf5dff4b7
--- /dev/null
+++ 
b/testing/fixtures/applib/src/main/java/org/apache/causeway/testing/fixtures/applib/fixturescripts/FixtureResult.columnOrder.fallback.txt
@@ -0,0 +1,5 @@
+object
+fixtureScriptClassName
+logicalTypeName
+objectIdentifier
+className

Reply via email to