Author: jgoodyear
Date: Wed Apr 4 14:42:51 2012
New Revision: 1309421
URL: http://svn.apache.org/viewvc?rev=1309421&view=rev
Log:
[KARAF-1038] release apache karaf 2.2.6
Fixed windows terminal key processing.
Will recut release candidate..
Modified:
karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
Modified:
karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
URL:
http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java?rev=1309421&r1=1309420&r2=1309421&view=diff
==============================================================================
---
karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
(original)
+++
karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
Wed Apr 4 14:42:51 2012
@@ -78,8 +78,31 @@ public class ConsoleFactory {
}
}
+ public static Object invokePrivateMethod(Object o, String methodName,
Object[] params) throws Exception {
+ final Method methods[] = o.getClass().getDeclaredMethods();
+ for (int i = 0; i < methods.length; ++i) {
+ if (methodName.equals(methods[i].getName())) {
+ methods[i].setAccessible(true);
+ return methods[i].invoke(o, params);
+ }
+ }
+ return null;
+ }
+
+ private static <T> T unwrapBIS(T stream) {
+ try {
+ return (T) invokePrivateMethod(stream, "getInIfOpen", null);
+ } catch (Throwable t) {
+ return stream;
+ }
+ }
+
protected void doStart(String user) throws Exception {
- InputStream in = unwrap(System.in);
+ final Terminal terminal = terminalFactory.getTerminal();
+ // unwrap stream so it can be recognized by the terminal and wrapped
to get
+ // special keys in windows
+ InputStream unwrappedIn = unwrapBIS(unwrap(System.in));
+ InputStream in = terminal.wrapInIfNeeded(unwrappedIn);
PrintStream out = unwrap(System.out);
PrintStream err = unwrap(System.err);
Runnable callback = new Runnable() {
@@ -91,7 +114,6 @@ public class ConsoleFactory {
}
}
};
- final Terminal terminal = terminalFactory.getTerminal();
this.console = new Console(commandProcessor,
in,
wrap(out),