Author: bodewig
Date: Sun Dec  1 07:03:57 2013
New Revision: 1546784

URL: http://svn.apache.org/r1546784
Log:
COMPRESS-147 and COMPRESS-243 - add .Z and Snappy to Factory

Modified:
    
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
    
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java
    
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/FramedSnappyTestCase.java
    
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/ZTestCase.java

Modified: 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java?rev=1546784&r1=1546783&r2=1546784&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
 (original)
+++ 
commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
 Sun Dec  1 07:03:57 2013
@@ -32,6 +32,9 @@ import org.apache.commons.compress.compr
 import org.apache.commons.compress.compressors.xz.XZUtils;
 import 
org.apache.commons.compress.compressors.pack200.Pack200CompressorInputStream;
 import 
org.apache.commons.compress.compressors.pack200.Pack200CompressorOutputStream;
+import 
org.apache.commons.compress.compressors.snappy.FramedSnappyCompressorInputStream;
+import 
org.apache.commons.compress.compressors.snappy.SnappyCompressorInputStream;
+import org.apache.commons.compress.compressors.z.ZCompressorInputStream;
 import org.apache.commons.compress.utils.IOUtils;
 
 /**
@@ -91,6 +94,24 @@ public class CompressorStreamFactory {
      */
     public static final String LZMA = "lzma";
 
+    /**
+     * Constant used to identify the "framed" Snappy compression method.
+     * @since 1.7
+     */
+    public static final String SNAPPY_FRAMED = "snappy-framed";
+
+    /**
+     * Constant used to identify the "raw" Snappy compression method.
+     * @since 1.7
+     */
+    public static final String SNAPPY_RAW = "snappy-raw";
+
+    /**
+     * Constant used to identify the traditional Unix compress method.
+     * @since 1.7
+     */
+    public static final String Z = "z";
+
     private boolean decompressConcatenated = false;
 
     /**
@@ -154,6 +175,10 @@ public class CompressorStreamFactory {
                 return new Pack200CompressorInputStream(in);
             }
 
+            if (FramedSnappyCompressorInputStream.matches(signature, 
signatureLength)) {
+                return new FramedSnappyCompressorInputStream(in);
+            }
+
         } catch (IOException e) {
             throw new CompressorException("Failed to detect Compressor from 
InputStream.", e);
         }
@@ -164,7 +189,8 @@ public class CompressorStreamFactory {
     /**
      * Create a compressor input stream from a compressor name and an input 
stream.
      * 
-     * @param name of the compressor, i.e. "gz", "bzip2", "xz", "lzma", or 
"pack200"
+     * @param name of the compressor, i.e. "gz", "bzip2", "xz",
+     *        "lzma", "snappy-raw", "snappy-framed", "pack200", "z"
      * @param in the input stream
      * @return compressor input stream
      * @throws CompressorException if the compressor name is not known
@@ -199,6 +225,18 @@ public class CompressorStreamFactory {
                 return new Pack200CompressorInputStream(in);
             }
 
+            if (SNAPPY_RAW.equalsIgnoreCase(name)) {
+                return new SnappyCompressorInputStream(in);
+            }
+
+            if (SNAPPY_FRAMED.equalsIgnoreCase(name)) {
+                return new FramedSnappyCompressorInputStream(in);
+            }
+
+            if (Z.equalsIgnoreCase(name)) {
+                return new ZCompressorInputStream(in);
+            }
+
         } catch (IOException e) {
             throw new CompressorException(
                     "Could not create CompressorInputStream.", e);

Modified: 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java?rev=1546784&r1=1546783&r2=1546784&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java
 (original)
+++ 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/AbstractTestCase.java
 Sun Dec  1 07:03:57 2013
@@ -414,4 +414,8 @@ public abstract class AbstractTestCase e
             }
         }
     }
+
+    protected static interface StreamWrapper<I extends InputStream> {
+        I wrap(InputStream in) throws Exception;
+    }
 }

Modified: 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/FramedSnappyTestCase.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/FramedSnappyTestCase.java?rev=1546784&r1=1546783&r2=1546784&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/FramedSnappyTestCase.java
 (original)
+++ 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/FramedSnappyTestCase.java
 Sun Dec  1 07:03:57 2013
@@ -18,10 +18,12 @@
  */
 package org.apache.commons.compress.compressors;
 
