/**
*
*/
package com.emc.vipr.transform.compression;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import com.emc.vipr.transform.TransformConstants;
import com.emc.vipr.transform.TransformConstants.CompressionMode;
/**
* @author cwikj
*
*/
public class DeflateOutputTransform extends CompressionOutputTransform {
/**
* @param streamToEncode
* @param metadataToEncode
* @throws IOException
*/
public DeflateOutputTransform(OutputStream streamToEncode,
Map<String, String> metadataToEncode, int compressionLevel)
throws IOException {
super(streamToEncode, metadataToEncode,
TransformConstants.COMPRESSION_CLASS + ":"
+ CompressionMode.Deflate + "/" + compressionLevel);
if (compressionLevel > 9 || compressionLevel < 0) {
throw new IllegalArgumentException(
"Invalid Deflate compression level: " + compressionLevel);
}
pushStream = new DeflateOutputStream(streamToEncode, compressionLevel);
}
public DeflateOutputTransform(InputStream streamToEncode,
Map<String, String> metadataToEncode, int compressionLevel) throws IOException {
super(streamToEncode, metadataToEncode,
TransformConstants.COMPRESSION_CLASS + ":"
+ CompressionMode.Deflate + "/" + compressionLevel);
if (compressionLevel > 9 || compressionLevel < 0) {
throw new IllegalArgumentException(
"Invalid Deflate compression level: " + compressionLevel);
}
pullStream = new DeflateInputFilter(streamToEncode, compressionLevel);
}
/*
* (non-Javadoc)
*
* @see com.emc.vipr.transform.OutputTransform#getEncodedMetadata()
*/
@Override
public Map<String, String> getEncodedMetadata() {
Map<String, String> metadata = new HashMap<String, String>();
// Merge stream metadata
switch(getStreamMode()) {
case PULL:
metadata.putAll(((CompressionStream) pullStream).getStreamMetadata());
break;
case PUSH:
metadata.putAll(((CompressionStream) pushStream).getStreamMetadata());
break;
}
// Merge original metadata
metadata.putAll(metadataToEncode);
return metadata;
}
}