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 2021/09/07 21:07:15 UTC
[isis] branch master updated: ISIS-2774: polishing all
MemberSupportFacetFactories
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 cae08e9 ISIS-2774: polishing all MemberSupportFacetFactories
cae08e9 is described below
commit cae08e9e29b1ee70031229128337ec491e092af8
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Sep 7 23:07:06 2021 +0200
ISIS-2774: polishing all MemberSupportFacetFactories
also removes config option that allows disableXxx/hideXxx to declare all
params when supporting an action
(marked deprecated)
---
.../isis/commons/collections/ImmutableEnumSet.java | 12 ++++
.../apache/isis/core/config/IsisConfiguration.java | 6 +-
.../progmodel/ProgrammingModelConstants.java | 7 +-
.../isis/core/metamodel/facets/ActionSupport.java | 4 +-
.../metamodel/facets/FacetFactoryAbstract.java | 2 +-
.../ActionValidationFacetViaMethodFactory.java | 37 ++++++----
.../DescribedAsFacetForMemberViaMethodFactory.java | 53 +++++---------
.../method/DisableForContextFacetViaMethod.java | 10 +--
.../DisableForContextFacetViaMethodFactory.java | 81 +++++-----------------
.../HideForContextFacetViaMethodFactory.java | 74 +++++---------------
.../NamedFacetForMemberViaMethodFactory.java | 53 +++++---------
.../support/MemberSupportFacetFactoryAbstract.java | 58 +++++++---------
...ActionParameterSupportFacetFactoryAbstract.java | 2 +-
.../PropertyAutoCompleteFacetMethodFactory.java | 60 ++++++----------
.../PropertyChoicesFacetViaMethodFactory.java | 59 ++++++----------
.../PropertyDefaultFacetViaMethodFactory.java | 56 +++++----------
.../method/PropertyValidateFacetViaMethod.java | 4 +-
.../PropertyValidateFacetViaMethodFactory.java | 50 +++++--------
.../MethodPrefixBasedFacetFactoryAbstract.java | 15 ++--
...nnotationFacetFactoryTest_ActionInvocation.java | 4 +-
20 files changed, 240 insertions(+), 407 deletions(-)
diff --git a/commons/src/main/java/org/apache/isis/commons/collections/ImmutableEnumSet.java b/commons/src/main/java/org/apache/isis/commons/collections/ImmutableEnumSet.java
index 745c8e3..7e7a360 100644
--- a/commons/src/main/java/org/apache/isis/commons/collections/ImmutableEnumSet.java
+++ b/commons/src/main/java/org/apache/isis/commons/collections/ImmutableEnumSet.java
@@ -22,6 +22,8 @@ import java.util.EnumSet;
import java.util.Iterator;
import java.util.stream.Stream;
+import lombok.val;
+
/**
* Immutable variant of {@link EnumSet}
*
@@ -91,4 +93,14 @@ implements Iterable<E>, java.io.Serializable {
return delegate.isEmpty();
}
+ public ImmutableEnumSet<E> add(final E entry) {
+ if(contains(entry)) {
+ return this;
+ }
+ val newEnumSet = delegate.clone();
+ newEnumSet.add(entry);
+ return from(newEnumSet);
+ }
+
+
}
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index be8d488..27ee1a5 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -68,8 +68,6 @@ import org.apache.isis.applib.services.userreg.UserRegistrationService;
import org.apache.isis.applib.services.userui.UserMenu;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.core.config.IsisConfiguration.Core;
-import org.apache.isis.core.config.IsisConfiguration.Viewer;
import org.apache.isis.core.config.metamodel.facets.DefaultViewConfiguration;
import org.apache.isis.core.config.metamodel.facets.EditingObjectsConfiguration;
import org.apache.isis.core.config.metamodel.facets.PublishingPolicies.ActionPublishingPolicy;
@@ -1413,8 +1411,10 @@ public class IsisConfiguration {
* relate to the N-th parameter, and allow up to N-1 parameters to be passed in (allowing the Nth
* parameter to be dynamically hidden or disabled).
* </p>
+ * @deprecated this option is ignored by the framework, behavior is now fixated to noParamsOnly = true
*/
- private boolean noParamsOnly = false;
+ @Deprecated(forRemoval = true, since = "2.0.0-M7")
+ private boolean noParamsOnly = true;
/**
* Whether to validate that any actions that accept action parameters have either a corresponding
diff --git a/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java b/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
index 914a632..7233fd3 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
@@ -42,6 +42,7 @@ import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Strings;
import lombok.Getter;
+import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.val;
@@ -140,7 +141,7 @@ public final class ProgrammingModelConstants {
}
private final Can<Class<?>> returnTypes;
- public static Can<Class<?>> nonScalar(final Class<?> elementReturnType) {
+ public static Can<Class<?>> nonScalar(final @NonNull Class<?> elementReturnType) {
return Can.<Class<?>>of(
Can.class,
Collection.class,
@@ -196,10 +197,10 @@ public final class ProgrammingModelConstants {
MemberSupportPrefix(
final ReturnType parameterSearchReturnType,
final String ...methodNamePrefixes) {
- this.parameterSearchReturnType = parameterSearchReturnType;
+ this.supportMethodReturnType = parameterSearchReturnType;
this.methodNamePrefixes = Can.of(methodNamePrefixes);
}
- private final ReturnType parameterSearchReturnType;
+ private final ReturnType supportMethodReturnType;
private final Can<String> methodNamePrefixes;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ActionSupport.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ActionSupport.java
index 0ad990f..64f02ad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ActionSupport.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ActionSupport.java
@@ -211,11 +211,11 @@ public final class ActionSupport {
val paramTypesConsidered = paramsConsidered<paramTypes.length
? Arrays.copyOf(paramTypes, paramsConsidered)
- : paramTypes;
+ : paramTypes;
val withAdditional = additionalParamType!=null
? _Arrays.combine(paramTypesConsidered, additionalParamType)
- : paramTypesConsidered;
+ : paramTypesConsidered;
return withAdditional;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
index 8c7d0bd..e4d5090 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
@@ -85,7 +85,7 @@ implements FacetFactory, HasMetaModelContext {
// -- METHOD UTILITITES
- protected static final Class<?> NO_RETURN = null;
+ protected static final Class<?> ANY_RETURN = null;
protected static final Class<?>[] NO_ARG = new Class<?>[0];
protected static final Class<?>[] STRING_ARG = new Class<?>[] {String.class};
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java
index 5ef9662..6d32713 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethodFactory.java
@@ -22,12 +22,13 @@ import java.util.EnumSet;
import javax.inject.Inject;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
+import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.ReturnType;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchResult;
+import org.apache.isis.core.metamodel.facets.ActionSupport;
import org.apache.isis.core.metamodel.facets.ActionSupport.SearchAlgorithm;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.isis.core.metamodel.facets.param.validate.method.ActionParameterValidationFacetViaMethod;
@@ -41,20 +42,30 @@ extends MemberSupportFacetFactoryAbstract {
@Inject
public ActionValidationFacetViaMethodFactory(final MetaModelContext mmc) {
- super(mmc, FeatureType.ACTIONS_ONLY, MemberSupportPrefix.VALIDATE, searchOptions->
- searchOptions
- .searchAlgorithms(EnumSet.of(SearchAlgorithm.PPM, SearchAlgorithm.ALL_PARAM_TYPES)));
+ super(mmc, FeatureType.ACTIONS_ONLY, MemberSupportPrefix.VALIDATE);
}
@Override
- protected void onSearchResult(
- final FacetedMethod facetHolder,
- final ActionSupportingMethodSearchResult searchResult) {
- val validateMethod = searchResult.getSupportingMethod();
- val ppmFactory = searchResult.getPpmFactory();
- addFacet(
- new ActionValidationFacetViaMethod(
- validateMethod, ppmFactory, facetHolder));
+ protected void search(
+ final ProcessMethodContext processMethodContext,
+ final Can<String> methodNameCandidates) {
+
+ val searchRequest = ActionSupport.ActionSupportingMethodSearchRequest.builder()
+ .processMethodContext(processMethodContext)
+ .returnType(ReturnType.TEXT)
+ .methodNames(methodNameCandidates)
+ .searchAlgorithms(EnumSet.of(SearchAlgorithm.PPM, SearchAlgorithm.ALL_PARAM_TYPES))
+ .build();
+
+ ActionSupport.findActionSupportingMethods(searchRequest, searchResult -> {
+ val validateMethod = searchResult.getSupportingMethod();
+ processMethodContext.removeMethod(validateMethod);
+ val ppmFactory = searchResult.getPpmFactory();
+ addFacet(
+ new ActionValidationFacetViaMethod(
+ validateMethod, ppmFactory, processMethodContext.getFacetHolder()));
+ });
+
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java
index 364eda8..57fd567 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/described/method/DescribedAsFacetForMemberViaMethodFactory.java
@@ -20,17 +20,14 @@ package org.apache.isis.core.metamodel.facets.members.described.method;
import javax.inject.Inject;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchResult;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
-import lombok.val;
-
public class DescribedAsFacetForMemberViaMethodFactory
extends MemberSupportFacetFactoryAbstract {
@@ -40,37 +37,23 @@ extends MemberSupportFacetFactoryAbstract {
}
@Override
- public void process(final ProcessMethodContext processMethodContext) {
-
- val cls = processMethodContext.getCls();
- //val actionOrGetter = processMethodContext.getMethod();
-
- val methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
- .flatMap(processMethodContext::memberSupportCandidates);
-
- val describedMethod = MethodFinder.findMethod_returningText(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- NO_ARG)
- .findFirst()
- .orElse(null);
- if (describedMethod == null) {
- return;
- }
- processMethodContext.removeMethod(describedMethod);
-
- addFacet(
- new DescribedAsFacetForMemberViaMethod(
- describedMethod,
- processMethodContext.getFacetHolder()));
- }
-
- @Override
- protected void onSearchResult(final FacetedMethod facetHolder, final ActionSupportingMethodSearchResult searchResult) {
- // TODO Auto-generated method stub
-
+ protected void search(
+ final ProcessMethodContext processMethodContext,
+ final Can<String> methodNameCandidates) {
+
+ MethodFinder
+ .findMethod_returningText(
+ MethodFinderOptions
+ .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ processMethodContext.getCls(),
+ methodNameCandidates,
+ NO_ARG)
+ .peek(processMethodContext::removeMethod)
+ .forEach(describedMethod->{
+ addFacet(
+ new DescribedAsFacetForMemberViaMethod(
+ describedMethod, processMethodContext.getFacetHolder()));
+ });
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
index aa10822..47b24ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
@@ -23,7 +23,6 @@ import java.util.function.BiConsumer;
import org.apache.isis.applib.services.i18n.TranslatableString;
import org.apache.isis.applib.services.i18n.TranslationContext;
-import org.apache.isis.applib.services.i18n.TranslationService;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.ImperativeFacet;
@@ -40,18 +39,15 @@ extends DisableForContextFacetAbstract
implements ImperativeFacet {
@Getter(onMethod_ = {@Override}) private final @NonNull Can<Method> methods;
- private final TranslationService translationService;
private final TranslationContext translationContext;
public DisableForContextFacetViaMethod(
final Method method,
- final TranslationService translationService,
- final TranslationContext translationContext,
final FacetHolder holder) {
super(holder);
this.methods = ImperativeFacet.singleMethod(method);
- this.translationService = translationService;
- this.translationContext = translationContext;
+ this.translationContext =
+ TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier());
}
@Override
@@ -75,7 +71,7 @@ implements ImperativeFacet {
}
if(returnValue instanceof TranslatableString) {
final TranslatableString ts = (TranslatableString) returnValue;
- return ts.translate(translationService, translationContext);
+ return ts.translate(getTranslationService(), translationContext);
}
return null;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java
index a89e4c8..648b887 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethodFactory.java
@@ -18,22 +18,16 @@
*/
package org.apache.isis.core.metamodel.facets.members.disabled.method;
-import java.lang.reflect.Method;
-
import javax.inject.Inject;
-import org.apache.isis.applib.services.i18n.TranslationContext;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchResult;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
-import lombok.val;
-
public class DisableForContextFacetViaMethodFactory
extends MemberSupportFacetFactoryAbstract {
@@ -42,61 +36,24 @@ extends MemberSupportFacetFactoryAbstract {
super(mmc, FeatureType.MEMBERS, MemberSupportPrefix.DISABLE);
}
- @Override
- public void process(final ProcessMethodContext processMethodContext) {
-
- val actionOrGetter = processMethodContext.getMethod();
-
- val cls = processMethodContext.getCls();
-
- Method disableMethod = null;
-
- val methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
- .flatMap(processMethodContext::memberSupportCandidates);
-
- boolean noParamsOnly = getConfiguration().getCore().getMetaModel().getValidator().isNoParamsOnly();
- boolean searchExactMatch = !noParamsOnly;
- if(searchExactMatch) {
- // search for exact match
- disableMethod = MethodFinder.findMethod_returningText(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- actionOrGetter.getParameterTypes())
- .findFirst()
- .orElse(null);
- }
- if (disableMethod == null) {
- // search for no-arg version
- disableMethod = MethodFinder.findMethod_returningText(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- NO_ARG)
- .findFirst()
- .orElse(null);
- }
- if (disableMethod == null) {
- return;
- }
-
- processMethodContext.removeMethod(disableMethod);
-
- val facetHolder = processMethodContext.getFacetHolder();
- val translationService = getTranslationService();
- // sadness: same logic as in I18nFacetFactory
- val translationContext = TranslationContext
- .forTranslationContextHolder(facetHolder.getFeatureIdentifier());
- addFacet(
- new DisableForContextFacetViaMethod(
- disableMethod, translationService, translationContext, facetHolder));
- }
-
- @Override
- protected void onSearchResult(final FacetedMethod facetHolder, final ActionSupportingMethodSearchResult searchResult) {
- // TODO Auto-generated method stub
+ @Override
+ protected void search(
+ final ProcessMethodContext processMethodContext,
+ final Can<String> methodNameCandidates) {
+
+ MethodFinder
+ .findMethod_returningText(
+ MethodFinderOptions
+ .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ processMethodContext.getCls(),
+ methodNameCandidates,
+ NO_ARG)
+ .peek(processMethodContext::removeMethod)
+ .forEach(disableMethod->{
+ addFacet(
+ new DisableForContextFacetViaMethod(
+ disableMethod, processMethodContext.getFacetHolder()));
+ });
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
index a445381..a9e5b40 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethodFactory.java
@@ -18,23 +18,16 @@
*/
package org.apache.isis.core.metamodel.facets.members.hidden.method;
-import java.lang.reflect.Method;
-
import javax.inject.Inject;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchResult;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
-import lombok.val;
-
public class HideForContextFacetViaMethodFactory
extends MemberSupportFacetFactoryAbstract {
@@ -44,53 +37,24 @@ extends MemberSupportFacetFactoryAbstract {
}
@Override
- public void process(final ProcessMethodContext processMethodContext) {
-
- final Method actionOrGetter = processMethodContext.getMethod();
-
- val methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
- .flatMap(processMethodContext::memberSupportCandidates);
-
- val cls = processMethodContext.getCls();
- Method hideMethod = MethodFinder.findMethod(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- boolean.class,
- NO_ARG)
- .findFirst()
- .orElse(null);
- if (hideMethod == null) {
-
- boolean noParamsOnly = getConfiguration().getCore().getMetaModel().getValidator().isNoParamsOnly();
- boolean searchExactMatch = !noParamsOnly;
- if(searchExactMatch) {
- hideMethod = MethodFinder.findMethod(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- boolean.class,
- actionOrGetter.getParameterTypes())
- .findFirst()
- .orElse(null);
- }
- }
-
- if (hideMethod == null) {
- return;
- }
-
- processMethodContext.removeMethod(hideMethod);
-
- final FacetHolder facetedMethod = processMethodContext.getFacetHolder();
- FacetUtil.addFacet(new HideForContextFacetViaMethod(hideMethod, facetedMethod));
- }
-
- @Override
- protected void onSearchResult(final FacetedMethod facetHolder, final ActionSupportingMethodSearchResult searchResult) {
- // TODO Auto-generated method stub
+ protected void search(
+ final ProcessMethodContext processMethodContext,
+ final Can<String> methodNameCandidates) {
+
+ MethodFinder
+ .findMethod(
+ MethodFinderOptions
+ .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ processMethodContext.getCls(),
+ methodNameCandidates,
+ boolean.class,
+ NO_ARG)
+ .peek(processMethodContext::removeMethod)
+ .forEach(hideMethod->{
+ addFacet(
+ new HideForContextFacetViaMethod(
+ hideMethod, processMethodContext.getFacetHolder()));
+ });
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java
index a3d2c93..a9b70dd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/named/method/NamedFacetForMemberViaMethodFactory.java
@@ -20,18 +20,14 @@ package org.apache.isis.core.metamodel.facets.members.named.method;
import javax.inject.Inject;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
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.ActionSupport.ActionSupportingMethodSearchResult;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
-import lombok.val;
-
public class NamedFacetForMemberViaMethodFactory
extends MemberSupportFacetFactoryAbstract {
@@ -41,37 +37,24 @@ extends MemberSupportFacetFactoryAbstract {
}
@Override
- public void process(final ProcessMethodContext processMethodContext) {
-
- val cls = processMethodContext.getCls();
- //val actionOrGetter = processMethodContext.getMethod();
-
- val methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
- .flatMap(processMethodContext::memberSupportCandidates);
-
- val namedMethod = MethodFinder.findMethod_returningText(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- NO_ARG)
- .findFirst()
- .orElse(null);
- if (namedMethod == null) {
- return;
- }
- processMethodContext.removeMethod(namedMethod);
-
- FacetUtil.addFacet(
- new NamedFacetForMemberViaMethod(
- namedMethod,
- processMethodContext.getFacetHolder()));
+ protected void search(
+ final ProcessMethodContext processMethodContext,
+ final Can<String> methodNameCandidates) {
+
+ MethodFinder
+ .findMethod_returningText(
+ MethodFinderOptions
+ .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ processMethodContext.getCls(),
+ methodNameCandidates,
+ NO_ARG)
+ .peek(processMethodContext::removeMethod)
+ .forEach(namedMethod->{
+ addFacet(
+ new NamedFacetForMemberViaMethod(
+ namedMethod, processMethodContext.getFacetHolder()));
+ });
}
- @Override
- protected void onSearchResult(final FacetedMethod facetHolder, final ActionSupportingMethodSearchResult searchResult) {
- // TODO Auto-generated method stub
-
- }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/support/MemberSupportFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/support/MemberSupportFacetFactoryAbstract.java
index 9cabbfd..c022df7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/support/MemberSupportFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/support/MemberSupportFacetFactoryAbstract.java
@@ -18,16 +18,11 @@
*/
package org.apache.isis.core.metamodel.facets.members.support;
-import java.util.function.UnaryOperator;
-
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.collections.ImmutableEnumSet;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.ActionSupport;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchRequest.ActionSupportingMethodSearchRequestBuilder;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchResult;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import lombok.NonNull;
import lombok.val;
@@ -35,48 +30,47 @@ import lombok.val;
public abstract class MemberSupportFacetFactoryAbstract
extends MemberAndPropertySupportFacetFactoryAbstract {
- private final UnaryOperator<ActionSupportingMethodSearchRequestBuilder>
- searchRefiner;
+ private final boolean mixinSupportExplicitlyAdded;
protected MemberSupportFacetFactoryAbstract(
final @NonNull MetaModelContext mmc,
final @NonNull ImmutableEnumSet<FeatureType> featureTypes,
final @NonNull MemberSupportPrefix memberSupportPrefix) {
- this(mmc, featureTypes, memberSupportPrefix, UnaryOperator.identity());
+ super(mmc, addMixinSupport(featureTypes), memberSupportPrefix);
+ this.mixinSupportExplicitlyAdded = !featureTypes.contains(FeatureType.ACTION);
}
- protected MemberSupportFacetFactoryAbstract(
- final @NonNull MetaModelContext mmc,
- final @NonNull ImmutableEnumSet<FeatureType> featureTypes,
- final @NonNull MemberSupportPrefix memberSupportPrefix,
- final @NonNull UnaryOperator<ActionSupportingMethodSearchRequestBuilder> searchRefiner) {
- super(mmc, featureTypes, memberSupportPrefix);
- this.searchRefiner = searchRefiner;
+ private static ImmutableEnumSet<FeatureType> addMixinSupport(
+ final ImmutableEnumSet<FeatureType> featureTypes) {
+ return featureTypes.add(FeatureType.ACTION);
}
@Override
- public void process(final ProcessMethodContext processMethodContext) {
+ public final void process(final ProcessMethodContext processMethodContext) {
+
+ // optimization step, not strictly required
+ if(mixinSupportExplicitlyAdded
+ && !processMethodContext.isMixinMain()) {
+ // stop processing if it is not an allowed property or collection
+ val isProp = getFeatureTypes().contains(FeatureType.PROPERTY)
+ && processMethodContext.getFeatureType().isProperty();
+ val isColl = getFeatureTypes().contains(FeatureType.COLLECTION)
+ && processMethodContext.getFeatureType().isCollection();
+ if(!(isProp
+ || isColl)) {
+ return; // skip
+ }
+ }
val methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
.flatMap(processMethodContext::memberSupportCandidates);
- val searchRequest = searchRefiner
- .apply(
- ActionSupport.ActionSupportingMethodSearchRequest.builder()
- .processMethodContext(processMethodContext)
- .methodNames(methodNameCandidates)
- .returnType(memberSupportPrefix.getParameterSearchReturnType()))
- .build();
-
- ActionSupport.findActionSupportingMethods(searchRequest, searchResult -> {
- processMethodContext.removeMethod(searchResult.getSupportingMethod());
- onSearchResult(processMethodContext.getFacetHolder(), searchResult);
- });
+ search(processMethodContext, methodNameCandidates);
}
- protected abstract void onSearchResult(
- FacetedMethod facetHolder,
- ActionSupportingMethodSearchResult searchResult);
+ protected abstract void search(
+ ProcessMethodContext processMethodContext,
+ Can<String> methodNameCandidates);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java
index 2aa099b..1680774 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/support/ActionParameterSupportFacetFactoryAbstract.java
@@ -74,7 +74,7 @@ extends MemberAndPropertySupportFacetFactoryAbstract {
.processMethodContext(processMethodContext)
.paramIndexToMethodNameProviders(methodNameCandidates)
.searchAlgorithms(EnumSet.of(SearchAlgorithm.PPM, SearchAlgorithm.SWEEP))
- .returnType(memberSupportPrefix.getParameterSearchReturnType()))
+ .returnType(memberSupportPrefix.getSupportMethodReturnType()))
.build();
ParameterSupport.findParamSupportingMethods(searchRequest, searchResult -> {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
index 79604e5..db8d36f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethodFactory.java
@@ -20,13 +20,10 @@ package org.apache.isis.core.metamodel.facets.properties.autocomplete.method;
import javax.inject.Inject;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchResult;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
@@ -38,48 +35,33 @@ extends MemberSupportFacetFactoryAbstract {
@Inject
public PropertyAutoCompleteFacetMethodFactory(final MetaModelContext mmc) {
- // to also support properties from mixins, need to not only include properties but also actions
- super(mmc, FeatureType.PROPERTIES_AND_ACTIONS, MemberSupportPrefix.AUTO_COMPLETE);
+ super(mmc, FeatureType.PROPERTIES_ONLY, MemberSupportPrefix.AUTO_COMPLETE);
}
@Override
- public void process(final ProcessMethodContext processMethodContext) {
+ protected void search(
+ final ProcessMethodContext processMethodContext,
+ final Can<String> methodNameCandidates) {
- // optimization step, not strictly required
- if(!super.isPropertyOrMixinMain(processMethodContext)) {
- return;
- }
+ MethodFinder
+ .findMethod(
+ MethodFinderOptions
+ .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ processMethodContext.getCls(),
+ methodNameCandidates,
+ ANY_RETURN,
+ STRING_ARG)
+ .peek(processMethodContext::removeMethod)
+ .forEach(autoCompleteMethod->{
- val getterOrMixinMain = processMethodContext.getMethod();
- val methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
- .flatMap(processMethodContext::memberSupportCandidates);
+ val getterOrMixinMain = processMethodContext.getMethod();
+ val returnType = getterOrMixinMain.getReturnType();
- val cls = processMethodContext.getCls();
- val returnType = getterOrMixinMain.getReturnType();
- val autoCompleteMethod = MethodFinder
- .findMethod(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- NO_RETURN,
- STRING_ARG)
- .findFirst()
- .orElse(null);
- if (autoCompleteMethod == null) {
- return;
- }
- processMethodContext.removeMethod(autoCompleteMethod);
+ addFacet(
+ new PropertyAutoCompleteFacetMethod(
+ autoCompleteMethod, returnType, processMethodContext.getFacetHolder()));
+ });
- final FacetHolder property = processMethodContext.getFacetHolder();
- FacetUtil.addFacet(new PropertyAutoCompleteFacetMethod(autoCompleteMethod, returnType, property));
}
- @Override
- protected void onSearchResult(final FacetedMethod facetHolder, final ActionSupportingMethodSearchResult searchResult) {
- // TODO Auto-generated method stub
-
- }
-
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java
index af8ed60..299f2df 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethodFactory.java
@@ -20,13 +20,10 @@ package org.apache.isis.core.metamodel.facets.properties.choices.method;
import javax.inject.Inject;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchResult;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
@@ -38,46 +35,32 @@ extends MemberSupportFacetFactoryAbstract {
@Inject
public PropertyChoicesFacetViaMethodFactory(final MetaModelContext mmc) {
- // to also support properties from mixins, need to not only include properties but also actions
- super(mmc, FeatureType.PROPERTIES_AND_ACTIONS, MemberSupportPrefix.CHOICES);
+ super(mmc, FeatureType.PROPERTIES_ONLY, MemberSupportPrefix.CHOICES);
}
@Override
- public void process(final ProcessMethodContext processMethodContext) {
+ protected void search(
+ final ProcessMethodContext processMethodContext,
+ final Can<String> methodNameCandidates) {
- // optimization step, not strictly required
- if(!super.isPropertyOrMixinMain(processMethodContext)) {
- return;
- }
+ MethodFinder
+ .findMethod(
+ MethodFinderOptions
+ .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ processMethodContext.getCls(),
+ methodNameCandidates,
+ ANY_RETURN,
+ NO_ARG)
+ .peek(processMethodContext::removeMethod)
+ .forEach(choicesMethod->{
- val getterOrMixinMain = processMethodContext.getMethod();
- val methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
- .flatMap(processMethodContext::memberSupportCandidates);
+ val getterOrMixinMain = processMethodContext.getMethod();
+ val returnType = getterOrMixinMain.getReturnType();
- val cls = processMethodContext.getCls();
- val returnType = getterOrMixinMain.getReturnType();
- val choicesMethod = MethodFinder
- .findMethod(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- NO_RETURN,
- NO_ARG)
- .findFirst()
- .orElse(null);
- if (choicesMethod == null) {
- return;
- }
- processMethodContext.removeMethod(choicesMethod);
-
- final FacetHolder property = processMethodContext.getFacetHolder();
- FacetUtil.addFacet(new PropertyChoicesFacetViaMethod(choicesMethod, returnType, property));
- }
-
- @Override
- protected void onSearchResult(final FacetedMethod facetHolder, final ActionSupportingMethodSearchResult searchResult) {
- // TODO Auto-generated method stub
+ addFacet(
+ new PropertyChoicesFacetViaMethod(
+ choicesMethod, returnType, processMethodContext.getFacetHolder()));
+ });
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java
index 30d4b98..25ae13f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethodFactory.java
@@ -20,13 +20,10 @@ package org.apache.isis.core.metamodel.facets.properties.defaults.method;
import javax.inject.Inject;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchResult;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
@@ -38,46 +35,31 @@ extends MemberSupportFacetFactoryAbstract {
@Inject
public PropertyDefaultFacetViaMethodFactory(final MetaModelContext mmc) {
- // to also support properties from mixins, need to not only include properties but also actions
- super(mmc, FeatureType.PROPERTIES_AND_ACTIONS, MemberSupportPrefix.DEFAULT);
+ super(mmc, FeatureType.PROPERTIES_ONLY, MemberSupportPrefix.DEFAULT);
}
@Override
- public void process(final ProcessMethodContext processMethodContext) {
-
- // optimization step, not strictly required
- if(!super.isPropertyOrMixinMain(processMethodContext)) {
- return;
- }
+ protected void search(
+ final ProcessMethodContext processMethodContext,
+ final Can<String> methodNameCandidates) {
val getterOrMixinMain = processMethodContext.getMethod();
- val methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
- .flatMap(processMethodContext::memberSupportCandidates);
-
- val cls = processMethodContext.getCls();
val returnType = getterOrMixinMain.getReturnType();
- val method = MethodFinder
- .findMethod(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- returnType,
- NO_ARG)
- .findFirst()
- .orElse(null);
- if (method == null) {
- return;
- }
- processMethodContext.removeMethod(method);
- final FacetHolder property = processMethodContext.getFacetHolder();
- FacetUtil.addFacet(new PropertyDefaultFacetViaMethod(method, property));
- }
-
- @Override
- protected void onSearchResult(final FacetedMethod facetHolder, final ActionSupportingMethodSearchResult searchResult) {
- // TODO Auto-generated method stub
+ MethodFinder
+ .findMethod(
+ MethodFinderOptions
+ .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ processMethodContext.getCls(),
+ methodNameCandidates,
+ returnType,
+ NO_ARG)
+ .peek(processMethodContext::removeMethod)
+ .forEach(defaultMethod->{
+ addFacet(
+ new PropertyDefaultFacetViaMethod(
+ defaultMethod, processMethodContext.getFacetHolder()));
+ });
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java
index 197e8c1..68ca9f1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethod.java
@@ -37,11 +37,11 @@ public class PropertyValidateFacetViaMethod extends PropertyValidateFacetAbstrac
public PropertyValidateFacetViaMethod(
final Method method,
- final TranslationContext translationContext,
final FacetHolder holder) {
super(holder);
this.method = method;
- this.translationContext = translationContext;
+ this.translationContext =
+ TranslationContext.forTranslationContextHolder(holder.getFeatureIdentifier());
}
/**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java
index d0ec64a..ebe907a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/validating/method/PropertyValidateFacetViaMethodFactory.java
@@ -20,12 +20,10 @@ package org.apache.isis.core.metamodel.facets.properties.validating.method;
import javax.inject.Inject;
-import org.apache.isis.applib.services.i18n.TranslationContext;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.MemberSupportPrefix;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.ActionSupport.ActionSupportingMethodSearchResult;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.support.MemberSupportFacetFactoryAbstract;
import org.apache.isis.core.metamodel.methods.MethodFinder;
import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
@@ -41,41 +39,27 @@ extends MemberSupportFacetFactoryAbstract {
}
@Override
- public void process(final ProcessMethodContext processMethodContext) {
+ protected void search(
+ final ProcessMethodContext processMethodContext,
+ final Can<String> methodNameCandidates) {
- val cls = processMethodContext.getCls();
val getterMethod = processMethodContext.getMethod();
-
- val methodNameCandidates = memberSupportPrefix.getMethodNamePrefixes()
- .flatMap(processMethodContext::memberSupportCandidates);
val returnType = getterMethod.getReturnType();
- val validateMethod = MethodFinder.findMethod_returningText(
- MethodFinderOptions
- .memberSupport(processMethodContext.getIntrospectionPolicy()),
- cls,
- methodNameCandidates,
- new Class[] { returnType })
- .findFirst()
- .orElse(null);
- if (validateMethod == null) {
- return;
- }
- processMethodContext.removeMethod(validateMethod);
-
- val facetHolder = processMethodContext.getFacetHolder();
- // sadness: same as in TranslationFactory
- val translationContext = TranslationContext.forTranslationContextHolder(facetHolder.getFeatureIdentifier());
- addFacet(
- new PropertyValidateFacetViaMethod(
- validateMethod, translationContext, facetHolder));
- }
-
- @Override
- protected void onSearchResult(final FacetedMethod facetHolder, final ActionSupportingMethodSearchResult searchResult) {
- // TODO Auto-generated method stub
+ MethodFinder
+ .findMethod_returningText(
+ MethodFinderOptions
+ .memberSupport(processMethodContext.getIntrospectionPolicy()),
+ processMethodContext.getCls(),
+ methodNameCandidates,
+ new Class[] { returnType })
+ .peek(processMethodContext::removeMethod)
+ .forEach(validateMethod->{
+ addFacet(
+ new PropertyValidateFacetViaMethod(
+ validateMethod, processMethodContext.getFacetHolder()));
+ });
}
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodPrefixBasedFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodPrefixBasedFacetFactoryAbstract.java
index 877457c..521f2d9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodPrefixBasedFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodPrefixBasedFacetFactoryAbstract.java
@@ -70,8 +70,6 @@ implements MethodPrefixBasedFacetFactory {
return;
}
- val noParamsOnly = getConfiguration().getCore().getMetaModel().getValidator().isNoParamsOnly();
-
programmingModel
.addValidator(new MetaModelVisitingValidatorAbstract(programmingModel.getMetaModelContext()) {
@@ -113,7 +111,6 @@ implements MethodPrefixBasedFacetFactory {
val explanation =
objectAction.getParameterCount() > 0
- && noParamsOnly
&& (MemberSupportPrefix.HIDE.getMethodNamePrefixes().contains(prefix)
|| MemberSupportPrefix.DISABLE.getMethodNamePrefixes().contains(prefix))
? " (such methods must not have parameters, '"
@@ -144,10 +141,14 @@ implements MethodPrefixBasedFacetFactory {
protected boolean isPropertyOrMixinMain(final ProcessMethodContext processMethodContext) {
return processMethodContext.isMixinMain()
- || (
- processMethodContext.getFeatureType()!=null // null check, yet to support some JUnit tests
- && processMethodContext.getFeatureType().isProperty()
- );
+ || (processMethodContext.getFeatureType()!=null // null check, yet to support some JUnit tests
+ && processMethodContext.getFeatureType().isProperty());
+ }
+
+ protected boolean isCollectionOrMixinMain(final ProcessMethodContext processMethodContext) {
+ return processMethodContext.isMixinMain()
+ || (processMethodContext.getFeatureType()!=null // null check, yet to support some JUnit tests
+ && processMethodContext.getFeatureType().isCollection());
}
// -- HELPER
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java
index 5071f7b..4e9b8eb 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_ActionInvocation.java
@@ -197,7 +197,7 @@ extends AbstractFacetFactoryTest {
}
- public String disableSomeAction(final int x, final long y) {
+ public String disableSomeAction() {
return null;
}
}
@@ -205,7 +205,7 @@ extends AbstractFacetFactoryTest {
final Method actionMethod = findMethod(CustomerEx.class, "someAction", new Class[] { int.class, long.class });
final Method choices0Method = findMethod(CustomerEx.class, "choices0SomeAction", new Class[] {});
final Method choices1Method = findMethod(CustomerEx.class, "choices1SomeAction", new Class[] {});
- final Method disableMethod = findMethod(CustomerEx.class, "disableSomeAction", new Class[] { int.class, long.class });
+ final Method disableMethod = findMethod(CustomerEx.class, "disableSomeAction", new Class[] {});
final FacetedMethod facetHolderWithParms = FacetedMethod.createForAction(metaModelContext, CustomerEx.class, actionMethod);