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 {
                 //