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

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


The following commit(s) were added to refs/heads/CAUSEWAY-3753 by this push:
     new 582ed02bc3 CAUSEWAY-3753: refactors new logic into underlying Param 
Negotiation Model
582ed02bc3 is described below

commit 582ed02bc370a22608a6dd541368355c10440d43
Author: Andi Huber <[email protected]>
AuthorDate: Tue Jun 4 18:50:42 2024 +0200

    CAUSEWAY-3753: refactors new logic into underlying Param Negotiation
    Model
---
 .../managed/ParameterNegotiationModel.java         | 68 ++++++++++++++++++
 .../wicket/model/models/ScalarParameterModel.java  | 84 +---------------------
 2 files changed, 69 insertions(+), 83 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
index aa3fcecfdb..fbcff19c51 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ParameterNegotiationModel.java
@@ -18,6 +18,7 @@
  */
 package org.apache.causeway.core.metamodel.interactions.managed;
 
+import java.util.ArrayList;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Function;
@@ -38,6 +39,8 @@ import 
org.apache.causeway.commons.internal.binding._Observables.LazyObservable;
 import org.apache.causeway.core.metamodel.consent.Consent;
 import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.causeway.core.metamodel.consent.InteractionResult;
+import org.apache.causeway.core.metamodel.consent.InteractionResultSet;
+import org.apache.causeway.core.metamodel.interactions.InteractionUtils;
 import 
org.apache.causeway.core.metamodel.interactions.managed._BindingUtil.TargetFormat;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.object.ManagedObjects;
@@ -493,4 +496,69 @@ public class ParameterNegotiationModel {
 
     }
 
+    /**
+     * TODO this is an intermediate refactoring step 
+     */
+    public String validateDirectly(int parameterIndex, ManagedObject 
proposedArg) {
+        val value = getObservableParamValidation(parameterIndex).getValue();
+        if (value != null) {
+            return value;
+        }
+
+        //
+        // validate individual params
+        //
+
+        final var objectActionParameter = getParamMetamodel(parameterIndex);
+        
+        final var resultSet = new InteractionResultSet();
+        InteractionUtils.isValidResultSet(
+                objectActionParameter, 
+                objectActionParameter.createProposedArgumentInteractionContext(
+                        getHead(), previousOrProposedArgs(parameterIndex, 
proposedArg), parameterIndex, InteractionInitiatedBy.USER), 
+                resultSet);
+        return resultSet.createConsent().getReasonAsString().orElse(null);
+    }
+    
+    // -- HELPER
+
+    /**
+     * Returns a Can of the previous args + the proposed arg.
+     */
+    private Can<ManagedObject> previousOrProposedArgs(
+            final int parameterIndex,
+            final ManagedObject proposedArg) {
+
+        final var objectAction = getHead().getMetaModel();
+        final var paramList = new ArrayList<ManagedObject>();
+
+        final var previousArgs = getParamValues();
+        for (ObjectActionParameter oap : objectAction.getParameters()) {
+            paramList.add(previousOrProposedArg(parameterIndex, oap, 
previousArgs, proposedArg));
+        }
+
+        return Can.ofCollection(paramList);
+    }
+
+    /**
+     * Returns either the relevant previous arg (from the {@link 
#getParameterNegotiationModel() negotiation model}
+     * or the proposed arg if the supplied {@link ObjectActionParameter} 
corresponds
+     *
+     * @param eachOap - each {@link ObjectActionParameter} of the action
+     * @param previousParamArgs - already in the negotiation model, have been 
validated
+     * @param proposedParamArg - current being validated
+     */
+    private ManagedObject previousOrProposedArg(
+            final int parameterIndex, 
+            final ObjectActionParameter eachOap,
+            final Can<ManagedObject> previousParamArgs,
+            final ManagedObject proposedParamArg) {
+
+        return eachOap.getParameterIndex() == parameterIndex 
+            ? proposedParamArg
+            : previousParamArgs
+                .get(eachOap.getParameterIndex())
+                .orElseGet(() -> 
ManagedObject.empty(eachOap.getElementType()));
+    }
+    
 }
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarParameterModel.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarParameterModel.java
index 38ea8e218e..9be245b853 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarParameterModel.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarParameterModel.java
@@ -18,28 +18,18 @@
  */
 package org.apache.causeway.viewer.wicket.model.models;
 
