You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by mg...@apache.org on 2016/03/25 15:10:39 UTC
[03/50] isis git commit: ISIS-687: now honouring @MinLength when
specified on an action.
ISIS-687: now honouring @MinLength when specified on an action.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/b0663416
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/b0663416
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/b0663416
Branch: refs/heads/ISIS-1223-upgrade-to-wicket-7
Commit: b0663416fac67ebf8c85ae8ad6f841962508ec70
Parents: 2936d1d
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Sat Mar 19 10:02:38 2016 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Sat Mar 19 10:02:38 2016 +0000
----------------------------------------------------------------------
.../invocation/ActionInvocationFacet.java | 11 ++---
.../object/autocomplete/AutoCompleteFacet.java | 3 +-
.../autocomplete/AutoCompleteFacetAbstract.java | 51 +++++++++++++++++++-
.../param/autocomplete/MinLengthUtil.java | 4 ++
.../metamodel/spec/feature/ObjectAction.java | 2 +
.../scalars/reference/ReferencePanel.java | 7 +++
6 files changed, 70 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/b0663416/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
index 97084ab..6e1393d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
@@ -41,17 +41,17 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
*/
public interface ActionInvocationFacet extends Facet {
- public ObjectAdapter invoke(
+ ObjectAdapter invoke(
ObjectAction owningAction,
ObjectAdapter targetAdapter,
ObjectAdapter[] argumentAdapters,
final InteractionInitiatedBy interactionInitiatedBy);
- public ObjectSpecification getReturnType();
+ ObjectSpecification getReturnType();
- public ObjectSpecification getOnType();
+ ObjectSpecification getOnType();
- public static class CurrentInvocation {
+ class CurrentInvocation {
private final Command command;
@@ -127,8 +127,7 @@ public interface ActionInvocationFacet extends Facet {
* TODO...
* @deprecated - should instead use the {@link CommandContext} request.
*/
- @Deprecated
- public static ThreadLocal<CurrentInvocation> currentInvocation = new ThreadLocal<>();
+ @Deprecated ThreadLocal<CurrentInvocation> currentInvocation = new ThreadLocal<>();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/b0663416/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacet.java
index cd95edb..7943935 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacet.java
@@ -27,8 +27,9 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
public interface AutoCompleteFacet extends Facet {
- public List<ObjectAdapter> execute(
+ List<ObjectAdapter> execute(
final String search,
final InteractionInitiatedBy interactionInitiatedBy);
+ int getMinLength();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/b0663416/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
index 0ecd21e..64716a3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.metamodel.facets.object.autocomplete;
+import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
@@ -31,7 +32,10 @@ import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet;
+import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -41,6 +45,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
public abstract class AutoCompleteFacetAbstract extends FacetAbstract implements AutoCompleteFacet {
+
public static Class<? extends Facet> type() {
return AutoCompleteFacet.class;
}
@@ -55,6 +60,11 @@ public abstract class AutoCompleteFacetAbstract extends FacetAbstract implements
private final ServicesInjector servicesInjector;
/**
+ * lazily populated
+ */
+ private Integer minLength;
+
+ /**
* cached once searched for
*/
private ObjectAction repositoryAction;
@@ -118,10 +128,49 @@ public abstract class AutoCompleteFacetAbstract extends FacetAbstract implements
}
}
+ @Override
+ public int getMinLength() {
+ if(minLength == null) {
+ final Method method = findMethod();
+ minLength = MinLengthUtil.determineMinLength(method);
+ }
+ return minLength;
+ }
+
+ private Method findMethod() {
+ if(!cachedRepositoryAction) {
+ cacheRepositoryAction();
+ }
+
+ final ActionInvocationFacet invocationFacet = repositoryAction.getFacet(ActionInvocationFacet.class);
+ if(invocationFacet instanceof ImperativeFacet) {
+ return findMethod((ImperativeFacet) invocationFacet);
+ }
+ final Facet underlyingFacet = invocationFacet.getUnderlyingFacet();
+ if(underlyingFacet instanceof ImperativeFacet) {
+ return findMethod((ImperativeFacet) underlyingFacet);
+ }
+ return null;
+ }
+
+ private Method findMethod(final ImperativeFacet invocationFacet) {
+ final ImperativeFacet facet = invocationFacet;
+ final List<Method> methods = facet.getMethods();
+ for (Method method : methods) {
+ final ImperativeFacet.Intent intent = facet.getIntent(method);
+ if(intent == ImperativeFacet.Intent.EXECUTE) {
+ return method;
+ }
+ }
+ return null;
+ }
+
private void cacheRepositoryAction() {
try {
final ObjectSpecification repositorySpec = specificationLoader.loadSpecification(repositoryClass);
- final List<ObjectAction> objectActions = repositorySpec.getObjectActions(ActionType.USER, Contributed.EXCLUDED, ObjectAction.Filters.withId(actionName));
+ final List<ObjectAction> objectActions =
+ repositorySpec.getObjectActions(
+ ActionType.USER, Contributed.EXCLUDED, ObjectAction.Filters.withId(actionName));
repositoryAction = objectActions.size() == 1? objectActions.get(0): null;
} finally {
http://git-wip-us.apache.org/repos/asf/isis/blob/b0663416/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/MinLengthUtil.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/MinLengthUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/MinLengthUtil.java
index 51f9c27..7a3cc27 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/MinLengthUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/MinLengthUtil.java
@@ -32,6 +32,10 @@ public final class MinLengthUtil {
* supplied method.
*/
public static int determineMinLength(final Method method) {
+ if(method == null) {
+ return MIN_LENGTH_DEFAULT;
+ }
+
final Annotation[][] parameterAnnotations = method.getParameterAnnotations();
if(parameterAnnotations.length == 1) {
final Annotation[] searchArgAnnotations = parameterAnnotations[0];
http://git-wip-us.apache.org/repos/asf/isis/blob/b0663416/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
index a09c077..659c5dc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
@@ -17,6 +17,7 @@
package org.apache.isis.core.metamodel.spec.feature;
+import java.lang.reflect.Method;
import java.util.List;
import com.google.common.base.Predicate;
@@ -184,6 +185,7 @@ public interface ObjectAction extends ObjectMember {
final ObjectAdapter target,
final InteractionInitiatedBy interactionInitiatedBy);
+
// //////////////////////////////////////////////////////
// Utils
// //////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/b0663416/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 7638f85..1fe3a60 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -274,6 +274,13 @@ public class ReferencePanel extends ScalarPanelAbstract {
settings.setMinimumInputLength(minLength);
settings.setPlaceholder(getModel().getName());
}
+ if(hasObjectAutoComplete()) {
+ final ObjectSpecification typeOfSpecification = getModel().getTypeOfSpecification();
+ final AutoCompleteFacet autoCompleteFacet = typeOfSpecification.getFacet(AutoCompleteFacet.class);
+ final Settings settings = select2Field.getSettings();
+ final int minLength = autoCompleteFacet.getMinLength();
+ settings.setMinimumInputLength(minLength);
+ }
entityLink.addOrReplace(select2Field);
} else {
//