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