On 17 August 2014 13:33, Gary Gregory <garydgreg...@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: bode...@apache.org > </div><div>Date:08/14/2014 05:46 (GMT-05:00) </div><div>To: > comm...@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-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org