package nagini.utils.process;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.List;
import com.google.common.collect.Lists;
public class StreamWatchThread extends Thread {
private InputStream is;
private PrintStream ps;
private List<String> buffer;
private final Object lock = new Object();
public StreamWatchThread(InputStream is, PrintStream ps, Boolean watchBufferEnabled) {
this.is = is;
this.ps = ps;
if(watchBufferEnabled) {
this.buffer = Lists.newArrayList();
} else {
this.buffer = null;
}
}
public List<String> readOutput() {
List<String> list = null;
if(buffer != null) {
synchronized(lock) {
list = Lists.newArrayList(buffer);
buffer.clear();
}
}
return list;
}
private void writeNewLine(String newLine) {
if(buffer != null) {
synchronized(lock) {
buffer.add(newLine);
}
}
}
@Override
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null) {
if(ps != null) {
ps.println(line);
}
writeNewLine(line);
}
} catch(IOException ioe) {
System.out.println(ioe.getMessage());
} catch(Exception e) {
e.printStackTrace();
}
}
}