You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2010/09/18 05:54:57 UTC

svn commit: r998396 - in /karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer: ArgumentCompleter.java StringsCompleter.java

Author: gnodet
Date: Sat Sep 18 03:54:57 2010
New Revision: 998396

URL: http://svn.apache.org/viewvc?rev=998396&view=rev
Log:
Add an automatic enum completer

Modified:
    karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
    karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/StringsCompleter.java

Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java?rev=998396&r1=998395&r2=998396&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java Sat Sep 18 03:54:57 2010
@@ -30,9 +30,12 @@ import java.lang.reflect.InvocationTarge
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.EnumSet;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.felix.gogo.commands.Action;
 import org.apache.felix.gogo.commands.Argument;
@@ -156,7 +159,13 @@ public class ArgumentCompleter implement
                     if (type.isAssignableFrom(File.class)) {
                         argCompleter = new FileCompleter(session);
                     } else if (type.isAssignableFrom(Boolean.class) || type.isAssignableFrom(boolean.class)) {
-                        argCompleter = new StringsCompleter(new String[] {"false", "true"});
+                        argCompleter = new StringsCompleter(new String[] {"false", "true"}, false);
+                    } else if (type.isAssignableFrom(Enum.class)) {
+                        Set<String> values = new HashSet<String>();
+                        for (Object o : EnumSet.allOf((Class<Enum>) type)) {
+                            values.add(o.toString());
+                        }
+                        argCompleter = new StringsCompleter(values, false);
                     } else {
                         // TODO any other completers we can add?
                     }

Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/StringsCompleter.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/StringsCompleter.java?rev=998396&r1=998395&r2=998396&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/StringsCompleter.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/completer/StringsCompleter.java Sat Sep 18 03:54:57 2010
@@ -35,12 +35,30 @@ public class StringsCompleter
     implements Completer
 {
     private final SortedSet<String> strings = new TreeSet<String>();
+    private final boolean caseSensitive;
+
+    public StringsCompleter() {
+        this(true);
+    }
 
-    public StringsCompleter() {}
+
+    public StringsCompleter(final boolean caseSensitive) {
+        this.caseSensitive = caseSensitive;
+    }
 
     public StringsCompleter(final Collection<String> strings) {
+        this();
         assert strings != null;
+        getStrings().addAll(strings);
+    }
+
+    public StringsCompleter(final String[] strings, boolean caseSensitive) {
+        this(Arrays.asList(strings), caseSensitive);
+    }
 
+    public StringsCompleter(final Collection<String> strings, boolean caseSensitive) {
+        this(caseSensitive);
+        assert strings != null;
         getStrings().addAll(strings);
     }
 
@@ -59,11 +77,15 @@ public class StringsCompleter
         if (buffer == null) {
             buffer = "";
         }
+        if (!caseSensitive) {
+            buffer = buffer.toLowerCase();
+        }
 
         SortedSet<String> matches = strings.tailSet(buffer);
 
         for (String match : matches) {
-            if (!match.startsWith(buffer)) {
+            String s = caseSensitive ? match : match.toLowerCase();
+            if (!s.startsWith(buffer)) {
                 break;
             }