commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: Fwd: svn commit: r1617904 - /commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/xz/XZUtils.java
Date Mon, 18 Aug 2014 00:49:38 GMT
On 17 August 2014 13:33, Gary Gregory <garydgregory@gmail.com> wrote:
> Seems to me we should use an enumerated instead of related constants.
>
> Any reason why not?

At present the code uses an AtomicInteger to hold the setting.
This would need to be changed.

I suspect just using a volatile enum would be sufficient as enums are
thread-safe so it is just necessary to ensure safe publication.
Alternatively, could use an AtomicReference.

> Gary
>
> <div>-------- Original message --------</div><div>From: bodewig@apache.org
</div><div>Date:08/14/2014  05:46  (GMT-05:00) </div><div>To: commits@commons.apache.org
</div><div>Subject: svn commit: r1617904 -
>   /commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/xz/XZUtils.java
</div><div>
> </div>Author: bodewig
> Date: Thu Aug 14 09:46:17 2014
> New Revision: 1617904
>
> URL: http://svn.apache.org/r1617904
> Log:
> COMPRESS-285 optionally cache whether XZ for Java is available
>
> Modified:
>     commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/xz/XZUtils.java
>
> Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/xz/XZUtils.java
> URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/xz/XZUtils.java?rev=1617904&r1=1617903&r2=1617904&view=diff
> ==============================================================================
> --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/xz/XZUtils.java
(original)
> +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/compressors/xz/XZUtils.java
Thu Aug 14 09:46:17 2014
> @@ -20,6 +20,7 @@ package org.apache.commons.compress.comp
>
> import java.util.HashMap;
> import java.util.Map;
> +import java.util.concurrent.atomic.AtomicInteger;
> import org.apache.commons.compress.compressors.FileNameUtil;
>
> /**
> @@ -30,6 +31,7 @@ import org.apache.commons.compress.compr
> public class XZUtils {
>
>      private static final FileNameUtil fileNameUtil;
> +
>      /**
>       * XZ Header Magic Bytes begin a XZ file.
>       *
> @@ -40,12 +42,24 @@ public class XZUtils {
>          (byte) 0xFD, '7', 'z', 'X', 'Z', '\0'
>      };
>
> +    private static final int DONT_CACHE = 2;
> +    private static final int CACHED_AVAILABLE = 1;
> +    private static final int CACHED_UNAVAILABLE = 0;
> +
> +    private static final AtomicInteger cachedXZAvailability;
> +
>      static {
>          Map<String, String> uncompressSuffix = new HashMap<String, String>();
>          uncompressSuffix.put(".txz", ".tar");
>          uncompressSuffix.put(".xz", "");
>          uncompressSuffix.put("-xz", "");
>          fileNameUtil = new FileNameUtil(uncompressSuffix, ".xz");
> +        cachedXZAvailability = new AtomicInteger(DONT_CACHE);
> +        try {
> +            Class.forName("org.osgi.framework.BundleEvent");
> +        } catch (Exception ex) {
> +            setCacheXZAvailablity(true);
> +        }
>      }
>
>      /** Private constructor to prevent instantiation of this utility class. */
> @@ -83,6 +97,14 @@ public class XZUtils {
>       * @since 1.5
>       */
>      public static boolean isXZCompressionAvailable() {
> +        final int cachedResult = cachedXZAvailability.get();
> +        if (cachedResult != DONT_CACHE) {
> +            return cachedResult == CACHED_AVAILABLE;
> +        }
> +        return internalIsXZCompressionAvailable();
> +    }
> +
> +    private static boolean internalIsXZCompressionAvailable() {
>          try {
>              XZCompressorInputStream.matches(null, 0);
>              return true;
> @@ -134,4 +156,19 @@ public class XZUtils {
>          return fileNameUtil.getCompressedFilename(filename);
>      }
>
> +    /**
> +     * Whether to cache the result of the XZ for Java check.
> +     *
> +     * <p>This defaults to {@code false} in an OSGi environment and {@code true}
otherwise.</p>
> +     * @param doCache whether to cache the result
> +     * @since 1.9
> +     */
> +    public static void setCacheXZAvailablity(boolean doCache) {
> +        if (!doCache) {
> +            cachedXZAvailability.set(DONT_CACHE);
> +        } else if (cachedXZAvailability.get() == DONT_CACHE) {
> +            final boolean hasXz = internalIsXZCompressionAvailable();
> +            cachedXZAvailability.set(hasXz ? CACHED_AVAILABLE : CACHED_UNAVAILABLE);
> +        }
> +    }
> }
>
>

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


Mime
View raw message