You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ki...@apache.org on 2022/01/16 02:03:14 UTC
[commons-imaging] 14/24: [IMAGING-159] Simplify how the ImageFormats enum creates parameters. Replace reflection by a supplier (thanks @darkma773r)
This is an automated email from the ASF dual-hosted git repository.
kinow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-imaging.git
commit ad72bb1166b4f6b42f973c1b9ba5753778ee4b20
Author: Bruno P. Kinoshita <ki...@apache.org>
AuthorDate: Sun Jul 18 22:25:44 2021 +1200
[IMAGING-159] Simplify how the ImageFormats enum creates parameters. Replace reflection by a supplier (thanks @darkma773r)
---
.../org/apache/commons/imaging/ImageFormats.java | 71 +++++++++-------------
1 file changed, 28 insertions(+), 43 deletions(-)
diff --git a/src/main/java/org/apache/commons/imaging/ImageFormats.java b/src/main/java/org/apache/commons/imaging/ImageFormats.java
index 7779f83..5153a86 100644
--- a/src/main/java/org/apache/commons/imaging/ImageFormats.java
+++ b/src/main/java/org/apache/commons/imaging/ImageFormats.java
@@ -16,11 +16,6 @@
*/
package org.apache.commons.imaging;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
import org.apache.commons.imaging.formats.bmp.BmpImagingParameters;
import org.apache.commons.imaging.formats.gif.GifImagingParameters;
import org.apache.commons.imaging.formats.icns.IcnsImagingParameters;
@@ -36,41 +31,42 @@ import org.apache.commons.imaging.formats.wbmp.WbmpImagingParameters;
import org.apache.commons.imaging.formats.xbm.XbmImagingParameters;
import org.apache.commons.imaging.formats.xpm.XpmImagingParameters;
+import java.util.function.Supplier;
+
/**
* Enum of known image formats.
*/
public enum ImageFormats implements ImageFormat {
- UNKNOWN(ImagingParameters.class),
- BMP(BmpImagingParameters.class, "bmp", "dib"),
- DCX(PcxImagingParameters.class, "dcx"),
- GIF(GifImagingParameters.class, "gif"),
- ICNS(IcnsImagingParameters.class, "icns"),
- ICO(IcoImagingParameters.class, "ico"),
- JBIG2(ImagingParameters.class),
- JPEG(JpegImagingParameters.class, "jpg", "jpeg"),
- PAM(PnmImagingParameters.class, "pam"),
- PSD(PsdImagingParameters.class, "psd"),
- PBM(PnmImagingParameters.class, "pbm"),
- PGM(PnmImagingParameters.class, "pgm"),
- PNM(PnmImagingParameters.class, "pnm"),
- PPM(PnmImagingParameters.class, "ppm"),
- PCX(PcxImagingParameters.class, "pcx", "pcc"),
- PNG(PngImagingParameters.class, "png"),
- RGBE(RgbeImagingParameters.class, "rgbe"),
- TGA(ImagingParameters.class),
- TIFF(TiffImagingParameters.class, "tif", "tiff"),
- WBMP(WbmpImagingParameters.class, "wbmp"),
- XBM(XbmImagingParameters.class, "xbm"),
- XPM(XpmImagingParameters.class, "xpm");
+ UNKNOWN(null),
+ BMP(BmpImagingParameters::new, "bmp", "dib"),
+ DCX(PcxImagingParameters::new, "dcx"),
+ GIF(GifImagingParameters::new, "gif"),
+ ICNS(IcnsImagingParameters::new, "icns"),
+ ICO(IcoImagingParameters::new, "ico"),
+ JBIG2(null),
+ JPEG(JpegImagingParameters::new, "jpg", "jpeg"),
+ PAM(PnmImagingParameters::new, "pam"),
+ PSD(PsdImagingParameters::new, "psd"),
+ PBM(PnmImagingParameters::new, "pbm"),
+ PGM(PnmImagingParameters::new, "pgm"),
+ PNM(PnmImagingParameters::new, "pnm"),
+ PPM(PnmImagingParameters::new, "ppm"),
+ PCX(PcxImagingParameters::new, "pcx", "pcc"),
+ PNG(PngImagingParameters::new, "png"),
+ RGBE(RgbeImagingParameters::new, "rgbe"),
+ TGA(null),
+ TIFF(TiffImagingParameters::new, "tif", "tiff"),
+ WBMP(WbmpImagingParameters::new, "wbmp"),
+ XBM(XbmImagingParameters::new, "xbm"),
+ XPM(XpmImagingParameters::new, "xpm");
- private static final Logger LOGGER = Logger.getLogger(ImageFormats.class.getName());
+ private final Supplier<? extends ImagingParameters> factory;
private final String[] extensions;
- private final Class<? extends ImagingParameters> parametersClass;
- ImageFormats(Class<? extends ImagingParameters> parametersClass, String ...extensions) {
+ ImageFormats(Supplier<? extends ImagingParameters> factory, String ...extensions) {
+ this.factory = factory;
this.extensions = extensions;
- this.parametersClass = parametersClass;
}
@Override
@@ -90,17 +86,6 @@ public enum ImageFormats implements ImageFormat {
@Override
public ImagingParameters createImagingParameters() {
- ImagingParameters parameters = null;
- if (this.parametersClass != null) {
- Constructor<?> ctor;
- try {
- ctor = this.parametersClass.getConstructor();
- parameters = (ImagingParameters) ctor.newInstance();
- } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
- LOGGER.log(Level.WARNING, "Failed to create imaging parameters: " + e.getMessage(), e);
- parameters = new ImagingParameters(this);
- }
- }
- return parameters;
+ return this.factory == null ? null : factory.get();
}
}