package abra; import htsjdk.samtools.DefaultSAMRecordFactory; import htsjdk.samtools.SAMFileHeader; import htsjdk.samtools.SamInputResource; import htsjdk.samtools.SamReader; import htsjdk.samtools.SamReaderFactory; import htsjdk.samtools.ValidationStringency; import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; public class SVAlignerStdoutHandler implements StdoutHandler{ private Thread draino; private int readLength; private SAMFileHeader header; private Thread counterThread; private SVReadCounterRunnable counter; public SVAlignerStdoutHandler(int readLength, SAMFileHeader header) { this.readLength = readLength; this.header = header; } @Override 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(); final SamReader reader = SamReaderFactory.make() .validationStringency(ValidationStringency.SILENT) .samRecordFactory(DefaultSAMRecordFactory.getInstance()) .open(SamInputResource.of(pis)); counter = new SVReadCounterRunnable(reader, readLength, header); counterThread = new Thread(counter); counterThread.start(); } @Override public void postProcess() throws InterruptedException { draino.join(); counterThread.join(); } public SVReadCounter getCounter() { return counter.getCounter(); } }