You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2022/08/30 07:35:10 UTC

[isis] 02/02: ISIS-3193: moves @Action(dependentDefaultsPolicy=...) to @Parameter(dependentDefaultsPolicy=...)

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

danhaywood pushed a commit to branch ISIS-3193
in repository https://gitbox.apache.org/repos/asf/isis.git

commit cf9c2715f6b308fd9e28d256b7ddbe5f087a0f64
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Aug 30 08:34:55 2022 +0100

    ISIS-3193: moves @Action(dependentDefaultsPolicy=...) to @Parameter(dependentDefaultsPolicy=...)
---
 .../applib/annotation/DependentDefaultsPolicy.java |  6 +++--
 .../apache/isis/applib/annotation/Parameter.java   | 12 +++++++++
 .../apache/isis/core/config/IsisConfiguration.java | 31 +++++++++++++---------
 .../config/metamodel/facets/ParameterPolicies.java |  2 +-
 .../action/ActionAnnotationFacetFactory.java       | 13 +--------
 .../parameter/ParameterAnnotationFacetFactory.java | 27 ++++++++++++++++---
 ...ctionFacetForActionAnnotationAsConfigured.java} |  8 +++---
 .../depdef/ParameterDependentDefaultsFacet.java}   | 23 ++++++++--------
 .../ParameterDependentDefaultsFacetAbstract.java}  | 10 +++----
 ...endentDefaultsFacetForParameterAnnotation.java} |  8 +++---
 ...erDependentDefaultsFacetFromConfiguration.java} |  8 +++---
 .../spec/feature/ObjectActionParameter.java        |  2 +-
 .../apache/isis/core/metamodel/util/Facets.java    |  9 ++++---
 13 files changed, 94 insertions(+), 65 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/DependentDefaultsPolicy.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/DependentDefaultsPolicy.java
index 3af2cf38d7..25983c4214 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/DependentDefaultsPolicy.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/DependentDefaultsPolicy.java
@@ -35,12 +35,14 @@ public enum DependentDefaultsPolicy {
     AS_CONFIGURED,
 
     /**
-     * If an end-user has changed a parameter value, then do not overwrite the value.
+     * If an end-user has changed this parameter's value, then do not overwrite the value when an earlier parameter changes.
      */
     PRESERVE_CHANGES,
 
     /**
-     * If the parameter declares a default that is dependent on the value of a previous parameter, and that previous parameter changes its value, then update the dependent, <i>even if</i> the end-user had changed the value of that dependent default.
+     * If this parameter declares a default that is dependent on the value of a previous parameter, and that previous
+     * parameter has been changed by the end-user, then update this dependent parameter with its computed default,
+     * <i>even if</i> the end-user has changed the value of this parameter previously.
      */
     UPDATE_DEPENDENT,
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java
index d2e634784f..5c34f86929 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Parameter.java
@@ -134,5 +134,17 @@ public @interface Parameter {
     String regexPatternReplacement()
             default "Doesn't match pattern";
 
+    /**
+     * Whether dependent parameters should be reset to their default if an earlier parameter changes its
+     * value, or whether instead a parameter value, once changed by the end-user, should never be
+     * overwritten even if the end-user changes an earlier parameter value.
+     */
+    /**
+     * Whether this parameter should be reset to its default if an earlier parameter changes its
+     * value, or whether instead the parameter's value, once changed by the end-user, should never be
+     * overwritten even if the end-user changes an earlier parameter value.
+     */
+    DependentDefaultsPolicy dependentDefaultsPolicy()
+            default DependentDefaultsPolicy.AS_CONFIGURED;
 
 }
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index b62f1649cf..fc578dbed0 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -810,19 +810,6 @@ public class IsisConfiguration {
                 }
 
 
-                /**
-                 * Whether dependent parameters should be reset to their default if an earlier parameter changes its
-                 * value, or whether instead a parameter value, once changed by the end-user, should never be
-                 * overwritten even if the end-user changes an earlier parameter value.
-                 *
-                 * <p>
-                 *     This setting can be overridden on a case-by-case basis using
-                 *     {@link org.apache.isis.applib.annotation.Action#dependentDefaultsPolicy() Action#dependentDefaultsPolicy()}.
-                 * </p>
-                 */
-                private ParameterPolicies.DependentDefaultsPolicy dependentDefaultsPolicy = ParameterPolicies.DependentDefaultsPolicy.UPDATE_DEPENDENT;
-
-
             }
 
             private final ActionLayout actionLayout = new ActionLayout();
