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:12 UTC

[commons-imaging] 12/24: [IMAGING-159] @darkma773r feedback, making the image format of a parameter instance immutable

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 4785f108f15e6e71dda0781557ba4170c466b05d
Author: Bruno P. Kinoshita <ki...@apache.org>
AuthorDate: Sat Jul 17 17:30:50 2021 +1200

    [IMAGING-159] @darkma773r feedback, making the image format of a parameter instance immutable
---
 .../org/apache/commons/imaging/ImageFormats.java   |  3 +--
 .../java/org/apache/commons/imaging/Imaging.java   |  2 +-
 .../apache/commons/imaging/ImagingParameters.java  | 29 +++++++++++-----------
 .../imaging/common/XmpImagingParameters.java       |  5 ++++
 .../imaging/formats/bmp/BmpImagingParameters.java  |  2 +-
 .../imaging/formats/gif/GifImagingParameters.java  |  2 +-
 .../formats/icns/IcnsImagingParameters.java        |  2 +-
 .../imaging/formats/ico/IcoImagingParameters.java  |  2 +-
 .../formats/jpeg/JpegImagingParameters.java        |  2 +-
 .../formats/jpeg/iptc/JpegIptcRewriter.java        |  4 +--
 .../imaging/formats/pcx/PcxImagingParameters.java  |  2 +-
 .../imaging/formats/png/PngImagingParameters.java  |  2 +-
 .../imaging/formats/pnm/PnmImagingParameters.java  |  2 +-
 .../imaging/formats/psd/PsdImagingParameters.java  |  2 +-
 .../formats/rgbe/RgbeImagingParameters.java        |  2 +-
 .../formats/tiff/TiffImagingParameters.java        |  7 +++++-
 .../formats/wbmp/WbmpImagingParameters.java        |  2 +-
 .../imaging/formats/xbm/XbmImagingParameters.java  |  2 +-
 .../imaging/formats/xpm/XpmImagingParameters.java  |  2 +-
 .../commons/imaging/examples/ImageReadExample.java | 19 ++++++--------
 .../imaging/roundtrip/PixelDensityRoundtrip.java   | 17 ++++++-------
 .../commons/imaging/roundtrip/RoundtripBase.java   |  1 -
 22 files changed, 58 insertions(+), 55 deletions(-)

diff --git a/src/main/java/org/apache/commons/imaging/ImageFormats.java b/src/main/java/org/apache/commons/imaging/ImageFormats.java
index 2e10101..c3d200d 100644
--- a/src/main/java/org/apache/commons/imaging/ImageFormats.java
+++ b/src/main/java/org/apache/commons/imaging/ImageFormats.java
@@ -98,9 +98,8 @@ public enum ImageFormats implements ImageFormat {
                 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 = new ImagingParameters(this);
             }
-            parameters.setImageFormat(this);
         }
         return parameters;
     }
