package org.infinispan.cli.io; import java.io.IOException; import java.util.List; import org.fusesource.jansi.Ansi; import org.infinispan.cli.commands.ProcessedCommand; import org.jboss.aesh.console.Console; import org.jboss.aesh.console.Prompt; public class ConsoleIOAdapter implements IOAdapter { private final Console console; public ConsoleIOAdapter(final Console console) { this.console = console; } @Override public boolean isInteractive() { return true; } @Override public String readln(String prompt) throws IOException { return read(prompt, null); } @Override public String secureReadln(String prompt) throws IOException { return read(prompt, (char)0); } @Override public void println(String s) throws IOException { console.getShell().out().println(s); } @Override public void error(String s) throws IOException { Ansi ansi = new Ansi(); ansi.fg(Ansi.Color.RED); println(ansi.render(s).reset().toString()); } @Override public void result(List<ProcessedCommand> commands, String result, boolean isError) throws IOException { if (isError) error(result); else println(result); } @Override public int getWidth() { return console.getTerminalSize().getWidth(); } @Override public void close() throws IOException { console.stop(); } private String read(String prompt, Character mask) { Prompt origPrompt = null; if (!console.getPrompt().getPromptAsString().equals(prompt)) { origPrompt = console.getPrompt(); console.setPrompt(new Prompt(prompt, mask)); } try { return console.getInputLine(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } finally { if (origPrompt != null) { console.setPrompt(origPrompt); } } return null; } }