#292 Preparing for Java 9 compatibility + general clean-up

This commit is contained in:
Harald Kuhr 2016-11-15 21:40:59 +01:00
parent 37e6d31ed9
commit ab13084f44
19 changed files with 89 additions and 154 deletions

View File

@ -39,6 +39,7 @@ import java.io.IOException;
import java.util.Locale; import java.util.Locale;
import static com.twelvemonkeys.imageio.plugins.svg.SVGProviderInfo.SVG_READER_AVAILABLE; import static com.twelvemonkeys.imageio.plugins.svg.SVGProviderInfo.SVG_READER_AVAILABLE;
import static com.twelvemonkeys.imageio.util.IIOUtil.*;
/** /**
* SVGImageReaderSpi * SVGImageReaderSpi
@ -175,7 +176,7 @@ public final class SVGImageReaderSpi extends ImageReaderSpiBase {
t.printStackTrace(); t.printStackTrace();
} }
IIOUtil.deregisterProvider(registry, this, category); deregisterProvider(registry, this, category);
} }
} }
} }

View File

@ -55,7 +55,7 @@ import java.util.Iterator;
*/ */
// TODO: Probably possible to do less wrapping/unwrapping of data... // TODO: Probably possible to do less wrapping/unwrapping of data...
// TODO: Consider using temp file instead of in-memory stream // 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; private SVGImageReader reader = null;

View File

