/** * */ 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 LZMAOutputTransform extends CompressionOutputTransform { public LZMAOutputTransform(OutputStream streamToEncodeTo, Map<String, String> metadataToEncode, int level) throws IOException { super(streamToEncodeTo, metadataToEncode, TransformConstants.COMPRESSION_CLASS + ":" + CompressionMode.LZMA + "/" + level); if (level > 9 || level < 0) { throw new IllegalArgumentException("Invalid compression level " + level); } pushStream = new LZMAOutputStream(streamToEncodeTo, level); } public LZMAOutputTransform(InputStream streamToEncode, Map<String, String> metadataToEncode, int level) throws IOException { super(streamToEncode, metadataToEncode, TransformConstants.COMPRESSION_CLASS + ":" + CompressionMode.LZMA + "/" + level); if (level > 9 || level < 0) { throw new IllegalArgumentException("Invalid compression level " + level); } pullStream = new LZMACompressionFilter(streamToEncode, level); } @Override public Map<String, String> getEncodedMetadata() { Map<String, String> outputMetadata = new HashMap<String, String>(); switch(getStreamMode()) { case PULL: outputMetadata.putAll(((LZMACompressionFilter)pullStream).getStreamMetadata()); break; case PUSH: outputMetadata.putAll(((LZMAOutputStream)pushStream).getStreamMetadata()); break; } // Merge original outputMetadata.putAll(metadataToEncode); return outputMetadata; } }