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 2019/12/17 13:09:51 UTC
[isis] branch master updated: ISIS-2226: prepare autoComplete for
dependent args feature
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 1bc0ce1 ISIS-2226: prepare autoComplete for dependent args feature
1bc0ce1 is described below
commit 1bc0ce1439589928386b1cf41297ff49b5eca1b0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 17 14:09:40 2019 +0100
ISIS-2226: prepare autoComplete for dependent args feature
---
.../commons/MethodInvocationPreprocessor.java | 19 ++--
.../ActionParameterAutoCompleteFacet.java | 10 +-
.../ActionParameterAutoCompleteFacetViaMethod.java | 9 +-
.../param/choices/ActionParameterChoicesFacet.java | 9 +-
.../ActionParameterChoicesFacetAbstract.java | 3 +-
.../choices/ActionParameterChoicesFacetNone.java | 5 +-
...rameterChoicesFacetDerivedFromChoicesFacet.java | 5 +-
.../ActionParameterChoicesFacetViaMethod.java | 7 +-
.../defaults/ActionParameterDefaultsFacet.java | 7 +-
.../ActionParameterDefaultsFacetViaMethod.java | 22 +++--
.../ActionParameterDisabledFacetViaMethod.java | 9 +-
.../ActionParameterHiddenFacetViaMethod.java | 10 +-
...arameterChoicesFacetFromParentedCollection.java | 3 +-
...meterDefaultsFacetFromAssociatedCollection.java | 4 +-
.../apache/isis/metamodel/spec/ManagedObject.java | 109 ++++++++++++++-------
.../spec/feature/ObjectActionParameter.java | 1 +
.../specloader/specimpl/ObjectActionDefault.java | 7 +-
.../specimpl/ObjectActionParameterAbstract.java | 41 ++++----
.../ObjectActionParameterContributeeAbstract.java | 29 ++++--
.../ObjectActionParameterMixedInAbstract.java | 10 +-
.../viewer/wicket/model/models/ScalarModel.java | 34 ++++---
.../ObjectAdapterMementoProviderAbstract.java | 13 ++-
...tAdapterMementoProviderForReferenceChoices.java | 8 +-
...derForReferenceParamOrPropertyAutoComplete.java | 6 +-
24 files changed, 239 insertions(+), 141 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodInvocationPreprocessor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodInvocationPreprocessor.java
index 5939a5b..ed92b7d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodInvocationPreprocessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodInvocationPreprocessor.java
@@ -54,14 +54,13 @@ public class MethodInvocationPreprocessor {
return method.invoke(targetPojo, executionParameters);
}
- final Class<?>[] parameterTypes = method.getParameterTypes();
- final Object[] adaptedExecutionParameters = new Object[executionParameters.length];
+ val parameterTypes = method.getParameterTypes();
+ val paramCount = parameterTypes.length;
+ val adaptedExecutionParameters = new Object[paramCount];
- int i=0;
-
- for(Object param : executionParameters) {
- adaptedExecutionParameters[i] = adapt(param, parameterTypes[i]);
- ++i;
+ for(int i=0; i<paramCount; ++i) {
+ val origParam = _Arrays.get(executionParameters, i).orElse(null);
+ adaptedExecutionParameters[i] = adapt(origParam, parameterTypes[i]);
}
try {
@@ -129,8 +128,10 @@ public class MethodInvocationPreprocessor {
val expectedParamCount = _NullSafe.size(parameterTypes);
val actualParamCount = _NullSafe.size(adaptedExecutionParameters);
if(expectedParamCount!=actualParamCount) {
- sb.append(String.format("expected-param-count mismatch: expected %d, got %d\n",
+ sb.append(String.format("param-count mismatch: expected %d, got %d\n",
expectedParamCount, actualParamCount));
+ } else {
+ sb.append("expected param type mismatch\n");
}
for(int j=0;j<parameterTypes.length;++j) {
@@ -140,7 +141,7 @@ public class MethodInvocationPreprocessor {
.map(Class::getName)
.orElse("missing or null");
- sb.append(String.format("expected-param-type[%d]: '%s', got '%s'\n",
+ sb.append(String.format("param-type[%d]: '%s', got '%s'\n",
j, parameterType.getName(), parameterValueTypeLiteral));
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
index 4c92da1..709989a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
@@ -19,12 +19,13 @@
package org.apache.isis.metamodel.facets.param.autocomplete;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.metamodel.facetapi.Facet;
import org.apache.isis.metamodel.spec.ManagedObject;
/**
- * Obtain autocompletion for each of the parameters of the action.
+ * Obtain auto-completion for each of the parameters of the action.
*
* <p>
* In the standard Apache Isis Programming Model, corresponds to invoking the
@@ -34,9 +35,10 @@ import org.apache.isis.metamodel.spec.ManagedObject;
public interface ActionParameterAutoCompleteFacet extends Facet {
public Object[] autoComplete(
- final ManagedObject inObject,
- final String searchArg,
- final InteractionInitiatedBy interactionInitiatedBy);
+ ManagedObject inObject,
+ Can<ManagedObject> dependentArgs,
+ String searchArg,
+ InteractionInitiatedBy interactionInitiatedBy);
/**
* The minimum number of characters that need to be entered.
*/
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
index d312d2c..10d8d4d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
@@ -24,6 +24,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal._Constants;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
@@ -37,7 +38,8 @@ import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.ObjectSpecification;
public class ActionParameterAutoCompleteFacetViaMethod
-extends ActionParameterAutoCompleteFacetAbstract implements ImperativeFacet {
+extends ActionParameterAutoCompleteFacetAbstract
+implements ImperativeFacet {
private final Method method;
private final Class<?> choicesType;
@@ -76,10 +78,13 @@ extends ActionParameterAutoCompleteFacetAbstract implements ImperativeFacet {
@Override
public Object[] autoComplete(
final ManagedObject owningAdapter,
+ final Can<ManagedObject> dependentArgs,
final String searchArg,
final InteractionInitiatedBy interactionInitiatedBy) {
- final Object collectionOrArray = ManagedObject.InvokeUtil.invoke(method, owningAdapter, searchArg);
+ final Object collectionOrArray =
+ ManagedObject.InvokeUtil.invokeAutofit(
+ method, owningAdapter, dependentArgs, Can.ofSingleton(searchArg));
if (collectionOrArray == null) {
return _Constants.emptyObjects;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
index 7f1ff44..ac089e2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
@@ -19,8 +19,7 @@
package org.apache.isis.metamodel.facets.param.choices;
-import java.util.List;
-
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.metamodel.facetapi.Facet;
import org.apache.isis.metamodel.spec.ManagedObject;
@@ -36,7 +35,7 @@ import org.apache.isis.metamodel.spec.ManagedObject;
public interface ActionParameterChoicesFacet extends Facet {
public Object[] getChoices(
- final ManagedObject target,
- final List<ManagedObject> arguments,
- final InteractionInitiatedBy interactionInitiatedBy);
+ ManagedObject target,
+ Can<ManagedObject> dependentArgs,
+ InteractionInitiatedBy interactionInitiatedBy);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java
index ac99551..c1be286 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetAbstract.java
@@ -31,8 +31,7 @@ implements ActionParameterChoicesFacet {
return ActionParameterChoicesFacet.class;
}
- public ActionParameterChoicesFacetAbstract(
- final FacetHolder holder) {
+ public ActionParameterChoicesFacetAbstract(FacetHolder holder) {
super(type(), holder, Derivation.NOT_DERIVED);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
index 46127a5..fcab08d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
@@ -19,8 +19,7 @@
package org.apache.isis.metamodel.facets.param.choices;
-import java.util.List;
-
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.spec.ManagedObject;
@@ -34,7 +33,7 @@ public class ActionParameterChoicesFacetNone extends ActionParameterChoicesFacet
@Override
public Object[] getChoices(
final ManagedObject adapter,
- final List<ManagedObject> arguments,
+ final Can<ManagedObject> dependentArgs,
final InteractionInitiatedBy interactionInitiatedBy) {
return new ManagedObject[0];
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
index 58c1982..b43ebf6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
@@ -19,8 +19,7 @@
package org.apache.isis.metamodel.facets.param.choices.enums;
-import java.util.List;
-
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal._Constants;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -39,7 +38,7 @@ public class ActionParameterChoicesFacetDerivedFromChoicesFacet extends ActionPa
@Override
public Object[] getChoices(
final ManagedObject adapter,
- final List<ManagedObject> arguments,
+ final Can<ManagedObject> dependentArgs,
final InteractionInitiatedBy interactionInitiatedBy) {
final FacetHolder facetHolder = getFacetHolder();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index ebcad92..e584ff0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -24,6 +24,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal._Constants;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
@@ -68,13 +69,13 @@ implements ImperativeFacet {
@Override
public Object[] getChoices(
- final ManagedObject adapter,
- final List<ManagedObject> argumentsIfAvailable,
+ final ManagedObject owningAdapter,
+ final Can<ManagedObject> dependentArgs,
final InteractionInitiatedBy interactionInitiatedBy) {
final Object choices =
ManagedObject.InvokeUtil.invokeAutofit(
- method, adapter, argumentsIfAvailable);
+ method, owningAdapter, dependentArgs);
if (choices == null) {
return _Constants.emptyObjects;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
index d0764ff..2c97147 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
@@ -19,8 +19,7 @@
package org.apache.isis.metamodel.facets.param.defaults;
-import java.util.List;
-
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.facetapi.Facet;
import org.apache.isis.metamodel.spec.ManagedObject;
@@ -36,6 +35,6 @@ public interface ActionParameterDefaultsFacet extends Facet {
public abstract Object getDefault(
ManagedObject target,
- List<ManagedObject> parameters,
- final Integer paramNumUpdated);
+ Can<ManagedObject> parameters,
+ Integer paramNumUpdated);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
index 8952c57..501f07a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
@@ -24,11 +24,14 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facets.ImperativeFacet;
import org.apache.isis.metamodel.facets.param.defaults.ActionParameterDefaultsFacetAbstract;
import org.apache.isis.metamodel.spec.ManagedObject;
+import lombok.val;
+
public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaultsFacetAbstract implements ImperativeFacet {
private final Method method;
@@ -68,12 +71,12 @@ public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaul
@Override
public Object getDefault(
final ManagedObject target,
- final List<ManagedObject> argumentsIfAvailable,
+ final Can<ManagedObject> dependentArgs,
final Integer paramNumUpdated) {
// this isn't a dependent defaults situation, so just evaluate the default.
- if (argumentsIfAvailable == null || paramNumUpdated == null) {
- return ManagedObject.InvokeUtil.invokeAutofit(method, target, argumentsIfAvailable);
+ if (dependentArgs.isEmpty() || paramNumUpdated == null) {
+ return ManagedObject.InvokeUtil.invokeAutofit(method, target, dependentArgs);
}
// this could be a dependent defaults situation, but has a previous parameter been updated
@@ -85,16 +88,21 @@ public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaul
// eg, suppose the method is default2Foo(int, int), and the second param is updated... we want to re-evaluate
// so numParams == 2, and paramNumUpdated == 1, and (paramNumUpdated < numParams) is TRUE
//
- // converesly, if method default2Foo(int), and the second param is updated... we don't want to re-evaluate
+ // conversely, if method default2Foo(int), and the second param is updated... we don't want to re-evaluate
// so numParams == 1, and paramNumUpdated == 1, and (paramNumUpdated < numParams) is FALSE
//
- return ManagedObject.InvokeUtil.invokeAutofit(method, target, argumentsIfAvailable);
+ return ManagedObject.InvokeUtil.invokeAutofit(method, target, dependentArgs);
}
// otherwise, just return the arguments that are already known; we don't want to recompute the default
// because if we did then this would trample over any pending changes already made by the end-user.
- final ManagedObject objectAdapter = argumentsIfAvailable.get(paramNum);
- return objectAdapter != null ? objectAdapter.getPojo() : null;
+ val argPojo = dependentArgs.stream()
+ .skip(paramNum)
+ .findFirst()
+ .map(ManagedObject::getPojo)
+ .orElse(null) ;
+
+ return argPojo;
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
index 3dba5f4..a4ce437 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
@@ -20,13 +20,13 @@
package org.apache.isis.metamodel.facets.param.disable.method;
import java.lang.reflect.Method;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.isis.applib.services.i18n.TranslatableString;
import org.apache.isis.applib.services.i18n.TranslationService;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facets.ImperativeFacet;
import org.apache.isis.metamodel.facets.param.disable.ActionParameterDisabledFacetAbstract;
@@ -65,9 +65,12 @@ public class ActionParameterDisabledFacetViaMethod extends ActionParameterDisabl
}
@Override
- public String disabledReason(final ManagedObject owningAdapter, final ManagedObject[] argumentAdapters) {
+ public String disabledReason(
+ final ManagedObject owningAdapter,
+ final ManagedObject[] argumentAdapters) {
- final Object returnValue = ManagedObject.InvokeUtil.invokeAutofit(method, owningAdapter, argumentAdapters != null ? Arrays.asList(argumentAdapters) : null);
+ final Object returnValue = ManagedObject.InvokeUtil
+ .invokeAutofit(method, owningAdapter, Can.ofArray(argumentAdapters));
if(returnValue instanceof String) {
return (String) returnValue;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
index 22dcc24..b529188 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
@@ -20,11 +20,11 @@
package org.apache.isis.metamodel.facets.param.hide.method;
import java.lang.reflect.Method;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facets.ImperativeFacet;
import org.apache.isis.metamodel.facets.param.hide.ActionParameterHiddenFacetAbstract;
@@ -57,8 +57,12 @@ public class ActionParameterHiddenFacetViaMethod extends ActionParameterHiddenFa
}
@Override
- public boolean isHidden(final ManagedObject owningAdapter, final ManagedObject[] argumentAdapters) {
- final Object returnValue = ManagedObject.InvokeUtil.invokeAutofit(method, owningAdapter, argumentAdapters != null ? Arrays.asList(argumentAdapters) : null);
+ public boolean isHidden(
+ final ManagedObject owningAdapter,
+ final ManagedObject[] argumentAdapters) {
+
+ final Object returnValue = ManagedObject.InvokeUtil
+ .invokeAutofit(method, owningAdapter, Can.ofArray(argumentAdapters));
if(returnValue instanceof Boolean) {
return (Boolean) returnValue;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
index a2a9bb8..d835ce1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
@@ -22,6 +22,7 @@ package org.apache.isis.metamodel.postprocessors.param;
import java.util.List;
import java.util.Map;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
@@ -46,7 +47,7 @@ public class ActionParameterChoicesFacetFromParentedCollection extends ActionPar
@Override
public Object[] getChoices(
final ManagedObject target,
- final List<ManagedObject> arguments,
+ final Can<ManagedObject> dependentArgs,
final InteractionInitiatedBy interactionInitiatedBy) {
final ManagedObject parentAdapter = determineParentAdapter(target);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
index b7f6aae..2413ef2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.concurrent.Callable;
import org.apache.isis.applib.ApplicationException;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facets.param.defaults.ActionParameterDefaultsFacetAbstract;
import org.apache.isis.metamodel.spec.ManagedObject;
@@ -57,8 +58,9 @@ public class ActionParameterDefaultsFacetFromAssociatedCollection extends Action
@Override
public Object getDefault(
final ManagedObject target,
- List<ManagedObject> argumentsIfAvailable,
+ final Can<ManagedObject> dependentArgs,
final Integer paramNumUpdated) {
+
return selectedPojos.get();
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
index 97c1ad4..34f13c1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
@@ -32,12 +32,11 @@ import javax.annotation.Nullable;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.domain.DomainObjectList;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Tuples.Tuple2;
-import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.metamodel.adapter.oid.RootOid;
import org.apache.isis.metamodel.commons.ClassExtensions;
-import org.apache.isis.metamodel.commons.ListExtensions;
import org.apache.isis.metamodel.commons.MethodExtensions;
import org.apache.isis.metamodel.commons.MethodUtil;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
@@ -389,32 +388,37 @@ public interface ManagedObject {
@NoArgsConstructor(access = AccessLevel.PRIVATE)
static final class InvokeUtil {
- public static void invokeAll(final Collection<Method> methods, final ManagedObject adapter) {
+ public static void invokeAll(Collection<Method> methods, final ManagedObject adapter) {
MethodUtil.invoke(methods, unwrapPojo(adapter));
}
- public static Object invoke(final Method method, final ManagedObject adapter) {
+ public static Object invoke(Method method, ManagedObject adapter) {
return MethodExtensions.invoke(method, unwrapPojo(adapter));
}
- public static Object invoke(final Method method, final ManagedObject adapter, final Object arg0) {
+ public static Object invoke(Method method, ManagedObject adapter, Object arg0) {
return MethodExtensions.invoke(method, unwrapPojo(adapter), new Object[] {arg0});
}
- public static Object invoke(final Method method, final ManagedObject adapter, final ManagedObject arg0Adapter) {
+ public static Object invoke(Method method, ManagedObject adapter, ManagedObject arg0Adapter) {
return invoke(method, adapter, unwrapPojo(arg0Adapter));
}
- public static Object invoke(final Method method, final ManagedObject adapter, final ManagedObject[] argumentAdapters) {
+ public static Object invoke(Method method, ManagedObject adapter, ManagedObject[] argumentAdapters) {
return MethodExtensions.invoke(method, unwrapPojo(adapter), unwrapPojoArray(argumentAdapters));
}
- public static Object invokeC(final Method method, final ManagedObject adapter,
- final Stream<Tuple2<Integer, ? extends ManagedObject>> paramsAndIndexes) {
+ public static Object invokeC(
+ Method method,
+ ManagedObject adapter,
+ Stream<Tuple2<Integer, ? extends ManagedObject>> paramsAndIndexes) {
return invoke(method, adapter, asArray(paramsAndIndexes, method.getParameterTypes().length));
}
- private static ManagedObject[] asArray(final Stream<Tuple2<Integer, ? extends ManagedObject>> paramsAndIndexes, int length) {
+ private static ManagedObject[] asArray(
+ Stream<Tuple2<Integer, ? extends ManagedObject>> paramsAndIndexes,
+ int length) {
+
final ManagedObject[] args = new ManagedObject[length];
paramsAndIndexes.forEach(entry->{
final Integer paramNum = entry.get_1();
@@ -427,47 +431,76 @@ public interface ManagedObject {
/**
* Invokes the method, adjusting arguments as required to make them fit the method's parameters.
- *
* <p>
* That is:
* <ul>
- * <li>if the method declares parameters but arguments are missing, then will provide 'null' defaults for these.
- * <li>if the method does not declare all parameters for arguments, then truncates arguments.
+ * <li>if the method declares parameters but arguments are missing, then will provide 'null' defaults for these.</li>
+ * <li>if the method does not declare all parameters for arguments, then truncates arguments.</li>
+ * <li>any {@code additionalArgValues} must also fit at the end of the resulting parameter list</li>
* </ul>
*/
public static Object invokeAutofit(
final Method method,
final ManagedObject target,
- List<? extends ManagedObject> argumentsIfAvailable/*,
- final SpecificationLoader specLoader*/) {
+ final Can<? extends ManagedObject> dependentArgs,
+ final Can<Object> additionalArgValues) {
- final List<ManagedObject> args = _Lists.newArrayList();
- if(argumentsIfAvailable != null) {
- args.addAll(argumentsIfAvailable);
- }
-
- adjust(method, args/*, specLoader*/);
-
- final ManagedObject[] argArray = args.toArray(new ManagedObject[]{});
- return invoke(method, target, argArray);
+ val argArray = adjust(method, dependentArgs, additionalArgValues);
+
+ return MethodExtensions.invoke(method, unwrapPojo(target), argArray);
+ }
+
+ /**
+ * same as {@link #invokeAutofit(Method, ManagedObject, Can, Can)} w/o additionalArgValues
+ */
+ public static Object invokeAutofit(
+ final Method method,
+ final ManagedObject target,
+ final Can<? extends ManagedObject> dependentArgs) {
+ return invokeAutofit(method, target, dependentArgs, Can.empty());
}
- private static void adjust(
- final Method method, final List<ManagedObject> args /*, final SpecificationLoader specLoader*/) {
-
- final Class<?>[] parameterTypes = method.getParameterTypes();
- ListExtensions.adjust(args, parameterTypes.length);
-
- for(int i=0; i<parameterTypes.length; i++) {
- final Class<?> cls = parameterTypes[i];
- if(args.get(i) == null && cls.isPrimitive()) {
- final Object object = ClassExtensions.toDefault(cls);
-
- final ManagedObject adapter = of((ObjectSpecification)null, object);
- args.set(i, adapter);
- }
+ private static Object[] adjust(
+ final Method method,
+ final Can<? extends ManagedObject> dependentArgs,
+ final Can<Object> additionalArgValues) {
+
+ val parameterTypes = method.getParameterTypes();
+ val paramCount = parameterTypes.length;
+ val additionalArgCount = additionalArgValues.size();
+ val dependentArgsToConsiderCount = paramCount - additionalArgCount;
+
+ val argIterator = dependentArgs.iterator();
+ val adjusted = new Object[paramCount];
+ for(int i=0; i<dependentArgsToConsiderCount; i++) {
+
+ val paramType = parameterTypes[i];
+ val arg = argIterator.hasNext() ? unwrapPojo(argIterator.next()) : null;
+
+ adjusted[i] = honorPrimitiveDefaults(paramType, arg);
+ }
+
+ // add the additional parameter values (if any)
+ int paramIndex = dependentArgsToConsiderCount;
+ for(val additionalArg : additionalArgValues) {
+ adjusted[paramIndex] = additionalArg;
+ ++paramIndex;
}
+
+ return adjusted;
+
}
+
+ private static Object honorPrimitiveDefaults(
+ final Class<?> expectedType,
+ final @Nullable Object value) {
+
+ if(value == null && expectedType.isPrimitive()) {
+ return ClassExtensions.toDefault(expectedType);
+ }
+ return value;
+ }
+
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
index 8831440..b1c560f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
@@ -92,6 +92,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
*/
ManagedObject[] getAutoComplete(
final ManagedObject adapter,
+ final ManagedObject[] argumentsIfAvailable,
final String searchArg,
final InteractionInitiatedBy interactionInitiatedBy);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java
index ed0307c..9b3eda4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -33,7 +33,6 @@ import org.apache.isis.applib.services.command.Command;
import org.apache.isis.commons.exceptions.UnknownTypeException;
import org.apache.isis.commons.internal._Constants;
import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
import org.apache.isis.metamodel.consent.Consent;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.metamodel.consent.InteractionResultSet;
@@ -492,7 +491,11 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
for (int i = 0; i < parameterCount; i++) {
final ActionParameterDefaultsFacet paramFacet = parameters.get(i).getFacet(ActionParameterDefaultsFacet.class);
if (paramFacet != null && !paramFacet.isFallback()) {
- parameterDefaultPojos[i] = paramFacet.getDefault(target, null, null);
+ parameterDefaultPojos[i] = paramFacet
+ .getDefault(
+ target,
+ /*parameters*/ null,
+ /*paramNumUpdated*/null);
} else {
parameterDefaultPojos[i] = null;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 76d8272..6b8ab42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -19,22 +19,21 @@
package org.apache.isis.metamodel.specloader.specimpl;
-import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import org.apache.isis.applib.Identifier;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.metamodel.context.MetaModelContext;
import org.apache.isis.metamodel.commons.ClassExtensions;
-import org.apache.isis.metamodel.commons.ListExtensions;
import org.apache.isis.metamodel.commons.StringExtensions;
import org.apache.isis.metamodel.consent.Allow;
import org.apache.isis.metamodel.consent.Consent;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.metamodel.consent.InteractionResult;
import org.apache.isis.metamodel.consent.InteractionResultSet;
+import org.apache.isis.metamodel.context.MetaModelContext;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facetapi.FeatureType;
import org.apache.isis.metamodel.facets.TypedHolder;
@@ -62,6 +61,8 @@ import org.apache.isis.metamodel.specloader.SpecificationLoader;
import static org.apache.isis.commons.internal.base._With.requires;
+import lombok.val;
+
public abstract class ObjectActionParameterAbstract
implements ObjectActionParameter, FacetHolder.Delegating {
@@ -230,6 +231,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
@Override
public ManagedObject[] getAutoComplete(
final ManagedObject adapter,
+ final ManagedObject[] argumentsIfAvailable,
final String searchArg,
final InteractionInitiatedBy interactionInitiatedBy) {
@@ -237,19 +239,14 @@ implements ObjectActionParameter, FacetHolder.Delegating {
final ActionParameterAutoCompleteFacet facet = getFacet(ActionParameterAutoCompleteFacet.class);
if (facet != null) {
-
- final Object[] choices = facet.autoComplete(adapter, searchArg,
- interactionInitiatedBy);
+ val dependentArgs = Can.ofArray(argumentsIfAvailable);
+ final Object[] choices = facet
+ .autoComplete(adapter, dependentArgs, searchArg, interactionInitiatedBy);
checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification());
for (final Object choice : choices) {
adapters.add(getObjectManager().adapt(choice));
}
}
- /* // now incorporated into above choices processing (BoundedFacet is no more)
- if (adapters.size() == 0 && ChoicesFacetUtils.hasChoices(getSpecification())) {
- addAllInstancesForType(adapters);
- }
- */
return adapters.toArray(new ManagedObject[0]);
}
@@ -274,24 +271,23 @@ implements ObjectActionParameter, FacetHolder.Delegating {
final ManagedObject adapter,
final ManagedObject[] argumentsIfAvailable,
final InteractionInitiatedBy interactionInitiatedBy) {
- final List<ManagedObject> argListIfAvailable = ListExtensions.mutableCopy(argumentsIfAvailable);
-
- final ManagedObject target = targetForDefaultOrChoices(adapter);
- final List<ManagedObject> args = argsForDefaultOrChoices(adapter, argListIfAvailable);
+
+ val args = argsForDefaultOrChoices(adapter, Can.ofArray(argumentsIfAvailable));
+ val target = targetForDefaultOrChoices(adapter);
return findChoices(target, args, interactionInitiatedBy);
}
private ManagedObject[] findChoices(
final ManagedObject target,
- final List<ManagedObject> args,
+ final Can<ManagedObject> args,
final InteractionInitiatedBy interactionInitiatedBy) {
+
final List<ManagedObject> adapters = _Lists.newArrayList();
final ActionParameterChoicesFacet facet = getFacet(ActionParameterChoicesFacet.class);
if (facet != null) {
- final Object[] choices = facet.getChoices(target, args,
- interactionInitiatedBy);
+ final Object[] choices = facet.getChoices(target, args, interactionInitiatedBy);
checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification());
for (final Object choice : choices) {
ManagedObject adapter = choice != null? getObjectManager().adapt(choice) : null;
@@ -318,15 +314,16 @@ implements ObjectActionParameter, FacetHolder.Delegating {
final Integer paramNumUpdated) {
final ManagedObject target = targetForDefaultOrChoices(adapter);
- final List<ManagedObject> args = argsForDefaultOrChoices(adapter, argumentsIfAvailable != null ? Arrays.asList(argumentsIfAvailable) : null);
+ val args = argsForDefaultOrChoices(adapter, Can.ofArray(argumentsIfAvailable));
return findDefault(target, args, paramNumUpdated);
}
private ManagedObject findDefault(
final ManagedObject target,
- final List<ManagedObject> args,
+ final Can<ManagedObject> args,
final Integer paramNumUpdated) {
+
final ActionParameterDefaultsFacet defaultsFacet = getFacet(ActionParameterDefaultsFacet.class);
if (defaultsFacet != null) {
final Object dflt = defaultsFacet.getDefault(target, args, paramNumUpdated);
@@ -350,9 +347,9 @@ implements ObjectActionParameter, FacetHolder.Delegating {
/**
* Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override.
*/
- protected List<ManagedObject> argsForDefaultOrChoices(
+ protected Can<ManagedObject> argsForDefaultOrChoices(
final ManagedObject adapter,
- final List<ManagedObject> argumentsIfAvailable) {
+ final Can<ManagedObject> argumentsIfAvailable) {
return argumentsIfAvailable;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
index ed4a595..a77d47d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
@@ -18,14 +18,23 @@
*/
package org.apache.isis.metamodel.specloader.specimpl;
+import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.metamodel.commons.ListExtensions;
import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.metamodel.facetapi.FeatureType;
import org.apache.isis.metamodel.spec.ManagedObject;
import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
+/**
+ *
+ * @deprecated contributed actions from services are deprecated, use mixins instead
+ *
+ */
+@Deprecated
public abstract class ObjectActionParameterContributeeAbstract
extends ObjectActionParameterAbstract
implements ObjectActionParameterContributee {
@@ -40,6 +49,7 @@ implements ObjectActionParameterContributee {
final ObjectActionParameterAbstract serviceActionParameter,
final int contributeeParamNumber,
final ObjectActionContributee contributeeAction) {
+
super(featureType, contributeeParamNumber, contributeeAction, serviceActionParameter.getPeer());
this.servicePojo = servicePojo;
this.serviceActionParameter = serviceActionParameter;
@@ -49,9 +59,14 @@ implements ObjectActionParameterContributee {
@Override
public ManagedObject[] getAutoComplete(
final ManagedObject adapter,
+ final ManagedObject[] argumentsIfAvailable,
final String searchArg,
final InteractionInitiatedBy interactionInitiatedBy) {
- return serviceActionParameter.getAutoComplete(getServiceAdapter(), searchArg,
+
+ return serviceActionParameter.getAutoComplete(
+ getServiceAdapter(),
+ argumentsIfAvailable,
+ searchArg,
interactionInitiatedBy);
}
@@ -64,17 +79,17 @@ implements ObjectActionParameterContributee {
return getServiceAdapter();
}
+
@Override
- protected List<ManagedObject> argsForDefaultOrChoices(
+ protected Can<ManagedObject> argsForDefaultOrChoices(
final ManagedObject contributee,
- final List<ManagedObject> argumentsIfAvailable) {
-
- final List<ManagedObject> suppliedArgs = ListExtensions.mutableCopy(argumentsIfAvailable);
+ final Can<ManagedObject> dependentArgs) {
+ final List<ManagedObject> suppliedArgs = dependentArgs.stream()
+ .collect(Collectors.toCollection(ArrayList::new));
final int contributeeParam = contributeeAction.getContributeeParam();
ListExtensions.insert(suppliedArgs, contributeeParam, contributee);
-
- return suppliedArgs;
+ return Can.ofCollection(suppliedArgs);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
index c3626ec..85f5f76 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
@@ -32,8 +32,10 @@ implements ObjectActionParameterMixedIn {
private final ObjectActionMixedIn mixedInAction;
public ObjectActionParameterMixedInAbstract(
- final FeatureType featureType, final ObjectActionParameterAbstract mixinParameter,
+ final FeatureType featureType,
+ final ObjectActionParameterAbstract mixinParameter,
final ObjectActionMixedIn mixedInAction) {
+
super(featureType, mixinParameter.getNumber(), mixedInAction, mixinParameter.getPeer());
this.mixinParameter = mixinParameter;
this.mixedInAction = mixedInAction;
@@ -42,10 +44,14 @@ implements ObjectActionParameterMixedIn {
@Override
public ManagedObject[] getAutoComplete(
final ManagedObject mixedInAdapter,
+ final ManagedObject[] argumentsIfAvailable,
final String searchArg,
final InteractionInitiatedBy interactionInitiatedBy) {
+
return mixinParameter.getAutoComplete(
- mixinAdapterFor(mixedInAdapter), searchArg,
+ mixinAdapterFor(mixedInAdapter),
+ argumentsIfAvailable,
+ searchArg,
interactionInitiatedBy);
}
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 1991b7f..6358505 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -229,6 +229,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
@Override
public List<ManagedObject> getAutoComplete(
final ScalarModel scalarModel,
+ final ManagedObject[] argumentsIfAvailable, // ignored for properties
final String searchArg,
final AuthenticationSession authenticationSession) {
@@ -238,7 +239,8 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
scalarModel.getParentEntityModel().load();
final ManagedObject[] choices =
property.getAutoComplete(
- parentAdapter, searchArg,
+ parentAdapter,
+ searchArg,
InteractionInitiatedBy.USER);
return choicesAsList(choices);
}
@@ -441,6 +443,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
final ScalarModel scalarModel,
final ManagedObject[] argumentsIfAvailable,
final AuthenticationSession authenticationSession) {
+
final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader());
@@ -449,7 +452,8 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
final ManagedObject[] choices =
actionParameter.getChoices(
- parentAdapter, argumentsIfAvailable,
+ parentAdapter,
+ argumentsIfAvailable,
InteractionInitiatedBy.USER);
return choicesAsList(choices);
}
@@ -463,14 +467,18 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
@Override
public List<ManagedObject> getAutoComplete(
final ScalarModel scalarModel,
+ final ManagedObject[] argumentsIfAvailable,
final String searchArg,
final AuthenticationSession authenticationSession) {
+
final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader());
ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
final ManagedObject[] choices = actionParameter.getAutoComplete(
- parentAdapter, searchArg,
+ parentAdapter,
+ argumentsIfAvailable,
+ searchArg,
InteractionInitiatedBy.USER);
return choicesAsList(choices);
}
@@ -621,22 +629,23 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
}
public abstract ManagedObject getDefault(
- final ScalarModel scalarModel,
- final ManagedObject[] argsIfAvailable,
- final int paramNumUpdated,
- final AuthenticationSession authenticationSession);
+ ScalarModel scalarModel,
+ ManagedObject[] argsIfAvailable,
+ int paramNumUpdated,
+ AuthenticationSession authenticationSession);
public abstract boolean hasChoices(ScalarModel scalarModel);
public abstract List<ManagedObject> getChoices(
- final ScalarModel scalarModel,
- final ManagedObject[] argumentsIfAvailable,
- final AuthenticationSession authenticationSession);
+ ScalarModel scalarModel,
+ ManagedObject[] argumentsIfAvailable,
+ AuthenticationSession authenticationSession);
public abstract boolean hasAutoComplete(ScalarModel scalarModel);
public abstract List<ManagedObject> getAutoComplete(
ScalarModel scalarModel,
+ ManagedObject[] argumentsIfAvailable,
String searchArg,
- final AuthenticationSession authenticationSession);
+ AuthenticationSession authenticationSession);
public abstract int getAutoCompleteOrChoicesMinLength(ScalarModel scalarModel);
@@ -923,9 +932,10 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
}
public List<ManagedObject> getAutoComplete(
+ final ManagedObject[] argumentsIfAvailable,
final String searchTerm,
final AuthenticationSession authenticationSession) {
- return kind.getAutoComplete(this, searchTerm, authenticationSession);
+ return kind.getAutoComplete(this, argumentsIfAvailable, searchTerm, authenticationSession);
}
/**
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
index 681c644..1d5dafb 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
@@ -85,7 +85,8 @@ public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvide
return NULL_PLACEHOLDER;
}
final ObjectSpecId objectSpecId = choice.getObjectSpecId();
- final ObjectSpecification spec = commonContext.getSpecificationLoader().lookupBySpecIdElseLoad(objectSpecId);
+ final ObjectSpecification spec = commonContext.getSpecificationLoader()
+ .lookupBySpecIdElseLoad(objectSpecId);
// support enums that are implementing an interface; only know this late in the day
// TODO: this is a hack, really should push this deeper so that Encodeable OAMs also prefix themselves with their objectSpecId
@@ -97,7 +98,10 @@ public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvide
}
@Override
- public void query(final String term, final int page, final org.wicketstuff.select2.Response<ObjectMemento> response) {
+ public void query(
+ final String term,
+ final int page,
+ final org.wicketstuff.select2.Response<ObjectMemento> response) {
final List<ObjectMemento> mementos = _Lists.newArrayList(obtainMementos(term));
// if not mandatory, and the list doesn't contain null already, then add it in.
@@ -117,7 +121,10 @@ public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvide
* @param choicesMementos The collections of choices to filter
* @return A list of all matching choices
*/
- protected final List<ObjectMemento> obtainMementos(String term, Collection<ObjectMemento> choicesMementos) {
+ protected final List<ObjectMemento> obtainMementos(
+ String term,
+ Collection<ObjectMemento> choicesMementos) {
+
List<ObjectMemento> matches = _Lists.newArrayList();
if (Strings.isEmpty(term)) {
matches.addAll(choicesMementos);
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
index f1c0050..7d2f6e8 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceChoices.java
@@ -65,7 +65,7 @@ implements ObjectAdapterMementoProviderForChoices {
@Override
protected List<ObjectMemento> obtainMementos(String term) {
- return obtainMementos(term, choiceMementos);
+ return super.obtainMementos(term, choiceMementos);
}
@Override
@@ -75,14 +75,16 @@ implements ObjectAdapterMementoProviderForChoices {
@Override
public Collection<ObjectMemento> toChoices(final Collection<String> ids) {
- final Function<String, ObjectMemento> function = (final String input) -> {
+ final Function<String, ObjectMemento> idToMemento = (final String input) -> {
if(NULL_PLACEHOLDER.equals(input)) {
return null;
}
val rootOid = RootOid.deString(input);
return super.getCommonContext().mementoFor(rootOid);
};
- return _NullSafe.stream(ids).map(function).collect(Collectors.toList());
+ return _NullSafe.stream(ids)
+ .map(idToMemento)
+ .collect(Collectors.toList());
}
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
index eea9829..b4d521d 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
@@ -66,8 +66,10 @@ extends ObjectAdapterMementoProviderAbstract {
val autoCompleteChoices = _Lists.<ManagedObject>newArrayList();
if (getScalarModel().hasAutoComplete()) {
- val autoCompleteAdapters =
- getScalarModel().getAutoComplete(term, commonContext.getAuthenticationSession());
+ // this implementation will not recover any dependentArgs
+ val dependentArgs = (ManagedObject[])null;
+ val autoCompleteAdapters = getScalarModel()
+ .getAutoComplete(dependentArgs, term, commonContext.getAuthenticationSession());
autoCompleteChoices.addAll(autoCompleteAdapters);
}