package org.cryptocoinpartners.command;
import jline.console.ConsoleReader;
import org.apache.commons.lang.WordUtils;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Collection;
import javax.inject.Inject;
/**
* @author Tim Olson
*/
public class ConsoleWriter extends PrintWriter {
@Inject
public ConsoleWriter(ConsoleReader out) {
super(new ConsolePrintWriter(out));
this.console = out;
}
public void printList( Collection items ) {
printLines("\t• ", items);
}
/**
* @param prefix prepended to each line
* @param multiline a long string to be wrapped across lines
*/
public void printLinesWrapped( String prefix, String multiline ) {
multiline = multiline.replaceAll("[\\r\\n]","");
int availableWidth = console.getTerminal().getWidth() - prefix.length();
String wrapped = WordUtils.wrap(multiline, availableWidth);
for( String line : wrapped.split("\\n") )
try {
console.println(prefix+line);
}
catch( IOException e ) {
throw new Error(e);
}
}
public void printLines(String prefix, Collection lineItems) {
for( Object item : lineItems )
println(prefix+item);
}
private static class ConsolePrintWriter extends Writer {
@SuppressWarnings("NullableProblems")
@Override
public void write(char[] cbuf, int off, int len) throws IOException {
String output = new String(cbuf, off, len);
try {
console.print(output);
if( output.contains("\n") )
console.flush();
}
catch( IOException e ) {
throw new Error("Could not write to console",e);
}
}
@Override
public void flush() throws IOException { console.flush(); }
@Override
public void close() throws IOException { console.flush(); }
private ConsolePrintWriter(ConsoleReader console) { this.console = console; }
// this redundancy is necessary to make the super() constructor work with a static inner class
private ConsoleReader console;
}
private ConsoleReader console;
}