@@ -1282,6 +1269,24 @@ public class IsisConfiguration {
                 }
             }
 
+            private final Parameter parameter = new Parameter();
+            @Data
+            public static class Parameter {
+
+                /**
+                 * Whether dependent parameters should be reset to their default if an earlier parameter changes its
+                 * value, or whether instead a parameter value, once changed by the end-user, should never be
+                 * overwritten even if the end-user changes an earlier parameter value.
+                 *
+                 * <p>
+                 *     This setting can be overridden on a case-by-case basis using
+                 *     {@link org.apache.isis.applib.annotation.Parameter#dependentDefaultsPolicy() Parameter#dependentDefaultsPolicy()}.
+                 * </p>
+                 */
+                private ParameterPolicies.DependentDefaultsPolicy dependentDefaultsPolicy = ParameterPolicies.DependentDefaultsPolicy.UPDATE_DEPENDENT;
+
+            }
+
             private final ParameterLayout parameterLayout = new ParameterLayout();
             @Data
             public static class ParameterLayout implements Applib.Annotation.ConfigPropsForPropertyOrParameterLayout {
diff --git a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java
index 60b4e7bef3..2e2d6c6f1e 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java
@@ -48,7 +48,7 @@ public final class ParameterPolicies {
 
     public static DependentDefaultsPolicy dependentDefaultsPolicy(
             final @NonNull IsisConfiguration configuration) {
-        return configuration.getApplib().getAnnotation().getAction().getDependentDefaultsPolicy();
+        return configuration.getApplib().getAnnotation().getParameter().getDependentDefaultsPolicy();
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
index a661345280..b9dd84b3a7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactory.java
@@ -31,7 +31,6 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.facets.actions.action.choicesfrom.ChoicesFromFacetForActionAnnotation;
-import org.apache.isis.core.metamodel.facets.actions.action.depdef.DependentDefaultsFacet;
 import org.apache.isis.core.metamodel.facets.actions.action.explicit.ActionExplicitFacetForActionAnnotation;
 import org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetAbstract;
@@ -75,7 +74,7 @@ extends FacetFactoryAbstract {
         processHidden(processMethodContext, actionIfAny);
         processRestrictTo(processMethodContext, actionIfAny);
         processSemantics(processMethodContext, actionIfAny);
-        processDependentDefaultsPolicy(processMethodContext, actionIfAny);
+
 
         // must come after processing semantics
         processCommandPublishing(processMethodContext, actionIfAny);
@@ -198,16 +197,6 @@ extends FacetFactoryAbstract {
                 .create(actionIfAny, facetedMethod));
     }
 
-    // check for @Action(dependentDefaultsPolicy=...)
-    void processDependentDefaultsPolicy(
-            final ProcessMethodContext processMethodContext,
-            final Optional<Action> actionIfAny) {
-        val facetedMethod = processMethodContext.getFacetHolder();
-        addFacetIfPresent(
-                DependentDefaultsFacet
-                .create(actionIfAny, getConfiguration(), facetedMethod));
-    }
-
     void processCommandPublishing(
             final ProcessMethodContext processMethodContext,
             final Optional<Action> actionIfAny) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
index 05db0f4105..16817c024a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
@@ -18,16 +18,20 @@
  */
 package org.apache.isis.core.metamodel.facets.param.parameter;
 
+import java.util.Optional;
+
 import javax.inject.Inject;
 import javax.validation.constraints.Pattern;
 
 import org.springframework.core.MethodParameter;
 
+import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.param.parameter.depdef.ParameterDependentDefaultsFacet;
 import org.apache.isis.core.metamodel.facets.param.parameter.fileaccept.FileAcceptFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByNullableAnnotationOnParameter;
@@ -49,6 +53,7 @@ extends FacetFactoryAbstract {
 
     @Override
     public void processParams(final ProcessParameterContext processParameterContext) {
+        processParamsDependentDefaultsPolicy(processParameterContext);
         processParamsMaxLength(processParameterContext);
         processParamsMustSatisfy(processParameterContext);
         processParamsRegEx(processParameterContext);
@@ -56,6 +61,18 @@ extends FacetFactoryAbstract {
         processParamsFileAccept(processParameterContext);
     }
 
+    // check for @Parameter(dependentDefaultsPolicy=...)
+    void processParamsDependentDefaultsPolicy(final ProcessParameterContext processParameterContext) {
+
+        val holder = processParameterContext.getFacetHolder();
+        val parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class);
+
+        addFacetIfPresent(
+                ParameterDependentDefaultsFacet
+                        .create(parameterIfAny, getConfiguration(), holder));
+    }
+
+
     void processParamsMaxLength(final ProcessParameterContext processParameterContext) {
 
         val holder = processParameterContext.getFacetHolder();
@@ -79,6 +96,8 @@ extends FacetFactoryAbstract {
     void processParamsRegEx(final ProcessParameterContext processParameterContext) {
 
         val holder = processParameterContext.getFacetHolder();
+        val parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class);
+
         val parameterType = processParameterContext.getParameterType();
 
         val patternIfAny = processParameterContext.synthesizeOnParameter(Pattern.class);
@@ -86,7 +105,6 @@ extends FacetFactoryAbstract {
                 RegExFacetForPatternAnnotationOnParameter
                 .create(patternIfAny, parameterType, holder));
 
-        val parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class);
         addFacetIfPresent(
                 RegExFacetForParameterAnnotation
                 .create(parameterIfAny, parameterType, holder));
@@ -95,13 +113,14 @@ extends FacetFactoryAbstract {
     void processParamsOptional(final ProcessParameterContext processParameterContext) {
 
         val holder = processParameterContext.getFacetHolder();
+        val parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class);
+
         val parameterAnnotations = MethodParameter
                 .forExecutable(processParameterContext.getMethod(), processParameterContext.getParamNum())
                 .getParameterAnnotations();
         val parameterType = processParameterContext.getParameterType();
-        val parameterIfAny = processParameterContext.synthesizeOnParameter(Parameter.class);
-        
-        val hasNullable = 
+
+        val hasNullable =
                 _NullSafe.stream(parameterAnnotations)
                     .map(annot->annot.annotationType().getSimpleName())
                     .anyMatch(name->name.equals("Nullable"));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsActionFacetForActionAnnotationAsConfigured.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured.java
similarity index 79%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsActionFacetForActionAnnotationAsConfigured.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured.java
index 8cbd1ec4fd..facf4fe3c5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsActionFacetForActionAnnotationAsConfigured.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured.java
@@ -17,15 +17,15 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.actions.action.depdef;
+package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
 import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class DependentDefaultsActionFacetForActionAnnotationAsConfigured
-extends DependentDefaultsActionFacetForActionAnnotation {
+public class ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured
+extends ParameterDependentDefaultsFacetForParameterAnnotation {
 
-    DependentDefaultsActionFacetForActionAnnotationAsConfigured(
+    ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured(
             final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
         super(value, holder);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacet.java
similarity index 74%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacet.java
index 86c56f4eba..0f7df285fc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacet.java
@@ -17,11 +17,12 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.actions.action.depdef;
+package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
 import java.util.Optional;
 
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.commons.internal.base._Optionals;
 import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
@@ -36,11 +37,11 @@ import org.apache.isis.core.metamodel.facets.SingleValueFacet;
  *
  * @since 2.0
  */
-public interface DependentDefaultsFacet
+public interface ParameterDependentDefaultsFacet
 extends SingleValueFacet<ParameterPolicies.DependentDefaultsPolicy> {
 
-    static Optional<DependentDefaultsFacet> create(
-            final Optional<Action> actionsIfAny,
+    static Optional<ParameterDependentDefaultsFacet> create(
+            final Optional<Parameter> parameterIfAny,
             final IsisConfiguration configuration,
             final FacetHolder holder) {
 
@@ -49,24 +50,24 @@ extends SingleValueFacet<ParameterPolicies.DependentDefaultsPolicy> {
 
         return _Optionals.orNullable(
 
-        actionsIfAny
-        .map(Action::dependentDefaultsPolicy)
-        .<DependentDefaultsFacet>map(policy -> {
+        parameterIfAny
+        .map(Parameter::dependentDefaultsPolicy)
+        .<ParameterDependentDefaultsFacet>map(policy -> {
             switch (policy) {
             case PRESERVE_CHANGES:
-                return new DependentDefaultsActionFacetForActionAnnotation(
+                return new ParameterDependentDefaultsFacetForParameterAnnotation(
                         ParameterPolicies.DependentDefaultsPolicy.PRESERVE_CHANGES, holder);
             case UPDATE_DEPENDENT:
-                return new DependentDefaultsActionFacetForActionAnnotation(
+                return new ParameterDependentDefaultsFacetForParameterAnnotation(
                         ParameterPolicies.DependentDefaultsPolicy.UPDATE_DEPENDENT, holder);
             case NOT_SPECIFIED:
             case AS_CONFIGURED:
-                return new DependentDefaultsActionFacetForActionAnnotation(defaultPolicyFromConfig, holder);
+                return new ParameterDependentDefaultsFacetForParameterAnnotation(defaultPolicyFromConfig, holder);
             default:
             }
             throw new IllegalStateException("dependentDefaultsPolicy '" + policy + "' not recognised");
         })
         ,
-        () -> new DependentDefaultsActionFacetFromConfiguration(defaultPolicyFromConfig, holder));
+        () -> new ParameterDependentDefaultsFacetFromConfiguration(defaultPolicyFromConfig, holder));
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsFacetAbstract.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
index c2955c1eed..aa184e2f2f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
@@ -17,22 +17,22 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.actions.action.depdef;
+package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
 import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
 
-abstract class DependentDefaultsFacetAbstract
+abstract class ParameterDependentDefaultsFacetAbstract
 extends SingleValueFacetAbstract<ParameterPolicies.DependentDefaultsPolicy>
-implements DependentDefaultsFacet {
+implements ParameterDependentDefaultsFacet {
 
     private static final Class<? extends Facet> type() {
-        return DependentDefaultsFacet.class;
+        return ParameterDependentDefaultsFacet.class;
     }
 
-    protected DependentDefaultsFacetAbstract(
+    protected ParameterDependentDefaultsFacetAbstract(
             final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
         super(type(), value, holder);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsActionFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java
similarity index 81%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsActionFacetForActionAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java
index 1f19633c12..e36364da56 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsActionFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java
@@ -17,15 +17,15 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.actions.action.depdef;
+package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
 import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class DependentDefaultsActionFacetForActionAnnotation
-extends DependentDefaultsFacetAbstract {
+public class ParameterDependentDefaultsFacetForParameterAnnotation
+extends ParameterDependentDefaultsFacetAbstract {
 
-    DependentDefaultsActionFacetForActionAnnotation(
+    ParameterDependentDefaultsFacetForParameterAnnotation(
             final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
         super(value, holder);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsActionFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
similarity index 82%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsActionFacetFromConfiguration.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
index 0fe0962433..c0bb59a50c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/depdef/DependentDefaultsActionFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
@@ -17,15 +17,15 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.actions.action.depdef;
+package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
 import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class DependentDefaultsActionFacetFromConfiguration
-extends DependentDefaultsFacetAbstract {
+public class ParameterDependentDefaultsFacetFromConfiguration
+extends ParameterDependentDefaultsFacetAbstract {
 
-    DependentDefaultsActionFacetFromConfiguration(
+    ParameterDependentDefaultsFacetFromConfiguration(
             final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
         super(value, holder);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
index a4c28db5b1..7a44ee35ef 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
@@ -151,7 +151,7 @@ extends ObjectFeature, CurrentHolder {
     default void reassessDefault(final ParameterNegotiationModel pendingArgs) {
         val paramIndex = getParameterIndex();
         val bindableParamDirtyFlag = pendingArgs.getBindableParamValueDirtyFlag(paramIndex);
-        if(Facets.dependentDefaultsPolicy(getAction()).isUpdateDependent()
+        if(Facets.dependentDefaultsPolicy(this).isUpdateDependent()
                 // always allow when not dirtied by the user (UI)
                 || ! bindableParamDirtyFlag.getValue().booleanValue() ) {
             // reassess defaults honoring defaults semantics
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
index fdf346a7a5..3b2a7e4a3a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
@@ -42,7 +42,6 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
-import org.apache.isis.core.metamodel.facets.actions.action.depdef.DependentDefaultsFacet;
 import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
@@ -67,11 +66,13 @@ import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
+import org.apache.isis.core.metamodel.facets.param.parameter.depdef.ParameterDependentDefaultsFacet;
 import org.apache.isis.core.metamodel.interactions.managed.ManagedProperty;
 import org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationModel;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
 
 import lombok.val;
@@ -171,9 +172,9 @@ public final class Facets {
     }
 
     public static ParameterPolicies.DependentDefaultsPolicy dependentDefaultsPolicy(
-            final ObjectAction action) {
-        return action.lookupFacet(DependentDefaultsFacet.class)
-                .map(DependentDefaultsFacet::value)
+            final ObjectActionParameter parameter) {
+        return parameter.lookupFacet(ParameterDependentDefaultsFacet.class)
+                .map(ParameterDependentDefaultsFacet::value)
                 .orElseGet(ParameterPolicies.DependentDefaultsPolicy::defaultsIfNotSpecifiedOtherwise);
     }