Permalink
Please sign in to comment.
Browse files
IndexingVariantContextWriter cleanup (#706)
* extract PositionalOutputStream * extract setIndexSequenceDictionary to IndexCreator with no-op default and TribbleIndexCreator implementation
- Loading branch information...
Showing
with
152 additions
and 52 deletions.
- +65 −0 src/main/java/htsjdk/samtools/util/PositionalOutputStream.java
- +7 −0 src/main/java/htsjdk/tribble/index/IndexCreator.java
- +16 −0 src/main/java/htsjdk/tribble/index/TribbleIndexCreator.java
- +2 −52 src/main/java/htsjdk/variant/variantcontext/writer/IndexingVariantContextWriter.java
- +62 −0 src/test/java/htsjdk/samtools/util/PositionalOutputStreamTest.java
| @@ -0,0 +1,65 @@ | ||
| +/* | ||
| +* Copyright (c) 2012 The Broad Institute | ||
| +* | ||
| +* Permission is hereby granted, free of charge, to any person | ||
| +* obtaining a copy of this software and associated documentation | ||
| +* files (the "Software"), to deal in the Software without | ||
| +* restriction, including without limitation the rights to use, | ||
| +* copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| +* copies of the Software, and to permit persons to whom the | ||
| +* Software is furnished to do so, subject to the following | ||
| +* conditions: | ||
| +* | ||
| +* The above copyright notice and this permission notice shall be | ||
| +* included in all copies or substantial portions of the Software. | ||
| +* | ||
| +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
| +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES | ||
| +* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
| +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT | ||
| +* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | ||
| +* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR | ||
| +* THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| +*/ | ||
| + | ||
| +package htsjdk.samtools.util; | ||
| + | ||
| +import java.io.IOException; | ||
| +import java.io.OutputStream; | ||
| + | ||
| +/** | ||
| + * Wraps output stream in a manner which keeps track of the position within the file and allowing writes | ||
| + * at arbitrary points | ||
| + */ | ||
| +public final class PositionalOutputStream extends OutputStream implements LocationAware | ||
| +{ | ||
| + private final OutputStream out; | ||
| + private long position = 0; | ||
| + | ||
| + public PositionalOutputStream(final OutputStream out) { | ||
| + this.out = out; | ||
| + } | ||
| + | ||
| + public final void write(final byte[] bytes) throws IOException { | ||
| + write(bytes, 0, bytes.length); | ||
| + } | ||
| + | ||
| + public final void write(final byte[] bytes, final int startIndex, final int numBytes) throws IOException { | ||
| + position += numBytes; | ||
| + out.write(bytes, startIndex, numBytes); | ||
| + } | ||
| + | ||
| + public final void write(final int c) throws IOException { | ||
| + position++; | ||
| + out.write(c); | ||
| + } | ||
| + | ||
| + public final long getPosition() { return position; } | ||
| + | ||
| + @Override | ||
| + public void close() throws IOException { | ||
| + super.close(); | ||
| + out.close(); | ||
| + } | ||
| +} |
| @@ -0,0 +1,62 @@ | ||
| +/* | ||
| + * The MIT License (MIT) | ||
| + * | ||
| + * Copyright (c) 2015 Daniel Gómez-Sánchez | ||
| + * | ||
| + * Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| + * of this software and associated documentation files (the "Software"), to deal | ||
| + * in the Software without restriction, including without limitation the rights | ||
| + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| + * copies of the Software, and to permit persons to whom the Software is | ||
| + * furnished to do so, subject to the following conditions: | ||
| + * | ||
| + * The above copyright notice and this permission notice shall be included in all | ||
| + * copies or substantial portions of the Software. | ||
| + * | ||
| + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| + * SOFTWARE. | ||
| + */ | ||
| + | ||
| +package htsjdk.samtools.util; | ||
| + | ||
| +import org.testng.Assert; | ||
| +import org.testng.annotations.Test; | ||
| + | ||
| +import java.io.IOException; | ||
| +import java.io.OutputStream; | ||
| + | ||
| +/** | ||
| + * @author Daniel Gomez-Sanchez (magicDGS) | ||
| + */ | ||
| +public class PositionalOutputStreamTest { | ||
| + | ||
| + @Test | ||
| + public void basicPositionTest() throws Exception { | ||
| + // wrapped null output stream to check | ||
| + final PositionalOutputStream wrapped = new PositionalOutputStream(new OutputStream() { | ||
| + @Override | ||
| + public void write(int b) throws IOException {} | ||
| + }); | ||
| + int position = 0; | ||
| + // check that we start at position 0 | ||
| + Assert.assertEquals(wrapped.getPosition(), position); | ||
| + // check that write one int just add one | ||
| + wrapped.write(100); | ||
| + Assert.assertEquals(wrapped.getPosition(), ++position); | ||
| + // check that write a byte array adds its length | ||
| + final byte[] bytes = new byte[]{1, 3, 5, 7}; | ||
| + wrapped.write(bytes); | ||
| + position += bytes.length; | ||
| + Assert.assertEquals(wrapped.getPosition(), position); | ||
| + // check that write just some bytes from an array adds its length | ||
| + wrapped.write(bytes, 2, 2); | ||
| + position += 2; | ||
| + Assert.assertEquals(wrapped.getPosition(), position); | ||
| + } | ||
| + | ||
| +} |
0 comments on commit
88b6719