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() {


Reply via email to