package com.github.lindenb.jvarkit.util.picard; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.logging.Logger; import com.github.lindenb.jvarkit.io.IOUtils; import htsjdk.samtools.SamInputResource; import htsjdk.samtools.SamReader; import htsjdk.samtools.SamReaderFactory; import htsjdk.samtools.ValidationStringency; public class SamFileReaderFactory { private static final Logger LOG=Logger.getLogger("jvarkit"); private SamReaderFactory delegate; private static ValidationStringency DEFAULT_VALIDATION_STRINGENCY=ValidationStringency.LENIENT; public SamFileReaderFactory() { this.delegate=SamReaderFactory.make(); this.delegate.disable(SamReaderFactory.Option.values()); this.delegate.validationStringency(SamFileReaderFactory.DEFAULT_VALIDATION_STRINGENCY); } public static ValidationStringency getDefaultValidationStringency() { return DEFAULT_VALIDATION_STRINGENCY; } public static void setDefaultValidationStringency( ValidationStringency defaultValidationStringency) { SamFileReaderFactory.DEFAULT_VALIDATION_STRINGENCY = defaultValidationStringency; } public static SamFileReaderFactory mewInstance() { return new SamFileReaderFactory(); } public SamFileReaderFactory stringency(ValidationStringency validationStringency) { getDelegate().validationStringency(validationStringency); return this; } protected SamReaderFactory getDelegate() { return delegate; } /** * s can be a * + URL * + File */ public SamReader open(String s) { if(IOUtils.isRemoteURI(s)) { try { LOG.info("opening url: "+s); return getDelegate().open(SamInputResource.of(new URL(s))); } catch(IOException err) { throw new RuntimeException("Cannot open URL \""+s+"\"", err); } } else { return open(new File(s)); } } public SamReader open(File samFile) { LOG.info("opening file "+samFile); return getDelegate().open(samFile); } public SamReader open(InputStream in) { LOG.info("opening stream"); return getDelegate().open(SamInputResource.of(in)); } public SamReader openStdin() { return open(System.in); } }