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 2020/01/05 22:18:53 UTC
[isis] branch master updated: ISIS-2257: relaxes MM Validation when
associated 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 a12f096 ISIS-2257: relaxes MM Validation when associated action parameter
a12f096 is described below
commit a12f096b70a1d49589c0904fd16179f574f58156
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Jan 5 23:18:42 2020 +0100
ISIS-2257: relaxes MM Validation when associated action parameter
---
...nChoicesForCollectionParameterFacetFactory.java | 153 +++++++++++----------
.../dom/actions/assoc/AssociatedActionDemo.java | 7 -
2 files changed, 80 insertions(+), 80 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
index a9039a7..206a6e5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
@@ -22,6 +22,7 @@ package org.apache.isis.metamodel.facets.actions.action;
import org.apache.isis.metamodel.facetapi.FeatureType;
import org.apache.isis.metamodel.facetapi.MetaModelRefiner;
import org.apache.isis.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.metamodel.facets.actions.action.associateWith.AssociatedWithFacet;
import org.apache.isis.metamodel.facets.collparam.semantics.CollectionSemanticsFacet;
import org.apache.isis.metamodel.facets.object.autocomplete.AutoCompleteFacet;
import org.apache.isis.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
@@ -63,91 +64,97 @@ implements MetaModelRefiner {
return;
}
- programmingModel.addValidator(
+ val vistingValidator = new MetaModelValidatorVisiting.Visitor() {
+
+ @Override
+ public boolean visit(
+ final ObjectSpecification objectSpec,
+ final MetaModelValidator validator) {
- new MetaModelValidatorVisiting.Visitor() {
- @Override
- public boolean visit(
- final ObjectSpecification objectSpec,
- final MetaModelValidator validator) {
- validate(objectSpec, validator);
- return true;
- }
+ validate(objectSpec, validator);
+ return true;
+ }
- private void validate(
- final ObjectSpecification objectSpec,
- final MetaModelValidator validator) {
- objectSpec.streamObjectActions(Contributed.INCLUDED)
- .forEach(objectAction->{
- if(objectAction instanceof ObjectActionMixedIn || objectAction instanceof ObjectActionContributee) {
- // we'll report only the mixin or contributor
- return;
- }
-
- int paramNum = 0;
- for (ObjectActionParameter parameter : objectAction.getParameters()) {
- if(parameter.getFeatureType() == FeatureType.ACTION_PARAMETER_COLLECTION) {
- validate(objectSpec, objectAction, parameter, paramNum, validator);
- }
- paramNum++;
- }
- });
+ private void validate(
+ final ObjectSpecification objectSpec,
+ final MetaModelValidator validator) {
+
+ objectSpec.streamObjectActions(Contributed.INCLUDED)
+ .forEach(objectAction->{
+ if(objectAction instanceof ObjectActionMixedIn
+ || objectAction instanceof ObjectActionContributee) {
+ // we'll report only the mixin or contributor
+ return;
}
- private void validate(
- final ObjectSpecification objectSpec,
- final ObjectAction objectAction,
- final ObjectActionParameter parameter,
- final int paramNum,
- final MetaModelValidator validator) {
-
-
- final CollectionSemanticsFacet collectionSemantics =
- parameter.getFacet(CollectionSemanticsFacet.class);
- if (collectionSemantics != null) {
- // Violation if there are action parameter types that are assignable
- // from java.util.Collection but are not of
- // exact type List, Set, SortedSet or Collection.
- if(!collectionSemantics.value().isSupportedInterfaceForActionParameters()) {
- validator.onFailure(
- objectSpec,
- objectSpec.getIdentifier(),
- "Collection action parameter found that is not exactly one "
- + "of the following supported types: "
- + "List, Set, SortedSet, Collection or Array. "
- + "Class: %s action: %s parameter %d",
- objectSpec.getFullIdentifier(),
- objectAction.getName(),
- paramNum);
- return;
- }
+ int paramNum = 0;
+ for (ObjectActionParameter parameter : objectAction.getParameters()) {
+ if(parameter.getFeatureType() == FeatureType.ACTION_PARAMETER_COLLECTION) {
+ validateActionParameter_whenCollection(
+ objectSpec, objectAction, parameter, paramNum, validator);
}
-
- final ActionParameterChoicesFacet choicesFacet =
- parameter.getFacet(ActionParameterChoicesFacet.class);
- final ActionParameterAutoCompleteFacet autoCompleteFacet =
- parameter.getFacet(ActionParameterAutoCompleteFacet.class);
- if (choicesFacet != null || autoCompleteFacet != null) {
- return;
- }
-
- final ObjectSpecification parameterType = parameter.getSpecification();
- if(parameterType.containsNonFallbackFacet(AutoCompleteFacet.class)) {
- return;
- }
-
+ paramNum++;
+ }
+ });
+ }
+
+ private void validateActionParameter_whenCollection(
+ final ObjectSpecification objectSpec,
+ final ObjectAction objectAction,
+ final ObjectActionParameter parameter,
+ final int paramNum,
+ final MetaModelValidator validator) {
+
+
+ val collectionSemanticsFacet = parameter.getFacet(CollectionSemanticsFacet.class);
+ if (collectionSemanticsFacet != null) {
+ // Violation if there are action parameter types that are assignable
+ // from java.util.Collection but are not of
+ // exact type List, Set, SortedSet or Collection.
+ if(!collectionSemanticsFacet.value().isSupportedInterfaceForActionParameters()) {
validator.onFailure(
objectSpec,
objectSpec.getIdentifier(),
- "Collection action parameter found without supporting "
- + "choices or autoComplete facet. "
+ "Collection action parameter found that is not exactly one "
+ + "of the following supported types: "
+ + "List, Set, SortedSet, Collection or Array. "
+ "Class: %s action: %s parameter %d",
+ objectSpec.getFullIdentifier(),
+ objectAction.getName(),
+ paramNum);
+ return;
+ }
+ }
+
+ val actionParameterChoicesFacet = parameter.getFacet(ActionParameterChoicesFacet.class);
+ val actionParameterAutoCompleteFacet = parameter.getFacet(ActionParameterAutoCompleteFacet.class);
+ if (actionParameterChoicesFacet != null || actionParameterAutoCompleteFacet != null) {
+ return;
+ }
+
+ val parameterSpec = parameter.getSpecification();
+ if(parameterSpec.containsNonFallbackFacet(AutoCompleteFacet.class)) {
+ return;
+ }
+
+ if(paramNum==0 && objectAction.containsNonFallbackFacet(AssociatedWithFacet.class)) {
+ return;
+ }
+
+ validator.onFailure(
+ objectSpec,
+ objectSpec.getIdentifier(),
+ "Collection action parameter found without supporting "
+ + "choices or autoComplete facet. "
+ + "Class: %s action: %s parameter %d",
objectSpec.getFullIdentifier(),
objectAction.getName(),
paramNum);
- }
- });
-
+ }
+ };
+
+ programmingModel.addValidator(vistingValidator);
+
}
}
diff --git a/examples/demo/src/main/java/demoapp/dom/actions/assoc/AssociatedActionDemo.java b/examples/demo/src/main/java/demoapp/dom/actions/assoc/AssociatedActionDemo.java
index b1ee14a..6be9ec0 100644
--- a/examples/demo/src/main/java/demoapp/dom/actions/assoc/AssociatedActionDemo.java
+++ b/examples/demo/src/main/java/demoapp/dom/actions/assoc/AssociatedActionDemo.java
@@ -18,7 +18,6 @@
*/
package demoapp.dom.actions.assoc;
-import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
@@ -36,7 +35,6 @@ import org.apache.isis.applib.annotation.Editing;
import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.incubator.model.applib.annotation.Model;
import lombok.Getter;
@@ -70,10 +68,5 @@ public class AssociatedActionDemo extends DemoStub {
items.add(DemoItem.of("third"));
items.add(DemoItem.of("last"));
}
-
- @Model //FIXME just a workaround, remove this supporting method!
- public Set<DemoItem> choices0DoSomethingWithItems() {
- return Collections.emptySet();
- }
}