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;