Skip to content

Commit

Permalink
#292 Preparing for Java 9 compatibility + general clean-up
Browse files Browse the repository at this point in the history
  • Loading branch information
haraldk committed Nov 15, 2016
1 parent 37e6d31 commit ab13084
Show file tree
Hide file tree
Showing 19 changed files with 89 additions and 154 deletions.
Expand Up @@ -39,6 +39,7 @@
import java.util.Locale;

import static com.twelvemonkeys.imageio.plugins.svg.SVGProviderInfo.SVG_READER_AVAILABLE;
import static com.twelvemonkeys.imageio.util.IIOUtil.*;

/**
* SVGImageReaderSpi
Expand Down Expand Up @@ -175,7 +176,7 @@ public void onRegistration(final ServiceRegistry registry, final Class<?> catego
t.printStackTrace();
}

IIOUtil.deregisterProvider(registry, this, category);
deregisterProvider(registry, this, category);
}
}
}
Expand Down
Expand Up @@ -55,7 +55,7 @@
*/
// 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;

Expand Down
Expand Up @@ -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;
Expand All @@ -37,9 +38,10 @@
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
*
Expand All @@ -51,24 +53,10 @@ public BMPImageReaderSpi() {
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")
@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
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -155,28 +154,32 @@ public static BufferedImage fakeAOI(final BufferedImage pImage, final Rectangle
}

/**
* 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<? extends IIOServiceProvider> pProviderClass) {
return new ProviderInfo(pProviderClass.getPackage());
public static <T> void deregisterProvider(final ServiceRegistry registry, final IIOServiceProvider provider, final Class<T> 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 <T> void deregisterProvider(final ServiceRegistry pRegistry, final IIOServiceProvider pProvider, final Class<T> 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> T lookupProviderByName(final ServiceRegistry registry, final String providerClassName) {
try {
return (T) registry.getServiceProviderByClass(Class.forName(providerClassName));
}
catch (ClassNotFoundException ignore) {
return null;
}
}

/**
Expand All @@ -202,7 +205,7 @@ public static String[] getNormalizedWriterFormatNames() {
}

private static String[] normalizeNames(final String[] names) {
SortedSet<String> normalizedNames = new TreeSet<String>();
SortedSet<String> normalizedNames = new TreeSet<>();

for (String name : names) {
normalizedNames.add(name.toUpperCase());
Expand Down
Expand Up @@ -42,7 +42,7 @@
* @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$
*/
public class IFFImageReaderSpi extends ImageReaderSpiBase {
public final class IFFImageReaderSpi extends ImageReaderSpiBase {

/**
* Creates an {@code IFFImageReaderSpi}.
Expand Down
Expand Up @@ -98,7 +98,7 @@
* @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?
Expand Down
Expand Up @@ -41,14 +41,16 @@
import java.util.Iterator;
import java.util.Locale;

import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;

/**
* JPEGImageReaderSpi
*
* @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a>
* @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;

/**
Expand All @@ -64,41 +66,22 @@ public JPEGImageReaderSpi() {
*
* @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<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"})
@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) {
Expand Down
Expand Up @@ -52,7 +52,7 @@
* @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 */
Expand Down
Expand Up @@ -42,6 +42,8 @@
import java.util.Iterator;
import java.util.Locale;

import static com.twelvemonkeys.imageio.util.IIOUtil.*;

/**
* JPEGImageWriterSpi
*
Expand Down Expand Up @@ -70,27 +72,13 @@ protected JPEGImageWriterSpi(final ImageWriterSpi 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"})
@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) {
Expand All @@ -99,7 +87,7 @@ public void onRegistration(final ServiceRegistry registry, final Class<?> catego
}
else {
// Or, if no delegate is found, silently deregister from the registry
IIOUtil.deregisterProvider(registry, this, category);
deregisterProvider(registry, this, category);
}
}

Expand Down
Expand Up @@ -15,6 +15,7 @@
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;

Expand All @@ -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
Expand Down
Expand Up @@ -58,6 +58,7 @@
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;
Expand All @@ -74,10 +75,10 @@
*/
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() {
return JPEGImageReaderSpi.lookupDelegateProvider(IIORegistry.getDefaultInstance());
private static ImageReaderSpi lookupDelegateProvider() {
return lookupProviderByName(IIORegistry.getDefaultInstance(), "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi");
}

@Override
Expand Down
Expand Up @@ -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;
Expand All @@ -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
Expand Down
Expand Up @@ -102,7 +102,7 @@
* @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"));

Expand Down
Expand Up @@ -15,6 +15,7 @@
import java.util.Collections;
import java.util.List;

import static com.twelvemonkeys.imageio.util.IIOUtil.lookupProviderByName;
import static org.junit.Assume.assumeNoException;

/**
Expand All @@ -27,18 +28,7 @@
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<TestData> getTestData() {
Expand Down
@@ -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;

Expand All @@ -23,18 +24,7 @@
* @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<TestData> getTestData() {
Expand Down

0 comments on commit ab13084

Please sign in to comment.