You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2015/02/16 00:09:26 UTC

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

Author: sebb
Date: Sun Feb 15 23:09:26 2015
New Revision: 1660005

URL: http://svn.apache.org/r1660005
Log:
COMPRESS-302 Restore immutability/thread-safety to ArchiveStreamFactory.

Modified:
    commons/proper/compress/trunk/src/changes/changes.xml
    commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/ArchiveStreamFactory.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=1660005&r1=1660004&r2=1660005&view=diff
==============================================================================
--- commons/proper/compress/trunk/src/changes/changes.xml (original)
+++ commons/proper/compress/trunk/src/changes/changes.xml Sun Feb 15 23:09:26 2015
@@ -54,6 +54,11 @@ breaks backwards compatibility for code
 This also changes the superclass of ZCompressorInputStream.    
 ">
 
+      <action issue="COMPRESS-302" type="fix">
+        Restore immutability/thread-safety to ArchiveStreamFactory.
+        The class is now immutable provided that the method setEntryEncoding is not used.
+        The class is thread-safe.
+      </action>
       <action issue="COMPRESS-303" type="fix">
         Restore immutability/thread-safety to CompressorStreamFactory.
         The class is now immutable provided that the method setDecompressConcatenated is not used.

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=1660005&r1=1660004&r2=1660005&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 Sun Feb 15 23:09:26 2015
@@ -71,7 +71,7 @@ import org.apache.commons.compress.utils
  * out.close();
  * in.close();
  * </pre>
- * 
+ * @Immutable provided that the deprecated method setEntryEncoding is not used.
  */
 public class ArchiveStreamFactory {
 
@@ -119,9 +119,35 @@ public class ArchiveStreamFactory {
     public static final String SEVEN_Z = "7z";
 
     /**
+     * Entry encoding, null for the platform default.
+     */
+    private final String encoding;
+
+    /**
      * Entry encoding, null for the default.
      */
-    private String entryEncoding = null;
+    private volatile String entryEncoding = null;
+
+    /**
+     * Create an instance using the platform default encoding.
+     */
+    public ArchiveStreamFactory() {
+        this(null);
+    }
+
+    /**
+     * Create an instance using the specified encoding.
+     *
+     * @param encoding the encoding to be used.
+     *
+     * @since 1.10
+     */
+    public ArchiveStreamFactory(String encoding) {
+        super();
+        this.encoding = encoding;
+        // Also set the original field so can continue to use it.
+        this.entryEncoding = encoding;
+    }
 
     /**
      * Returns the encoding to use for arj, zip, dump, cpio and tar
@@ -139,8 +165,16 @@ public class ArchiveStreamFactory {
      * 
      * @param entryEncoding the entry encoding, null uses the default.
      * @since 1.5
+     * @deprecated 1.10 use {@link #ArchiveStreamFactory(String)} to specify the encoding
+     * @throws IllegalStateException if the constructor {@link #ArchiveStreamFactory(String)} 
+     * was used to specify the factory encoding.
      */
+    @Deprecated
     public void setEntryEncoding(String entryEncoding) {
+        // Note: this does not detect new ArchiveStreamFactory(null) but that does not set the encoding anyway
+        if (encoding != null) {
+            throw new IllegalStateException("Cannot overide encoding set by the constructor");
+        }
         this.entryEncoding = entryEncoding;
     }