From 70b8f35191d4bff5c6226580138553304e46a846 Mon Sep 17 00:00:00 2001 From: magicDGS Date: Mon, 12 Sep 2016 23:45:45 +0200 Subject: [PATCH 1/2] fix BEDCodec.canDecode to handle block-compressed extensions --- src/main/java/htsjdk/tribble/bed/BEDCodec.java | 12 +++++++++++- src/test/java/htsjdk/tribble/bed/BEDCodecTest.java | 11 +++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/htsjdk/tribble/bed/BEDCodec.java b/src/main/java/htsjdk/tribble/bed/BEDCodec.java index 62d202c19..73f3e4efa 100644 --- a/src/main/java/htsjdk/tribble/bed/BEDCodec.java +++ b/src/main/java/htsjdk/tribble/bed/BEDCodec.java @@ -23,11 +23,15 @@ */ package htsjdk.tribble.bed; +import htsjdk.samtools.util.IOUtil; +import htsjdk.tribble.AbstractFeatureReader; import htsjdk.tribble.AsciiFeatureCodec; import htsjdk.tribble.annotation.Strand; import htsjdk.tribble.index.tabix.TabixFormat; import htsjdk.tribble.readers.LineIterator; import htsjdk.tribble.util.ParsingUtils; +import org.apache.commons.compress.compressors.FileNameUtil; +import org.apache.commons.compress.utils.IOUtils; import java.util.regex.Pattern; @@ -197,7 +201,13 @@ private void createExons(int start, String[] tokens, FullBEDFeature gene, @Override public boolean canDecode(final String path) { - return path.toLowerCase().endsWith(".bed"); + final String toDecode; + if (AbstractFeatureReader.hasBlockCompressedExtension(path)) { + toDecode = path.substring(0, path.lastIndexOf(".")); + } else { + toDecode = path; + } + return toDecode.toLowerCase().endsWith(".bed"); } public int getStartOffset() { diff --git a/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java b/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java index c7b21931c..474a8a89b 100644 --- a/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java +++ b/src/test/java/htsjdk/tribble/bed/BEDCodecTest.java @@ -226,4 +226,15 @@ private void createIndex(File testFile, File idxFile) throws IOException { public void testGetTabixFormat() { Assert.assertEquals(new BEDCodec().getTabixFormat(), TabixFormat.BED); } + + @Test + public void testCanDecode() { + final BEDCodec codec = new BEDCodec(); + final String pattern = "filename.%s%s"; + for(final String bcExt: AbstractFeatureReader.BLOCK_COMPRESSED_EXTENSIONS) { + Assert.assertTrue(codec.canDecode(String.format(pattern, "bed", bcExt))); + Assert.assertFalse(codec.canDecode(String.format(pattern, "vcf", bcExt))); + Assert.assertFalse(codec.canDecode(String.format(pattern, "bed.gzip", bcExt))); + } + } } From 94940d3e967a0fd39b4ae8daa7353590f17e5c32 Mon Sep 17 00:00:00 2001 From: magicDGS Date: Tue, 13 Sep 2016 00:22:20 +0200 Subject: [PATCH 2/2] addressed comments --- src/main/java/htsjdk/tribble/bed/BEDCodec.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/htsjdk/tribble/bed/BEDCodec.java b/src/main/java/htsjdk/tribble/bed/BEDCodec.java index 73f3e4efa..ea1e88989 100644 --- a/src/main/java/htsjdk/tribble/bed/BEDCodec.java +++ b/src/main/java/htsjdk/tribble/bed/BEDCodec.java @@ -23,15 +23,12 @@ */ package htsjdk.tribble.bed; -import htsjdk.samtools.util.IOUtil; import htsjdk.tribble.AbstractFeatureReader; import htsjdk.tribble.AsciiFeatureCodec; import htsjdk.tribble.annotation.Strand; import htsjdk.tribble.index.tabix.TabixFormat; import htsjdk.tribble.readers.LineIterator; import htsjdk.tribble.util.ParsingUtils; -import org.apache.commons.compress.compressors.FileNameUtil; -import org.apache.commons.compress.utils.IOUtils; import java.util.regex.Pattern; @@ -44,6 +41,9 @@ */ public class BEDCodec extends AsciiFeatureCodec { + /** Default extension for BED files. */ + public static final String BED_EXTENSION = ".bed"; + private static final Pattern SPLIT_PATTERN = Pattern.compile("\\t|( +)"); private final int startOffsetValue; @@ -207,7 +207,7 @@ public boolean canDecode(final String path) { } else { toDecode = path; } - return toDecode.toLowerCase().endsWith(".bed"); + return toDecode.toLowerCase().endsWith(BED_EXTENSION); } public int getStartOffset() {