You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by io...@apache.org on 2011/11/25 12:57:11 UTC
svn commit: r1206128 - in /karaf/branches/karaf-2.2.x/shell:
config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationPropertyCompleter.java
console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
Author: iocanel
Date: Fri Nov 25 11:57:11 2011
New Revision: 1206128
URL: http://svn.apache.org/viewvc?rev=1206128&view=rev
Log:
[KARAF-977] Added autocompletion support for cases where pid is passed as an option.
Modified:
karaf/branches/karaf-2.2.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationPropertyCompleter.java
karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
Modified: karaf/branches/karaf-2.2.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationPropertyCompleter.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationPropertyCompleter.java?rev=1206128&r1=1206127&r2=1206128&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationPropertyCompleter.java (original)
+++ karaf/branches/karaf-2.2.x/shell/config/src/main/java/org/apache/karaf/shell/config/completers/ConfigurationPropertyCompleter.java Fri Nov 25 11:57:11 2011
@@ -20,15 +20,16 @@
package org.apache.karaf.shell.config.completers;
import java.io.IOException;
+import java.util.Arrays;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-
import org.apache.felix.service.command.CommandSession;
import org.apache.karaf.shell.config.ConfigCommandSupport;
import org.apache.karaf.shell.console.Completer;
+import org.apache.karaf.shell.console.completer.ArgumentCompleter;
import org.apache.karaf.shell.console.completer.StringsCompleter;
import org.apache.karaf.shell.console.jline.CommandSessionHolder;
import org.osgi.service.cm.Configuration;
@@ -44,22 +45,57 @@ public class ConfigurationPropertyComple
private final StringsCompleter delegate = new StringsCompleter();
- private ConfigurationAdmin configAdmin;
-
+ private static final String OPTION = "-p";
+ private static final String ALIAS = "--pid";
+ private ConfigurationAdmin configAdmin;
public int complete(final String buffer, final int cursor, final List candidates) {
CommandSession session = CommandSessionHolder.getSession();
if (session != null) {
- String pid = (String) session.get(ConfigCommandSupport.PROPERTY_CONFIG_PID);
+ String pid = getPid(session);
Set<String> propertyNames = getPropertyNames(pid);
if (propertyNames != null && !propertyNames.isEmpty()) {
+ delegate.getStrings().clear();
delegate.getStrings().addAll(propertyNames);
}
}
return delegate.complete(buffer,cursor,candidates);
}
+ /**
+ * Retrieves the pid stored in the {@link CommandSession} or passed as an argument.
+ * Argument takes precedence from pid stored in the {@link CommandSession}.
+ * @param commandSession
+ * @return
+ */
+ private String getPid(CommandSession commandSession) {
+ String pid = (String) commandSession.get(ConfigCommandSupport.PROPERTY_CONFIG_PID);
+ ArgumentCompleter.ArgumentList list = (ArgumentCompleter.ArgumentList) commandSession.get(ArgumentCompleter.ARGUMENTS_LIST);
+ if (list != null && list.getArguments() != null && list.getArguments().length > 0) {
+ List<String> arguments = Arrays.asList(list.getArguments());
+ if (arguments.contains(OPTION)) {
+ int index = arguments.indexOf(OPTION);
+ if (arguments.size() > index) {
+ return arguments.get(index + 1);
+ }
+ }
+
+ if (arguments.contains(ALIAS)) {
+ int index = arguments.indexOf(ALIAS);
+ if (arguments.size() > index) {
+ return arguments.get(index + 1);
+ }
+ }
+ }
+ return pid;
+ }
+
+ /**
+ * Returns the property names for the given pid.
+ * @param pid
+ * @return
+ */
private Set<String> getPropertyNames(String pid) {
Set<String> propertyNames = new HashSet<String>();
if (pid != null) {
Modified: karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java?rev=1206128&r1=1206127&r2=1206128&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java (original)
+++ karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/ArgumentCompleter.java Fri Nov 25 11:57:11 2011
@@ -47,12 +47,15 @@ import org.apache.felix.service.command.
import org.apache.karaf.shell.console.CompletableFunction;
import org.apache.karaf.shell.console.Completer;
import org.apache.karaf.shell.console.NameScoping;
+import org.apache.karaf.shell.console.jline.CommandSessionHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ArgumentCompleter implements Completer {
private static final Logger LOGGER = LoggerFactory.getLogger(ArgumentCompleter.class);
+ public static final String ARGUMENTS_LIST = "ARGUMENTS_LIST";
+
final Completer commandCompleter;
final Completer optionsCompleter;
final List<Completer> argsCompleters;
@@ -207,6 +210,12 @@ public class ArgumentCompleter implement
int argpos = list.getArgumentPosition();
int argIndex = list.getCursorArgumentIndex();
+ //Store the argument list so that it can be used by completers.
+ CommandSession commandSession = CommandSessionHolder.getSession();
+ if(commandSession != null) {
+ commandSession.put(ARGUMENTS_LIST,list);
+ }
+
Completer comp = null;
String[] args = list.getArguments();
int index = 0;