You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by sa...@apache.org on 2014/07/31 10:06:43 UTC

git commit: Adding resource path auto completion support

Repository: stratos
Updated Branches:
  refs/heads/master b60c67b57 -> 75d3efbf2


Adding resource path auto completion support


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/75d3efbf
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/75d3efbf
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/75d3efbf

Branch: refs/heads/master
Commit: 75d3efbf23d22dc8868f3d8745a9e63a318fd22b
Parents: b60c67b
Author: sajhak <sa...@gmail.com>
Authored: Thu Jul 31 13:36:25 2014 +0530
Committer: sajhak <sa...@gmail.com>
Committed: Thu Jul 31 13:36:25 2014 +0530

----------------------------------------------------------------------
 .../stratos/cli/completer/CommandCompleter.java |  9 ++++
 .../cli/completer/StratosFileNameCompleter.java | 48 ++++++++++++++++++++
 2 files changed, 57 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/75d3efbf/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/completer/CommandCompleter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/completer/CommandCompleter.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/completer/CommandCompleter.java
index 4f7eb09..0ba3cd8 100644
--- a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/completer/CommandCompleter.java
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/completer/CommandCompleter.java
@@ -26,6 +26,7 @@ import java.util.Map;
 
 import jline.console.completer.ArgumentCompleter;
 import jline.console.completer.Completer;
+import jline.console.completer.FileNameCompleter;
 import jline.console.completer.StringsCompleter;
 
 import org.apache.commons.cli.Option;
@@ -51,16 +52,20 @@ public class CommandCompleter implements Completer {
 	private final Completer helpCommandCompleter;
 
 	private final Completer defaultCommandCompleter;
+	
+	private final Completer fileNameCompleter;
 
 	public CommandCompleter(Map<String, Command<StratosCommandContext>> commands) {
 		if (logger.isDebugEnabled()) {
 			logger.debug("Creating auto complete for {} commands", commands.size());
 		}
+		fileNameCompleter = new StratosFileNameCompleter();
 		argumentMap = new HashMap<String, Collection<String>>();
 		defaultCommandCompleter = new StringsCompleter(commands.keySet());
 		helpCommandCompleter = new ArgumentCompleter(new StringsCompleter(CliConstants.HELP_ACTION),
 				defaultCommandCompleter);
 		for (String action : commands.keySet()) {
+			
 			Command<StratosCommandContext> command = commands.get(action);
 			Options commandOptions = command.getOptions();
 			if (commandOptions != null) {
@@ -87,6 +92,10 @@ public class CommandCompleter implements Completer {
 
 	@Override
 	public int complete(String buffer, int cursor, List<CharSequence> candidates) {
+			
+		if(buffer.contains(CliConstants.RESOURCE_PATH_LONG_OPTION)) {
+			return fileNameCompleter.complete(buffer, cursor, candidates);
+		}
 		if (logger.isTraceEnabled()) {
 			logger.trace("Buffer: {}, cursor: {}", buffer, cursor);
 			logger.trace("Candidates {}", candidates);

http://git-wip-us.apache.org/repos/asf/stratos/blob/75d3efbf/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/completer/StratosFileNameCompleter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/completer/StratosFileNameCompleter.java b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/completer/StratosFileNameCompleter.java
new file mode 100644
index 0000000..94e93cc
--- /dev/null
+++ b/components/org.apache.stratos.cli/src/main/java/org/apache/stratos/cli/completer/StratosFileNameCompleter.java
@@ -0,0 +1,48 @@
+package org.apache.stratos.cli.completer;
+
+import java.io.File;
+import java.util.List;
+
+import org.apache.stratos.cli.utils.CliConstants;
+
+import jline.console.completer.FileNameCompleter;
+
+public class StratosFileNameCompleter extends FileNameCompleter {
+
+	@Override
+	public int complete(String buf, int arg1, List<CharSequence> candidates) {
+
+		String buffer = (buf == null) ? "" : buf;
+		String subString = null;
+		int index = buf.lastIndexOf("--"+CliConstants.RESOURCE_PATH_LONG_OPTION);
+		if (buf.length() >= index + 16) {
+			subString = buf.substring(index + 16);
+		}
+
+		String translated = (subString == null || subString.isEmpty()) ? buf
+				: subString;
+		if (translated.startsWith("~" + File.separator)) {
+			translated = System.getProperty("user.home")
+					+ translated.substring(1);
+		} else if (translated.startsWith("." + File.separator)) {
+			translated = new File("").getAbsolutePath() + File.separator
+					+ translated;
+		}
+
+		File f = new File(translated);
+
+		final File dir;
+
+		if (translated.endsWith(File.separator)) {
+			dir = f;
+		} else {
+			dir = f.getParentFile();
+		}
+
+		final File[] entries = (dir == null) ? new File[0] : dir.listFiles();
+
+		return matchFiles(buffer, translated, entries, candidates);
+
+	}
+
+}