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/07/11 16:12:32 UTC
[isis] branch master updated: ISIS-3049: properly propagate ChoicesFrom facets from actions to their parameters (post-processing)
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 560537515a ISIS-3049: properly propagate ChoicesFrom facets from actions to their parameters (post-processing)
560537515a is described below
commit 560537515a174a61bf5101ff19db4f87d042a7be
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jul 11 18:12:25 2022 +0200
ISIS-3049: properly propagate ChoicesFrom facets from actions to their
parameters (post-processing)
- also purge ActionParameterChoicesFacetNone
---
.../action/ActionAnnotationFacetFactory.java | 2 +-
.../ChoicesFromFacet.java | 2 +-
.../ChoicesFromFacetAbstract.java | 2 +-
.../ChoicesFromFacetForActionAnnotation.java | 2 +-
.../param/choices/ActionParameterChoicesFacet.java | 3 +-
...ctionParameterChoicesFacetFromChoicesFacet.java | 11 ++---
...ParameterChoicesFacetFromChoicesFromFacet.java} | 32 +++++++++++--
...rameterChoicesFacetFromChoicesFacetFactory.java | 53 ---------------------
...arameterChoicesFacetFromParentedCollection.java | 2 +-
.../param/ChoicesAndDefaultsPostProcessor.java | 25 +++++++---
.../core/metamodel/spec/feature/ObjectAction.java | 13 ++---
.../DomainModelTest_usingGoodDomain.java | 28 +++++++++--
.../domainmodel/MetaModelRegressionTest.java | 3 +-
.../src/test/resources/metamodel.xml.zip | Bin 91164 -> 91173 bytes
.../model/good/ProperChoicesWhenChoicesFrom.java | 4 +-
15 files changed, 87 insertions(+), 95 deletions(-)
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 0dde330b5d..8e5b9292f3 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
@@ -30,7 +30,7 @@ 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.actcoll.typeof.TypeOfFacet;
-import org.apache.isis.core.metamodel.facets.actions.action.associateWith.ChoicesFromFacetForActionAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.action.choicesfrom.ChoicesFromFacetForActionAnnotation;
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;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/ChoicesFromFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/choicesfrom/ChoicesFromFacet.java
similarity index 93%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/ChoicesFromFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/choicesfrom/ChoicesFromFacet.java
index 84b93b9ded..5c4708c685 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/ChoicesFromFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/choicesfrom/ChoicesFromFacet.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.actions.action.associateWith;
+package org.apache.isis.core.metamodel.facets.actions.action.choicesfrom;
import org.apache.isis.core.metamodel.facets.SingleStringValueFacet;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/ChoicesFromFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/choicesfrom/ChoicesFromFacetAbstract.java
similarity index 95%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/ChoicesFromFacetAbstract.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/choicesfrom/ChoicesFromFacetAbstract.java
index bdc0a362ca..33283de363 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/ChoicesFromFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/choicesfrom/ChoicesFromFacetAbstract.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.actions.action.associateWith;
+package org.apache.isis.core.metamodel.facets.actions.action.choicesfrom;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/ChoicesFromFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/choicesfrom/ChoicesFromFacetForActionAnnotation.java
similarity index 95%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/ChoicesFromFacetForActionAnnotation.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/choicesfrom/ChoicesFromFacetForActionAnnotation.java
index 98e57350e7..273e0d4793 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/associateWith/ChoicesFromFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/choicesfrom/ChoicesFromFacetForActionAnnotation.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.actions.action.associateWith;
+package org.apache.isis.core.metamodel.facets.actions.action.choicesfrom;
import java.util.Optional;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
index eeafc35c66..652fafe8a3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
@@ -27,7 +27,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
/**
* Obtain choices for each of the parameters of the action.
- *
* <p>
* In the standard Apache Isis Programming Model, corresponds to invoking the
* <tt>choicesNXxx</tt> support method for an action (where N is the 0-based
@@ -35,7 +34,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
*/
public interface ActionParameterChoicesFacet extends Facet {
- public Can<ManagedObject> getChoices(
+ Can<ManagedObject> getChoices(
ObjectSpecification requiredSpec,
ActionInteractionHead head,
Can<ManagedObject> pendingArgs,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFacet.java
similarity index 83%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFacet.java
index 3a1eda9194..5232693a9a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFacet.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.param.choices.enums;
+package org.apache.isis.core.metamodel.facets.param.choices;
import java.util.Optional;
@@ -24,7 +24,6 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
-import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -32,11 +31,11 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
public class ActionParameterChoicesFacetFromChoicesFacet
extends ActionParameterChoicesFacetAbstract {
- public static Optional<ActionParameterChoicesFacetAbstract> create(
- final Optional<ChoicesFacet> choicesFacet,
+ public static Optional<ActionParameterChoicesFacet> create(
+ final Optional<ChoicesFacet> choicesFacetIfAny,
final FacetHolder facetHolder) {
- return choicesFacet
- .map(choicesFct->new ActionParameterChoicesFacetFromChoicesFacet(choicesFct, facetHolder));
+ return choicesFacetIfAny
+ .map(choicesFacet->new ActionParameterChoicesFacetFromChoicesFacet(choicesFacet, facetHolder));
}
private final ChoicesFacet choicesFacet;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFromFacet.java
similarity index 54%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFromFacet.java
index 40a85e87b1..522e9bda3a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/ActionParameterChoicesFacetFromChoicesFromFacet.java
@@ -18,18 +18,41 @@
*/
package org.apache.isis.core.metamodel.facets.param.choices;
+import java.util.Optional;
+
import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.action.choicesfrom.ChoicesFromFacet;
+import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
import org.apache.isis.core.metamodel.interactions.managed.ActionInteractionHead;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+
+import lombok.val;
-public class ActionParameterChoicesFacetNone
+public class ActionParameterChoicesFacetFromChoicesFromFacet
extends ActionParameterChoicesFacetAbstract {
- public ActionParameterChoicesFacetNone(final FacetHolder holder) {
- super(holder, Precedence.FALLBACK);
+ public static Optional<ActionParameterChoicesFacet> create(
+ final Optional<ChoicesFromFacet> choicesFromFacetIfAny,
+ final ObjectSpecification actionOwnerSpec,
+ final FacetHolder facetHolder) {
+ return choicesFromFacetIfAny
+ .map(ChoicesFromFacet::value)
+ .flatMap(actionOwnerSpec::getCollection)
+ .map(coll->
+ new ActionParameterChoicesFacetFromChoicesFromFacet(coll, facetHolder));
+ }
+
+ private final OneToManyAssociation choicesFromCollection;
+
+ private ActionParameterChoicesFacetFromChoicesFromFacet(
+ final OneToManyAssociation choicesFromCollection,
+ final FacetHolder holder) {
+ super(holder, Precedence.LOW);
+ this.choicesFromCollection = choicesFromCollection;
}
@Override
@@ -39,7 +62,8 @@ extends ActionParameterChoicesFacetAbstract {
final Can<ManagedObject> pendingArgs,
final InteractionInitiatedBy interactionInitiatedBy) {
- return Can.empty();
+ val collectionAsObject = choicesFromCollection.get(head.getOwner(), interactionInitiatedBy);
+ return CollectionFacet.streamAdapters(collectionAsObject).collect(Can.toCan());
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacetFactory.java
deleted file mode 100644
index cf45962c0e..0000000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetFromChoicesFacetFactory.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.isis.core.metamodel.facets.param.choices.enums;
-
-import javax.inject.Inject;
-
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
-
-import lombok.val;
-
-public class ActionParameterChoicesFacetFromChoicesFacetFactory
-extends FacetFactoryAbstract {
-
- @Inject
- public ActionParameterChoicesFacetFromChoicesFacetFactory(final MetaModelContext mmc) {
- super(mmc, FeatureType.PARAMETERS_ONLY);
- }
-
- @Override
- public void processParams(final ProcessParameterContext processParameterContext) {
-
- val paramType = processParameterContext.getParameterType();
-
- val choicesFacetIfAny = getSpecificationLoader().loadSpecification(paramType)
- .lookupNonFallbackFacet(ChoicesFacet.class);
-
- FacetUtil.addFacetIfPresent(
- ActionParameterChoicesFacetFromChoicesFacet
- .create(choicesFacetIfAny, processParameterContext.getFacetHolder()));
- }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
index 7d3eabb50f..08f1f5ccc8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
@@ -58,6 +58,6 @@ extends ActionParameterChoicesFacetAbstract {
@Override
public void visitAttributes(final BiConsumer<String, Object> visitor) {
super.visitAttributes(visitor);
- visitor.accept("oneToManyAssociation", coll);
+ visitor.accept("oneToManyAssociation", coll.getId());
}
}
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 d73723c355..2780fef2b6 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
@@ -22,11 +22,13 @@ import javax.inject.Inject;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facets.actions.action.choicesfrom.ChoicesFromFacet;
import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
-import org.apache.isis.core.metamodel.facets.param.choices.enums.ActionParameterChoicesFacetFromChoicesFacet;
+import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetFromChoicesFacet;
+import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetFromChoicesFromFacet;
import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacet;
import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacet;
@@ -49,12 +51,7 @@ import lombok.val;
* 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 of facet precedence e.g. install
- * ActionParameterDefaultsFacetFromAssociatedCollection with LOW precedence
- * and everything should just work fine
*/
-@Deprecated
public class ChoicesAndDefaultsPostProcessor
extends ObjectSpecificationPostProcessorAbstract {
@@ -70,7 +67,21 @@ extends ObjectSpecificationPostProcessorAbstract {
final ObjectActionParameter param) {
if(!hasMemberLevelChoices(param)) {
- //TODO not used: ActionParameterChoicesFacetFromChoicesFacetFactory
+ // if available on action, installs as a low precedence facets onto the parameters,
+ // so can be overwritten by member support (imperative) choices
+ val choicesFromFacetIfAny = objectAction
+ .lookupFacet(ChoicesFromFacet.class);
+
+ if(FacetUtil
+ .addFacetIfPresent(
+ ActionParameterChoicesFacetFromChoicesFromFacet
+ .create(choicesFromFacetIfAny, objectSpecification, peerFor(param)))
+ .isPresent()) {
+
+ // ActionParameterChoicesFacetFromChoicesFromFacet has precedence over
+ // ActionParameterChoicesFacetFromChoicesFacet, so stop processing here
+ return;
+ }
val choicesFacetIfAny = param.getElementType()
.lookupNonFallbackFacet(ChoicesFacet.class);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index 905d19d5d6..619282844d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -39,7 +39,7 @@ import org.apache.isis.core.config.IsisConfiguration.Viewer.Wicket;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.consent.InteractionResultSet;
-import org.apache.isis.core.metamodel.facets.actions.action.associateWith.ChoicesFromFacet;
+import org.apache.isis.core.metamodel.facets.actions.action.choicesfrom.ChoicesFromFacet;
import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet;
import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFactory;
@@ -478,7 +478,7 @@ public interface ObjectAction extends ObjectMember {
val elementType = collection.getElementType();
- return new ChoicesFrom(collection)
+ return new HasChoicesFrom(collection)
.and(new HasParameterMatching(
new ObjectActionParameter.Predicates.CollectionParameter(elementType)
));
@@ -486,14 +486,11 @@ public interface ObjectAction extends ObjectMember {
// -- HELPER
- private static class ChoicesFrom implements Predicate<ObjectAction> {
+ private static class HasChoicesFrom implements Predicate<ObjectAction> {
private final @NonNull String memberId;
-// private final @NonNull String memberName;
-
- public ChoicesFrom(final @NonNull ObjectAssociation objectAssociation) {
+ public HasChoicesFrom(final @NonNull ObjectAssociation objectAssociation) {
this.memberId = _Strings.nullToEmpty(objectAssociation.getId()).toLowerCase();
-// this.memberName = _Strings.nullToEmpty(objectAssociation.getName()).toLowerCase();
}
@Override
@@ -507,8 +504,6 @@ public interface ObjectAction extends ObjectMember {
return false;
}
val memberNameLowerCase = choicesFromMemberName.toLowerCase();
-// return Objects.equals(memberName, memberNameLowerCase)
-// || Objects.equals(memberId, memberNameLowerCase);
return Objects.equals(memberId, memberNameLowerCase);
}
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index c7ac27dd33..624fb13760 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -60,9 +60,9 @@ import org.apache.isis.core.metamodel.facets.object.introspection.IntrospectionP
import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
+import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacetFromChoicesFromFacet;
import org.apache.isis.core.metamodel.facets.param.choices.methodnum.ActionParameterChoicesFacetViaMethod;
import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
-import org.apache.isis.core.metamodel.postprocessors.param.ActionParameterChoicesFacetFromParentedCollection;
import org.apache.isis.core.metamodel.postprocessors.param.ActionParameterDefaultsFacetFromAssociatedCollection;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -434,6 +434,8 @@ class DomainModelTest_usingGoodDomain {
assertHasProperty(i2Spec, "f");
}
+ //FIXME[ISIS-3049]
+ @DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true")
@Test
void actionParamChoices_shouldBeAllowed_toBeDerivedFromChoicesFrom() {
@@ -443,7 +445,7 @@ class DomainModelTest_usingGoodDomain {
val param0 = action.getParameters().getFirstOrFail();
assertEquals(
- ActionParameterChoicesFacetFromParentedCollection.class,
+ ActionParameterChoicesFacetFromChoicesFromFacet.class,
param0.lookupFacet(ActionParameterChoicesFacet.class)
.map(Object::getClass)
.orElse(null));
@@ -486,8 +488,6 @@ class DomainModelTest_usingGoodDomain {
.orElse(null));
}
- //FIXME[ISIS-3049]
- @DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true")
/**
* annotation provided 'choicesFrom' fallback, if no explicit choices member-support is given
* (that are params #1 and #3)
@@ -500,6 +500,24 @@ class DomainModelTest_usingGoodDomain {
.actionTester(ProperMemberSupport.class, "action6");
actTester.assertExists(true);
+ // low-level MM inspection
+ {
+ val action = actTester.getActionMetaModelElseFail();
+ action.getParameters()
+ .forEach(param->{
+
+ assertTrue(param.getAction().isMixedIn(), ()->String.format(
+ "param %d is expected to belong to a mixed-in action",
+ param.getParameterIndex()));
+
+ val choicesFacet = param.getFacet(ActionParameterChoicesFacet.class);
+
+ assertNotNull(choicesFacet, ()->String.format(
+ "param %d is expected to have a ActionParameterChoicesFacet",
+ param.getParameterIndex()));
+ });
+ }
+
val mixee = actTester.getActionOwnerAs(ProperMemberSupport.class);
mixee.setMyColl(List.of(
"Hallo",
@@ -509,7 +527,7 @@ class DomainModelTest_usingGoodDomain {
"Hallo",
"World");
- // verify param choices from 'choicesFrom' action annotation attribute
+ // verify param choices from 'choicesFrom' action annotation attribute (param params #1 and #3)
actTester.assertParameterChoices(true, String.class,
choices0->assertEquals(expectedParamChoices, Can.ofIterable(choices0), ()->"param 0 choices mismatch"),
choices1->assertEquals(expectedParamChoices, Can.ofIterable(choices1), ()->"param 1 choices mismatch"),
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/MetaModelRegressionTest.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/MetaModelRegressionTest.java
index 2478a7b0b5..8218e15d61 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/MetaModelRegressionTest.java
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/MetaModelRegressionTest.java
@@ -29,7 +29,6 @@ import javax.inject.Inject;
import org.assertj.core.api.Assumptions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
@@ -66,7 +65,7 @@ import lombok.val;
IsisPresets.SilenceProgrammingModel
})
//uncomment if intended only for manual verification.
-@DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true")
+//@DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true")
class MetaModelRegressionTest {
@Inject MetaModelServiceMenu metaModelServiceMenu;
diff --git a/regressiontests/stable-domainmodel/src/test/resources/metamodel.xml.zip b/regressiontests/stable-domainmodel/src/test/resources/metamodel.xml.zip
index 86b57f154f..fc5754381a 100644
Binary files a/regressiontests/stable-domainmodel/src/test/resources/metamodel.xml.zip and b/regressiontests/stable-domainmodel/src/test/resources/metamodel.xml.zip differ
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperChoicesWhenChoicesFrom.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperChoicesWhenChoicesFrom.java
index 58e3a2486d..7f5230a800 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperChoicesWhenChoicesFrom.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperChoicesWhenChoicesFrom.java
@@ -38,10 +38,10 @@ public class ProperChoicesWhenChoicesFrom {
// expected to pass MM validation, even though there are no member-support methods
// that would provide parameter choices (for 'input'), instead @Action(choicesFrom = "candidates")
// should be sufficient to derive both
- // 1. ActionParameterChoicesFacetFromParentedCollection
+ // 1. ActionParameterChoicesFacetFromChoicesFromFacet
// 2. ActionParameterDefaultsFacetFromAssociatedCollection
@Action(choicesFrom = "candidates")
- public List<String> appendACharacterToCandidates(List<String> input) {
+ public List<String> appendACharacterToCandidates(final List<String> input) {
return input.stream()
.map(candidate->candidate + "!")
.collect(Collectors.toList());