You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2012/07/07 21:34:12 UTC

svn commit: r1358626 - in /commons/proper/compress/trunk/src: changes/changes.xml main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java

Author: bodewig
Date: Sat Jul  7 19:34:11 2012
New Revision: 1358626

URL: http://svn.apache.org/viewvc?rev=1358626&view=rev
Log:
COMPRESS-192 add an encoding option to ArchiveStreamFactory for zip and tar.  Based on patch by Jukka Zitting

Modified:
    commons/proper/compress/trunk/src/changes/changes.xml
    commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
    commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java

Modified: commons/proper/compress/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/changes/changes.xml?rev=1358626&r1=1358625&r2=1358626&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/changes/changes.xml (original)
+++ commons/proper/compress/trunk/src/changes/changes.xml Sat Jul  7 19:34:11 2012
@@ -44,6 +44,11 @@ The <action> type attribute can be add,u
   <body>
     <release version="1.5" date="not released, yet"
              description="Release 1.5">
+      <action type="update" date="2012-07-07" issue="COMPRESS-192"
+              due-to="Jukka Zitting">
+        ArchiveStreamFactory has a setting for file name encoding that
+        sets up encoding for ZIP and TAR streams.
+      </action>
       <action type="fix" date="2012-07-07" issue="COMPRESS-191"
               due-to="Jukka Zitting">
         ArchiveStreamFactory's tar stream detection created false

Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java?rev=1358626&r1=1358625&r2=1358626&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java Sat Jul  7 19:34:11 2012
@@ -105,6 +105,33 @@ public class ArchiveStreamFactory {
     public static final String ZIP = "zip";
 
     /**
+     * Entry encoding, null for the default.
+     */
+    private String entryEncoding = null;
+
+    /**
+     * Returns the encoding to use for zip and tar files, or null for
+     * the default.
+     *
+     * @return entry encoding, or null
+     * @since 1.5
+     */
+    public String getEntryEncoding() {
+        return entryEncoding;
+    }
+
+    /**
+     * Sets the encoding to use for zip and tar files. Use null for
+     * the default.
+     *
+     * @return entryEncoding entry encoding, or null
+     * @since 1.5
+     */
+    public void setEntryEncoding(String entryEncoding) {
+        this.entryEncoding = entryEncoding;
+    }
+
+    /**
      * Create an archive input stream from an archiver name and an input stream.
      * 
      * @param archiverName the archive name, i.e. "ar", "zip", "tar", "jar", "dump" or "cpio"
@@ -129,10 +156,18 @@ public class ArchiveStreamFactory {
             return new ArArchiveInputStream(in);
         }
         if (ZIP.equalsIgnoreCase(archiverName)) {
-            return new ZipArchiveInputStream(in);
+            if (entryEncoding != null) {
+                return new ZipArchiveInputStream(in, entryEncoding);
+            } else {
+                return new ZipArchiveInputStream(in);
+            }
         }
         if (TAR.equalsIgnoreCase(archiverName)) {
-            return new TarArchiveInputStream(in);
+            if (entryEncoding != null) {
+                return new TarArchiveInputStream(in, entryEncoding);
+            } else {
+                return new TarArchiveInputStream(in);
+            }
         }
         if (JAR.equalsIgnoreCase(archiverName)) {
             return new JarArchiveInputStream(in);
@@ -170,10 +205,18 @@ public class ArchiveStreamFactory {
             return new ArArchiveOutputStream(out);
         }
         if (ZIP.equalsIgnoreCase(archiverName)) {
-            return new ZipArchiveOutputStream(out);
+            ZipArchiveOutputStream zip = new ZipArchiveOutputStream(out);
+            if (entryEncoding != null) {
+                zip.setEncoding(entryEncoding);
+            }
+            return zip;
         }
         if (TAR.equalsIgnoreCase(archiverName)) {
-            return new TarArchiveOutputStream(out);
+            if (entryEncoding != null) {
+                return new TarArchiveOutputStream(out, entryEncoding);
+            } else {
+                return new TarArchiveOutputStream(out);
+            }
         }
         if (JAR.equalsIgnoreCase(archiverName)) {
             return new JarArchiveOutputStream(out);
@@ -210,7 +253,11 @@ public class ArchiveStreamFactory {
             int signatureLength = in.read(signature);
             in.reset();
             if (ZipArchiveInputStream.matches(signature, signatureLength)) {
-                return new ZipArchiveInputStream(in);
+                if (entryEncoding != null) {
+                    return new ZipArchiveInputStream(in, entryEncoding);
+                } else {
+                    return new ZipArchiveInputStream(in);
+                }
             } else if (JarArchiveInputStream.matches(signature, signatureLength)) {
                 return new JarArchiveInputStream(in);
             } else if (ArArchiveInputStream.matches(signature, signatureLength)) {
@@ -234,7 +281,11 @@ public class ArchiveStreamFactory {
             signatureLength = in.read(tarheader);
             in.reset();
             if (TarArchiveInputStream.matches(tarheader, signatureLength)) {
-                return new TarArchiveInputStream(in);
+                if (entryEncoding != null) {
+                    return new TarArchiveInputStream(in, entryEncoding);
+                } else {
+                    return new TarArchiveInputStream(in);
+                }
             }
             // COMPRESS-117 - improve auto-recognition
             if (signatureLength >= 512) {
@@ -257,4 +308,5 @@ public class ArchiveStreamFactory {
 
         throw new ArchiveException("No Archiver found for the stream signature");
     }
+
 }

Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java?rev=1358626&r1=1358625&r2=1358626&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java (original)
+++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java Sat Jul  7 19:34:11 2012
@@ -129,7 +129,16 @@ public class ZipArchiveInputStream exten
     private static final long TWO_EXP_32 = ZIP64_MAGIC + 1;
 
     public ZipArchiveInputStream(InputStream inputStream) {
-        this(inputStream, ZipEncodingHelper.UTF8, true);
+        this(inputStream, ZipEncodingHelper.UTF8);
+    }
+
+    /**
+     * @param encoding the encoding to use for file names, use null
+     * for the platform's default encoding
+     * @since 1.5
+     */
+    public ZipArchiveInputStream(InputStream inputStream, String encoding) {
+        this(inputStream, encoding, true);
     }
 
     /**



[compress] encoding parameter in ArchiveStreamFactory (was Re: svn commit: r1358626)

Posted by Stefan Bodewig <bo...@apache.org>.
On 2012-07-08, sebb wrote:

> On 7 July 2012 20:34,  <bo...@apache.org> wrote:
>> Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
>>+    private String entryEncoding = null;

> The class is currently tagged as:

> * @Immutable

> This breaks the contract.

> Can the field be made final?

If we make it a constructor arg rather than a property.

> Or turned into a parameter?

This is slightly less convenient, I'm on the fence here.  Jukka?

Stefan

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Re: svn commit: r1358626 - in /commons/proper/compress/trunk/src: changes/changes.xml main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java

Posted by sebb <se...@gmail.com>.
On 7 July 2012 20:34,  <bo...@apache.org> wrote:
> Author: bodewig
> Date: Sat Jul  7 19:34:11 2012
> New Revision: 1358626
>
> URL: http://svn.apache.org/viewvc?rev=1358626&view=rev
> Log:
> COMPRESS-192 add an encoding option to ArchiveStreamFactory for zip and tar.  Based on patch by Jukka Zitting
>
> Modified:
>     commons/proper/compress/trunk/src/changes/changes.xml
>     commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
>     commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
>
> Modified: commons/proper/compress/trunk/src/changes/changes.xml
> URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/changes/changes.xml?rev=1358626&r1=1358625&r2=1358626&view=diff
> ==============================================================================
> --- commons/proper/compress/trunk/src/changes/changes.xml (original)
> +++ commons/proper/compress/trunk/src/changes/changes.xml Sat Jul  7 19:34:11 2012
> @@ -44,6 +44,11 @@ The <action> type attribute can be add,u
>    <body>
>      <release version="1.5" date="not released, yet"
>               description="Release 1.5">
> +      <action type="update" date="2012-07-07" issue="COMPRESS-192"
> +              due-to="Jukka Zitting">
> +        ArchiveStreamFactory has a setting for file name encoding that
> +        sets up encoding for ZIP and TAR streams.
> +      </action>
>        <action type="fix" date="2012-07-07" issue="COMPRESS-191"
>                due-to="Jukka Zitting">
>          ArchiveStreamFactory's tar stream detection created false
>
> Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java
> URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java?rev=1358626&r1=1358625&r2=1358626&view=diff
> ==============================================================================
> --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java (original)
> +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.java Sat Jul  7 19:34:11 2012
> @@ -105,6 +105,33 @@ public class ArchiveStreamFactory {
>      public static final String ZIP = "zip";
>
>      /**
> +     * Entry encoding, null for the default.
> +     */
> +    private String entryEncoding = null;
> +

The class is currently tagged as:

* @Immutable

This breaks the contract.

Can the field be made final?
Or turned into a parameter?

> +    /**
> +     * Returns the encoding to use for zip and tar files, or null for
> +     * the default.
> +     *
> +     * @return entry encoding, or null
> +     * @since 1.5
> +     */
> +    public String getEntryEncoding() {
> +        return entryEncoding;
> +    }
> +
> +    /**
> +     * Sets the encoding to use for zip and tar files. Use null for
> +     * the default.
> +     *
> +     * @return entryEncoding entry encoding, or null
> +     * @since 1.5
> +     */
> +    public void setEntryEncoding(String entryEncoding) {
> +        this.entryEncoding = entryEncoding;
> +    }
> +
> +    /**
>       * Create an archive input stream from an archiver name and an input stream.
>       *
>       * @param archiverName the archive name, i.e. "ar", "zip", "tar", "jar", "dump" or "cpio"
> @@ -129,10 +156,18 @@ public class ArchiveStreamFactory {
>              return new ArArchiveInputStream(in);
>          }
>          if (ZIP.equalsIgnoreCase(archiverName)) {
> -            return new ZipArchiveInputStream(in);
> +            if (entryEncoding != null) {
> +                return new ZipArchiveInputStream(in, entryEncoding);
> +            } else {
> +                return new ZipArchiveInputStream(in);
> +            }
>          }
>          if (TAR.equalsIgnoreCase(archiverName)) {
> -            return new TarArchiveInputStream(in);
> +            if (entryEncoding != null) {
> +                return new TarArchiveInputStream(in, entryEncoding);
> +            } else {
> +                return new TarArchiveInputStream(in);
> +            }
>          }
>          if (JAR.equalsIgnoreCase(archiverName)) {
>              return new JarArchiveInputStream(in);
> @@ -170,10 +205,18 @@ public class ArchiveStreamFactory {
>              return new ArArchiveOutputStream(out);
>          }
>          if (ZIP.equalsIgnoreCase(archiverName)) {
> -            return new ZipArchiveOutputStream(out);
> +            ZipArchiveOutputStream zip = new ZipArchiveOutputStream(out);
> +            if (entryEncoding != null) {
> +                zip.setEncoding(entryEncoding);
> +            }
> +            return zip;
>          }
>          if (TAR.equalsIgnoreCase(archiverName)) {
> -            return new TarArchiveOutputStream(out);
> +            if (entryEncoding != null) {
> +                return new TarArchiveOutputStream(out, entryEncoding);
> +            } else {
> +                return new TarArchiveOutputStream(out);
> +            }
>          }
>          if (JAR.equalsIgnoreCase(archiverName)) {
>              return new JarArchiveOutputStream(out);
> @@ -210,7 +253,11 @@ public class ArchiveStreamFactory {
>              int signatureLength = in.read(signature);
>              in.reset();
>              if (ZipArchiveInputStream.matches(signature, signatureLength)) {
> -                return new ZipArchiveInputStream(in);
> +                if (entryEncoding != null) {
> +                    return new ZipArchiveInputStream(in, entryEncoding);
> +                } else {
> +                    return new ZipArchiveInputStream(in);
> +                }
>              } else if (JarArchiveInputStream.matches(signature, signatureLength)) {
>                  return new JarArchiveInputStream(in);
>              } else if (ArArchiveInputStream.matches(signature, signatureLength)) {
> @@ -234,7 +281,11 @@ public class ArchiveStreamFactory {
>              signatureLength = in.read(tarheader);
>              in.reset();
>              if (TarArchiveInputStream.matches(tarheader, signatureLength)) {
> -                return new TarArchiveInputStream(in);
> +                if (entryEncoding != null) {
> +                    return new TarArchiveInputStream(in, entryEncoding);
> +                } else {
> +                    return new TarArchiveInputStream(in);
> +                }
>              }
>              // COMPRESS-117 - improve auto-recognition
>              if (signatureLength >= 512) {
> @@ -257,4 +308,5 @@ public class ArchiveStreamFactory {
>
>          throw new ArchiveException("No Archiver found for the stream signature");
>      }
> +
>  }
>
> Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
> URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java?rev=1358626&r1=1358625&r2=1358626&view=diff
> ==============================================================================
> --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java (original)
> +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java Sat Jul  7 19:34:11 2012
> @@ -129,7 +129,16 @@ public class ZipArchiveInputStream exten
>      private static final long TWO_EXP_32 = ZIP64_MAGIC + 1;
>
>      public ZipArchiveInputStream(InputStream inputStream) {
> -        this(inputStream, ZipEncodingHelper.UTF8, true);
> +        this(inputStream, ZipEncodingHelper.UTF8);
> +    }
> +
> +    /**
> +     * @param encoding the encoding to use for file names, use null
> +     * for the platform's default encoding
> +     * @since 1.5
> +     */
> +    public ZipArchiveInputStream(InputStream inputStream, String encoding) {
> +        this(inputStream, encoding, true);
>      }
>
>      /**
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org