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
commit b86957db4cc00332580a6a5e889f0513f8830483 Author: Andi Huber <ahu...@apache.org> AuthorDate: Thu Apr 30 09:17:48 2020 +0200 ISIS-2340: prepare for new pending param model --- .../isis/core/metamodel/commons/MethodUtil.java | 4 + .../isis/core/metamodel/facets/FacetFactory.java | 4 +- .../core/metamodel/facets/MethodFinderUtils.java | 22 +++- .../facets/OrphanedSupportingMethodValidator.java | 2 +- ...ependentArgUtils.java => ParameterSupport.java} | 22 ++-- ...tionAddToRemoveFromAndValidateFacetFactory.java | 4 +- ...ParameterAutoCompleteFacetViaMethodFactory.java | 8 +- ...ctionParameterChoicesFacetViaMethodFactory.java | 8 +- ...tionParameterDefaultsFacetViaMethodFactory.java | 101 ++++++---------- ...tionParameterDisabledFacetViaMethodFactory.java | 8 +- ...ActionParameterHiddenFacetViaMethodFactory.java | 8 +- .../model/good/ProperParameterSupport.java | 131 +++++++++++++++++++++ .../restfulobjects/viewer/mappers/FailureUtil.java | 8 +- .../viewer/resources/DomainResourceHelper.java | 2 +- 14 files changed, 224 insertions(+), 108 deletions(-) diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java index 2467b40..3927f71 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/commons/MethodUtil.java @@ -71,6 +71,10 @@ public class MethodUtil { @UtilityClass public static class Predicates { + public static Predicate<Method> paramCount(int n) { + return method -> method.getParameterCount() == n; + } + /** * @param methodName * @param returnType diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java index 339516d..a4c4c1d 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactory.java @@ -256,10 +256,10 @@ public interface FacetFactory { optional : supplier.get(); } - } - + + /** * Process the method, and return the correctly setup annotation if present. */ diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java index a52c1cd..1ecadfc 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.isis.applib.services.i18n.TranslatableString; import org.apache.isis.core.commons.internal.reflection._MethodCache; @@ -112,7 +113,19 @@ public final class MethodFinderUtils { return null; } - public static Method findMethod(final Class<?> type, final String name, final Class<?> returnType) { + public static Optional<Method> findNoArgMethod(final Class<?> type, final String name, final Class<?> returnType) { + return streamMethods(type, name, returnType) + .filter(MethodUtil.Predicates.paramCount(0)) + .findFirst(); + } + + public static Optional<Method> findSingleArgMethod(final Class<?> type, final String name, final Class<?> returnType) { + return streamMethods(type, name, returnType) + .filter(MethodUtil.Predicates.paramCount(1)) + .findFirst(); + } + + public static Stream<Method> streamMethods(final Class<?> type, final String name, final Class<?> returnType) { try { final Method[] methods = type.getMethods(); return Arrays.stream(methods) @@ -120,10 +133,8 @@ public final class MethodFinderUtils { .filter(MethodUtil::isNotStatic) .filter(method -> method.getName().equals(name)) .filter(method -> returnType == null || - returnType == method.getReturnType()) - .findFirst() - .orElse(null); - + returnType.isAssignableFrom(method.getReturnType())) + ; } catch (final SecurityException e) { return null; } @@ -233,4 +244,5 @@ public final class MethodFinderUtils { return findMethod_returningAnyOf(nonScalarTypes, type, name, paramTypes); } + } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java index 4e301e3..a868290 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/OrphanedSupportingMethodValidator.java @@ -84,7 +84,7 @@ implements MetaModelRefiner { val notRecognizedMethods = _Sets.minus(potentialOrphans, recognizedMethods); - // find reasons about why these are not recognized + // find reasons why these are not recognized notRecognizedMethods.forEach(notRecognizedMethod->{ val unmetContraints = unmetContraints(spec, notRecognizedMethod); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DependentArgUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java similarity index 89% rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DependentArgUtils.java rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java index fdbebb3..75f5677 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/DependentArgUtils.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java @@ -42,8 +42,9 @@ import lombok.extern.log4j.Log4j2; * @since 2.0 * */ -@UtilityClass @Log4j2 -public class DependentArgUtils { +@UtilityClass +@Log4j2 +public class ParameterSupport { @Value @Builder public static class ParamSupportingMethodSearchRequest { @@ -51,7 +52,8 @@ public class DependentArgUtils { public static enum ReturnType { NON_SCALAR, TEXT, - BOOLEAN + BOOLEAN, + SAME_AS_PARAMETER_TYPE, } @NonNull FacetFactory.ProcessMethodContext processMethodContext; @@ -72,8 +74,8 @@ public class DependentArgUtils { } public static void findParamSupportingMethods( - final DependentArgUtils.ParamSupportingMethodSearchRequest searchRequest, - final Consumer<DependentArgUtils.ParamSupportingMethodSearchResult> onMethodFound) { + final ParameterSupport.ParamSupportingMethodSearchRequest searchRequest, + final Consumer<ParameterSupport.ParamSupportingMethodSearchResult> onMethodFound) { val actionMethod = searchRequest.getProcessMethodContext().getMethod(); val paramCount = actionMethod.getParameterCount(); @@ -99,8 +101,8 @@ public class DependentArgUtils { /* * search successively for the supporting method, trimming number of param types each loop */ - private static DependentArgUtils.ParamSupportingMethodSearchResult findParamSupportingMethod( - final DependentArgUtils.ParamSupportingMethodSearchRequest searchRequest, + private static ParameterSupport.ParamSupportingMethodSearchResult findParamSupportingMethod( + final ParameterSupport.ParamSupportingMethodSearchRequest searchRequest, final int paramIndex) { val processMethodContext = searchRequest.getProcessMethodContext(); @@ -131,6 +133,10 @@ public class DependentArgUtils { supportingMethod = MethodFinderUtils .findMethod_returningNonScalar(type, methodName, paramType, paramTypesToLookFor); break; + case SAME_AS_PARAMETER_TYPE: + supportingMethod = MethodFinderUtils + .findMethod(type, methodName, paramType, paramTypesToLookFor); + break; default: supportingMethod = null; } @@ -177,7 +183,7 @@ public class DependentArgUtils { } private String toString( - DependentArgUtils.ParamSupportingMethodSearchRequest searchRequest, + ParameterSupport.ParamSupportingMethodSearchRequest searchRequest, int paramIndex) { return String.format("%s.%s(%s) : %s", diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java index c80ddbe..16ebd16 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/modify/CollectionAddToRemoveFromAndValidateFacetFactory.java @@ -63,11 +63,11 @@ public class CollectionAddToRemoveFromAndValidateFacetFactory extends MethodPref final Class<?> cls = processMethodContext.getCls(); // add - final Method addToMethod = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.ADD_TO_PREFIX + capitalizedName, void.class); + final Method addToMethod = MethodFinderUtils.findSingleArgMethod(cls, MethodLiteralConstants.ADD_TO_PREFIX + capitalizedName, void.class).orElse(null); processMethodContext.removeMethod(addToMethod); // remove - final Method removeFromMethod = MethodFinderUtils.findMethod(cls, MethodLiteralConstants.REMOVE_FROM_PREFIX + capitalizedName, void.class); + final Method removeFromMethod = MethodFinderUtils.findSingleArgMethod(cls, MethodLiteralConstants.REMOVE_FROM_PREFIX + capitalizedName, void.class).orElse(null); processMethodContext.removeMethod(removeFromMethod); // add facets diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java index a4f0a72..3c0a0ce 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethodFactory.java @@ -23,8 +23,8 @@ import org.apache.isis.core.commons.collections.Can; import org.apache.isis.core.metamodel.commons.StringExtensions; import org.apache.isis.core.metamodel.exceptions.MetaModelException; import org.apache.isis.core.metamodel.facetapi.FeatureType; -import org.apache.isis.core.metamodel.facets.DependentArgUtils; -import org.apache.isis.core.metamodel.facets.DependentArgUtils.ParamSupportingMethodSearchRequest.ReturnType; +import org.apache.isis.core.metamodel.facets.ParameterSupport; +import org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType; import org.apache.isis.core.metamodel.facets.MethodLiteralConstants; import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract; import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet; @@ -54,7 +54,7 @@ public class ActionParameterAutoCompleteFacetViaMethodFactory extends MethodPref val actionMethod = processMethodContext.getMethod(); val capitalizedName = StringExtensions.asCapitalizedName(actionMethod.getName()); - val searchRequest = DependentArgUtils.ParamSupportingMethodSearchRequest.builder() + val searchRequest = ParameterSupport.ParamSupportingMethodSearchRequest.builder() .processMethodContext(processMethodContext) .returnType(ReturnType.NON_SCALAR) .additionalParamType(String.class) @@ -62,7 +62,7 @@ public class ActionParameterAutoCompleteFacetViaMethodFactory extends MethodPref MethodLiteralConstants.AUTO_COMPLETE_PREFIX + paramIndex + capitalizedName) .build(); - DependentArgUtils.findParamSupportingMethods(searchRequest, searchResult -> { + ParameterSupport.findParamSupportingMethods(searchRequest, searchResult -> { val autoCompleteMethod = searchResult.getSupportingMethod(); val paramIndex = searchResult.getParamIndex(); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java index 0be6006..ac2567b 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethodFactory.java @@ -24,8 +24,8 @@ import org.apache.isis.core.metamodel.commons.StringExtensions; import org.apache.isis.core.metamodel.exceptions.MetaModelException; import org.apache.isis.core.metamodel.facetapi.Facet; import org.apache.isis.core.metamodel.facetapi.FeatureType; -import org.apache.isis.core.metamodel.facets.DependentArgUtils; -import org.apache.isis.core.metamodel.facets.DependentArgUtils.ParamSupportingMethodSearchRequest.ReturnType; +import org.apache.isis.core.metamodel.facets.ParameterSupport; +import org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType; import org.apache.isis.core.metamodel.facets.MethodLiteralConstants; import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract; import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet; @@ -64,14 +64,14 @@ extends MethodPrefixBasedFacetFactoryAbstract { val actionMethod = processMethodContext.getMethod(); val capitalizedName = StringExtensions.asCapitalizedName(actionMethod.getName()); - val searchRequest = DependentArgUtils.ParamSupportingMethodSearchRequest.builder() + val searchRequest = ParameterSupport.ParamSupportingMethodSearchRequest.builder() .processMethodContext(processMethodContext) .returnType(ReturnType.NON_SCALAR) .paramIndexToMethodName(paramIndex -> MethodLiteralConstants.CHOICES_PREFIX + paramIndex + capitalizedName) .build(); - DependentArgUtils.findParamSupportingMethods(searchRequest, searchResult -> { + ParameterSupport.findParamSupportingMethods(searchRequest, searchResult -> { val choicesMethod = searchResult.getSupportingMethod(); val paramIndex = searchResult.getParamIndex(); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java index b57ede1..3228c8e 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethodFactory.java @@ -19,20 +19,15 @@ package org.apache.isis.core.metamodel.facets.param.defaults.methodnum; -import java.lang.reflect.Method; -import java.util.List; - import org.apache.isis.core.commons.collections.Can; -import org.apache.isis.core.commons.internal.collections._Arrays; import org.apache.isis.core.metamodel.commons.StringExtensions; import org.apache.isis.core.metamodel.exceptions.MetaModelException; import org.apache.isis.core.metamodel.facetapi.Facet; import org.apache.isis.core.metamodel.facetapi.FeatureType; -import org.apache.isis.core.metamodel.facets.FacetedMethod; -import org.apache.isis.core.metamodel.facets.FacetedMethodParameter; -import org.apache.isis.core.metamodel.facets.MethodFinderUtils; import org.apache.isis.core.metamodel.facets.MethodLiteralConstants; import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract; +import org.apache.isis.core.metamodel.facets.ParameterSupport; +import org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType; import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet; import lombok.val; @@ -58,77 +53,49 @@ public class ActionParameterDefaultsFacetViaMethodFactory extends MethodPrefixBa @Override public void process(final ProcessMethodContext processMethodContext) { - - final FacetedMethod facetedMethod = processMethodContext.getFacetHolder(); - final List<FacetedMethodParameter> holderList = facetedMethod.getParameters(); - - attachDefaultFacetForParametersIfDefaultsNumMethodIsFound(processMethodContext, holderList); - } - - private void attachDefaultFacetForParametersIfDefaultsNumMethodIsFound(final ProcessMethodContext processMethodContext, final List<FacetedMethodParameter> parameters) { + + val facetedMethod = processMethodContext.getFacetHolder(); + val parameters = facetedMethod.getParameters(); if (parameters.isEmpty()) { return; } - final Method actionMethod = processMethodContext.getMethod(); - final int paramCount = actionMethod.getParameterCount(); - - for (int i = 0; i < paramCount; i++) { - - // attempt to match method... - Method defaultMethod = findDefaultNumMethod(processMethodContext, i); - if (defaultMethod == null) { - continue; - } - - processMethodContext.removeMethod(defaultMethod); - - final FacetedMethod facetedMethod = processMethodContext.getFacetHolder(); - if (facetedMethod.containsNonFallbackFacet(ActionDefaultsFacet.class)) { - final Class<?> cls2 = processMethodContext.getCls(); - throw new MetaModelException(cls2 + " uses both old and new default syntax for " + actionMethod.getName() + "(...) - must use one or other"); - } - - // add facets directly to parameters, not to actions - final FacetedMethodParameter paramAsHolder = parameters.get(i); - super.addFacet(new ActionParameterDefaultsFacetViaMethod(defaultMethod, i, paramAsHolder)); - } - } - - /** - * search successively for the default method, trimming number of param types each loop - */ - private static Method findDefaultNumMethod(ProcessMethodContext processMethodContext, int n) { + // attach DefaultFacetForParameters if defaultNumMethod is found ... - val cls = processMethodContext.getCls(); + //val translationService = getMetaModelContext().getTranslationService(); val actionMethod = processMethodContext.getMethod(); - Class<?>[] paramTypes = actionMethod.getParameterTypes(); - val returnType = paramTypes[n]; - val capitalizedName = - MethodLiteralConstants.DEFAULT_PREFIX + n + - StringExtensions.asCapitalizedName(actionMethod.getName()); - - for(;;) { - val method = MethodFinderUtils.findMethod( - cls, - capitalizedName, - returnType, - paramTypes); + val capitalizedName = StringExtensions.asCapitalizedName(actionMethod.getName()); + + val searchRequest = ParameterSupport.ParamSupportingMethodSearchRequest.builder() + .processMethodContext(processMethodContext) + .returnType(ReturnType.SAME_AS_PARAMETER_TYPE) + .paramIndexToMethodName(paramIndex -> + MethodLiteralConstants.DEFAULT_PREFIX + paramIndex + capitalizedName) + .build(); + + ParameterSupport.findParamSupportingMethods(searchRequest, searchResult -> { - if(method != null) { - return method; - } + val defaultMethod = searchResult.getSupportingMethod(); + val paramIndex = searchResult.getParamIndex(); - if(paramTypes.length==0) { - break; + processMethodContext.removeMethod(defaultMethod); + + if (facetedMethod.containsNonFallbackFacet(ActionDefaultsFacet.class)) { + val cls = processMethodContext.getCls(); + throw new MetaModelException(cls + " uses both old and new default syntax for " + + actionMethod.getName() + "(...) - must use one or other"); } - // remove last, and search again - paramTypes = _Arrays.removeByIndex(paramTypes, paramTypes.length-1); - } - - return null; + // add facets directly to parameters, not to actions + val paramAsHolder = parameters.get(paramIndex); + //val translationContext = paramAsHolder.getIdentifier().toFullIdentityString(); + + super.addFacet( + new ActionParameterDefaultsFacetViaMethod( + defaultMethod, paramIndex, paramAsHolder)); + }); } + } diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java index 2573a5c..32e0aee 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethodFactory.java @@ -23,8 +23,8 @@ import org.apache.isis.core.commons.collections.Can; import org.apache.isis.core.metamodel.commons.StringExtensions; import org.apache.isis.core.metamodel.exceptions.MetaModelException; import org.apache.isis.core.metamodel.facetapi.FeatureType; -import org.apache.isis.core.metamodel.facets.DependentArgUtils; -import org.apache.isis.core.metamodel.facets.DependentArgUtils.ParamSupportingMethodSearchRequest.ReturnType; +import org.apache.isis.core.metamodel.facets.ParameterSupport; +import org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType; import org.apache.isis.core.metamodel.facets.MethodLiteralConstants; import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract; import org.apache.isis.core.metamodel.facets.param.disable.ActionParameterDisabledFacet; @@ -60,14 +60,14 @@ extends MethodPrefixBasedFacetFactoryAbstract { val actionMethod = processMethodContext.getMethod(); val capitalizedName = StringExtensions.asCapitalizedName(actionMethod.getName()); - val searchRequest = DependentArgUtils.ParamSupportingMethodSearchRequest.builder() + val searchRequest = ParameterSupport.ParamSupportingMethodSearchRequest.builder() .processMethodContext(processMethodContext) .returnType(ReturnType.TEXT) .paramIndexToMethodName(paramIndex -> MethodLiteralConstants.DISABLE_PREFIX + paramIndex + capitalizedName) .build(); - DependentArgUtils.findParamSupportingMethods(searchRequest, searchResult -> { + ParameterSupport.findParamSupportingMethods(searchRequest, searchResult -> { val disableMethod = searchResult.getSupportingMethod(); val paramIndex = searchResult.getParamIndex(); diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java index e1893b8..6b18caa 100644 --- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java +++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethodFactory.java @@ -23,8 +23,8 @@ import org.apache.isis.core.commons.collections.Can; import org.apache.isis.core.metamodel.commons.StringExtensions; import org.apache.isis.core.metamodel.exceptions.MetaModelException; import org.apache.isis.core.metamodel.facetapi.FeatureType; -import org.apache.isis.core.metamodel.facets.DependentArgUtils; -import org.apache.isis.core.metamodel.facets.DependentArgUtils.ParamSupportingMethodSearchRequest.ReturnType; +import org.apache.isis.core.metamodel.facets.ParameterSupport; +import org.apache.isis.core.metamodel.facets.ParameterSupport.ParamSupportingMethodSearchRequest.ReturnType; import org.apache.isis.core.metamodel.facets.MethodLiteralConstants; import org.apache.isis.core.metamodel.facets.MethodPrefixBasedFacetFactoryAbstract; import org.apache.isis.core.metamodel.facets.param.hide.ActionParameterHiddenFacet; @@ -58,14 +58,14 @@ public class ActionParameterHiddenFacetViaMethodFactory extends MethodPrefixBase val actionMethod = processMethodContext.getMethod(); val capitalizedName = StringExtensions.asCapitalizedName(actionMethod.getName()); - val searchRequest = DependentArgUtils.ParamSupportingMethodSearchRequest.builder() + val searchRequest = ParameterSupport.ParamSupportingMethodSearchRequest.builder() .processMethodContext(processMethodContext) .returnType(ReturnType.BOOLEAN) .paramIndexToMethodName(paramIndex -> MethodLiteralConstants.HIDE_PREFIX + paramIndex + capitalizedName) .build(); - DependentArgUtils.findParamSupportingMethods(searchRequest, searchResult -> { + ParameterSupport.findParamSupportingMethods(searchRequest, searchResult -> { val hideMethod = searchResult.getSupportingMethod(); val paramIndex = searchResult.getParamIndex(); diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperParameterSupport.java b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperParameterSupport.java new file mode 100644 index 0000000..7668f49 --- /dev/null +++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/model/good/ProperParameterSupport.java @@ -0,0 +1,131 @@ +/* + * 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.testdomain.model.good; + +import java.util.Collection; + +import org.apache.isis.applib.annotation.Action; +import org.apache.isis.applib.annotation.DomainObject; +import org.apache.isis.applib.annotation.Nature; +import org.apache.isis.incubator.model.applib.annotation.Model; + +import lombok.Value; +import lombok.experimental.Accessors; + +@DomainObject(nature = Nature.VIEW_MODEL) +public class ProperParameterSupport { + + + @Value @Accessors(fluent = true) // fluent so we can replace this with Java(14+) records later + static class Parameters { + String p0; + int p1; + boolean p2; + } + + @Action + public void act( + String p0, + int p1, + boolean p2) { + } + + // -- PARAM 0 (String) + + @Model + public String default0Act(Parameters p) { + return null; + } + + @Model + public Collection<String> choices0Act(Parameters p) { + return null; + } + + @Model + public Collection<String> autoComplete0Act(Parameters p, String search) { + return null; + } + + @Model + public boolean hide0Act(Parameters p) { + return false; + } + + @Model + public String disable0Act(Parameters p) { + return null; + } + + // -- PARAM 1 (int) + + @Model + public int default1Act(Parameters p) { + return 0; + } + + @Model + public int[] choices1Act(Parameters p) { + return null; + } + + @Model + public int[] autoComplete1Act(Parameters p, String search) { + return null; + } + + @Model + public boolean hide1Act(Parameters p) { + return false; + } + + @Model + public String disable1Act(Parameters p) { + return null; + } + + // -- PARAM 2 (boolean) + + @Model + public boolean default2Act(Parameters p) { + return false; + } + + @Model + public boolean[] choices2Act(Parameters p) { + return null; + } + + @Model + public boolean[] autoComplete2Act(Parameters p, String search) { + return null; + } + + @Model + public boolean hide2Act(Parameters p) { + return false; + } + + @Model + public String disable2Act(Parameters p) { + return null; + } + + +} diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java index d1d68df..963f271 100644 --- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java +++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/mappers/FailureUtil.java @@ -32,12 +32,8 @@ final class FailureUtil { public static HttpStatusCode getFailureStatusCodeIfAny(Throwable ex) { - // legacy of - // return (ex instanceof org.jboss.resteasy.spi.Failure) - // ? RestfulResponse.HttpStatusCode.statusFor(((org.jboss.resteasy.spi.Failure)ex).getErrorCode()) - // : null; - - val errorCodeGetter = MethodFinderUtils.findMethod(ex.getClass(), "getErrorCode", int.class); + val errorCodeGetter = MethodFinderUtils.findNoArgMethod(ex.getClass(), "getErrorCode", int.class) + .orElse(null); if(errorCodeGetter!=null) { try { val errorCode = (int)errorCodeGetter.invoke(ex); diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java index 3dd27f0..58b7ae3 100644 --- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java +++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainResourceHelper.java @@ -200,7 +200,7 @@ class DomainResourceHelper { val where = resourceContext.getWhere(); - val actionInteraction = ActionInteraction.start(objectAdapter, actionId) + val actionInteraction = (ActionInteraction) ActionInteraction.start(objectAdapter, actionId) .checkVisibility(where) .checkUsability(where, intent) .checkSemanticConstraint(semanticConstraint)