diff --git a/src/main/java/org/apache/commons/imaging/Imaging.java b/src/main/java/org/apache/commons/imaging/Imaging.java
index 5f0bb05..1ae01a5 100644
--- a/src/main/java/org/apache/commons/imaging/Imaging.java
+++ b/src/main/java/org/apache/commons/imaging/Imaging.java
@@ -957,7 +957,7 @@ public final class Imaging {
      */
     public static String getXmpXml(final File file) throws ImageReadException,
             IOException {
-        return getXmpXml(file, new XmpImagingParameters());
+        return getXmpXml(file, new XmpImagingParameters(Imaging.guessFormat(file)));
     }
 
     /**
diff --git a/src/main/java/org/apache/commons/imaging/ImagingParameters.java b/src/main/java/org/apache/commons/imaging/ImagingParameters.java
index 93e41d1..c3c130e 100644
--- a/src/main/java/org/apache/commons/imaging/ImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/ImagingParameters.java
@@ -29,6 +29,17 @@ import org.apache.commons.imaging.common.BufferedImageFactory;
 public class ImagingParameters {
 
     /**
+     * Image format used in write operations to indicate desired image format.
+     * Default is {@code null}.
+     *
+     * <p>Valid values: Any format defined in ImageFormat, such as
+     * ImageFormat.IMAGE_FORMAT_PNG.</p>
+     *
+     * @see org.apache.commons.imaging.ImageFormats
+     */
+    private final ImageFormat imageFormat;
+
+    /**
      * Whether to throw an exception when any issue occurs during reading
      * or writing a file format. Default is {@code false}.
      */
@@ -47,17 +58,6 @@ public class ImagingParameters {
     private BufferedImageFactory bufferedImageFactory = null;
 
     /**
-     * Image format used in write operations to indicate desired image format.
-     * Default is {@code null}.
-     *
-     * <p>Valid values: Any format defined in ImageFormat, such as
-     * ImageFormat.IMAGE_FORMAT_PNG.</p>
-     *
-     * @see org.apache.commons.imaging.ImageFormats
-     */
-    private ImageFormat imageFormat;
-
-    /**
      * <p>Parameter key. Used in write operations to indicate the desired pixel
      * density (DPI), and/or aspect ratio.</p>
      */
@@ -93,10 +93,6 @@ public class ImagingParameters {
         return imageFormat;
     }
 
-    public void setImageFormat(ImageFormat imageFormat) {
-        this.imageFormat = imageFormat;
-    }
-
     public PixelDensity getPixelDensity() {
         return pixelDensity;
     }
@@ -105,4 +101,7 @@ public class ImagingParameters {
         this.pixelDensity = pixelDensity;
     }
 
+    protected ImagingParameters(final ImageFormat imageFormat) {
+        this.imageFormat = imageFormat;
+    }
 }
diff --git a/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java b/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java
index 3352274..597d5d4 100644
--- a/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java
@@ -17,6 +17,7 @@
 
 package org.apache.commons.imaging.common;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImagingParameters;
 
 /**
@@ -25,6 +26,10 @@ import org.apache.commons.imaging.ImagingParameters;
  */
 public class XmpImagingParameters extends ImagingParameters {
 
+    public XmpImagingParameters(ImageFormat imageFormat) {
+        super(imageFormat);
+    }
+
     private String xmpXml;
 
     public String getXmpXml() {
diff --git a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java
index cf19e8e..9a523df 100644
--- a/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/bmp/BmpImagingParameters.java
@@ -27,6 +27,6 @@ import org.apache.commons.imaging.ImagingParameters;
 public class BmpImagingParameters extends ImagingParameters {
 
     public BmpImagingParameters() {
-        setImageFormat(ImageFormats.BMP);
+        super(ImageFormats.BMP);
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java
index fa8007c..68bfdab 100644
--- a/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/gif/GifImagingParameters.java
@@ -27,6 +27,6 @@ import org.apache.commons.imaging.common.XmpImagingParameters;
 public class GifImagingParameters extends XmpImagingParameters {
 
     public GifImagingParameters() {
-        setImageFormat(ImageFormats.GIF);
+        super(ImageFormats.GIF);
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java
index 1d83839..568c030 100644
--- a/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/icns/IcnsImagingParameters.java
@@ -25,6 +25,6 @@ import org.apache.commons.imaging.ImagingParameters;
 public class IcnsImagingParameters extends ImagingParameters {
 
     public IcnsImagingParameters() {
-        setImageFormat(ImageFormats.ICNS);
+        super(ImageFormats.ICNS);
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java
index ed86d9c..4c9bebc 100644
--- a/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/ico/IcoImagingParameters.java
@@ -25,6 +25,6 @@ import org.apache.commons.imaging.ImagingParameters;
 public class IcoImagingParameters extends ImagingParameters {
 
     public IcoImagingParameters () {
-        setImageFormat(ImageFormats.ICO);
+        super(ImageFormats.ICO);
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java
index fff58f3..549aa61 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/JpegImagingParameters.java
@@ -25,6 +25,6 @@ import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
 public class JpegImagingParameters extends TiffImagingParameters {
 
     public JpegImagingParameters() {
-        setImageFormat(ImageFormats.JPEG);
+        super(ImageFormats.JPEG);
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/jpeg/iptc/JpegIptcRewriter.java b/src/main/java/org/apache/commons/imaging/formats/jpeg/iptc/JpegIptcRewriter.java
index f5639d9..90703a9 100644
--- a/src/main/java/org/apache/commons/imaging/formats/jpeg/iptc/JpegIptcRewriter.java
+++ b/src/main/java/org/apache/commons/imaging/formats/jpeg/iptc/JpegIptcRewriter.java
@@ -27,12 +27,12 @@ import java.util.List;
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.ImageWriteException;
 import org.apache.commons.imaging.ImagingConstants;
-import org.apache.commons.imaging.ImagingParameters;
 import org.apache.commons.imaging.common.bytesource.ByteSource;
 import org.apache.commons.imaging.common.bytesource.ByteSourceArray;
 import org.apache.commons.imaging.common.bytesource.ByteSourceFile;
 import org.apache.commons.imaging.common.bytesource.ByteSourceInputStream;
 import org.apache.commons.imaging.formats.jpeg.JpegConstants;
+import org.apache.commons.imaging.formats.jpeg.JpegImagingParameters;
 import org.apache.commons.imaging.formats.jpeg.xmp.JpegRewriter;
 
 /**
@@ -233,7 +233,7 @@ public class JpegIptcRewriter extends JpegRewriter {
         final List<JFIFPiece> newPieces = removePhotoshopApp13Segments(oldPieces);
         if (!removeSegment && photoshopApp13Segments.size() == 1) {
             final JFIFPieceSegment oldSegment = (JFIFPieceSegment) photoshopApp13Segments.get(0);
-            final ImagingParameters params = new ImagingParameters();
+            final JpegImagingParameters params = new JpegImagingParameters();
             final PhotoshopApp13Data oldData = new IptcParser().parsePhotoshopSegment(oldSegment.getSegmentData(), params);
             final List<IptcBlock> newBlocks = oldData.getNonIptcBlocks();
             final List<IptcRecord> newRecords = new ArrayList<>();
diff --git a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java
index ed19523..76f8bc5 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pcx/PcxImagingParameters.java
@@ -29,7 +29,7 @@ public class PcxImagingParameters extends ImagingParameters {
     private int compression = PcxConstants.PCX_COMPRESSION_UNCOMPRESSED;
 
     public PcxImagingParameters() {
-        setImageFormat(ImageFormats.PCX);
+        super(ImageFormats.PCX);
     }
 
     public int getPlanes() {
diff --git a/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java
index 88ac49b..f267813 100644
--- a/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/png/PngImagingParameters.java
@@ -55,7 +55,7 @@ public class PngImagingParameters extends XmpImagingParameters {
     private List<? extends PngText> textChunks = null;
 
     public PngImagingParameters() {
-        setImageFormat(ImageFormats.PNG);
+        super(ImageFormats.PNG);
     }
 
     public byte getBitDepth() {
diff --git a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java
index 927855e..2b06526 100644
--- a/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/pnm/PnmImagingParameters.java
@@ -32,7 +32,7 @@ public class PnmImagingParameters extends ImagingParameters {
     private ImageFormats subtype = null;
 
     public PnmImagingParameters() {
-        setImageFormat(ImageFormats.PNM);
+        super(ImageFormats.PNM);
     }
 
     public boolean isRawBits() {
diff --git a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java
index 761892a..3ba9306 100644
--- a/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/psd/PsdImagingParameters.java
@@ -27,6 +27,6 @@ import org.apache.commons.imaging.ImagingParameters;
 public class PsdImagingParameters extends ImagingParameters {
 
     public PsdImagingParameters() {
-        setImageFormat(ImageFormats.PSD);
+        super(ImageFormats.PSD);
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java
index 3575820..c40ed47 100644
--- a/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/rgbe/RgbeImagingParameters.java
@@ -25,6 +25,6 @@ import org.apache.commons.imaging.ImagingParameters;
 public class RgbeImagingParameters extends ImagingParameters {
 
     public RgbeImagingParameters() {
-        setImageFormat(ImageFormats.RGBE);
+        super(ImageFormats.RGBE);
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java
index 4c13726..e0ecb1a 100644
--- a/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/tiff/TiffImagingParameters.java
@@ -15,6 +15,7 @@
 
 package org.apache.commons.imaging.formats.tiff;
 
+import org.apache.commons.imaging.ImageFormat;
 import org.apache.commons.imaging.ImageFormats;
 import org.apache.commons.imaging.common.XmpImagingParameters;
 import org.apache.commons.imaging.formats.tiff.photometricinterpreters.PhotometricInterpreter;
@@ -100,7 +101,11 @@ public class TiffImagingParameters extends XmpImagingParameters {
     private Integer t6Options = null;
 
     public TiffImagingParameters() {
-        setImageFormat(ImageFormats.TIFF);
+        super(ImageFormats.TIFF);
+    }
+
+    public TiffImagingParameters(ImageFormat imageFormat) {
+        super(imageFormat);
     }
 
     public boolean isReadThumbnails() {
diff --git a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java
index d48c463..4876028 100644
--- a/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/wbmp/WbmpImagingParameters.java
@@ -25,6 +25,6 @@ import org.apache.commons.imaging.ImagingParameters;
 public class WbmpImagingParameters extends ImagingParameters {
 
     public WbmpImagingParameters() {
-        setImageFormat(ImageFormats.WBMP);
+        super(ImageFormats.WBMP);
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java
index dd96268..7128b3c 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xbm/XbmImagingParameters.java
@@ -25,6 +25,6 @@ import org.apache.commons.imaging.ImagingParameters;
 public class XbmImagingParameters extends ImagingParameters {
 
     public XbmImagingParameters() {
-        setImageFormat(ImageFormats.XBM);
+        super(ImageFormats.XBM);
     }
 }
diff --git a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java
index f47c83c..6f4ed4c 100644
--- a/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/formats/xpm/XpmImagingParameters.java
@@ -24,7 +24,7 @@ import org.apache.commons.imaging.ImagingParameters;
 public class XpmImagingParameters extends ImagingParameters {
 
     public XpmImagingParameters() {
-        setImageFormat(ImageFormats.XPM);
+        super(ImageFormats.XPM);
     }
 
 }
diff --git a/src/test/java/org/apache/commons/imaging/examples/ImageReadExample.java b/src/test/java/org/apache/commons/imaging/examples/ImageReadExample.java
index 3307ca7..d823367 100644
--- a/src/test/java/org/apache/commons/imaging/examples/ImageReadExample.java
+++ b/src/test/java/org/apache/commons/imaging/examples/ImageReadExample.java
@@ -16,30 +16,27 @@
  */
 package org.apache.commons.imaging.examples;
 
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.awt.GraphicsEnvironment;
-import java.awt.Transparency;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
-
 import org.apache.commons.imaging.ImageReadException;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingParameters;
 import org.apache.commons.imaging.common.BufferedImageFactory;
+import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
 
 public class ImageReadExample {
     public static BufferedImage imageReadExample(final File file)
             throws ImageReadException, IOException {
-        final ImagingParameters params = new ImagingParameters();
+        final TiffImagingParameters params = new TiffImagingParameters();
 
         // set optional parameters if you like
         params.setBufferedImageFactory(new ManagedImageBufferedImageFactory());
 
         // params.setStrict(Boolean.TRUE);
 
-        // read and return the image
+        // read and return the TIFF image
         return Imaging.getBufferedImage(file, params);
     }
 
diff --git a/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java b/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
index aa4e14e..517c7bf 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/PixelDensityRoundtrip.java
@@ -17,19 +17,19 @@
 
 package org.apache.commons.imaging.roundtrip;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.util.stream.Stream;
-
 import org.apache.commons.imaging.ImageInfo;
 import org.apache.commons.imaging.Imaging;
-import org.apache.commons.imaging.ImagingParameters;
 import org.apache.commons.imaging.PixelDensity;
+import org.apache.commons.imaging.formats.tiff.TiffImagingParameters;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.MethodSource;
 
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
 public class PixelDensityRoundtrip extends RoundtripBase {
 
     public static Stream<FormatInfo> testPixelDensityRoundtrip() {
@@ -44,8 +44,7 @@ public class PixelDensityRoundtrip extends RoundtripBase {
         final File temp1 = File.createTempFile("pixeldensity.", "."
                 + formatInfo.format.getDefaultExtension());
 
-        final ImagingParameters params = new ImagingParameters();
-        params.setImageFormat(formatInfo.format);
+        final TiffImagingParameters params = new TiffImagingParameters();
         final PixelDensity pixelDensity = PixelDensity.createFromPixelsPerInch(75, 150);
         params.setPixelDensity(pixelDensity);
         Imaging.writeImage(testImage, temp1, formatInfo.format, params);
diff --git a/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java b/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
index ec782b3..0b6b546 100644
--- a/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
+++ b/src/test/java/org/apache/commons/imaging/roundtrip/RoundtripBase.java
@@ -41,7 +41,6 @@ public class RoundtripBase {
         Debug.debug("tempFile: " + temp1.getName());
 
         final ImagingParameters params = formatInfo.format.createImagingParameters();
-        params.setImageFormat(formatInfo.format);
         Imaging.writeImage(testImage, temp1, formatInfo.format, params);
 
         final ImagingParameters readParams = formatInfo.format.createImagingParameters();