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 <ahu...@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")); } }