Author: gnodet
Date: Thu Dec  5 08:14:15 2013
New Revision: 1548036

URL: http://svn.apache.org/r1548036
Log:
[KARAF-2605] Use ConsoleReader instead of the keyboard stream

Modified:
    
karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleLevel.java
    
karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Util.java
    
karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java

Modified: 
karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleLevel.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleLevel.java?rev=1548036&r1=1548035&r2=1548036&view=diff
==============================================================================
--- 
karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleLevel.java
 (original)
+++ 
karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/BundleLevel.java
 Thu Dec  5 08:14:15 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.karaf.shell.osgi;
 
+import jline.console.ConsoleReader;
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
 import org.osgi.framework.Bundle;
@@ -46,41 +47,13 @@ public class BundleLevel extends BundleC
         }
         else if ((level < 50) && (sl.getBundleStartLevel(bundle) > 50) && 
!force){
             for (;;) {
-                StringBuffer sb = new StringBuffer();
-                System.err.println("You are about to designate bundle as a 
system bundle.  Do you wish to continue (yes/no): ");
-                System.err.flush();
-                for (;;) {
-                    int c = session.getKeyboard().read();
-                    if (c < 0) {
-                        break;
-                    }
-                    if (c == '\r' || c == '\n') {
-                        System.err.println();
-                        System.err.flush();
-                        break;
-                    }
-                    if (c == 127 || c == 'b') {
-                        System.err.print((char)'\b');
-                        System.err.print((char)' ');
-                        System.err.print((char)'\b');
-                    } else {
-                        System.err.print((char)c);
-                    }
-                    
-                    System.err.flush();
-                    if (c == 127 || c == 'b') {
-                        if (sb.length() > 0) {
-                            sb.deleteCharAt(sb.length() - 1);
-                        }
-                    } else {
-                        sb.append((char)c);
-                    }
-                }
-                String str = sb.toString();
-                if ("yes".equals(str)) {
+                ConsoleReader reader = (ConsoleReader) 
session.get(".jline.reader");
+                String msg = "You are about to designate bundle as a system 
bundle.  Do you wish to continue (yes/no): ";
+                String str = reader.readLine(msg);
+                if ("yes".equalsIgnoreCase(str)) {
                     sl.setBundleStartLevel(bundle, level);
                     break;
-                } else if ("no".equals(str)) {
+                } else if ("no".equalsIgnoreCase(str)) {
                     break;
                 }
             }

Modified: 
karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Util.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Util.java?rev=1548036&r1=1548035&r2=1548036&view=diff
==============================================================================
--- 
karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Util.java
 (original)
+++ 
karaf/branches/karaf-2.x/shell/osgi/src/main/java/org/apache/karaf/shell/osgi/Util.java
 Thu Dec  5 08:14:15 2013
@@ -23,6 +23,7 @@ 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.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -207,41 +208,13 @@ public class Util
      */
     public static boolean accessToSystemBundleIsAllowed(long bundleId, 
CommandSession session) throws IOException {
         for (;;) {
-            StringBuffer sb = new StringBuffer();
-            System.err.println("You are about to access system bundle " + 
bundleId + ".  Do you wish to continue (yes/no): ");
-            System.err.flush();
-            for (;;) {
-                int c = session.getKeyboard().read();
-                if (c < 0) {
-                    return false;
-                }
-                if (c == '\r' || c == '\n') {
-                    System.err.println();
-                    System.err.flush();
-                    break;
-                }
-                if (c == 127 || c == 'b') {
-                    System.err.print((char)'\b');
-                    System.err.print((char)' ');
-                    System.err.print((char)'\b');
-                } else {
-                    System.err.print((char)c);
-                }
-                
-                System.err.flush();
-                if (c == 127 || c == 'b') {
-                    if (sb.length() > 0) {
-                        sb.deleteCharAt(sb.length() - 1);
-                    }
-                } else {
-                    sb.append((char)c);
-                }
-            }
-            String str = sb.toString();
-            if ("yes".equals(str)) {
+            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".equals(str)) {
+            if ("no".equalsIgnoreCase(str)) {
                 return false;
             }
         }

Modified: 
karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java
URL: 
http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java?rev=1548036&r1=1548035&r2=1548036&view=diff
==============================================================================
--- 
karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java
 (original)
+++ 
karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java
 Thu Dec  5 08:14:15 2013
@@ -24,6 +24,7 @@ import java.util.List;
 
 import jline.Terminal;
 
+import jline.console.ConsoleReader;
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
 import org.apache.felix.gogo.commands.Option;
@@ -120,7 +121,6 @@ public class SshAction extends OsgiComma
             sshSession = future.getSession();
 
             Object oldIgnoreInterrupts = 
this.session.get(Console.IGNORE_INTERRUPTS);
-            this.session.put( Console.IGNORE_INTERRUPTS, Boolean.TRUE );
 
             try {
                 System.out.println("Connected");
@@ -152,6 +152,8 @@ public class SshAction extends OsgiComma
                     return null;
                 }
 
+                this.session.put( Console.IGNORE_INTERRUPTS, Boolean.TRUE );
+
                 StringBuilder sb = new StringBuilder();
                 if (command != null) {
                     for (String cmd : command) {
@@ -198,21 +200,12 @@ public class SshAction extends OsgiComma
     }
 
     public String readLine(String msg) throws IOException {
-        StringBuffer sb = new StringBuffer();
-        System.err.print(msg);
-        System.err.flush();
-        for (;;) {
-            int c = super.session.getKeyboard().read();
-            if (c < 0) {
-                return null;
-            }
-            System.err.print((char) c);
-            if (c == '\r' || c == '\n') {
-                break;
-            }
-            sb.append((char) c);
-        }
-        return sb.toString();
+        return readLine(msg, null);
+    }
+
+    public String readLine(String msg, Character mask) throws IOException {
+        ConsoleReader reader = (ConsoleReader) session.get(".jline.reader");
+        return reader.readLine(msg, mask);
     }
 
 }


Reply via email to