diff --git a/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderSpi.java b/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderSpi.java index 78c250f7..6310a9bf 100755 --- a/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderSpi.java +++ b/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderSpi.java @@ -39,6 +39,7 @@ import java.io.IOException; import java.util.Locale; import static com.twelvemonkeys.imageio.plugins.svg.SVGProviderInfo.SVG_READER_AVAILABLE; +import static com.twelvemonkeys.imageio.util.IIOUtil.*; /** * SVGImageReaderSpi @@ -175,7 +176,7 @@ public final class SVGImageReaderSpi extends ImageReaderSpiBase { t.printStackTrace(); } - IIOUtil.deregisterProvider(registry, this, category); + deregisterProvider(registry, this, category); } } } diff --git a/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/wmf/WMFImageReader.java b/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/wmf/WMFImageReader.java index 5391a2a1..1e78a57e 100755 --- a/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/wmf/WMFImageReader.java +++ b/imageio/imageio-batik/src/main/java/com/twelvemonkeys/imageio/plugins/wmf/WMFImageReader.java @@ -55,7 +55,7 @@ import java.util.Iterator; */ // TODO: Probably possible to do less wrapping/unwrapping of data... // TODO: Consider using temp file instead of in-memory stream -public class WMFImageReader extends ImageReaderBase { +public final class WMFImageReader extends ImageReaderBase { private SVGImageReader reader = null; diff --git a/imageio/imageio-bmp/src/main/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReaderSpi.java b/imageio/imageio-bmp/src/main/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReaderSpi.java index 5645fd1d..1731f518 100755 --- a/imageio/imageio-bmp/src/main/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReaderSpi.java +++ b/imageio/imageio-bmp/src/main/java/com/twelvemonkeys/imageio/plugins/bmp/BMPImageReaderSpi.java @@ -29,6 +29,7 @@ package com.twelvemonkeys.imageio.plugins.bmp; import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase; +import com.twelvemonkeys.imageio.util.IIOUtil; import javax.imageio.ImageReader; import javax.imageio.spi.ImageReaderSpi; @@ -37,9 +38,10 @@ import javax.imageio.stream.ImageInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import java.util.Iterator; import java.util.Locale; +import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName; + /** * BMPImageReaderSpi * @@ -51,24 +53,10 @@ public final class BMPImageReaderSpi extends ImageReaderSpiBase { super(new BMPProviderInfo()); } - static ImageReaderSpi lookupDefaultProvider(final ServiceRegistry registry) { - Iterator providers = registry.getServiceProviders(ImageReaderSpi.class, true); - - while (providers.hasNext()) { - ImageReaderSpi provider = providers.next(); - - if (provider.getClass().getName().equals("com.sun.imageio.plugins.bmp.BMPImageReaderSpi")) { - return provider; - } - } - - return null; - } - @SuppressWarnings("unchecked") @Override public void onRegistration(final ServiceRegistry registry, final Class category) { - ImageReaderSpi defaultProvider = lookupDefaultProvider(registry); + ImageReaderSpi defaultProvider = lookupProviderByName(registry, "com.sun.imageio.plugins.bmp.BMPImageReaderSpi"); if (defaultProvider != null) { // Order before com.sun provider, to aid ImageIO in selecting our reader diff --git a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java index 28311c8e..87af5906 100755 --- a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java +++ b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/util/IIOUtil.java @@ -28,7 +28,6 @@ package com.twelvemonkeys.imageio.util; import com.twelvemonkeys.image.ImageUtil; -import com.twelvemonkeys.imageio.spi.ProviderInfo; import javax.imageio.IIOParam; import javax.imageio.ImageIO; @@ -155,28 +154,32 @@ public final class IIOUtil { } /** - * Creates a {@link ProviderInfo} instance for the given service provider. + * THIS METHOD WILL ME MOVED/RENAMED, DO NOT USE. * - * @param pProviderClass the provider class to get info for. - * @return the newly created {@link ProviderInfo}. + * @param registry the registry to unregister from. + * @param provider the provider to unregister. + * @param category the category to unregister from. */ - public static ProviderInfo getProviderInfo(final Class pProviderClass) { - return new ProviderInfo(pProviderClass.getPackage()); + public static void deregisterProvider(final ServiceRegistry registry, final IIOServiceProvider provider, final Class category) { + // http://www.ibm.com/developerworks/java/library/j-jtp04298.html + registry.deregisterServiceProvider(category.cast(provider), category); } /** * THIS METHOD WILL ME MOVED/RENAMED, DO NOT USE. * - * @param pRegistry the registry to unregister from - * @param pProvider the provider to unregister - * @param pCategory the category to unregister from + * @param registry the registry to lookup from. + * @param providerClassName name of the provider class. * - * @deprecated + * @return the provider instance, or {@code null}. */ - public static void deregisterProvider(final ServiceRegistry pRegistry, final IIOServiceProvider pProvider, final Class pCategory) { - // http://www.ibm.com/developerworks/java/library/j-jtp04298.html - // TODO: Consider placing this method in a ImageReaderSpiBase class or similar - pRegistry.deregisterServiceProvider(pCategory.cast(pProvider), pCategory); + public static T lookupProviderByName(final ServiceRegistry registry, final String providerClassName) { + try { + return (T) registry.getServiceProviderByClass(Class.forName(providerClassName)); + } + catch (ClassNotFoundException ignore) { + return null; + } } /** @@ -202,7 +205,7 @@ public final class IIOUtil { } private static String[] normalizeNames(final String[] names) { - SortedSet normalizedNames = new TreeSet(); + SortedSet normalizedNames = new TreeSet<>(); for (String name : names) { normalizedNames.add(name.toUpperCase()); diff --git a/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageReaderSpi.java b/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageReaderSpi.java index 1d23b91a..d2d445d1 100755 --- a/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageReaderSpi.java +++ b/imageio/imageio-iff/src/main/java/com/twelvemonkeys/imageio/plugins/iff/IFFImageReaderSpi.java @@ -42,7 +42,7 @@ import java.util.Locale; * @author Harald Kuhr * @version $Id: IFFImageWriterSpi.java,v 1.0 28.feb.2006 19:21:05 haku Exp$ */ -public class IFFImageReaderSpi extends ImageReaderSpiBase { +public final class IFFImageReaderSpi extends ImageReaderSpiBase { /** * Creates an {@code IFFImageReaderSpi}. diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java index 867373f4..5cf4ed9b 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java @@ -98,7 +98,7 @@ import java.util.List; * @author last modified by $Author: haraldk$ * @version $Id: JPEGImageReader.java,v 1.0 24.01.11 16.37 haraldk Exp$ */ -public class JPEGImageReader extends ImageReaderBase { +public final class JPEGImageReader extends ImageReaderBase { // TODO: Allow automatic rotation based on EXIF rotation field? // TODO: Create a simplified native metadata format that is closer to the actual JPEG stream AND supports EXIF in a sensible way // TODO: As we already parse the SOF segments, maybe we should stop delegating getWidth/getHeight etc? diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderSpi.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderSpi.java index adf926e5..dd189430 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderSpi.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderSpi.java @@ -41,6 +41,8 @@ import java.io.IOException; import java.util.Iterator; import java.util.Locale; +import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName; + /** * JPEGImageReaderSpi * @@ -48,7 +50,7 @@ import java.util.Locale; * @author last modified by $Author: haraldk$ * @version $Id: JPEGImageReaderSpi.java,v 1.0 24.01.11 22.12 haraldk Exp$ */ -public class JPEGImageReaderSpi extends ImageReaderSpiBase { +public final class JPEGImageReaderSpi extends ImageReaderSpiBase { protected ImageReaderSpi delegateProvider; /** @@ -64,41 +66,22 @@ public class JPEGImageReaderSpi extends ImageReaderSpiBase { * * @param delegateProvider a {@code ImageReaderSpi} that can read JPEG. */ - protected JPEGImageReaderSpi(final ImageReaderSpi delegateProvider) { + JPEGImageReaderSpi(final ImageReaderSpi delegateProvider) { this(); this.delegateProvider = Validate.notNull(delegateProvider); } - /** - * Constructor for subclasses. - * - * @param info - */ - protected JPEGImageReaderSpi(final ReaderWriterProviderInfo info) { + private JPEGImageReaderSpi(final ReaderWriterProviderInfo info) { super(info); } - static ImageReaderSpi lookupDelegateProvider(final ServiceRegistry registry) { - Iterator providers = registry.getServiceProviders(ImageReaderSpi.class, true); - - while (providers.hasNext()) { - ImageReaderSpi provider = providers.next(); - - if (provider.getClass().getName().equals("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi")) { - return provider; - } - } - - return null; - } - @SuppressWarnings({"unchecked", "deprecation"}) @Override public void onRegistration(final ServiceRegistry registry, final Class category) { if (delegateProvider == null) { // Install delegate now - delegateProvider = lookupDelegateProvider(registry); + delegateProvider = lookupProviderByName(registry, "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"); } if (delegateProvider != null) { diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriter.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriter.java index 65363996..0455616c 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriter.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriter.java @@ -52,7 +52,7 @@ import java.util.Locale; * @author last modified by $Author: haraldk$ * @version $Id: JPEGImageWriter.java,v 1.0 06.02.12 16:39 haraldk Exp$ */ -public class JPEGImageWriter extends ImageWriterBase { +public final class JPEGImageWriter extends ImageWriterBase { // TODO: Extend with functionality to be able to write CMYK JPEGs as well? /** Our JPEG writing delegate */ diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterSpi.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterSpi.java index 40fb7bea..8e0fd2c8 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterSpi.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterSpi.java @@ -42,6 +42,8 @@ import java.io.IOException; import java.util.Iterator; import java.util.Locale; +import static com.twelvemonkeys.imageio.util.IIOUtil.*; + /** * JPEGImageWriterSpi * @@ -70,27 +72,13 @@ public class JPEGImageWriterSpi extends ImageWriterSpiBase { this.delegateProvider = Validate.notNull(delegateProvider); } - - static ImageWriterSpi lookupDelegateProvider(final ServiceRegistry registry) { - Iterator providers = registry.getServiceProviders(ImageWriterSpi.class, true); - - while (providers.hasNext()) { - ImageWriterSpi provider = providers.next(); - - if (provider.getClass().getName().equals("com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi")) { - return provider; - } - } - - return null; - } @SuppressWarnings({"unchecked"}) @Override public void onRegistration(final ServiceRegistry registry, final Class category) { if (delegateProvider == null) { // Install delegate now - delegateProvider = lookupDelegateProvider(registry); + delegateProvider = lookupProviderByName(registry, "com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi"); } if (delegateProvider != null) { @@ -99,7 +87,7 @@ public class JPEGImageWriterSpi extends ImageWriterSpiBase { } else { // Or, if no delegate is found, silently deregister from the registry - IIOUtil.deregisterProvider(registry, this, category); + deregisterProvider(registry, this, category); } } diff --git a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImage10MetadataCleanerTest.java b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImage10MetadataCleanerTest.java index 00145da9..a8a5a227 100644 --- a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImage10MetadataCleanerTest.java +++ b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImage10MetadataCleanerTest.java @@ -15,6 +15,7 @@ import javax.imageio.stream.ImageInputStream; import java.util.Arrays; import java.util.List; +import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -32,10 +33,10 @@ public class JPEGImage10MetadataCleanerTest { ImageIO.setUseCache(false); } - protected static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider()); + private static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider()); - protected static ImageReaderSpi lookupDelegateProvider() { - return JPEGImageReaderSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance()); + private static ImageReaderSpi lookupDelegateProvider() { + return lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"); } // Unit/regression test for #276 diff --git a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java index b9b6b984..c502d5a2 100644 --- a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java +++ b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderTest.java @@ -58,6 +58,7 @@ import java.io.IOException; import java.util.*; import java.util.List; +import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName; import static org.junit.Assert.*; import static org.junit.Assume.assumeNoException; import static org.junit.Assume.assumeNotNull; @@ -74,10 +75,10 @@ import static org.mockito.Mockito.*; */ public class JPEGImageReaderTest extends ImageReaderAbstractTest { - protected static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider()); + private static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider()); - protected static ImageReaderSpi lookupDelegateProvider() { - return JPEGImageReaderSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance()); + private static ImageReaderSpi lookupDelegateProvider() { + return lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"); } @Override diff --git a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterTest.java b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterTest.java index 0fbe8bc0..e73de3c1 100644 --- a/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterTest.java +++ b/imageio/imageio-jpeg/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterTest.java @@ -28,6 +28,7 @@ package com.twelvemonkeys.imageio.plugins.jpeg; +import com.twelvemonkeys.imageio.util.IIOUtil; import com.twelvemonkeys.imageio.util.ImageWriterAbstractTestCase; import javax.imageio.ImageWriter; @@ -51,7 +52,7 @@ public class JPEGImageWriterTest extends ImageWriterAbstractTestCase { private static final JPEGImageWriterSpi SPI = new JPEGImageWriterSpi(lookupDelegateProvider()); private static ImageWriterSpi lookupDelegateProvider() { - return JPEGImageWriterSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance()); + return IIOUtil.lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi"); } @Override diff --git a/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java b/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java index c954ff47..fbad50c6 100644 --- a/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java +++ b/imageio/imageio-pict/src/main/java/com/twelvemonkeys/imageio/plugins/pict/PICTImageReader.java @@ -102,7 +102,7 @@ import java.util.List; * @todo Some MAJOR clean up * @todo As we now have Graphics2D with more options, support more of the format? */ -public class PICTImageReader extends ImageReaderBase { +public final class PICTImageReader extends ImageReaderBase { final static boolean DEBUG = "true".equalsIgnoreCase(System.getProperty("com.twelvemonkeys.imageio.plugins.pict.debug")); diff --git a/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTest.java b/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTest.java index c81f3464..8915c943 100644 --- a/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTest.java +++ b/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/JPEGImageReaderTest.java @@ -15,6 +15,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName; import static org.junit.Assume.assumeNoException; /** @@ -27,18 +28,7 @@ import static org.junit.Assume.assumeNoException; public class JPEGImageReaderTest extends ImageReaderAbstractTest { private static final boolean IS_JAVA_6_OR_LATER = SystemUtil.isClassAvailable("java.util.Deque"); - protected final ImageReaderSpi provider = lookupSpi(); - - private ImageReaderSpi lookupSpi() { - try { - return (ImageReaderSpi) IIORegistry.getDefaultInstance().getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi")); - } - catch (ClassNotFoundException e) { - assumeNoException(e); - } - - return null; - } + private final ImageReaderSpi provider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"); @Override protected List getTestData() { diff --git a/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/PNGImageReaderTest.java b/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/PNGImageReaderTest.java index d41fff6b..1664d4ec 100644 --- a/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/PNGImageReaderTest.java +++ b/imageio/imageio-reference/src/test/java/com/twelvemonkeys/imageio/reference/PNGImageReaderTest.java @@ -1,5 +1,6 @@ package com.twelvemonkeys.imageio.reference; +import com.twelvemonkeys.imageio.util.IIOUtil; import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest; import org.junit.Test; @@ -23,18 +24,7 @@ import static org.junit.Assume.assumeNoException; * @version $Id: PNGImageReaderTest.java,v 1.0 Oct 9, 2009 3:37:25 PM haraldk Exp$ */ public class PNGImageReaderTest extends ImageReaderAbstractTest { - protected final ImageReaderSpi provider = lookupSpi(); - - private ImageReaderSpi lookupSpi() { - try { - return (ImageReaderSpi) IIORegistry.getDefaultInstance().getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.png.PNGImageReaderSpi")); - } - catch (ClassNotFoundException e) { - assumeNoException(e); - } - - return null; - } + private final ImageReaderSpi provider = IIOUtil.lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.png.PNGImageReaderSpi"); @Override protected List getTestData() { diff --git a/imageio/imageio-thumbsdb/src/main/java/com/twelvemonkeys/imageio/plugins/thumbsdb/ThumbsDBImageReaderSpi.java b/imageio/imageio-thumbsdb/src/main/java/com/twelvemonkeys/imageio/plugins/thumbsdb/ThumbsDBImageReaderSpi.java index 18256774..06a3495b 100755 --- a/imageio/imageio-thumbsdb/src/main/java/com/twelvemonkeys/imageio/plugins/thumbsdb/ThumbsDBImageReaderSpi.java +++ b/imageio/imageio-thumbsdb/src/main/java/com/twelvemonkeys/imageio/plugins/thumbsdb/ThumbsDBImageReaderSpi.java @@ -29,6 +29,7 @@ package com.twelvemonkeys.imageio.plugins.thumbsdb; import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase; +import com.twelvemonkeys.imageio.util.IIOUtil; import com.twelvemonkeys.io.ole2.CompoundDocument; import javax.imageio.ImageReader; @@ -40,6 +41,8 @@ import java.io.IOException; import java.util.Iterator; import java.util.Locale; +import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName; + /** * ThumbsDBImageReaderSpi *

