Author: tcurdt Date: Wed Jan 7 05:16:01 2009 New Revision: 732325 URL: http://svn.apache.org/viewvc?rev=732325&view=rev Log: applied patch from Christian Grobmeier
https://issues.apache.org/jira/browse/SANDBOX-262 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/archivers/jar/JarArchiveInputStream.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=732325&r1=732324&r2=732325&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 Wed Jan 7 05:16:01 2009 @@ -21,12 +21,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; import org.apache.commons.compress.archivers.ar.ArArchiveInputStream; import org.apache.commons.compress.archivers.ar.ArArchiveOutputStream; @@ -36,97 +30,44 @@ import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; -import org.apache.commons.compress.utils.ReflectionUtils; -public class ArchiveStreamFactory { - - final Map inputStreamClasses = new HashMap(); - final Map outputStreamClasses = new HashMap(); - - public ArchiveStreamFactory() throws ArchiveException { - registerArchiveInputStream("zip", ZipArchiveInputStream.class); - registerArchiveOutputStream("zip", ZipArchiveOutputStream.class); - - registerArchiveInputStream("tar", TarArchiveInputStream.class); - registerArchiveOutputStream("tar", TarArchiveOutputStream.class); +/** + * 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 + * + */ - registerArchiveInputStream("ar", ArArchiveInputStream.class); - registerArchiveOutputStream("ar", ArArchiveOutputStream.class); - - registerArchiveInputStream("jar", JarArchiveInputStream.class); - registerArchiveOutputStream("jar", JarArchiveOutputStream.class); - } - - - public void registerArchiveInputStream( final String name, final Class stream ) throws ArchiveException { - if (ArchiveInputStream.class.isAssignableFrom(stream) && !(stream.isInterface())) { - inputStreamClasses.put(name, stream); - } else { - throw new ArchiveException("Archive does not implement the ArchiveInputStream interface."); - } - } +public class ArchiveStreamFactory { - public void registerArchiveOutputStream( final String name, final Class stream ) throws ArchiveException { - ReflectionUtils.registerClazz(outputStreamClasses, name, ArchiveOutputStream.class, stream); - if (ArchiveOutputStream.class.isAssignableFrom(stream) && !(stream.isInterface())) { - outputStreamClasses.put(name, stream); - } else { - throw new ArchiveException("Archive does not implement the ArchiveOutputStream interface."); - } - } - - public ArchiveInputStream createArchiveInputStream( final String archiverName, final InputStream out ) throws ArchiveException { - try { - final Class clazz = (Class) inputStreamClasses.get(archiverName); - - if (clazz == null) { - throw new ArchiveException("ArchiverFactory could not create instance"); - } - - final Class[] params = { InputStream.class }; - final Constructor constructor = clazz.getConstructor(params); - final Object[] initargs = { out }; - return (ArchiveInputStream) constructor.newInstance(initargs); - } catch (InstantiationException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (IllegalAccessException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (SecurityException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (NoSuchMethodException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (IllegalArgumentException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (InvocationTargetException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); + public ArchiveInputStream createArchiveInputStream( final String archiverName, final InputStream in ) throws ArchiveException { + if ("ar".equalsIgnoreCase(archiverName)) { + return new ArArchiveInputStream(in); + } else if("zip".equalsIgnoreCase(archiverName)) { + return new ZipArchiveInputStream(in); + } else if("tar".equalsIgnoreCase(archiverName)) { + return new TarArchiveInputStream(in); + } else if("jar".equalsIgnoreCase(archiverName)) { + return new JarArchiveInputStream(in); } + return null; } public ArchiveOutputStream createArchiveOutputStream( final String archiverName, final OutputStream out ) throws ArchiveException { - try { - final Class clazz = (Class) outputStreamClasses.get(archiverName); - - if (clazz == null) { - throw new ArchiveException("ArchiverFactory could not create instance"); - } - - final Class[] params = { OutputStream.class }; - final Constructor constructor = clazz.getConstructor(params); - final Object[] initargs = { out }; - return (ArchiveOutputStream) constructor.newInstance(initargs); - } catch (InstantiationException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (IllegalAccessException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (SecurityException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (NoSuchMethodException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (IllegalArgumentException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); - } catch (InvocationTargetException e) { - throw new ArchiveException("ArchiverFactory could not create instance", e); + if ("ar".equalsIgnoreCase(archiverName)) { + return new ArArchiveOutputStream(out); + } else if("zip".equalsIgnoreCase(archiverName)) { + return new ZipArchiveOutputStream(out); + } else if("tar".equalsIgnoreCase(archiverName)) { + return new TarArchiveOutputStream(out); + } else if("jar".equalsIgnoreCase(archiverName)) { + return new JarArchiveOutputStream(out); } + return null; } public ArchiveInputStream createArchiveInputStream( final InputStream input ) throws IOException { @@ -134,36 +75,18 @@ final byte[] signature = new byte[12]; input.mark(signature.length); input.read(signature); - // reset not supported exception? + // TODO if reset is not supported pass on the IOException or return null? input.reset(); -// for (int i = 0; i < signature.length; i++) { -// System.out.print(Integer.toHexString(signature[i])); -// System.out.print(","); -// } -// System.out.println(""); - - for (Iterator it = inputStreamClasses.values().iterator(); it.hasNext();) { - final Class clazz = (Class) it.next(); - try { - final Method method = clazz.getMethod("matches", new Class[] { byte[].class }); - - final Object result = method.invoke(null, new Object[] { signature } ); - - if (result.equals(Boolean.TRUE)) { - final Class[] params = { InputStream.class }; - final Constructor constructor = clazz.getConstructor(params); - final Object[] initargs = { input }; - return (ArchiveInputStream) constructor.newInstance(initargs); - } - } catch (SecurityException e) { - } catch (NoSuchMethodException e) { - } catch (IllegalArgumentException e) { - } catch (IllegalAccessException e) { - } catch (InvocationTargetException e) { - } catch (InstantiationException e) { - } - } + if(ZipArchiveInputStream.matches(signature)) { + return new ZipArchiveInputStream(input); + } else if(JarArchiveInputStream.matches(signature)) { + return new JarArchiveInputStream(input); + } else if(TarArchiveInputStream.matches(signature)) { + return new TarArchiveInputStream(input); + } else if(ArArchiveInputStream.matches(signature)) { + return new ArArchiveInputStream(input); + } return null; } } Modified: commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/jar/JarArchiveInputStream.java URL: http://svn.apache.org/viewvc/commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/jar/JarArchiveInputStream.java?rev=732325&r1=732324&r2=732325&view=diff ============================================================================== --- commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/jar/JarArchiveInputStream.java (original) +++ commons/sandbox/compress/trunk/src/main/java/org/apache/commons/compress/archivers/jar/JarArchiveInputStream.java Wed Jan 7 05:16:01 2009 @@ -27,7 +27,7 @@ public class JarArchiveInputStream extends ZipArchiveInputStream { - public JarArchiveInputStream( final InputStream inputStream ) throws IOException { + public JarArchiveInputStream( final InputStream inputStream ) { super(inputStream); } 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=732325&r1=732324&r2=732325&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 Wed Jan 7 05:16:01 2009 @@ -18,98 +18,54 @@ */ package org.apache.commons.compress.compressors; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.Map; -import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; import org.apache.commons.compress.compressors.bzip2.BZip2CompressorOutputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; 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) + * + * TODO add example here + * + */ public class CompressorStreamFactory { - final Map inputStreamClasses = new HashMap(); - final Map outputStreamClasses = new HashMap(); - - public CompressorStreamFactory() throws CompressorException { - registerInputStream("gz", GzipCompressorInputStream.class); - registerOutputStream("gz", GzipCompressorOutputStream.class); - registerInputStream("bzip2", BZip2CompressorInputStream.class); - registerOutputStream("bzip2", BZip2CompressorOutputStream.class); + + 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; - } - - public void registerInputStream( final String name, final Class stream ) throws CompressorException { - if (CompressorInputStream.class.isAssignableFrom(stream) && !(stream.isInterface())) { - inputStreamClasses.put(name, stream); - } else { - throw new CompressorException("Compressor does not implement the CompressorInputStream interface."); - } - } - - public void registerOutputStream( final String name, final Class stream ) throws CompressorException { - if (CompressorOutputStream.class.isAssignableFrom(stream) && !(stream.isInterface())) { - outputStreamClasses.put(name, stream); - } else { - throw new CompressorException("Compressor does not implement the CompressorOutputStream interface."); - } - } - - public CompressorInputStream createCompressorInputStream( final String name, final InputStream out ) throws CompressorException { - try { - final Class clazz = (Class) inputStreamClasses.get(name); - - if (clazz == null) { - throw new CompressorException("CompressorFactory could not create instance"); - } - - final Class[] params = { InputStream.class }; - final Constructor constructor = clazz.getConstructor(params); - final Object[] initargs = { out }; - return (CompressorInputStream) constructor.newInstance(initargs); - } catch (InstantiationException e) { - throw new CompressorException("CompressorFactory could not create instance", e); - } catch (IllegalAccessException e) { - throw new CompressorException("CompressorFactory could not create instance", e); - } catch (SecurityException e) { - throw new CompressorException("CompressorFactory could not create instance", e); - } catch (NoSuchMethodException e) { - throw new CompressorException("CompressorFactory could not create instance", e); - } catch (IllegalArgumentException e) { - throw new CompressorException("CompressorFactory could not create instance", e); - } catch (InvocationTargetException e) { - throw new CompressorException("CompressorFactory could not create instance", e); - } + } catch (IOException e) { + throw new CompressorException("Could not create CompressorInputStream", e); + } } - public CompressorOutputStream createCompressorOutputStream( final String name, final OutputStream out ) throws ArchiveException { - try { - final Class clazz = (Class) outputStreamClasses.get(name); - - if (clazz == null) { - throw new ArchiveException("CompressorFactory could not create instance"); - } - - final Class[] params = { OutputStream.class }; - final Constructor constructor = clazz.getConstructor(params); - final Object[] initargs = { out }; - return (CompressorOutputStream) constructor.newInstance(initargs); - } catch (InstantiationException e) { - throw new ArchiveException("CompressorFactory could not create instance", e); - } catch (IllegalAccessException e) { - throw new ArchiveException("CompressorFactory could not create instance", e); - } catch (SecurityException e) { - throw new ArchiveException("CompressorFactory could not create instance", e); - } catch (NoSuchMethodException e) { - throw new ArchiveException("CompressorFactory could not create instance", e); - } catch (IllegalArgumentException e) { - throw new ArchiveException("CompressorFactory could not create instance", e); - } catch (InvocationTargetException e) { - throw new ArchiveException("CompressorFactory could not create instance", 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); + } } }