package abra; import htsjdk.samtools.SAMRecord; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.util.Queue; public class AlignerStdoutHandler implements StdoutHandler { private Thread queueThread; private Thread adjustThread; private Thread draino; private AdjustReadsQueueRunnable adjustReadsRunnable; public AlignerStdoutHandler(AdjustReadsQueueRunnable adjustReadsRunnable) { this.adjustReadsRunnable = adjustReadsRunnable; } public void process(Process proc) throws IOException { PipedInputStream pis = new PipedInputStream(MAX_BYTES_TO_BUFFER); PipedOutputStream pos = new PipedOutputStream(); pos.connect(pis); // Drain stdout and write to the piped output stream draino = new Thread(new Draino(proc.getInputStream(), pos)); draino.start(); // Read piped input stream and update read queue Queue<SAMRecord> queue = new ConcurrentQueue<SAMRecord>(); queueThread = new Thread(new ReadInputStreamRunnable(pis, queue)); // Process read queue content adjustReadsRunnable.setReadQueue(queue); adjustThread = new Thread(adjustReadsRunnable); adjustThread.start(); queueThread.start(); } public void postProcess() throws InterruptedException { draino.join(); queueThread.join(); adjustReadsRunnable.setDone(); adjustThread.join(); } }