-import java.util.ArrayList;
-
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.core.metamodel.commons.ViewOrEditMode;
-import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.causeway.core.metamodel.consent.InteractionResultSet;
-import 
org.apache.causeway.core.metamodel.interactions.ActionArgValidityContext;
-import org.apache.causeway.core.metamodel.interactions.InteractionUtils;
-import 
org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead;
 import org.apache.causeway.core.metamodel.interactions.managed.ManagedValue;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.spec.ActionScope;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.causeway.viewer.commons.model.scalar.HasUiParameter;
 import 
org.apache.causeway.viewer.wicket.model.models.interaction.act.UiParameterWkt;
 
 import lombok.Getter;
 import lombok.NonNull;
-import lombok.val;
 
 public class ScalarParameterModel
 extends ScalarModel
@@ -69,79 +59,7 @@ implements HasUiParameter {
 
     @Override
     public String validate(final ManagedObject proposedArg) {
-
-        val value = 
getParameterNegotiationModel().getObservableParamValidation(getParameterIndex()).getValue();
-        if (value != null) {
-            return value;
-        }
-
-
-        //
-        // validate individual params
-        //
-        // TODO: this validation could, I think, move to the param negotiation 
model?
-        //
-
-        final var interactionHead = getParameterNegotiationModel().getHead();
-        final var previousOrProposedArgs = previousOrProposedArgs(proposedArg);
-        final var validityContext = validityContext(interactionHead, 
previousOrProposedArgs);
-
-        return validate(validityContext);
-    }
-
-    /**
-     * Returns a Can of the previous args + the proposed arg.
-     */
-    private Can<ManagedObject> previousOrProposedArgs(
-            final ManagedObject proposedArg) {
-
-        final var objectAction = 
getParameterNegotiationModel().getHead().getMetaModel();
-        final var paramList = new ArrayList<ManagedObject>();
-
-        final var previousArgs = 
getParameterNegotiationModel().getParamValues();
-        for (ObjectActionParameter oap : objectAction.getParameters()) {
-            paramList.add(previousOrProposedArg(oap, previousArgs, 
proposedArg));
-        }
-
-        return Can.ofCollection(paramList);
-    }
-
-    /**
-     * Returns either the relevant previous arg (from the {@link 
#getParameterNegotiationModel() negotiation model}
-     * or the proposed arg if the supplied {@link ObjectActionParameter} 
corresponds
-     *
-     * @param eachOap - each {@link ObjectActionParameter} of the action
-     * @param previousParamArgs - already in the negotiation model, have been 
validated
-     * @param proposedParamArg - current being validated
-     */
-    private ManagedObject previousOrProposedArg(
-            final ObjectActionParameter eachOap,
-            final Can<ManagedObject> previousParamArgs,
-            final ManagedObject proposedParamArg) {
-
-        int eachParamIndex = eachOap.getParameterIndex();
-        if(eachParamIndex == getParameterIndex()) {
-            return proposedParamArg;
-        }
-
-        return previousParamArgs.get(eachParamIndex).orElseGet(() -> {
-            ObjectSpecification eachParamType = eachOap.getElementType();
-            return ManagedObject.empty(eachParamType);
-        });
-    }
-
-    private ActionArgValidityContext validityContext(ActionInteractionHead 
interactionHead, Can<ManagedObject> proposedArguments) {
-        final var objectActionParameter = getUiParameter().getMetaModel();
-        return objectActionParameter.createProposedArgumentInteractionContext(
-                    interactionHead, proposedArguments, getParameterIndex(), 
InteractionInitiatedBy.USER);
-    }
-
-    private String validate(ActionArgValidityContext validityContext) {
-        final var objectActionParameter = getUiParameter().getMetaModel();
-        final var resultSet = new InteractionResultSet();
-        InteractionUtils.isValidResultSet(objectActionParameter, 
validityContext, resultSet);
-        final var consent = resultSet.createConsent();
-        return consent.getReasonAsString().orElse(null);
+        return 
getParameterNegotiationModel().validateDirectly(getParameterIndex(), 
proposedArg);
     }
 
     @Override

Reply via email to