Author: bodewig
Date: Fri Mar 13 05:23:22 2009
New Revision: 753122

URL: http://svn.apache.org/viewvc?rev=753122&view=rev
Log:
Improve and unify exception handling in StreamFactories.  Submitted by 
Christian Grobmeier.  SANDBOX-299

Modified:
    
commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
    
commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java

Modified: 
commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java?rev=753122&r1=753121&r2=753122&view=diff
==============================================================================
--- 
commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
 (original)
+++ 
commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
 Fri Mar 13 05:23:22 2009
@@ -34,67 +34,94 @@
 import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
 
 /**
- * Factory to create Archive[In|Out]putStreams from names
- * or the first bytes of the InputStream. In order add other
- * implementations you should extend ArchiveStreamFactory
- * and override the appropriate methods (and call their implementation
- * from super of course)
+ * Factory to create Archive[In|Out]putStreams from names or the first bytes of
+ * the InputStream. In order add other implementations you should extend
+ * ArchiveStreamFactory and override the appropriate methods (and call their
+ * implementation from super of course)
  * 
- * TODO add example here 
+ * TODO add example here
  * 
  */
-
 public class ArchiveStreamFactory {
 
-    public ArchiveInputStream createArchiveInputStream( final String 
archiverName, final InputStream in ) throws ArchiveException {
+    public ArchiveInputStream createArchiveInputStream(
+            final String archiverName, final InputStream in)
+            throws ArchiveException {
+        if (archiverName == null || in == null) {
+            throw new IllegalArgumentException("Archivername must not be 
null.");
+        }
+
         if ("ar".equalsIgnoreCase(archiverName)) {
             return new ArArchiveInputStream(in);
-        } else if("zip".equalsIgnoreCase(archiverName)) {
+        } else if ("zip".equalsIgnoreCase(archiverName)) {
             return new ZipArchiveInputStream(in);
-        } else if("tar".equalsIgnoreCase(archiverName)) {
+        } else if ("tar".equalsIgnoreCase(archiverName)) {
             return new TarArchiveInputStream(in);
-        } else if("jar".equalsIgnoreCase(archiverName)) {
+        } else if ("jar".equalsIgnoreCase(archiverName)) {
             return new JarArchiveInputStream(in);
-        } else if("cpio".equalsIgnoreCase(archiverName)) {
+        } else if ("cpio".equalsIgnoreCase(archiverName)) {
             return new CpioArchiveInputStream(in);
         }
-        return null;
+        throw new ArchiveException("Archiver: " + archiverName + " not 
found.");
     }
 
-    public ArchiveOutputStream createArchiveOutputStream( final String 
archiverName, final OutputStream out ) throws ArchiveException {
+    public ArchiveOutputStream createArchiveOutputStream(
+            final String archiverName, final OutputStream out)
+            throws ArchiveException {
+        if (archiverName == null || out == null) {
+            throw new IllegalArgumentException(
+                    "Archivername and stream must not be null.");
+        }
+
         if ("ar".equalsIgnoreCase(archiverName)) {
             return new ArArchiveOutputStream(out);
-        } else if("zip".equalsIgnoreCase(archiverName)) {
+        } else if ("zip".equalsIgnoreCase(archiverName)) {
             return new ZipArchiveOutputStream(out);
-        } else if("tar".equalsIgnoreCase(archiverName)) {
+        } else if ("tar".equalsIgnoreCase(archiverName)) {
             return new TarArchiveOutputStream(out);
-        } else if("jar".equalsIgnoreCase(archiverName)) {
+        } else if ("jar".equalsIgnoreCase(archiverName)) {
             return new JarArchiveOutputStream(out);
-        } else if("cpio".equalsIgnoreCase(archiverName)) {
+        } else if ("cpio".equalsIgnoreCase(archiverName)) {
             return new CpioArchiveOutputStream(out);
         }
-        return null;
+        throw new ArchiveException("Archiver: " + archiverName + " not 
found.");
     }
 
-    public ArchiveInputStream createArchiveInputStream( final InputStream 
input ) throws IOException {
+    public ArchiveInputStream createArchiveInputStream(final InputStream in)
+            throws ArchiveException {
+        if (in == null) {
+            throw new IllegalArgumentException("Stream must not be null.");
+        }
+
+        if (!in.markSupported()) {
+            throw new IllegalArgumentException("Mark is not supported.");
+        }
 
         final byte[] signature = new byte[12];
-        input.mark(signature.length);
-        int signatureLength = input.read(signature);
-        // TODO if reset is not supported pass on the IOException or return 
null?
-        input.reset();
-
-        if(ZipArchiveInputStream.matches(signature, signatureLength)) {
-            return new ZipArchiveInputStream(input);
-        } else if(JarArchiveInputStream.matches(signature, signatureLength)) {
-            return new JarArchiveInputStream(input);
-        } else if(TarArchiveInputStream.matches(signature, signatureLength)) {
-            return new TarArchiveInputStream(input);
-        } else if(ArArchiveInputStream.matches(signature, signatureLength)) {
-            return new ArArchiveInputStream(input);
-        } else if(CpioArchiveInputStream.matches(signature, signatureLength)) {
-            return new CpioArchiveInputStream(input);
-        } 
-        return null;
+        in.mark(signature.length);
+        try {
+            int signatureLength = in.read(signature);
+            in.reset();
+            if (ZipArchiveInputStream.matches(signature, signatureLength)) {
+                return new ZipArchiveInputStream(in);
+            } else if (JarArchiveInputStream
+                    .matches(signature, signatureLength)) {
+                return new JarArchiveInputStream(in);
+            } else if (TarArchiveInputStream
+                    .matches(signature, signatureLength)) {
+                return new TarArchiveInputStream(in);
+            } else if (ArArchiveInputStream.matches(signature, 
signatureLength)) {
+                return new ArArchiveInputStream(in);
+            } else if (CpioArchiveInputStream.matches(signature,
+                    signatureLength)) {
+                return new CpioArchiveInputStream(in);
+            }
+        } catch (IOException e) {
+            throw new ArchiveException(
+                    "Could not use reset and mark operations.", e);
+        }
+
+        throw new ArchiveException(
+                "No Archiver not found for this stream signature");
     }
 }

Modified: 
commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java?rev=753122&r1=753121&r2=753122&view=diff
==============================================================================
--- 
commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
 (original)
+++ 
commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/compressors/CompressorStreamFactory.java
 Fri Mar 13 05:23:22 2009
@@ -28,44 +28,53 @@
 import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream;
 
 /**
- * Factory to create Compressor[In|Out]putStreams from names
- * In order add other implementations you should extend CompressorStreamFactory
- * and override the appropriate methods (and call their implementation
- * from super of course)
+ * Factory to create Compressor[In|Out]putStreams from names In order add other
+ * implementations you should extend CompressorStreamFactory and override the
+ * appropriate methods (and call their implementation from super of course)
  * 
- * TODO add example here 
+ * TODO add example here
  * 
  */
 public class CompressorStreamFactory {
 
-       public CompressorInputStream createCompressorInputStream( final String 
name, final InputStream in ) throws CompressorException {
-               try {
-
-                       if("gz".equalsIgnoreCase(name)) {
-                               return new GzipCompressorInputStream(in);
-                       } else if("bzip2".equalsIgnoreCase(name)) {
-                               return new BZip2CompressorInputStream(in);
-                       } 
-
-                       return null;
-               
-               } catch (IOException e) {
-                       throw new CompressorException("Could not create 
CompressorInputStream", e);
-               }
+    public CompressorInputStream createCompressorInputStream(final String name,
+            final InputStream in) throws CompressorException {
+        if (name == null || in == null) {
+            throw new IllegalArgumentException(
+                    "Compressor name and stream must not be null.");
+        }
+
+        try {
+            if ("gz".equalsIgnoreCase(name)) {
+                return new GzipCompressorInputStream(in);
+            } else if ("bzip2".equalsIgnoreCase(name)) {
+                return new BZip2CompressorInputStream(in);
+            }
+            throw new CompressorException("Compressor: " + name + " not 
found.");
+        } catch (IOException e) {
+            throw new CompressorException(
+                    "Could not create CompressorInputStream", e);
+        }
     }
 
-    public CompressorOutputStream createCompressorOutputStream( final String 
name, final OutputStream out ) throws CompressorException {
-               try {
-
-                       if("gz".equalsIgnoreCase(name)) {
-                                       return new 
GzipCompressorOutputStream(out);
-                       } else if("bzip2".equalsIgnoreCase(name)) {
-                                       return new 
BZip2CompressorOutputStream(out);
-                       } 
-                       return null;
-
-               } catch (IOException e) {
-                       throw new CompressorException("Could not create 
CompressorOutputStream", e);
-               }
+    public CompressorOutputStream createCompressorOutputStream(
+            final String name, final OutputStream out)
+            throws CompressorException {
+        if (name == null || out == null) {
+            throw new IllegalArgumentException(
+                    "Compressor name and stream must not be null.");
+        }
+
+        try {
+            if ("gz".equalsIgnoreCase(name)) {
+                return new GzipCompressorOutputStream(out);
+            } else if ("bzip2".equalsIgnoreCase(name)) {
+                return new BZip2CompressorOutputStream(out);
+            }
+            throw new CompressorException("Compressor: " + name + " not 
found.");
+        } catch (IOException e) {
+            throw new CompressorException(
+                    "Could not create CompressorOutputStream", e);
+        }
     }
 }


Reply via email to