You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jg...@apache.org on 2012/04/04 16:42:51 UTC

svn commit: r1309421 - /karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java

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),