@ -29,6 +29,7 @@
package com.twelvemonkeys.imageio.plugins.bmp; package com.twelvemonkeys.imageio.plugins.bmp;
import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase; import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase;
import com.twelvemonkeys.imageio.util.IIOUtil;
import javax.imageio.ImageReader; import javax.imageio.ImageReader;
import javax.imageio.spi.ImageReaderSpi; import javax.imageio.spi.ImageReaderSpi;
@ -37,9 +38,10 @@ import javax.imageio.stream.ImageInputStream;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import java.util.Iterator;
import java.util.Locale; import java.util.Locale;
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
/** /**
* BMPImageReaderSpi * BMPImageReaderSpi
* *
@ -51,24 +53,10 @@ public final class BMPImageReaderSpi extends ImageReaderSpiBase {
super(new BMPProviderInfo()); super(new BMPProviderInfo());
} }
static ImageReaderSpi lookupDefaultProvider(final ServiceRegistry registry) {
Iterator<ImageReaderSpi> 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") @SuppressWarnings("unchecked")
@Override @Override
public void onRegistration(final ServiceRegistry registry, final Class<?> category) { 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) { if (defaultProvider != null) {
// Order before com.sun provider, to aid ImageIO in selecting our reader // Order before com.sun provider, to aid ImageIO in selecting our reader

View File

@ -28,7 +28,6 @@
package com.twelvemonkeys.imageio.util; package com.twelvemonkeys.imageio.util;
import com.twelvemonkeys.image.ImageUtil; import com.twelvemonkeys.image.ImageUtil;
import com.twelvemonkeys.imageio.spi.ProviderInfo;
import javax.imageio.IIOParam; import javax.imageio.IIOParam;
import javax.imageio.ImageIO; 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. * @param registry the registry to unregister from.
* @return the newly created {@link ProviderInfo}. * @param provider the provider to unregister.
* @param category the category to unregister from.
*/ */
public static ProviderInfo getProviderInfo(final Class<? extends IIOServiceProvider> pProviderClass) { public static <T> void deregisterProvider(final ServiceRegistry registry, final IIOServiceProvider provider, final Class<T> category) {
return new ProviderInfo(pProviderClass.getPackage()); // 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. * THIS METHOD WILL ME MOVED/RENAMED, DO NOT USE.
* *
* @param pRegistry the registry to unregister from * @param registry the registry to lookup from.
* @param pProvider the provider to unregister * @param providerClassName name of the provider class.
* @param pCategory the category to unregister from
* *
* @deprecated * @return the provider instance, or {@code null}.
*/ */
public static <T> void deregisterProvider(final ServiceRegistry pRegistry, final IIOServiceProvider pProvider, final Class<T> pCategory) { public static <T> T lookupProviderByName(final ServiceRegistry registry, final String providerClassName) {
// http://www.ibm.com/developerworks/java/library/j-jtp04298.html try {
// TODO: Consider placing this method in a ImageReaderSpiBase class or similar return (T) registry.getServiceProviderByClass(Class.forName(providerClassName));
pRegistry.deregisterServiceProvider(pCategory.cast(pProvider), pCategory); }
catch (ClassNotFoundException ignore) {
return null;
}
} }
/** /**
@ -202,7 +205,7 @@ public final class IIOUtil {
} }
private static String[] normalizeNames(final String[] names) { private static String[] normalizeNames(final String[] names) {
SortedSet<String> normalizedNames = new TreeSet<String>(); SortedSet<String> normalizedNames = new TreeSet<>();
for (String name : names) { for (String name : names) {
normalizedNames.add(name.toUpperCase()); normalizedNames.add(name.toUpperCase());

View File

@ -42,7 +42,7 @@ import java.util.Locale;
* @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a> * @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a>
* @version $Id: IFFImageWriterSpi.java,v 1.0 28.feb.2006 19:21:05 haku Exp$ * @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}. * Creates an {@code IFFImageReaderSpi}.

View File

@ -98,7 +98,7 @@ import java.util.List;
* @author last modified by $Author: haraldk$ * @author last modified by $Author: haraldk$
* @version $Id: JPEGImageReader.java,v 1.0 24.01.11 16.37 haraldk Exp$ * @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: 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: 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? // TODO: As we already parse the SOF segments, maybe we should stop delegating getWidth/getHeight etc?

View File

@ -41,6 +41,8 @@ import java.io.IOException;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale; import java.util.Locale;
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
/** /**
* JPEGImageReaderSpi * JPEGImageReaderSpi
* *
@ -48,7 +50,7 @@ import java.util.Locale;
* @author last modified by $Author: haraldk$ * @author last modified by $Author: haraldk$
* @version $Id: JPEGImageReaderSpi.java,v 1.0 24.01.11 22.12 haraldk Exp$ * @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; protected ImageReaderSpi delegateProvider;
/** /**
@ -64,41 +66,22 @@ public class JPEGImageReaderSpi extends ImageReaderSpiBase {
* *
* @param delegateProvider a {@code ImageReaderSpi} that can read JPEG. * @param delegateProvider a {@code ImageReaderSpi} that can read JPEG.
*/ */
protected JPEGImageReaderSpi(final ImageReaderSpi delegateProvider) { JPEGImageReaderSpi(final ImageReaderSpi delegateProvider) {
this(); this();
this.delegateProvider = Validate.notNull(delegateProvider); this.delegateProvider = Validate.notNull(delegateProvider);
} }
/** private JPEGImageReaderSpi(final ReaderWriterProviderInfo info) {
* Constructor for subclasses.
*
* @param info
*/
protected JPEGImageReaderSpi(final ReaderWriterProviderInfo info) {
super(info); super(info);
} }
static ImageReaderSpi lookupDelegateProvider(final ServiceRegistry registry) {
Iterator<ImageReaderSpi> 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"}) @SuppressWarnings({"unchecked", "deprecation"})
@Override @Override
public void onRegistration(final ServiceRegistry registry, final Class<?> category) { public void onRegistration(final ServiceRegistry registry, final Class<?> category) {
if (delegateProvider == null) { if (delegateProvider == null) {
// Install delegate now // Install delegate now
delegateProvider = lookupDelegateProvider(registry); delegateProvider = lookupProviderByName(registry, "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
} }
if (delegateProvider != null) { if (delegateProvider != null) {

View File

@ -52,7 +52,7 @@ import java.util.Locale;
* @author last modified by $Author: haraldk$ * @author last modified by $Author: haraldk$
* @version $Id: JPEGImageWriter.java,v 1.0 06.02.12 16:39 haraldk Exp$ * @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? // TODO: Extend with functionality to be able to write CMYK JPEGs as well?
/** Our JPEG writing delegate */ /** Our JPEG writing delegate */

View File

@ -42,6 +42,8 @@ import java.io.IOException;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale; import java.util.Locale;
import static com.twelvemonkeys.imageio.util.IIOUtil.*;
/** /**
* JPEGImageWriterSpi * JPEGImageWriterSpi
* *
@ -70,27 +72,13 @@ public class JPEGImageWriterSpi extends ImageWriterSpiBase {
this.delegateProvider = Validate.notNull(delegateProvider); this.delegateProvider = Validate.notNull(delegateProvider);
} }
static ImageWriterSpi lookupDelegateProvider(final ServiceRegistry registry) {
Iterator<ImageWriterSpi> 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"}) @SuppressWarnings({"unchecked"})
@Override @Override
public void onRegistration(final ServiceRegistry registry, final Class<?> category) { public void onRegistration(final ServiceRegistry registry, final Class<?> category) {
if (delegateProvider == null) { if (delegateProvider == null) {
// Install delegate now // Install delegate now
delegateProvider = lookupDelegateProvider(registry); delegateProvider = lookupProviderByName(registry, "com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi");
} }
if (delegateProvider != null) { if (delegateProvider != null) {
@ -99,7 +87,7 @@ public class JPEGImageWriterSpi extends ImageWriterSpiBase {
} }
else { else {
// Or, if no delegate is found, silently deregister from the registry // Or, if no delegate is found, silently deregister from the registry
IIOUtil.deregisterProvider(registry, this, category); deregisterProvider(registry, this, category);
} }
} }

View File

@ -15,6 +15,7 @@ import javax.imageio.stream.ImageInputStream;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
@ -32,10 +33,10 @@ public class JPEGImage10MetadataCleanerTest {
ImageIO.setUseCache(false); ImageIO.setUseCache(false);
} }
protected static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider()); private static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider());
protected static ImageReaderSpi lookupDelegateProvider() { private static ImageReaderSpi lookupDelegateProvider() {
return JPEGImageReaderSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance()); return lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
} }
// Unit/regression test for #276 // Unit/regression test for #276

View File

@ -58,6 +58,7 @@ import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.List; import java.util.List;
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import static org.junit.Assume.assumeNoException; import static org.junit.Assume.assumeNoException;
import static org.junit.Assume.assumeNotNull; import static org.junit.Assume.assumeNotNull;
@ -74,10 +75,10 @@ import static org.mockito.Mockito.*;
*/ */
public class JPEGImageReaderTest extends ImageReaderAbstractTest<JPEGImageReader> { public class JPEGImageReaderTest extends ImageReaderAbstractTest<JPEGImageReader> {
protected static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider()); private static final JPEGImageReaderSpi SPI = new JPEGImageReaderSpi(lookupDelegateProvider());
protected static ImageReaderSpi lookupDelegateProvider() { private static ImageReaderSpi lookupDelegateProvider() {
return JPEGImageReaderSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance()); return lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
} }
@Override @Override

View File

@ -28,6 +28,7 @@
package com.twelvemonkeys.imageio.plugins.jpeg; package com.twelvemonkeys.imageio.plugins.jpeg;
import com.twelvemonkeys.imageio.util.IIOUtil;
import com.twelvemonkeys.imageio.util.ImageWriterAbstractTestCase; import com.twelvemonkeys.imageio.util.ImageWriterAbstractTestCase;
import javax.imageio.ImageWriter; import javax.imageio.ImageWriter;
@ -51,7 +52,7 @@ public class JPEGImageWriterTest extends ImageWriterAbstractTestCase {
private static final JPEGImageWriterSpi SPI = new JPEGImageWriterSpi(lookupDelegateProvider()); private static final JPEGImageWriterSpi SPI = new JPEGImageWriterSpi(lookupDelegateProvider());
private static ImageWriterSpi lookupDelegateProvider() { private static ImageWriterSpi lookupDelegateProvider() {
return JPEGImageWriterSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance()); return IIOUtil.lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi");
} }
@Override @Override

View File

@ -102,7 +102,7 @@ import java.util.List;
* @todo Some MAJOR clean up * @todo Some MAJOR clean up
* @todo As we now have Graphics2D with more options, support more of the format? * @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")); final static boolean DEBUG = "true".equalsIgnoreCase(System.getProperty("com.twelvemonkeys.imageio.plugins.pict.debug"));

View File

@ -15,6 +15,7 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
import static org.junit.Assume.assumeNoException; import static org.junit.Assume.assumeNoException;
/** /**
@ -27,18 +28,7 @@ import static org.junit.Assume.assumeNoException;
public class JPEGImageReaderTest extends ImageReaderAbstractTest { public class JPEGImageReaderTest extends ImageReaderAbstractTest {
private static final boolean IS_JAVA_6_OR_LATER = SystemUtil.isClassAvailable("java.util.Deque"); private static final boolean IS_JAVA_6_OR_LATER = SystemUtil.isClassAvailable("java.util.Deque");
protected final ImageReaderSpi provider = lookupSpi(); private final ImageReaderSpi provider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
private ImageReaderSpi lookupSpi() {
try {
return (ImageReaderSpi) IIORegistry.getDefaultInstance().getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"));
}
catch (ClassNotFoundException e) {
assumeNoException(e);
}
return null;
}
@Override @Override
protected List<TestData> getTestData() { protected List<TestData> getTestData() {

View File

@ -1,5 +1,6 @@
package com.twelvemonkeys.imageio.reference; package com.twelvemonkeys.imageio.reference;
import com.twelvemonkeys.imageio.util.IIOUtil;
import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest; import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest;
import org.junit.Test; 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$ * @version $Id: PNGImageReaderTest.java,v 1.0 Oct 9, 2009 3:37:25 PM haraldk Exp$
*/ */
public class PNGImageReaderTest extends ImageReaderAbstractTest { public class PNGImageReaderTest extends ImageReaderAbstractTest {
protected final ImageReaderSpi provider = lookupSpi(); private final ImageReaderSpi provider = IIOUtil.lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.png.PNGImageReaderSpi");
private ImageReaderSpi lookupSpi() {
try {
return (ImageReaderSpi) IIORegistry.getDefaultInstance().getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.png.PNGImageReaderSpi"));
}
catch (ClassNotFoundException e) {
assumeNoException(e);
}
return null;
}
@Override @Override
protected List<TestData> getTestData() { protected List<TestData> getTestData() {

View File

@ -29,6 +29,7 @@
package com.twelvemonkeys.imageio.plugins.thumbsdb; package com.twelvemonkeys.imageio.plugins.thumbsdb;
import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase; import com.twelvemonkeys.imageio.spi.ImageReaderSpiBase;
import com.twelvemonkeys.imageio.util.IIOUtil;
import com.twelvemonkeys.io.ole2.CompoundDocument; import com.twelvemonkeys.io.ole2.CompoundDocument;
import javax.imageio.ImageReader; import javax.imageio.ImageReader;
@ -40,6 +41,8 @@ import java.io.IOException;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale; import java.util.Locale;
import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
/** /**
* ThumbsDBImageReaderSpi * ThumbsDBImageReaderSpi
* <p/> * <p/>
@ -75,32 +78,21 @@ public final class ThumbsDBImageReaderSpi extends ImageReaderSpiBase {
private void maybeInitJPEGProvider() { private void maybeInitJPEGProvider() {
// NOTE: Can't do this from constructor, as ImageIO itself is not initialized yet, // NOTE: Can't do this from constructor, as ImageIO itself is not initialized yet,
// and the lookup below will produce a NPE.. // 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) { if (jpegProvider == null) {
ImageReaderSpi provider = null; // Prefer the one we know
try { ImageReaderSpi provider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
Iterator<ImageReaderSpi> providers = getJPEGProviders();
while (providers.hasNext()) { if (provider == null) {
provider = providers.next(); try {
provider = getJPEGProviders().next();
// Prefer the one we know }
if ("Sun Microsystems, Inc.".equals(provider.getVendorName())) { catch (Exception ignore) {
break; // 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; jpegProvider = provider;
} }
} }

View File

@ -79,6 +79,9 @@ import java.util.*;
import java.util.zip.Inflater; import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream; 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). * ImageReader implementation for Aldus/Adobe Tagged Image File Format (TIFF).
* <p/> * <p/>
@ -116,7 +119,7 @@ import java.util.zip.InflaterInputStream;
* @author last modified by $Author: haraldk$ * @author last modified by $Author: haraldk$
* @version $Id: TIFFImageReader.java,v 1.0 08.05.12 15:14 haraldk Exp$ * @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: // TODOs ImageIO basic functionality:
// TODO: Thumbnail support // TODO: Thumbnail support
@ -909,8 +912,8 @@ public class TIFFImageReader extends ImageReaderBase {
} }
else { else {
InputStream adapter = stripTileByteCounts != null InputStream adapter = stripTileByteCounts != null
? IIOUtil.createStreamAdapter(imageInput, stripTileByteCounts[i]) ? createStreamAdapter(imageInput, stripTileByteCounts[i])
: IIOUtil.createStreamAdapter(imageInput); : createStreamAdapter(imageInput);
adapter = createDecompressorStream(compression, stripTileWidth, numBands, adapter); adapter = createDecompressorStream(compression, stripTileWidth, numBands, adapter);
adapter = createUnpredictorStream(predictor, stripTileWidth, numBands, getBitsPerSample(), adapter, imageInput.getByteOrder()); 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( try (ImageInputStream stream = ImageIO.createImageInputStream(new SequenceInputStream(Collections.enumeration(
Arrays.asList( Arrays.asList(
createJFIFStream(destRaster.getNumBands(), stripTileWidth, stripTileHeight, qTables, dcTables, acTables), createJFIFStream(destRaster.getNumBands(), stripTileWidth, stripTileHeight, qTables, dcTables, acTables),
IIOUtil.createStreamAdapter(imageInput, stripTileByteCounts != null createStreamAdapter(imageInput, stripTileByteCounts != null
? (int) stripTileByteCounts[i] ? (int) stripTileByteCounts[i]
: Short.MAX_VALUE), : Short.MAX_VALUE),
new ByteArrayInputStream(new byte[] {(byte) 0xff, (byte) 0xd9}) // EOI new ByteArrayInputStream(new byte[] {(byte) 0xff, (byte) 0xd9}) // EOI
@ -1361,19 +1364,18 @@ public class TIFFImageReader extends ImageReaderBase {
return false; 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 // TIFF is strictly ISO JPEG, so we should probably stick to the standard reader
try { ImageReaderSpi jpegProvider = lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
@SuppressWarnings("unchecked")
Class<ImageReader> readerClass = (Class<ImageReader>) Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageReader"); if (jpegProvider != null) {
Constructor<ImageReader> constructor = readerClass.getConstructor(ImageReaderSpi.class); return jpegProvider.createReaderInstance();
return constructor.newInstance(getOriginatingProvider());
} }
catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException ignore) {
if (DEBUG) { // Fall back to default reader below
ignore.printStackTrace(); if (DEBUG) {
} System.err.println("Could not create " + "com.sun.imageio.plugins.jpeg.JPEGImageReader"
// Fall back to default reader below + ", falling back to default JPEG capable ImageReader");
} }
// If we can't get the standard reader, fall back to the default (first) reader // 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() { private static void deregisterOSXTIFFImageReaderSpi() {
IIORegistry registry = IIORegistry.getDefaultInstance(); IIORegistry registry = IIORegistry.getDefaultInstance();
Iterator<ImageReaderSpi> providers = registry.getServiceProviders(ImageReaderSpi.class, new ServiceRegistry.Filter() { ImageReaderSpi provider = lookupProviderByName(registry, "com.sun.imageio.plugins.tiff.TIFFImageReaderSpi");
public boolean filter(Object provider) {
return provider.getClass().getName().equals("com.sun.imageio.plugins.tiff.TIFFImageReaderSpi");
}
}, false);
while (providers.hasNext()) { if (provider != null) {
ImageReaderSpi next = providers.next(); registry.deregisterServiceProvider(provider);
registry.deregisterServiceProvider(next);
} }
} }
} }

View File

@ -45,7 +45,7 @@ import java.util.Locale;
* @author last modified by $Author: haraldk$ * @author last modified by $Author: haraldk$
* @version $Id: TIFFImageReaderSpi.java,v 1.0 08.05.12 15:14 haraldk Exp$ * @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}. * Creates a {@code TIFFImageReaderSpi}.
*/ */

View File

@ -99,7 +99,7 @@ public final class TIFFImageWriter extends ImageWriterBase {
// Use sensible defaults for compression based on input? None is sensible... :-) // Use sensible defaults for compression based on input? None is sensible... :-)
// Support resolution, resolution unit and software tags from ImageIO metadata // 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 * Flag for active sequence writing