+import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.Arrays;
 
 import org.apache.commons.compress.AbstractTestCase;
@@ -46,13 +48,40 @@ public final class FramedSnappyTestCase
         assertTrue(FramedSnappyCompressorInputStream.matches(b, 12));
     }
 
-    public void testDefaultExtraction() throws IOException {
+    public void testDefaultExtraction() throws Exception {
+        testUnarchive(new StreamWrapper<CompressorInputStream>() {
+            public CompressorInputStream wrap(InputStream is) throws 
IOException {
+                return new FramedSnappyCompressorInputStream(is);
+            }
+        });
+    }
+
+    public void testDefaultExtractionViaFactory() throws Exception {
+        testUnarchive(new StreamWrapper<CompressorInputStream>() {
+            public CompressorInputStream wrap(InputStream is) throws Exception 
{
+                return new CompressorStreamFactory()
+                    
.createCompressorInputStream(CompressorStreamFactory.SNAPPY_FRAMED,
+                                                 is);
+            }
+        });
+    }
+
+    public void testDefaultExtractionViaFactoryAutodetection() throws 
Exception {
+        testUnarchive(new StreamWrapper<CompressorInputStream>() {
+            public CompressorInputStream wrap(InputStream is) throws Exception 
{
+                return new 
CompressorStreamFactory().createCompressorInputStream(is);
+            }
+        });
+    }
+
+    private void testUnarchive(StreamWrapper<CompressorInputStream> wrapper) 
throws Exception {
         final File input = getFile("bla.tar.sz");
         final File output = new File(dir, "bla.tar");
         final FileInputStream is = new FileInputStream(input);
         try {
-            final CompressorInputStream in =
-                new FramedSnappyCompressorInputStream(is);
+            // the intermediate BufferedInputStream is there for mark
+            // support in the autodetection test
+            final CompressorInputStream in = wrapper.wrap(new 
BufferedInputStream(is));
             FileOutputStream out = null;
             try {
                 out = new FileOutputStream(output);

Modified: 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/ZTestCase.java
URL: 
http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/ZTestCase.java?rev=1546784&r1=1546783&r2=1546784&view=diff
==============================================================================
--- 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/ZTestCase.java
 (original)
+++ 
commons/proper/compress/trunk/src/test/java/org/apache/commons/compress/compressors/ZTestCase.java
 Sun Dec  1 07:03:57 2013
@@ -21,6 +21,7 @@ package org.apache.commons.compress.comp
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.commons.compress.AbstractTestCase;
@@ -30,11 +31,28 @@ import org.apache.commons.compress.utils
 public final class ZTestCase extends AbstractTestCase {
 
     public void testZUnarchive() throws Exception {
+        testUnarchive(new StreamWrapper<CompressorInputStream>() {
+            public CompressorInputStream wrap(InputStream is) throws 
IOException {
+                return new ZCompressorInputStream(is);
+            }
+        });
+    }
+
+    public void testZUnarchiveViaFactory() throws Exception {
+        testUnarchive(new StreamWrapper<CompressorInputStream>() {
+            public CompressorInputStream wrap(InputStream is) throws Exception 
{
+                return new CompressorStreamFactory()
+                    .createCompressorInputStream(CompressorStreamFactory.Z, 
is);
+            }
+        });
+    }
+
+    private void testUnarchive(StreamWrapper wrapper) throws Exception {
         final File input = getFile("bla.tar.Z");
         final File output = new File(dir, "bla.tar");
         final InputStream is = new FileInputStream(input);
         try {
-            final CompressorInputStream in = new ZCompressorInputStream(is);
+            final InputStream in = wrapper.wrap(is);
             FileOutputStream out = null;
             try {
                 out = new FileOutputStream(output);
@@ -49,4 +67,5 @@ public final class ZTestCase extends Abs
             is.close();
         }
     }
+
 }


Reply via email to