diff --git a/src/main/java/htsjdk/samtools/cram/build/ContainerFactory.java b/src/main/java/htsjdk/samtools/cram/build/ContainerFactory.java index c84c1fc736..3174c5b854 100644 --- a/src/main/java/htsjdk/samtools/cram/build/ContainerFactory.java +++ b/src/main/java/htsjdk/samtools/cram/build/ContainerFactory.java @@ -176,7 +176,7 @@ private static Slice buildSlice(final List records, for (final Integer key : map.keySet()) { final ExternalCompressor compressor = header.externalCompressors.get(key); final byte[] rawData = map.get(key).toByteArray(); - final ExternalDataBlock externalBlock = new ExternalDataBlock(key, compressor, rawData); + final ExternalDataBlock externalBlock = Block.externalDataBlock(key, compressor, rawData); slice.external.put(key, externalBlock); } diff --git a/src/main/java/htsjdk/samtools/cram/structure/block/Block.java b/src/main/java/htsjdk/samtools/cram/structure/block/Block.java index 0e58da681e..c730bbcb42 100644 --- a/src/main/java/htsjdk/samtools/cram/structure/block/Block.java +++ b/src/main/java/htsjdk/samtools/cram/structure/block/Block.java @@ -20,6 +20,7 @@ import htsjdk.samtools.cram.CRAMException; import htsjdk.samtools.cram.common.CramVersions; import htsjdk.samtools.cram.compression.ExternalCompression; +import htsjdk.samtools.cram.compression.ExternalCompressor; import htsjdk.samtools.cram.io.*; import htsjdk.samtools.util.RuntimeIOException; @@ -115,7 +116,7 @@ public static SliceHeaderBlock uncompressedSliceHeaderBlock(final byte[] rawCont } /** - * Create a new core block with the given uncompressed content. + * Create a new core data block with the given uncompressed content. * The block will have RAW (no) compression and CORE content type. * * @param rawContent the uncompressed content of the block @@ -125,6 +126,24 @@ public static CoreDataBlock uncompressedCoreBlock(final byte[] rawContent) { return new CoreDataBlock(BlockCompressionMethod.RAW, rawContent); } + /** + * Create a new external data block with the given content ID, compressor, and uncompressed content. + * The block will have EXTERNAL content type. + * + * @param contentId the external identifier for the block + * @param compressor which external compressor to use on this block + * @param rawContent the uncompressed content of the block + * @return a new {@link ExternalDataBlock} object + */ + public static ExternalDataBlock externalDataBlock(final int contentId, final ExternalCompressor compressor, final byte[] rawContent) { + // remove after https://github.com/samtools/htsjdk/issues/1232 + if (contentId == Block.NO_CONTENT_ID) { + throw new CRAMException("Valid Content ID required. Given: " + contentId); + } + + return new ExternalDataBlock(compressor.getMethod(), compressor.compress(rawContent), contentId); + } + public final BlockCompressionMethod getMethod() { return method; } diff --git a/src/main/java/htsjdk/samtools/cram/structure/block/ExternalDataBlock.java b/src/main/java/htsjdk/samtools/cram/structure/block/ExternalDataBlock.java index e6166f7599..a3403fe42b 100644 --- a/src/main/java/htsjdk/samtools/cram/structure/block/ExternalDataBlock.java +++ b/src/main/java/htsjdk/samtools/cram/structure/block/ExternalDataBlock.java @@ -24,23 +24,6 @@ public class ExternalDataBlock extends Block { this.contentId = contentId; } - /** - * Create a new external data block with the given content ID, compressor, and uncompressed content. - * The block will have EXTERNAL content type. - * - * @param contentId the external identifier for the block - * @param compressor which external compressor to use on this block - * @param rawContent the uncompressed content of the block - */ - public ExternalDataBlock(final int contentId, final ExternalCompressor compressor, final byte[] rawContent) { - this(compressor.getMethod(), compressor.compress(rawContent), contentId); - - // remove after https://github.com/samtools/htsjdk/issues/1232 - if (contentId == Block.NO_CONTENT_ID) { - throw new CRAMException("Valid Content ID required. Given: " + contentId); - } - } - @Override public final int getContentId() { return contentId; diff --git a/src/test/java/htsjdk/samtools/cram/structure/BlockTest.java b/src/test/java/htsjdk/samtools/cram/structure/BlockTest.java index febb8d1fdd..bd943df691 100644 --- a/src/test/java/htsjdk/samtools/cram/structure/BlockTest.java +++ b/src/test/java/htsjdk/samtools/cram/structure/BlockTest.java @@ -110,7 +110,7 @@ public void testExternalBlockRoundTrips() { final byte[] uncompressedData = "A TEST STRING WITH REDUNDANCY AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".getBytes(); final byte[] compressedData = compressor.compress(uncompressedData); - final Block extBlock = new ExternalDataBlock(contentID, compressor, uncompressedData); + final Block extBlock = Block.externalDataBlock(contentID, compressor, uncompressedData); final Block rtBlock2 = roundTrip(extBlock, CramVersions.CRAM_v2_1); contentCheck(rtBlock2, uncompressedData, compressedData); @@ -140,6 +140,6 @@ public void testExternalBlockContentId() { // not allowed for external final int contentID = Block.NO_CONTENT_ID; - new ExternalDataBlock(contentID, compressor, uncompressedData); + Block.externalDataBlock(contentID, compressor, uncompressedData); } }