darkma773r commented on a change in pull request #116:
URL: https://github.com/apache/commons-imaging/pull/116#discussion_r671862277
##########
File path: src/main/java/org/apache/commons/imaging/ImageFormats.java
##########
@@ -16,40 +16,92 @@
*/
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;
+import org.apache.commons.imaging.formats.ico.IcoImagingParameters;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
+import org.apache.commons.imaging.formats.pcx.PcxImagingParameters;
+import org.apache.commons.imaging.formats.png.PngImagingParameters;
+import org.apache.commons.imaging.formats.pnm.PnmImagingParameters;
+import org.apache.commons.imaging.formats.psd.PsdImagingParameters;
+import org.apache.commons.imaging.formats.rgbe.RgbeImagingParameters;
+import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
+import org.apache.commons.imaging.formats.wbmp.WbmpImagingParameters;
+import org.apache.commons.imaging.formats.xbm.XbmImagingParameters;
+import org.apache.commons.imaging.formats.xpm.XpmImagingParameters;
+
/**
* Enum of known image formats.
*/
public enum ImageFormats implements ImageFormat {
- UNKNOWN,
- BMP,
- DCX,
- GIF,
- ICNS,
- ICO,
- JBIG2,
- JPEG,
- PAM,
- PSD,
- PBM,
- PGM,
- PNM,
- PPM,
- PCX,
- PNG,
- RGBE,
- TGA,
- TIFF,
- WBMP,
- XBM,
- XPM;
+ 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");
+
+ private static final Logger LOGGER =
Logger.getLogger(ImageFormats.class.getName());
+
+ private String[] extensions;
+ private Class<? extends ImagingParameters> parametersClass;
+
+ ImageFormats(Class<? extends ImagingParameters> parametersClass, String
...extensions) {
+ this.extensions = extensions;
+ this.parametersClass = parametersClass;
+ }
@Override
public String getName() {
return name();
}
@Override
- public String getExtension() {
- return name();
+ public String[] getExtensions() {
+ return this.extensions.clone();
+ }
+
+ @Override
+ public String getDefaultExtension() {
+ return this.extensions[0];
+ }
+
+ @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();
+ }
+ parameters.setImageFormat(this);
+ }
+ return parameters;
Review comment:
Woohoo! I learned this trick from Gilles and I pretty much use it all
the time now :-)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]