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;
}