You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/06/24 09:05:01 UTC
[isis] branch master updated: ISIS-3049: fixes choicesFrom semantics only ever getting applied to the first action parameter
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new c483ca71f2 ISIS-3049: fixes choicesFrom semantics only ever getting applied to the first action parameter
c483ca71f2 is described below
commit c483ca71f287734e77026c1f7aa6283677ffae4a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jun 24 11:04:52 2022 +0200
ISIS-3049: fixes choicesFrom semantics only ever getting applied to the
first action parameter
---
.../managed/ActionInteractionHead.java | 29 +++++++++++-----------
.../param/ChoicesAndDefaultsPostProcessor.java | 10 +++++---
.../interact/CollectionInteractionTest.java | 8 +++---
3 files changed, 25 insertions(+), 22 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteractionHead.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteractionHead.java
index 4241baef6d..2e9c43bdd5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteractionHead.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/ActionInteractionHead.java
@@ -121,18 +121,10 @@ implements HasMetaModel<ObjectAction> {
// third pass ... verify we have found a fixed point
final int maxIterations = 3;
- val params = getMetaModel().getParameters();
-
val fixedPoint = fixedPointSearch(
getEmptyParameterValues(),
// vector of packed values - where each is either scalar or non-scalar
- paramVector->
- params
- .map(param->param
- .getDefault(
- ParameterNegotiationModel
- .of(managedAction, paramVector)))
- ,
+ paramVector->iterate(managedAction, paramVector),
maxIterations);
if(fixedPoint.isRight()) {
@@ -140,7 +132,7 @@ implements HasMetaModel<ObjectAction> {
+ "parameter defaults on action {}.", getMetaModel());
}
- return modelForParamValues(managedAction,
+ return ParameterNegotiationModel.of(managedAction,
fixedPoint.fold(
left->left,
right->right));
@@ -148,14 +140,21 @@ implements HasMetaModel<ObjectAction> {
// -- HELPER
- private ParameterNegotiationModel modelForParamValues(
- final ManagedAction managedAction,
- @NonNull final Can<ManagedObject> paramValues) {
- return ParameterNegotiationModel.of(managedAction, paramValues);
+ /**
+ * (defaults) fixed point search iteration step
+ */
+ private Can<ManagedObject> iterate(
+ final @NonNull ManagedAction managedAction,
+ final @NonNull Can<ManagedObject> paramVector) {
+
+ val pendingParamModel = ParameterNegotiationModel.of(managedAction, paramVector);
+
+ return getMetaModel().getParameters()
+ .map(param->param.getDefault(pendingParamModel));
}
/**
- * Returns either a fixed point or the last iteration.
+ * Returns either a fixed point (left) or the last iteration (right).
*/
private static <T> Either<T, T> fixedPointSearch(
final T start,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
index 9e02a71689..ce2aca78c1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ChoicesAndDefaultsPostProcessor.java
@@ -48,7 +48,13 @@ import lombok.val;
* {@link ActionParameterDefaultsFacet} and {@link ActionParameterChoicesFacet},
* as well as
* {@link PropertyDefaultFacet} and {@link PropertyChoicesFacet}.
+ *
+ * @deprecated this post-processor should be converted into a facet factory instead,
+ * as we now have a notion facet precedence e.g. install
+ * ActionParameterDefaultsFacetFromAssociatedCollection with LOW precedence
+ * and everything should just work fine
*/
+@Deprecated
public class ChoicesAndDefaultsPostProcessor
extends ObjectSpecificationPostProcessorAbstract {
@@ -157,9 +163,7 @@ extends ObjectSpecificationPostProcessorAbstract {
private static void addCollectionParamDefaultsFacetIfNoneAlready(
final ObjectActionParameter collectionParam) {
- // with current programming model this can only be the first parameter of an action dialog
- if(collectionParam.getParameterIndex()==0
- && !hasMemberLevelDefaults(collectionParam)) {
+ if(!hasMemberLevelDefaults(collectionParam)) {
FacetUtil.addFacet(
ActionParameterDefaultsFacetFromAssociatedCollection
.create(collectionParam));
diff --git a/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/CollectionInteractionTest.java b/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/CollectionInteractionTest.java
index 7dd0eaf15b..01e8e8c016 100644
--- a/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/CollectionInteractionTest.java
+++ b/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/CollectionInteractionTest.java
@@ -21,7 +21,6 @@ package org.apache.isis.testdomain.interact;
import java.util.List;
import java.util.stream.Collectors;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
@@ -106,7 +105,8 @@ class CollectionInteractionTest extends InteractionTestAbstract {
}
- @Test @Disabled("fails when model has more than 1 param") //FIXME[ISIS-3049]
+ @Test
+ //@Disabled("fails when model has more than 1 param") //FIXME[ISIS-3049]
void choicesFromMultiselect() {
val collTester =
@@ -141,8 +141,8 @@ class CollectionInteractionTest extends InteractionTestAbstract {
// verify param defaults are seeded with choices from selection
actTester.assertParameterValues(true,
- arg0->assertEquals(expectedParamDefault, arg0),
- arg1->assertEquals(expectedParamDefault, arg1));
+ arg0->assertEquals(expectedParamDefault, arg0, ()->"param 0 mismatch"),
+ arg1->assertEquals(expectedParamDefault, arg1, ()->"param 1 mismatch"));
}
}