001/* 002 * Copyright (c) 2007-2018 Concurrent, Inc. All Rights Reserved. 003 * 004 * Project and contact information: http://www.cascading.org/ 005 * 006 * This file is part of the Cascading project. 007 */ 008 009package cascading.scheme.local; 010 011import java.io.IOException; 012import java.io.InputStream; 013import java.io.OutputStream; 014import java.util.Objects; 015 016import cascading.tap.TapException; 017import org.apache.commons.compress.compressors.CompressorException; 018import org.apache.commons.compress.compressors.CompressorStreamFactory; 019 020/** 021 * A collection of provided {@link cascading.scheme.local.CompressorScheme.Compressor} implementations backed 022 * by <a href="http://commons.apache.org/proper/commons-compress/">Apache Commons Compress</a>. 023 */ 024public class Compressors 025 { 026 /** 027 * The {@link CompressorStreamFactory#BROTLI} compressor. 028 */ 029 public static final ApacheCompressor BROTLI = new ApacheCompressor( CompressorStreamFactory.BROTLI ); 030 031 /** 032 * The {@link CompressorStreamFactory#BZIP2} compressor. 033 */ 034 public static final ApacheCompressor BZIP2 = new ApacheCompressor( CompressorStreamFactory.BZIP2 ); 035 036 /** 037 * The {@link CompressorStreamFactory#GZIP} compressor. 038 */ 039 public static final ApacheCompressor GZIP = new ApacheCompressor( CompressorStreamFactory.GZIP ); 040 041 /** 042 * The {@link CompressorStreamFactory#PACK200} compressor. 043 */ 044 public static final ApacheCompressor PACK200 = new ApacheCompressor( CompressorStreamFactory.PACK200 ); 045 046 /** 047 * The {@link CompressorStreamFactory#XZ} compressor. 048 */ 049 public static final ApacheCompressor XZ = new ApacheCompressor( CompressorStreamFactory.XZ ); 050 051 /** 052 * The {@link CompressorStreamFactory#LZMA} compressor. 053 */ 054 public static final ApacheCompressor LZMA = new ApacheCompressor( CompressorStreamFactory.LZMA ); 055 056 /** 057 * The {@link CompressorStreamFactory#SNAPPY_FRAMED} compressor. 058 */ 059 public static final ApacheCompressor SNAPPY_FRAMED = new ApacheCompressor( CompressorStreamFactory.SNAPPY_FRAMED ); 060 061 /** 062 * The {@link CompressorStreamFactory#SNAPPY_RAW} compressor. 063 */ 064 public static final ApacheCompressor SNAPPY_RAW = new ApacheCompressor( CompressorStreamFactory.SNAPPY_RAW ); 065 066 /** 067 * The {@link CompressorStreamFactory#Z} compressor. 068 */ 069 public static final ApacheCompressor Z = new ApacheCompressor( CompressorStreamFactory.Z ); 070 071 /** 072 * The {@link CompressorStreamFactory#DEFLATE} compressor. 073 */ 074 public static final ApacheCompressor DEFLATE = new ApacheCompressor( CompressorStreamFactory.DEFLATE ); 075 076 /** 077 * The {@link CompressorStreamFactory#LZ4_BLOCK} compressor. 078 */ 079 public static final ApacheCompressor LZ4_BLOCK = new ApacheCompressor( CompressorStreamFactory.LZ4_BLOCK ); 080 081 /** 082 * The {@link CompressorStreamFactory#LZ4_FRAMED} compressor. 083 */ 084 public static final ApacheCompressor LZ4_FRAMED = new ApacheCompressor( CompressorStreamFactory.LZ4_FRAMED ); 085 086 private static CompressorStreamFactory factory = new CompressorStreamFactory(); 087 088 static class ApacheCompressor implements CompressorScheme.Compressor 089 { 090 String algorithm; 091 092 public ApacheCompressor( String algorithm ) 093 { 094 this.algorithm = algorithm; 095 } 096 097 @Override 098 public InputStream inputStream( InputStream inputStream ) throws IOException 099 { 100 try 101 { 102 return factory.createCompressorInputStream( algorithm, inputStream ); 103 } 104 catch( CompressorException exception ) 105 { 106 throw new TapException( exception ); 107 } 108 } 109 110 @Override 111 public OutputStream outputStream( OutputStream outputStream ) throws IOException 112 { 113 try 114 { 115 return factory.createCompressorOutputStream( algorithm, outputStream ); 116 } 117 catch( CompressorException exception ) 118 { 119 throw new TapException( exception ); 120 } 121 } 122 123 @Override 124 public boolean equals( Object object ) 125 { 126 if( this == object ) 127 return true; 128 if( !( object instanceof ApacheCompressor ) ) 129 return false; 130 ApacheCompressor that = (ApacheCompressor) object; 131 return Objects.equals( algorithm, that.algorithm ); 132 } 133 134 @Override 135 public int hashCode() 136 { 137 return Objects.hash( algorithm ); 138 } 139 140 @Override 141 public String toString() 142 { 143 final StringBuilder sb = new StringBuilder( "Compressor{" ); 144 sb.append( "algorithm='" ).append( algorithm ).append( '\'' ); 145 sb.append( '}' ); 146 return sb.toString(); 147 } 148 } 149 }