@@ -75,32 +78,21 @@ public final class ThumbsDBImageReaderSpi extends ImageReaderSpiBase { private void maybeInitJPEGProvider() { // NOTE: Can't do this from constructor, as ImageIO itself is not initialized yet, // and the lookup below will produce a NPE.. - - // TODO: A better approach... - // - Could have a list with known working JPEG decoders? - // - System property? - // - Class path lookup of properties file with reader? - // This way we could deregister immediately - if (jpegProvider == null) { - ImageReaderSpi provider = null; - try { - Iterator providers = getJPEGProviders(); + // Prefer the one we know + ImageReaderSpi provider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"); - while (providers.hasNext()) { - provider = providers.next(); - - // Prefer the one we know - if ("Sun Microsystems, Inc.".equals(provider.getVendorName())) { - break; - } + if (provider == null) { + try { + provider = getJPEGProviders().next(); + } + catch (Exception ignore) { + // It's pretty safe to assume there's always a JPEG reader out there + // In any case, we deregister the provider if there isn't one + IIORegistry.getDefaultInstance().deregisterServiceProvider(this, ImageReaderSpi.class); } } - catch (Exception ignore) { - // It's pretty safe to assume there's always a JPEG reader out there - // In any case, we deregister the provider if there isn't one - IIORegistry.getDefaultInstance().deregisterServiceProvider(this, ImageReaderSpi.class); - } + jpegProvider = provider; } } diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java index 068fd319..009918ba 100755 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java @@ -79,6 +79,9 @@ import java.util.*; import java.util.zip.Inflater; import java.util.zip.InflaterInputStream; +import static com.twelvemonkeys.imageio.util.IIOUtil.*; +import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName; + /** * ImageReader implementation for Aldus/Adobe Tagged Image File Format (TIFF). *

@@ -116,7 +119,7 @@ import java.util.zip.InflaterInputStream; * @author last modified by $Author: haraldk$ * @version $Id: TIFFImageReader.java,v 1.0 08.05.12 15:14 haraldk Exp$ */ -public class TIFFImageReader extends ImageReaderBase { +public final class TIFFImageReader extends ImageReaderBase { // TODOs ImageIO basic functionality: // TODO: Thumbnail support @@ -909,8 +912,8 @@ public class TIFFImageReader extends ImageReaderBase { } else { InputStream adapter = stripTileByteCounts != null - ? IIOUtil.createStreamAdapter(imageInput, stripTileByteCounts[i]) - : IIOUtil.createStreamAdapter(imageInput); + ? createStreamAdapter(imageInput, stripTileByteCounts[i]) + : createStreamAdapter(imageInput); adapter = createDecompressorStream(compression, stripTileWidth, numBands, adapter); adapter = createUnpredictorStream(predictor, stripTileWidth, numBands, getBitsPerSample(), adapter, imageInput.getByteOrder()); @@ -1247,7 +1250,7 @@ public class TIFFImageReader extends ImageReaderBase { try (ImageInputStream stream = ImageIO.createImageInputStream(new SequenceInputStream(Collections.enumeration( Arrays.asList( createJFIFStream(destRaster.getNumBands(), stripTileWidth, stripTileHeight, qTables, dcTables, acTables), - IIOUtil.createStreamAdapter(imageInput, stripTileByteCounts != null + createStreamAdapter(imageInput, stripTileByteCounts != null ? (int) stripTileByteCounts[i] : Short.MAX_VALUE), new ByteArrayInputStream(new byte[] {(byte) 0xff, (byte) 0xd9}) // EOI @@ -1361,19 +1364,18 @@ public class TIFFImageReader extends ImageReaderBase { return false; } - private ImageReader createJPEGDelegate() throws IIOException { + private ImageReader createJPEGDelegate() throws IOException { // TIFF is strictly ISO JPEG, so we should probably stick to the standard reader - try { - @SuppressWarnings("unchecked") - Class readerClass = (Class) Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageReader"); - Constructor constructor = readerClass.getConstructor(ImageReaderSpi.class); - return constructor.newInstance(getOriginatingProvider()); + ImageReaderSpi jpegProvider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"); + + if (jpegProvider != null) { + return jpegProvider.createReaderInstance(); } - catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException ignore) { - if (DEBUG) { - ignore.printStackTrace(); - } - // Fall back to default reader below + + // Fall back to default reader below + if (DEBUG) { + System.err.println("Could not create " + "com.sun.imageio.plugins.jpeg.JPEGImageReader" + + ", falling back to default JPEG capable ImageReader"); } // If we can't get the standard reader, fall back to the default (first) reader @@ -2286,15 +2288,10 @@ public class TIFFImageReader extends ImageReaderBase { private static void deregisterOSXTIFFImageReaderSpi() { IIORegistry registry = IIORegistry.getDefaultInstance(); - Iterator providers = registry.getServiceProviders(ImageReaderSpi.class, new ServiceRegistry.Filter() { - public boolean filter(Object provider) { - return provider.getClass().getName().equals("com.sun.imageio.plugins.tiff.TIFFImageReaderSpi"); - } - }, false); + ImageReaderSpi provider = lookupProviderByName(registry, "com.sun.imageio.plugins.tiff.TIFFImageReaderSpi"); - while (providers.hasNext()) { - ImageReaderSpi next = providers.next(); - registry.deregisterServiceProvider(next); + if (provider != null) { + registry.deregisterServiceProvider(provider); } } } diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderSpi.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderSpi.java index 989f1166..9e96e70f 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderSpi.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReaderSpi.java @@ -45,7 +45,7 @@ import java.util.Locale; * @author last modified by $Author: haraldk$ * @version $Id: TIFFImageReaderSpi.java,v 1.0 08.05.12 15:14 haraldk Exp$ */ -public class TIFFImageReaderSpi extends ImageReaderSpiBase { +public final class TIFFImageReaderSpi extends ImageReaderSpiBase { /** * Creates a {@code TIFFImageReaderSpi}. */ diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriter.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriter.java index 68e21163..5b66933b 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriter.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriter.java @@ -99,7 +99,7 @@ public final class TIFFImageWriter extends ImageWriterBase { // Use sensible defaults for compression based on input? None is sensible... :-) // Support resolution, resolution unit and software tags from ImageIO metadata - public static final Rational STANDARD_DPI = new Rational(72); + private static final Rational STANDARD_DPI = new Rational(72); /** * Flag for active sequence writing