package picard.sam; import picard.PicardException; import picard.cmdline.CommandLineProgram; import picard.cmdline.CommandLineProgramProperties; import picard.cmdline.Option; import picard.cmdline.StandardOptionDefinitions; import htsjdk.samtools.util.IOUtil; import htsjdk.samtools.util.BlockCompressedInputStream; import htsjdk.samtools.util.BlockCompressedInputStream.FileTermination; import picard.cmdline.programgroups.SamOrBam; import java.io.File; import java.io.IOException; /** * Simple class to check the terminator block of a SAM file. */ @CommandLineProgramProperties( usage = CheckTerminatorBlock.USAGE, usageShort = CheckTerminatorBlock.USAGE, programGroup = SamOrBam.class ) public class CheckTerminatorBlock extends CommandLineProgram { static final String USAGE = "Asserts the provided gzip file's (e.g., BAM) last block is well-formed; RC 100 otherwise"; @Option(shortName= StandardOptionDefinitions.INPUT_SHORT_NAME, doc="The block compressed file to check.") public File INPUT; public static void main(final String[] args) { new CheckTerminatorBlock().instanceMainWithExit(args); } @Override protected int doWork() { IOUtil.assertFileIsReadable(INPUT); try { final FileTermination term = BlockCompressedInputStream.checkTermination(INPUT); System.err.println(term.name()); if (term == FileTermination.DEFECTIVE) { return 100; } else { return 0; } } catch (IOException ioe) { throw new PicardException("Exception reading terminator block of file: " + INPUT.getAbsolutePath()); } } }