diff --git a/src/main/java/dev/jbang/util/ConsoleInput.java b/src/main/java/dev/jbang/util/ConsoleInput.java
index 7d7715e41..0bb602a95 100644
--- a/src/main/java/dev/jbang/util/ConsoleInput.java
+++ b/src/main/java/dev/jbang/util/ConsoleInput.java
@@ -1,78 +1,41 @@
package dev.jbang.util;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.concurrent.*;
-
-public abstract class ConsoleInput {
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+public class ConsoleInput {
private final int tries;
private final int timeout;
private final TimeUnit unit;
- /**
- * Will either return a ConsoleInput that enables reading a line from the
- * console (using stdin or a tty) or it will return null
if no
- * console is available.
- */
- public static ConsoleInput get(int tries, int timeout, TimeUnit unit) {
- if (Util.haveConsole()) {
- return stdin(tries, timeout, unit);
- } else if (!Util.isWindows()) {
- return tty(tries, timeout, unit);
- } else {
- return null;
- }
- }
-
- /**
- * Returns a regular ConsoleInput based upon System.in
- */
- public static ConsoleInput stdin(int tries, int timeout, TimeUnit unit) {
- return new ConsoleInput(tries, timeout, unit) {
- @Override
- protected Callable readerTask() {
- return new ConsoleInputReadTask(System.in);
- }
- };
- }
-
- /**
- * Returns a ConsoleInput based upon /dev/tty which only works on Linux and Mac.
- */
- public static ConsoleInput tty(int tries, int timeout, TimeUnit unit) {
- return new ConsoleInput(tries, timeout, unit) {
- @Override
- protected Callable readerTask() throws IOException {
- return new ConsoleInputReadTask(new FileInputStream("/dev/tty"));
- }
- };
- }
-
- private ConsoleInput(int tries, int timeout, TimeUnit unit) {
+ public ConsoleInput(int tries, int timeout, TimeUnit unit) {
this.tries = tries;
this.timeout = timeout;
this.unit = unit;
}
- protected abstract Callable readerTask() throws IOException;
-
public String readLine() {
ExecutorService ex = Executors.newSingleThreadExecutor();
String input = null;
try {
// start working
for (int i = 0; i < tries; i++) {
- Future result = null;
+ // Util.infoMsg(String.valueOf(i + 1) + ". loop");
+ Future result = ex.submit(
+ new ConsoleInputReadTask());
try {
- result = ex.submit(readerTask());
input = result.get(timeout, unit);
break;
- } catch (ExecutionException | IOException e) {
+ } catch (ExecutionException e) {
e.getCause().printStackTrace();
} catch (TimeoutException e) {
- if (result != null) {
- result.cancel(true);
- }
+ // Util.infoMsg("Cancelling reading task");
+ result.cancel(true);
+ // Util.infoMsg("\nThread cancelled. input is null");
} catch (InterruptedException ie) {
throw new RuntimeException(ie);
}
diff --git a/src/main/java/dev/jbang/util/ConsoleInputReadTask.java b/src/main/java/dev/jbang/util/ConsoleInputReadTask.java
index 764947fc3..c580d6247 100644
--- a/src/main/java/dev/jbang/util/ConsoleInputReadTask.java
+++ b/src/main/java/dev/jbang/util/ConsoleInputReadTask.java
@@ -2,21 +2,17 @@
import java.io.BufferedReader;
import java.io.IOException;
-import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.concurrent.Callable;
public class ConsoleInputReadTask implements Callable {
- private final InputStream in;
-
- public ConsoleInputReadTask(InputStream in) {
- this.in = in;
- }
-
public String call() throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ BufferedReader br = new BufferedReader(
+ new InputStreamReader(System.in));
+ // System.out.println("ConsoleInputReadTask run() called.");
String input;
do {
+ // System.out.println("Please type something: ");
try {
// wait until we have data to complete a readLine()
while (!br.ready()) {
@@ -24,9 +20,11 @@ public String call() throws IOException {
}
input = br.readLine();
} catch (InterruptedException e) {
+ // System.out.println("ConsoleInputReadTask() cancelled");
return null;
}
} while ("".equals(input));
+ // System.out.println("Thank You for providing input!");
return input;
}
}
\ No newline at end of file
diff --git a/src/main/java/dev/jbang/util/Util.java b/src/main/java/dev/jbang/util/Util.java
index 9cdb2431d..5b97b6787 100644
--- a/src/main/java/dev/jbang/util/Util.java
+++ b/src/main/java/dev/jbang/util/Util.java
@@ -1372,8 +1372,8 @@ public static boolean isBlankString(String str) {
}
public static int askInput(String message, int timeout, int defaultValue, String... options) {
- ConsoleInput con = ConsoleInput.get(1, timeout, TimeUnit.SECONDS);
- if (con != null) {
+ if (!"true".equalsIgnoreCase(System.getenv(JBANG_STDIN_NOTTY))) {
+ ConsoleInput con = new ConsoleInput(1, timeout, TimeUnit.SECONDS);
StringBuilder msg = new StringBuilder(message + "\n\n");
for (int i = 0; i < options.length; i++) {
msg.append("(").append(i + 1).append(") ").append(options[i]).append("\n");
@@ -1420,10 +1420,6 @@ public static int askInput(String message, int timeout, int defaultValue, String
return -1;
}
- public static boolean haveConsole() {
- return !"true".equalsIgnoreCase(System.getenv(JBANG_STDIN_NOTTY));
- }
-
private static void setupApplicationIcon() {
try {
Class> clazz = Util.class.getClassLoader().loadClass("java.awt.Taskbar");