From d8ee2b3b4b76e222e675e310b80a342777e758b3 Mon Sep 17 00:00:00 2001 From: Nils Homer Date: Fri, 7 Apr 2017 09:43:10 -0700 Subject: [PATCH 1/2] Add fromPath to IntervalList. --- src/main/java/htsjdk/samtools/util/IOUtil.java | 7 ++++++- src/main/java/htsjdk/samtools/util/IntervalList.java | 9 +++++++-- src/test/java/htsjdk/samtools/util/IntervalListTest.java | 12 ++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/htsjdk/samtools/util/IOUtil.java b/src/main/java/htsjdk/samtools/util/IOUtil.java index 0903a09f0..373bd5f24 100644 --- a/src/main/java/htsjdk/samtools/util/IOUtil.java +++ b/src/main/java/htsjdk/samtools/util/IOUtil.java @@ -778,9 +778,14 @@ public static File createTempDir(final String prefix, final String suffix) { /** Checks that a file exists and is readable, and then returns a buffered reader for it. */ public static BufferedReader openFileForBufferedReading(final File file) { - return new BufferedReader(new InputStreamReader(openFileForReading(file)), Defaults.NON_ZERO_BUFFER_SIZE); + return openFileForBufferedReading(file.toPath()); } + /** Checks that a path exists and is readable, and then returns a buffered reader for it. */ + public static BufferedReader openFileForBufferedReading(final Path path) { + return new BufferedReader(new InputStreamReader(openFileForReading(path)), Defaults.NON_ZERO_BUFFER_SIZE); + } + /** Takes a string and replaces any characters that are not safe for filenames with an underscore */ public static String makeFileNameSafe(final String str) { return str.trim().replaceAll("[\\s!\"#$%&'()*/:;<=>?@\\[\\]\\\\^`{|}~]", "_"); diff --git a/src/main/java/htsjdk/samtools/util/IntervalList.java b/src/main/java/htsjdk/samtools/util/IntervalList.java index 9bfc718f9..90c560dbb 100644 --- a/src/main/java/htsjdk/samtools/util/IntervalList.java +++ b/src/main/java/htsjdk/samtools/util/IntervalList.java @@ -34,6 +34,7 @@ import java.io.File; import java.io.IOException; import java.io.Serializable; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -397,12 +398,16 @@ public static IntervalList copyOf(final IntervalList list){ * @return an IntervalList object that contains the headers and intervals from the file */ public static IntervalList fromFile(final File file) { - final BufferedReader reader= IOUtil.openFileForBufferedReading(file); + return fromPath(file.toPath()); + } + + public static IntervalList fromPath(final Path path) { + final BufferedReader reader = IOUtil.openFileForBufferedReading(path); final IntervalList list = fromReader(reader); try { reader.close(); } catch (final IOException e) { - throw new SAMException(String.format("Failed to close file %s after reading",file)); + throw new SAMException(String.format("Failed to close file %s after reading", path)); } return list; diff --git a/src/test/java/htsjdk/samtools/util/IntervalListTest.java b/src/test/java/htsjdk/samtools/util/IntervalListTest.java index 6c5fcd43c..a4cb4fe22 100644 --- a/src/test/java/htsjdk/samtools/util/IntervalListTest.java +++ b/src/test/java/htsjdk/samtools/util/IntervalListTest.java @@ -25,7 +25,9 @@ package htsjdk.samtools.util; import htsjdk.samtools.SAMFileHeader; +import htsjdk.samtools.SAMSequenceDictionary; import htsjdk.samtools.SAMSequenceRecord; +import htsjdk.samtools.SamFileHeaderMerger; import htsjdk.variant.vcf.VCFFileReader; import org.testng.Assert; import org.testng.annotations.BeforeTest; @@ -33,6 +35,7 @@ import org.testng.annotations.Test; import java.io.File; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -75,6 +78,15 @@ public IntervalListTest() { list3.add(new Interval("3", 50, 470)); } + @Test + public void testIntervalListFrom() { + final String testPath = "src/test/resources/htsjdk/samtools/intervallist/IntervalListFromVCFTestComp.interval_list"; + final IntervalList fromFileList = IntervalList.fromFile(new File(testPath)); + final IntervalList fromPathList = IntervalList.fromPath(Paths.get(testPath)); + fromFileList.getHeader().getSequenceDictionary().assertSameDictionary(fromPathList.getHeader().getSequenceDictionary()); + Assert.assertEquals(CollectionUtil.makeCollection(fromFileList.iterator()), CollectionUtil.makeCollection(fromPathList.iterator())); + } + @DataProvider(name = "intersectData") public Object[][] intersectData() { final IntervalList intersect123 = new IntervalList(fileHeader); From a253cb0cfe2a91ee42de8e6a8ac38f9a8a3b3bcf Mon Sep 17 00:00:00 2001 From: Nils Homer Date: Thu, 20 Apr 2017 10:37:53 -0700 Subject: [PATCH 2/2] Update with small suggestion --- src/main/java/htsjdk/samtools/util/IntervalList.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/htsjdk/samtools/util/IntervalList.java b/src/main/java/htsjdk/samtools/util/IntervalList.java index 90c560dbb..a80ff128e 100644 --- a/src/main/java/htsjdk/samtools/util/IntervalList.java +++ b/src/main/java/htsjdk/samtools/util/IntervalList.java @@ -401,13 +401,18 @@ public static IntervalList fromFile(final File file) { return fromPath(file.toPath()); } + /** + * Parses an interval list from a path. + * @param path the path containing the intervals + * @return an IntervalList object that contains the headers and intervals from the path + */ public static IntervalList fromPath(final Path path) { final BufferedReader reader = IOUtil.openFileForBufferedReading(path); final IntervalList list = fromReader(reader); try { reader.close(); } catch (final IOException e) { - throw new SAMException(String.format("Failed to close file %s after reading", path)); + throw new SAMException(String.format("Failed to close file %s after reading", path.toUri().toString())); } return list;