All Downloads are FREE. Search and download functionalities are using the official Maven repository.

htsjdk.tribble.AsciiFeatureCodec Maven / Gradle / Ivy

There is a newer version: 4.1.3
Show newest version
/*
 * Copyright (c) 2007-2010 by The Broad Institute, Inc. and the Massachusetts Institute of Technology.
 * All Rights Reserved.
 *
 * This software is licensed under the terms of the GNU Lesser General Public License (LGPL), Version 2.1 which
 * is available at http://www.opensource.org/licenses/lgpl-2.1.php.
 *
 * THE SOFTWARE IS PROVIDED "AS IS." THE BROAD AND MIT MAKE NO REPRESENTATIONS OR WARRANTIES OF
 * ANY KIND CONCERNING THE SOFTWARE, EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
 * OR OTHER DEFECTS, WHETHER OR NOT DISCOVERABLE.  IN NO EVENT SHALL THE BROAD OR MIT, OR THEIR
 * RESPECTIVE TRUSTEES, DIRECTORS, OFFICERS, EMPLOYEES, AND AFFILIATES BE LIABLE FOR ANY DAMAGES OF
 * ANY KIND, INCLUDING, WITHOUT LIMITATION, INCIDENTAL OR CONSEQUENTIAL DAMAGES, ECONOMIC
 * DAMAGES OR INJURY TO PROPERTY AND LOST PROFITS, REGARDLESS OF WHETHER THE BROAD OR MIT SHALL
 * BE ADVISED, SHALL HAVE OTHER REASON TO KNOW, OR IN FACT SHALL KNOW OF THE POSSIBILITY OF THE
 * FOREGOING.
 */

package htsjdk.tribble;

import htsjdk.samtools.util.CloserUtil;
import htsjdk.samtools.util.LocationAware;
import htsjdk.samtools.util.Log;
import htsjdk.tribble.readers.*;

import java.io.IOException;
import java.io.InputStream;

/**
 * A convenience base class for codecs that want to read in features from ASCII lines.
 * 

* This class overrides the general decode locs for streams and presents instead * Strings to decode(String) and readHeader(LineReader) functions. * * @param The feature type this codec reads */ public abstract class AsciiFeatureCodec extends AbstractFeatureCodec { private static final Log log = Log.getInstance(AsciiFeatureCodec.class); protected AsciiFeatureCodec(final Class myClass) { super(myClass); } @Override public void close(final LineIterator lineIterator) { CloserUtil.close(lineIterator); } @Override public boolean isDone(final LineIterator lineIterator) { return !lineIterator.hasNext(); } @Override public LocationAware makeIndexableSourceFromStream(final InputStream inputStream) { return new AsciiLineReaderIterator(AsciiLineReader.from(inputStream)); } @Override public LineIterator makeSourceFromStream(final InputStream bufferedInputStream) { return new LineIteratorImpl(new SynchronousLineReader(bufferedInputStream)); } /** * Convenience method. Decoding in ASCII files operates line-by-line, so obviate the need to call * {@link htsjdk.tribble.readers.LineIterator#next()} in implementing classes and, instead, have them implement * {@link AsciiFeatureCodec#decode(String)}. */ @Override public T decode(final LineIterator lineIterator) { return decode(lineIterator.next()); } /** @see AsciiFeatureCodec#decode(htsjdk.tribble.readers.LineIterator) */ public abstract T decode(String s); @Override public FeatureCodecHeader readHeader(final LineIterator lineIterator) throws IOException { // TODO: Track header end here, rather than assuming there isn't one. return new FeatureCodecHeader(readActualHeader(lineIterator), FeatureCodecHeader.NO_HEADER_END); } /** * Read and return the header, or null if there is no header. * * @return the actual header data in the file, or null if none is available */ abstract public Object readActualHeader(final LineIterator reader); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy