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.io.Serializable; 015import java.util.Properties; 016 017import cascading.flow.FlowProcess; 018import cascading.scheme.Scheme; 019import cascading.tuple.Fields; 020 021/** 022 * Class CompressorScheme a sub-class of {@link Scheme} that provides compression support to any sub-classes. 023 * <p> 024 * See {@link Compressors} for pre-configured {@link Compressor} implementations. 025 */ 026public abstract class CompressorScheme<SourceContext, SinkContext> extends Scheme<Properties, InputStream, OutputStream, SourceContext, SinkContext> 027 { 028 public static final Compressor NO_COMPRESSOR = new Compressor() 029 { 030 @Override 031 public InputStream inputStream( InputStream inputStream ) 032 { 033 return inputStream; 034 } 035 036 @Override 037 public OutputStream outputStream( OutputStream outputStream ) 038 { 039 return outputStream; 040 } 041 }; 042 043 public interface Compressor extends Serializable 044 { 045 InputStream inputStream( InputStream inputStream ) throws IOException; 046 047 OutputStream outputStream( OutputStream outputStream ) throws IOException; 048 } 049 050 protected Compressor compressor = NO_COMPRESSOR; 051 052 public CompressorScheme() 053 { 054 } 055 056 public CompressorScheme( Fields sourceFields ) 057 { 058 super( sourceFields ); 059 } 060 061 public CompressorScheme( Fields sourceFields, int numSinkParts ) 062 { 063 super( sourceFields, numSinkParts ); 064 } 065 066 public CompressorScheme( Fields sourceFields, Fields sinkFields ) 067 { 068 super( sourceFields, sinkFields ); 069 } 070 071 public CompressorScheme( Fields sourceFields, Fields sinkFields, int numSinkParts ) 072 { 073 super( sourceFields, sinkFields, numSinkParts ); 074 } 075 076 public CompressorScheme( Compressor compressor ) 077 { 078 setCompressor( compressor ); 079 } 080 081 public CompressorScheme( Fields sourceFields, Compressor compressor ) 082 { 083 super( sourceFields ); 084 085 setCompressor( compressor ); 086 } 087 088 public CompressorScheme( Fields sourceFields, int numSinkParts, Compressor compressor ) 089 { 090 super( sourceFields, numSinkParts ); 091 092 setCompressor( compressor ); 093 } 094 095 public CompressorScheme( Fields sourceFields, Fields sinkFields, Compressor compressor ) 096 { 097 super( sourceFields, sinkFields ); 098 099 setCompressor( compressor ); 100 } 101 102 public CompressorScheme( Fields sourceFields, Fields sinkFields, int numSinkParts, Compressor compressor ) 103 { 104 super( sourceFields, sinkFields, numSinkParts ); 105 106 setCompressor( compressor ); 107 } 108 109 protected void setCompressor( Compressor compressor ) 110 { 111 if( compressor != null ) 112 this.compressor = compressor; 113 } 114 115 public InputStream sourceWrap( FlowProcess<? extends Properties> flowProcess, InputStream inputStream ) throws IOException 116 { 117 return compressor.inputStream( inputStream ); 118 } 119 120 public OutputStream sinkWrap( FlowProcess<? extends Properties> flowProcess, OutputStream outputStream ) throws IOException 121 { 122 return compressor.outputStream( outputStream ); 123 } 124 }