public class FASTACodecV1_0 extends java.lang.Object implements HaploidReferenceCodec
Modifier and Type | Field and Description |
---|---|
static HtsVersion |
VERSION_1 |
Constructor and Description |
---|
FASTACodecV1_0() |
Modifier and Type | Method and Description |
---|---|
boolean |
canDecodeSignature(SignatureStream signatureStream,
java.lang.String sourceName)
Determine if the codec can decode an input stream by inspecting a signature embedded
within the stream.
|
boolean |
canDecodeURI(IOPath ioPath)
Determine if the URI for
ioPath (obtained via IOPath.getURI() )
conforms to the expected URI format this codec's file format. |
HaploidReferenceDecoder |
getDecoder(Bundle inputBundle,
HaploidReferenceDecoderOptions options)
Get an
HtsDecoder to decode the provided inputs. |
HaploidReferenceEncoder |
getEncoder(Bundle outputBundle,
HaploidReferenceEncoderOptions options)
Get an
HtsEncoder to encode to the provided outputs. |
java.lang.String |
getFileFormat()
Get the name of the file format supported by this codec.
|
int |
getSignatureLength()
Get the number of bytes in the format and version signature used by the file format supported
by this codec.
|
HtsVersion |
getVersion()
Get the version of the file format returned by
HtsCodec.getFileFormat() that is supported by this codec. |
boolean |
runVersionUpgrade(HtsVersion sourceCodecVersion,
HtsVersion targetCodecVersion) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getContentType
getDisplayName, getSignatureProbeLength, ownsURI
public static final HtsVersion VERSION_1
public HtsVersion getVersion()
HtsCodec
HtsCodec.getFileFormat()
that is supported by this codec.getVersion
in interface HtsCodec<HaploidReferenceDecoderOptions,HaploidReferenceEncoderOptions>
HtsVersion
) supported by this codecpublic java.lang.String getFileFormat()
HtsCodec
BundleResourceType
and BundleResource.getFileFormat()
).getFileFormat
in interface HtsCodec<HaploidReferenceDecoderOptions,HaploidReferenceEncoderOptions>
public int getSignatureLength()
HtsCodec
getSignatureLength
in interface HtsCodec<HaploidReferenceDecoderOptions,HaploidReferenceEncoderOptions>
HtsCodec.ownsURI(htsjdk.io.IOPath)
), should
always return 0 from this method.
Since this method is used during codec resolution, implementations should avoid calling methods that
may throw exceptions.public boolean canDecodeSignature(SignatureStream signatureStream, java.lang.String sourceName)
HtsCodec
HtsCodec.getSignatureProbeLength()
HtsCodec.getSignatureProbeLength()
Codecs that handle custom URIs that reference remote resources (those that return true for HtsCodec.ownsURI(htsjdk.io.IOPath)
)
should generally not inspect the stream, and should return false from this method, since the method
will never be called with any resource for which HtsCodec.ownsURI(htsjdk.io.IOPath)
returned true.
Since this method is used during codec resolution, implementations should avoid calling methods that
may throw exceptions.
canDecodeSignature
in interface HtsCodec<HaploidReferenceDecoderOptions,HaploidReferenceEncoderOptions>
signatureStream
- the stream to be inspect for the resource's embedded
signature and versionsourceName
- a display name describing the source of the input stream, for use in error messagespublic boolean canDecodeURI(IOPath ioPath)
HtsCodec
ioPath
(obtained via IOPath.getURI()
)
conforms to the expected URI format this codec's file format.
Most implementations only look at the file extension (see IOPath.hasExtension(java.lang.String)
).
For codecs that implement formats that use specific, well known file extensions, the codec should
reject inputs that do not conform to any of the accepted extensions. If the format does not use a
specific extension, or if the codec cannot determine if it can decode the underlying resource
without inspecting the underlying stream, it is safe to return true, after which the framework will
subsequently call this codec's HtsCodec.canDecodeSignature(SignatureStream, String)
method, at
which time the codec can inspect the actual underlying stream via the SignatureStream
.
Implementations should generally not inspect the URI's protocol scheme unless the file format
supported by the codec requires the use a specific protocol scheme. For codecs that do own
a specific scheme or URI format, the return values for HtsCodec.ownsURI(IOPath)
and
HtsCodec.canDecodeURI(IOPath)
must always be the same (both true or both false) for a given IOPath.
For codecs that do not use a custom URI (and rely on NIO access), @link #ownsURI(IOPath)} should
always return false, with only the value returned from HtsCodec.canDecodeURI(IOPath)
varying based
on features such as file extension probes.
It is never safe to attempt to directly inspect the underlying stream for ioPath
in this method. If the stream needs to be inspected, it should be done using the signature stream
when the HtsCodec.canDecodeSignature(SignatureStream, String)
method is called.
HtsCodec.ownsURI(IOPath)
, codecs should avoid making remote calls
to determine the suitability of the input resource; the return value for this method should be based
only on the format of the URI that is presented.
Since this method is used during codec resolution, implementations should avoid calling methods that
may throw exceptions.canDecodeURI
in interface HtsCodec<HaploidReferenceDecoderOptions,HaploidReferenceEncoderOptions>
ioPath
- to be decodedpublic HaploidReferenceDecoder getDecoder(Bundle inputBundle, HaploidReferenceDecoderOptions options)
HtsCodec
HtsDecoder
to decode the provided inputs. The input bundle must contain
resources of the type required by this codec. To find a codec appropriate for decoding a
given resource, use an HtsCodecResolver
obtained
from an HtsCodecRegistry
.
The framework will never call thi* method unless either HtsCodec.ownsURI(IOPath)
, or
HtsCodec.canDecodeURI(IOPath)
and HtsCodec.canDecodeSignature(SignatureStream, String)
(IOPath)}
return true for inputBundle
.
getDecoder
in interface HtsCodec<HaploidReferenceDecoderOptions,HaploidReferenceEncoderOptions>
inputBundle
- input to be decoded. To get a decoder for use with index queries that use
HtsQuery
methods, the bundle must contain
an index resource.options
- options for the decoder to useHtsDecoder
that can decode the provided inputspublic HaploidReferenceEncoder getEncoder(Bundle outputBundle, HaploidReferenceEncoderOptions options)
HtsCodec
HtsEncoder
to encode to the provided outputs. The output bundle must contain
resources of the type required by this codec. To find a codec appropriate for encoding a given
resource, use an HtsCodecResolver
obtained from an
HtsCodecRegistry
.
The framework will never call this method unless either HtsCodec.ownsURI(IOPath)
, or
HtsCodec.canDecodeURI(IOPath)
returned true for outputBundle
.getEncoder
in interface HtsCodec<HaploidReferenceDecoderOptions,HaploidReferenceEncoderOptions>
outputBundle
- target output for the encoderoptions
- encoder options to useHtsEncoder
suitable for writing to the provided outputspublic boolean runVersionUpgrade(HtsVersion sourceCodecVersion, HtsVersion targetCodecVersion)
runVersionUpgrade
in interface Upgradeable