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 2011/12/09 16:25:46 UTC
svn commit: r1212477 -
/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
Author: cschneider
Date: Fri Dec 9 15:25:46 2011
New Revision: 1212477
URL: http://svn.apache.org/viewvc?rev=1212477&view=rev
Log:
KARAF-1071 unwrap BufferedInputStream so the terminal recognizes the stream as system.in
Modified:
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java?rev=1212477&r1=1212476&r2=1212477&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java Fri Dec 9 15:25:46 2011
@@ -77,10 +77,32 @@ 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 {
final Terminal terminal = terminalFactory.getTerminal();
- InputStream in = unwrap(terminal.wrapInIfNeeded(System.in));
+ // 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() {