You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by cs...@apache.org on 2014/02/20 22:29:08 UTC
[1/2] git commit: KARAF-2772 Make some classes independent from jansi
and jline
Repository: karaf
Updated Branches:
refs/heads/master d3e8e38cd -> 5de27617e
KARAF-2772 Make some classes independent from jansi and jline
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/4e47afae
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/4e47afae
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/4e47afae
Branch: refs/heads/master
Commit: 4e47afae55180beed90196dd7ed4ae8f848d60b2
Parents: b5c0ec0
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Thu Feb 20 22:28:33 2014 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Thu Feb 20 22:28:33 2014 +0100
----------------------------------------------------------------------
.../felix/gogo/commands/CommandException.java | 10 +-
.../commands/basic/DefaultActionPreparator.java | 212 +++++++------------
.../karaf/shell/commands/CommandException.java | 10 +-
.../commands/basic/DefaultActionPreparator.java | 58 ++---
.../shell/commands/meta/ActionMetaData.java | 23 +-
.../shell/console/completer/FileCompleter.java | 126 ++++++++++-
.../karaf/shell/util/CommandSessionUtil.java | 28 +++
.../org/apache/karaf/shell/util/ShellUtil.java | 48 ++---
.../org/apache/karaf/shell/util/SimpleAnsi.java | 30 +++
9 files changed, 312 insertions(+), 233 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/4e47afae/shell/console/src/main/java/org/apache/felix/gogo/commands/CommandException.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/felix/gogo/commands/CommandException.java b/shell/console/src/main/java/org/apache/felix/gogo/commands/CommandException.java
index 3348eda..01c652a 100644
--- a/shell/console/src/main/java/org/apache/felix/gogo/commands/CommandException.java
+++ b/shell/console/src/main/java/org/apache/felix/gogo/commands/CommandException.java
@@ -18,7 +18,7 @@
*/
package org.apache.felix.gogo.commands;
-import org.fusesource.jansi.Ansi;
+import org.apache.karaf.shell.util.SimpleAnsi;
/**
* Base class for exceptions thrown when executing commands.
@@ -55,11 +55,9 @@ public class CommandException extends Exception {
public String getNiceHelp() {
return help != null ? help
- : Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command: ")
- .a(getMessage() != null ? getMessage() : getClass().getName())
- .fg(Ansi.Color.DEFAULT).toString();
+ : SimpleAnsi.COLOR_RED + "Error executing command: "
+ + getMessage() != null ? getMessage() : getClass().getName()
+ + SimpleAnsi.COLOR_DEFAULT;
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/4e47afae/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java b/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
index 9522811..e099294 100644
--- a/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
+++ b/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
@@ -18,6 +18,11 @@
*/
package org.apache.felix.gogo.commands.basic;
+import static org.apache.karaf.shell.util.SimpleAnsi.COLOR_DEFAULT;
+import static org.apache.karaf.shell.util.SimpleAnsi.COLOR_RED;
+import static org.apache.karaf.shell.util.SimpleAnsi.INTENSITY_BOLD;
+import static org.apache.karaf.shell.util.SimpleAnsi.INTENSITY_NORMAL;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -31,7 +36,6 @@ import java.io.PrintStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import jline.Terminal;
import org.apache.felix.gogo.commands.CommandException;
import org.apache.felix.gogo.commands.Option;
import org.apache.felix.gogo.commands.Action;
@@ -41,7 +45,7 @@ import org.apache.felix.gogo.commands.converter.DefaultConverter;
import org.apache.felix.gogo.commands.converter.GenericType;
import org.apache.felix.service.command.CommandSession;
import org.apache.karaf.shell.console.NameScoping;
-import org.fusesource.jansi.Ansi;
+import org.apache.karaf.shell.util.CommandSessionUtil;
@Deprecated
public class DefaultActionPreparator implements ActionPreparator {
@@ -172,22 +176,14 @@ public class DefaultActionPreparator implements ActionPreparator {
if (option == null) {
Command command = action.getClass().getAnnotation(Command.class);
if (command != null) {
- throw new CommandException(
- Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command ")
- .a(command.scope())
- .a(":")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(command.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(" undefined option ")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(param)
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .fg(Ansi.Color.DEFAULT)
- .toString(),
- "Undefined option: " + param
+ throw new CommandException(COLOR_RED
+ + "Error executing command "
+ + command.scope() + ":"
+ + INTENSITY_BOLD + command.name() + INTENSITY_NORMAL
+ + " undefined option "
+ + INTENSITY_BOLD + param + INTENSITY_NORMAL
+ + COLOR_DEFAULT,
+ "Undefined option: " + param
);
} else {
throw new CommandException("Undefined option: " + param);
@@ -203,22 +199,14 @@ public class DefaultActionPreparator implements ActionPreparator {
if (value == null) {
Command command = action.getClass().getAnnotation(Command.class);
if (command != null) {
- throw new CommandException(
- Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command ")
- .a(command.scope())
- .a(":")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(command.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(" missing value for option ")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(param)
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .fg(Ansi.Color.DEFAULT)
- .toString(),
- "Missing value for option: " + param
+ throw new CommandException(COLOR_RED
+ + "Error executing command "
+ + command.scope() + ":"
+ + INTENSITY_BOLD + command.name() + INTENSITY_NORMAL
+ + " missing value for option "
+ + INTENSITY_BOLD + param + INTENSITY_NORMAL
+ + COLOR_DEFAULT,
+ "Missing value for option: " + param
);
} else {
throw new CommandException("Missing value for option: " + param);
@@ -239,19 +227,14 @@ public class DefaultActionPreparator implements ActionPreparator {
if (argIndex >= orderedArguments.size()) {
Command command = action.getClass().getAnnotation(Command.class);
if (command != null) {
- throw new CommandException(
- Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command ")
- .a(command.scope())
- .a(":")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(command.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(": too many arguments specified")
- .fg(Ansi.Color.DEFAULT)
- .toString(),
- "Too many arguments specified"
+ throw new CommandException(COLOR_RED
+ + "Error executing command "
+ + command.scope() + ":"
+ + INTENSITY_BOLD + command.name() + INTENSITY_NORMAL
+ + ": too many arguments specified"
+ + INTENSITY_BOLD + param + INTENSITY_NORMAL
+ + COLOR_DEFAULT,
+ "Too many arguments specified"
);
} else {
throw new CommandException("Too many arguments specified");
@@ -278,22 +261,14 @@ public class DefaultActionPreparator implements ActionPreparator {
if (option.required() && optionValues.get(option) == null) {
Command command = action.getClass().getAnnotation(Command.class);
if (command != null) {
- throw new CommandException(
- Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command ")
- .a(command.scope())
- .a(":")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(command.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(": option ")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(option.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(" is required")
- .fg(Ansi.Color.DEFAULT)
- .toString(),
+ throw new CommandException(COLOR_RED
+ + "Error executing command "
+ + command.scope() + ":"
+ + INTENSITY_BOLD + command.name() + INTENSITY_NORMAL
+ + ": option "
+ + INTENSITY_BOLD + option.name() + INTENSITY_NORMAL
+ + " is required"
+ + COLOR_DEFAULT,
"Option " + option.name() + " is required"
);
} else {
@@ -305,23 +280,15 @@ public class DefaultActionPreparator implements ActionPreparator {
if (argument.required() && argumentValues.get(argument) == null) {
Command command = action.getClass().getAnnotation(Command.class);
if (command != null) {
- throw new CommandException(
- Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command ")
- .a(command.scope())
- .a(":")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(command.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(": argument ")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(argument.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(" is required")
- .fg(Ansi.Color.DEFAULT)
- .toString(),
- "Argument " + argument.name() + " is required"
+ throw new CommandException(COLOR_RED
+ + "Error executing command "
+ + command.scope() + ":"
+ + INTENSITY_BOLD + command.name() + INTENSITY_NORMAL
+ + ": argument "
+ + INTENSITY_BOLD + argument.name() + INTENSITY_NORMAL
+ + " is required"
+ + COLOR_DEFAULT,
+ "Argument " + argument.name() + " is required"
);
} else {
throw new CommandException("Argument " + argument.name() + " is required");
@@ -337,25 +304,15 @@ public class DefaultActionPreparator implements ActionPreparator {
} catch (Exception e) {
Command command = action.getClass().getAnnotation(Command.class);
if (command != null) {
- throw new CommandException(
- Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command ")
- .a(command.scope())
- .a(":")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(command.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(": unable to convert option ")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(entry.getKey().name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(" with value '")
- .a(entry.getValue())
- .a("' to type ")
- .a(new GenericType(field.getGenericType()).toString())
- .fg(Ansi.Color.DEFAULT)
- .toString(),
+ throw new CommandException(COLOR_RED
+ + "Error executing command "
+ + command.scope() + ":"
+ + INTENSITY_BOLD + command.name() + INTENSITY_NORMAL
+ + ": unable to convert option "
+ + INTENSITY_BOLD + entry.getKey().name() + INTENSITY_NORMAL
+ + " with value '" + entry.getValue() + "' to type "
+ + new GenericType(field.getGenericType()).toString()
+ + COLOR_DEFAULT,
"Unable to convert option " + entry.getKey().name() + " with value '"
+ entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
e
@@ -377,25 +334,15 @@ public class DefaultActionPreparator implements ActionPreparator {
} catch (Exception e) {
Command command = action.getClass().getAnnotation(Command.class);
if (command != null) {
- throw new CommandException(
- Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command ")
- .a(command.scope())
- .a(":")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(command.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(": unable to convert argument ")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(entry.getKey().name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .a(" with value '")
- .a(entry.getValue())
- .a("' to type ")
- .a(new GenericType(field.getGenericType()).toString())
- .fg(Ansi.Color.DEFAULT)
- .toString(),
+ throw new CommandException(COLOR_RED
+ + "Error executing command "
+ + command.scope() + ":"
+ + INTENSITY_BOLD + command.name() + INTENSITY_NORMAL
+ + ": unable to convert argument "
+ + INTENSITY_BOLD + entry.getKey().name() + INTENSITY_NORMAL
+ + " with value '" + entry.getValue() + "' to type "
+ + new GenericType(field.getGenericType()).toString()
+ + COLOR_DEFAULT,
"Unable to convert argument " + entry.getKey().name() + " with value '"
+ entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
e
@@ -415,7 +362,7 @@ public class DefaultActionPreparator implements ActionPreparator {
protected void printUsage(CommandSession session, Action action, Map<Option, Field> optionsMap, Map<Argument, Field> argsMap, PrintStream out) {
Command command = action.getClass().getAnnotation(Command.class);
if (command != null) {
- Terminal term = session != null ? (Terminal) session.get(".jline.terminal") : null;
+
List<Argument> arguments = new ArrayList<Argument>(argsMap.keySet());
Collections.sort(arguments, new Comparator<Argument>() {
public int compare(Argument o1, Argument o2) {
@@ -426,13 +373,13 @@ public class DefaultActionPreparator implements ActionPreparator {
options.add(HELP);
boolean globalScope = NameScoping.isGlobalScope(session, command.scope());
if (command != null && (command.description() != null || command.name() != null)) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DESCRIPTION").a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + "DESCRIPTION" + INTENSITY_NORMAL);
out.print(" ");
if (command.name() != null) {
if (globalScope) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(command.name()).a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + command.name() + INTENSITY_NORMAL);
} else {
- out.println(Ansi.ansi().a(command.scope()).a(":").a(Ansi.Attribute.INTENSITY_BOLD).a(command.name()).a(Ansi.Attribute.RESET));
+ out.println(command.scope() + ":" + INTENSITY_BOLD + command.name() + INTENSITY_NORMAL);
}
out.println();
}
@@ -461,17 +408,18 @@ public class DefaultActionPreparator implements ActionPreparator {
}
}
}
-
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("SYNTAX").a(Ansi.Attribute.RESET));
+ int width = CommandSessionUtil.getWidth(session);
+ out.println(INTENSITY_BOLD + "SYNTAX" + INTENSITY_NORMAL);
out.print(" ");
out.println(syntax.toString());
out.println();
if (arguments.size() > 0) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("ARGUMENTS").a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + "ARGUMENTS" + INTENSITY_NORMAL);
for (Argument argument : arguments) {
out.print(" ");
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(argument.name()).a(Ansi.Attribute.RESET));
- printFormatted(" ", argument.description(), term != null ? term.getWidth() : 80, out);
+ out.println(INTENSITY_BOLD + argument.name() + INTENSITY_NORMAL);
+
+ printFormatted(" ", argument.description(), width, out);
if (!argument.required()) {
if (argument.valueToShowInHelp() != null && argument.valueToShowInHelp().length() != 0) {
try {
@@ -491,15 +439,15 @@ public class DefaultActionPreparator implements ActionPreparator {
out.println();
}
if (options.size() > 0) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("OPTIONS").a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + "OPTIONS" + INTENSITY_NORMAL);
for (Option option : options) {
String opt = option.name();
for (String alias : option.aliases()) {
opt += ", " + alias;
}
out.print(" ");
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(opt).a(Ansi.Attribute.RESET));
- printFormatted(" ", option.description(), term != null ? term.getWidth() : 80, out);
+ out.println(INTENSITY_BOLD + opt + INTENSITY_NORMAL);
+ printFormatted(" ", option.description(), width, out);
if (option.valueToShowInHelp() != null && option.valueToShowInHelp().length() != 0) {
try {
if (Option.DEFAULT_STRING.equals(option.valueToShowInHelp())) {
@@ -517,9 +465,9 @@ public class DefaultActionPreparator implements ActionPreparator {
out.println();
}
if (command.detailedDescription().length() > 0) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DETAILS").a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + "DETAILS" + INTENSITY_NORMAL);
String desc = loadDescription(action.getClass(), command.detailedDescription());
- printFormatted(" ", desc, term != null ? term.getWidth() : 80, out);
+ printFormatted(" ", desc, width, out);
}
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/4e47afae/shell/console/src/main/java/org/apache/karaf/shell/commands/CommandException.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/commands/CommandException.java b/shell/console/src/main/java/org/apache/karaf/shell/commands/CommandException.java
index 2d60e41..7bcaad5 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/commands/CommandException.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/commands/CommandException.java
@@ -18,7 +18,7 @@
*/
package org.apache.karaf.shell.commands;
-import org.fusesource.jansi.Ansi;
+import org.apache.karaf.shell.util.SimpleAnsi;
/**
* Base class for exceptions thrown when executing commands.
@@ -55,11 +55,9 @@ public class CommandException extends Exception {
public String getNiceHelp() {
return help != null ? help
- : Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command: ")
- .a(getMessage() != null ? getMessage() : getClass().getName())
- .fg(Ansi.Color.DEFAULT).toString();
+ : SimpleAnsi.COLOR_RED + "Error executing command: "
+ + getMessage() != null ? getMessage() : getClass().getName()
+ + SimpleAnsi.COLOR_DEFAULT;
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/4e47afae/shell/console/src/main/java/org/apache/karaf/shell/commands/basic/DefaultActionPreparator.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/commands/basic/DefaultActionPreparator.java b/shell/console/src/main/java/org/apache/karaf/shell/commands/basic/DefaultActionPreparator.java
index e685538..baa0b43 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/commands/basic/DefaultActionPreparator.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/commands/basic/DefaultActionPreparator.java
@@ -18,6 +18,10 @@
*/
package org.apache.karaf.shell.commands.basic;
+import static org.apache.karaf.shell.util.SimpleAnsi.COLOR_RED;
+import static org.apache.karaf.shell.util.SimpleAnsi.INTENSITY_BOLD;
+import static org.apache.karaf.shell.util.SimpleAnsi.INTENSITY_NORMAL;
+
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.util.ArrayList;
@@ -27,8 +31,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import jline.Terminal;
-
import org.apache.felix.gogo.commands.Action;
import org.apache.felix.service.command.CommandSession;
import org.apache.karaf.shell.commands.Argument;
@@ -41,7 +43,8 @@ import org.apache.karaf.shell.commands.converter.GenericType;
import org.apache.karaf.shell.commands.meta.ActionMetaData;
import org.apache.karaf.shell.commands.meta.ActionMetaDataFactory;
import org.apache.karaf.shell.console.NameScoping;
-import org.fusesource.jansi.Ansi;
+import org.apache.karaf.shell.util.CommandSessionUtil;
+import org.apache.karaf.shell.util.SimpleAnsi;
public class DefaultActionPreparator implements ActionPreparator {
@@ -57,22 +60,14 @@ public class DefaultActionPreparator implements ActionPreparator {
return true;
}
- String commandErrorSt = (command2 != null) ? Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Error executing command ")
- .a(command2.scope())
- .a(":")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(command2.name())
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .fg(Ansi.Color.DEFAULT)
- .a(": ")
- .toString() : "";
+ String commandErrorSt = (command2 != null) ? COLOR_RED
+ + "Error executing command " + command2.scope() + ":"
+ + INTENSITY_BOLD + command2.name() + INTENSITY_NORMAL
+ + SimpleAnsi.COLOR_DEFAULT + ": " : "";
for (Iterator<Object> it = params.iterator(); it.hasNext(); ) {
Object param = it.next();
if (HelpOption.HELP.name().equals(param)) {
- Terminal term = session != null ? (Terminal) session.get(".jline.terminal") : null;
- int termWidth = term != null ? term.getWidth() : 80;
+ int termWidth = CommandSessionUtil.getWidth(session);
boolean globalScope = NameScoping.isGlobalScope(session, actionMetaData.getCommand().scope());
actionMetaData.printUsage(action, System.out, globalScope, termWidth);
return false;
@@ -105,15 +100,9 @@ public class DefaultActionPreparator implements ActionPreparator {
}
}
if (option == null) {
- throw new CommandException(commandErrorSt +
- Ansi.ansi()
- .a("undefined option ")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(param)
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .newline()
- .a("Try <command> --help' for more information.")
- .toString(),
+ throw new CommandException(commandErrorSt
+ + "undefined option " + INTENSITY_BOLD + param + INTENSITY_NORMAL + "\n"
+ + "Try <command> --help' for more information.",
"Undefined option: " + param);
}
Field field = options.get(option);
@@ -124,8 +113,8 @@ public class DefaultActionPreparator implements ActionPreparator {
value = it.next();
}
if (value == null) {
- throw new CommandException(commandErrorSt +
- Ansi.ansi().a("missing value for option ").bold().a(param).boldOff().toString(),
+ throw new CommandException(commandErrorSt
+ + "missing value for option " + INTENSITY_BOLD + param + INTENSITY_NORMAL,
"Missing value for option: " + param
);
}
@@ -144,7 +133,7 @@ public class DefaultActionPreparator implements ActionPreparator {
processOptions = false;
if (argIndex >= orderedArguments.size()) {
throw new CommandException(commandErrorSt +
- Ansi.ansi().a("too many arguments specified").toString(),
+ "too many arguments specified",
"Too many arguments specified"
);
}
@@ -169,7 +158,7 @@ public class DefaultActionPreparator implements ActionPreparator {
for (Option option : options.keySet()) {
if (option.required() && optionValues.get(option) == null) {
throw new CommandException(commandErrorSt +
- Ansi.ansi().a("option ").bold().a(option.name()).boldOff().a(" is required").toString(),
+ "option " + INTENSITY_BOLD + option.name() + INTENSITY_NORMAL + " is required",
"Option " + option.name() + " is required"
);
}
@@ -177,7 +166,7 @@ public class DefaultActionPreparator implements ActionPreparator {
for (Argument argument : orderedArguments) {
if (argument.required() && argumentValues.get(argument) == null) {
throw new CommandException(commandErrorSt +
- Ansi.ansi().a("argument ").bold().a(argument.name()).boldOff().a(" is required").toString(),
+ "argument " + INTENSITY_BOLD + argument.name() + INTENSITY_NORMAL + " is required",
"Argument " + argument.name() + " is required"
);
}
@@ -191,8 +180,8 @@ public class DefaultActionPreparator implements ActionPreparator {
value = convert(action, session, entry.getValue(), field.getGenericType());
} catch (Exception e) {
throw new CommandException(commandErrorSt +
- Ansi.ansi().a("unable to convert option ").bold().a(entry.getKey().name()).boldOff().a(" with value '").a(entry.getValue()).a("' to type ")
- .a(new GenericType(field.getGenericType()).toString()).toString(),
+ "unable to convert option " + INTENSITY_BOLD + entry.getKey().name() + INTENSITY_NORMAL + " with value '"
+ + entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
"Unable to convert option " + entry.getKey().name() + " with value '"
+ entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
e
@@ -208,9 +197,8 @@ public class DefaultActionPreparator implements ActionPreparator {
value = convert(action, session, entry.getValue(), field.getGenericType());
} catch (Exception e) {
throw new CommandException(commandErrorSt +
- Ansi.ansi()
- .a("unable to convert argument ").bold().a(entry.getKey().name()).boldOff().a(" with value '").a(entry.getValue())
- .a("' to type ").a(new GenericType(field.getGenericType()).toString()).toString(),
+ "unable to convert argument " + INTENSITY_BOLD + entry.getKey().name() + INTENSITY_NORMAL + " with value '"
+ + entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
"Unable to convert argument " + entry.getKey().name() + " with value '"
+ entry.getValue() + "' to type " + new GenericType(field.getGenericType()).toString(),
e
http://git-wip-us.apache.org/repos/asf/karaf/blob/4e47afae/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java b/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java
index ae094ad..9fd5189 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/commands/meta/ActionMetaData.java
@@ -18,6 +18,9 @@
*/
package org.apache.karaf.shell.commands.meta;
+import static org.apache.karaf.shell.util.SimpleAnsi.INTENSITY_BOLD;
+import static org.apache.karaf.shell.util.SimpleAnsi.INTENSITY_NORMAL;
+
import java.io.PrintStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
@@ -36,7 +39,7 @@ import org.apache.karaf.shell.commands.Option;
import org.apache.karaf.shell.console.Completer;
import org.apache.karaf.shell.util.IndentFormatter;
import org.apache.karaf.shell.util.ShellUtil;
-import org.fusesource.jansi.Ansi;
+import org.apache.karaf.shell.util.SimpleAnsi;
public class ActionMetaData {
@@ -93,13 +96,13 @@ public class ActionMetaData {
Set<Option> optionsSet = new HashSet<Option>(options.keySet());
optionsSet.add(HelpOption.HELP);
if (command != null && (command.description() != null || command.name() != null)) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DESCRIPTION").a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + "DESCRIPTION" + INTENSITY_NORMAL);
out.print(" ");
if (command.name() != null) {
if (globalScope) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(command.name()).a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + command.name() + INTENSITY_NORMAL);
} else {
- out.println(Ansi.ansi().a(command.scope()).a(":").a(Ansi.Attribute.INTENSITY_BOLD).a(command.name()).a(Ansi.Attribute.RESET));
+ out.println(command.scope() + ":" + INTENSITY_BOLD + command.name() + INTENSITY_NORMAL);
}
out.println();
}
@@ -129,15 +132,15 @@ public class ActionMetaData {
}
}
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("SYNTAX").a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + "SYNTAX" + INTENSITY_NORMAL);
out.print(" ");
out.println(syntax.toString());
out.println();
if (arguments.size() > 0) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("ARGUMENTS").a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + "ARGUMENTS" + INTENSITY_NORMAL);
for (Argument argument : argumentsSet) {
out.print(" ");
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(argument.name()).a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + argument.name() + INTENSITY_NORMAL);
IndentFormatter.printFormatted(" ", argument.description(), termWidth, out);
if (!argument.required()) {
if (argument.valueToShowInHelp() != null && argument.valueToShowInHelp().length() != 0) {
@@ -156,14 +159,14 @@ public class ActionMetaData {
out.println();
}
if (options.size() > 0) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("OPTIONS").a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + "OPTIONS" + INTENSITY_NORMAL);
for (Option option : optionsSet) {
String opt = option.name();
for (String alias : option.aliases()) {
opt += ", " + alias;
}
out.print(" ");
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a(opt).a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + opt + INTENSITY_NORMAL);
IndentFormatter.printFormatted(" ", option.description(), termWidth, out);
if (option.valueToShowInHelp() != null && option.valueToShowInHelp().length() != 0) {
if (Option.DEFAULT_STRING.equals(option.valueToShowInHelp())) {
@@ -180,7 +183,7 @@ public class ActionMetaData {
out.println();
}
if (command.detailedDescription().length() > 0) {
- out.println(Ansi.ansi().a(Ansi.Attribute.INTENSITY_BOLD).a("DETAILS").a(Ansi.Attribute.RESET));
+ out.println(INTENSITY_BOLD + "DETAILS" + INTENSITY_NORMAL);
String desc = getDetailedDescription();
IndentFormatter.printFormatted(" ", desc, termWidth, out);
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/4e47afae/shell/console/src/main/java/org/apache/karaf/shell/console/completer/FileCompleter.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/console/completer/FileCompleter.java b/shell/console/src/main/java/org/apache/karaf/shell/console/completer/FileCompleter.java
index e6fe1e5..dbb3034 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/console/completer/FileCompleter.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/console/completer/FileCompleter.java
@@ -17,23 +17,131 @@
*/
package org.apache.karaf.shell.console.completer;
-import jline.console.completer.FileNameCompleter;
+import java.io.File;
+import java.util.List;
+
import org.apache.felix.service.command.CommandSession;
import org.apache.karaf.shell.console.Completer;
-import java.util.List;
-
/**
- * A completer for file names
+ * A file name completer takes the buffer and issues a list of
+ * potential completions.
+ * <p/>
+ * This completer tries to behave as similar as possible to
+ * <i>bash</i>'s file name completion (using GNU readline)
+ * with the following exceptions:
+ * <p/>
+ * <ul>
+ * <li>Candidates that are directories will end with "/"</li>
+ * <li>Wildcard regular expressions are not evaluated or replaced</li>
+ * <li>The "~" character can be used to represent the user's home,
+ * but it cannot complete to other users' homes, since java does
+ * not provide any way of determining that easily</li>
+ * </ul>
+ *
+ * @author <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a>
+ * @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
+ * @since 2.3
*/
-public class FileCompleter implements Completer {
- private FileNameCompleter completor = new FileNameCompleter();
+public class FileCompleter implements Completer
+{
+ private static String OS = System.getProperty("os.name").toLowerCase();
+
+ // TODO: Handle files with spaces in them
+ private static final boolean OS_IS_WINDOWS = isWindows();
+
public FileCompleter(CommandSession session) {
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
- public int complete(String buffer, int cursor, List candidates) {
- return completor.complete(buffer, cursor, candidates);
+ public static boolean isWindows() {
+ return (OS.indexOf("win") >= 0);
+
+ }
+
+ public int complete(String buffer, final int cursor, final List<String> candidates) {
+ // buffer can be null
+ if (candidates == null) {
+ return 0;
+ }
+
+ if (buffer == null) {
+ buffer = "";
+ }
+
+ if (OS_IS_WINDOWS) {
+ buffer = buffer.replace('/', '\\');
+ }
+
+ String translated = buffer;
+
+ File homeDir = getUserHome();
+
+ // Special character: ~ maps to the user's home directory
+ if (translated.startsWith("~" + separator())) {
+ translated = homeDir.getPath() + translated.substring(1);
+ }
+ else if (translated.startsWith("~")) {
+ translated = homeDir.getParentFile().getAbsolutePath();
+ }
+ else if (!(translated.startsWith(separator()))) {
+ String cwd = getUserDir().getAbsolutePath();
+ translated = cwd + separator() + translated;
+ }
+
+ File file = new File(translated);
+ final File dir;
+
+ if (translated.endsWith(separator())) {
+ dir = file;
+ }
+ else {
+ dir = file.getParentFile();
+ }
+
+ File[] entries = dir == null ? new File[0] : dir.listFiles();
+
+ return matchFiles(buffer, translated, entries, candidates);
+ }
+
+ protected String separator() {
+ return File.separator;
+ }
+
+ protected File getUserHome() {
+ return new File(System.getProperty("user.home"));
+ }
+
+ protected File getUserDir() {
+ return new File(".");
+ }
+
+ protected int matchFiles(final String buffer, final String translated, final File[] files, final List<String> candidates) {
+ if (files == null) {
+ return -1;
+ }
+
+ int matches = 0;
+
+ // first pass: just count the matches
+ for (File file : files) {
+ if (file.getAbsolutePath().startsWith(translated)) {
+ matches++;
+ }
+ }
+ for (File file : files) {
+ if (file.getAbsolutePath().startsWith(translated)) {
+ CharSequence name = file.getName() + (matches == 1 && file.isDirectory() ? separator() : " ");
+ candidates.add(render(file, name).toString());
+ }
+ }
+
+ final int index = buffer.lastIndexOf(separator());
+
+ return index + separator().length();
+ }
+
+ protected CharSequence render(final File file, final CharSequence name) {
+ return name;
}
}
http://git-wip-us.apache.org/repos/asf/karaf/blob/4e47afae/shell/console/src/main/java/org/apache/karaf/shell/util/CommandSessionUtil.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/util/CommandSessionUtil.java b/shell/console/src/main/java/org/apache/karaf/shell/util/CommandSessionUtil.java
new file mode 100644
index 0000000..cd3d5c6
--- /dev/null
+++ b/shell/console/src/main/java/org/apache/karaf/shell/util/CommandSessionUtil.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.shell.util;
+
+import org.apache.felix.service.command.CommandSession;
+
+public class CommandSessionUtil {
+ public static int getWidth(CommandSession session) {
+ Object cols = session.get("#COLUMNS");
+ return (cols != null && cols instanceof Integer) ? (Integer)cols : 80;
+ }
+}
http://git-wip-us.apache.org/repos/asf/karaf/blob/4e47afae/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java b/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java
index 3f3bf76..afa5828 100644
--- a/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java
+++ b/shell/console/src/main/java/org/apache/karaf/shell/util/ShellUtil.java
@@ -18,6 +18,11 @@
*/
package org.apache.karaf.shell.util;
+import static org.apache.karaf.shell.util.SimpleAnsi.COLOR_DEFAULT;
+import static org.apache.karaf.shell.util.SimpleAnsi.COLOR_RED;
+import static org.apache.karaf.shell.util.SimpleAnsi.INTENSITY_BOLD;
+import static org.apache.karaf.shell.util.SimpleAnsi.INTENSITY_NORMAL;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -27,11 +32,10 @@ import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
-import jline.console.ConsoleReader;
+
import org.apache.felix.service.command.CommandSession;
import org.apache.karaf.shell.commands.CommandException;
import org.apache.karaf.shell.console.SessionProperties;
-import org.fusesource.jansi.Ansi;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
@@ -125,28 +129,6 @@ public class ShellUtil {
return level <= sbsl;
}
- /**
- * Ask the user to confirm the access to a system bundle
- *
- * @param bundleId
- * @param session
- * @return true if the user confirm
- * @throws IOException
- */
- public static boolean accessToSystemBundleIsAllowed(long bundleId, CommandSession session) throws IOException {
- for (; ; ) {
- ConsoleReader reader = (ConsoleReader) session.get(".jline.reader");
- String msg = "You are about to access system bundle " + bundleId + ". Do you wish to continue (yes/no): ";
- String str = reader.readLine(msg);
- if ("yes".equalsIgnoreCase(str)) {
- return true;
- }
- if ("no".equalsIgnoreCase(str)) {
- return false;
- }
- }
- }
-
public static String loadClassPathResource(Class<?> clazz, String path) {
InputStream is = clazz.getResourceAsStream(path);
if (is == null) {
@@ -203,24 +185,20 @@ public class ShellUtil {
if (t instanceof CommandException) {
session.getConsole().println(((CommandException) t).getNiceHelp());
} else if (isCommandNotFound) {
- String str = Ansi.ansi()
- .fg(Ansi.Color.RED)
- .a("Command not found: ")
- .a(Ansi.Attribute.INTENSITY_BOLD)
- .a(t.getClass().getMethod("getCommand").invoke(t))
- .a(Ansi.Attribute.INTENSITY_BOLD_OFF)
- .fg(Ansi.Color.DEFAULT).toString();
+ String str = COLOR_RED + "Command not found: "
+ + INTENSITY_BOLD + t.getClass().getMethod("getCommand").invoke(t) + INTENSITY_NORMAL
+ + COLOR_DEFAULT;
session.getConsole().println(str);
}
if (getBoolean(session, SessionProperties.PRINT_STACK_TRACES)) {
- session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
+ session.getConsole().print(COLOR_RED);
t.printStackTrace(session.getConsole());
- session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
+ session.getConsole().print(COLOR_DEFAULT);
} else if (!(t instanceof CommandException) && !isCommandNotFound) {
- session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
+ session.getConsole().print(COLOR_RED);
session.getConsole().println("Error executing command: "
+ (t.getMessage() != null ? t.getMessage() : t.getClass().getName()));
- session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
+ session.getConsole().print(COLOR_DEFAULT);
}
} catch (Exception ignore) {
// ignore
http://git-wip-us.apache.org/repos/asf/karaf/blob/4e47afae/shell/console/src/main/java/org/apache/karaf/shell/util/SimpleAnsi.java
----------------------------------------------------------------------
diff --git a/shell/console/src/main/java/org/apache/karaf/shell/util/SimpleAnsi.java b/shell/console/src/main/java/org/apache/karaf/shell/util/SimpleAnsi.java
new file mode 100644
index 0000000..b4dc23b
--- /dev/null
+++ b/shell/console/src/main/java/org/apache/karaf/shell/util/SimpleAnsi.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.karaf.shell.util;
+
+import org.fusesource.jansi.Ansi;
+import org.fusesource.jansi.Ansi.Color;
+
+public class SimpleAnsi {
+ public static String COLOR_RED = Ansi.ansi().fg(Color.RED).toString();
+ public static String COLOR_DEFAULT = Ansi.ansi().fg(Color.DEFAULT).toString();
+
+ public static String INTENSITY_BOLD = Ansi.ansi().bold().toString();
+ public static String INTENSITY_NORMAL = Ansi.ansi().boldOff().toString();
+}
[2/2] git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/karaf
Posted by cs...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/karaf
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/5de27617
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/5de27617
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/5de27617
Branch: refs/heads/master
Commit: 5de27617e1789dcab4336a24482486bed1ed85a6
Parents: 4e47afa d3e8e38
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Thu Feb 20 22:28:50 2014 +0100
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Thu Feb 20 22:28:50 2014 +0100
----------------------------------------------------------------------
.../karaf/shell/console/commands/NamespaceHandler.java | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------