You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2023/03/21 21:40:36 UTC
[commons-imaging] 02/03: Allow fluent API use of ImagingParameters and subclasses
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-imaging.git
commit 7317d00ec003210d93582aec80e69fb5a18cc7a5
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Mar 21 17:34:18 2023 -0400
Allow fluent API use of ImagingParameters and subclasses
---
.../org/apache/commons/imaging/ImageParser.java | 4 +---
.../imaging/common/XmpImagingParameters.java | 1 +
.../org/apache/commons/imaging/internal/Util.java | 20 +++++++++--------
.../common/bytesource/ByteSourceImageTest.java | 17 +++++++-------
.../commons/imaging/formats/xmp/XmpUpdateTest.java | 26 +++++++++++-----------
5 files changed, 34 insertions(+), 34 deletions(-)
diff --git a/src/main/java/org/apache/commons/imaging/ImageParser.java b/src/main/java/org/apache/commons/imaging/ImageParser.java
index 23cbac55..2ba98549 100644
--- a/src/main/java/org/apache/commons/imaging/ImageParser.java
+++ b/src/main/java/org/apache/commons/imaging/ImageParser.java
@@ -90,7 +90,7 @@ import org.apache.commons.imaging.formats.xpm.XpmImageParser;
*
* @param <T> type of parameters used by this image parser
*/
-public abstract class ImageParser<T extends ImagingParameters> extends BinaryFileParser {
+public abstract class ImageParser<T extends ImagingParameters<T>> extends BinaryFileParser {
private static final Logger LOGGER = Logger.getLogger(ImageParser.class.getName());
@@ -574,8 +574,6 @@ public abstract class ImageParser<T extends ImagingParameters> extends BinaryFil
*/
public void writeImage(final BufferedImage src, final OutputStream os, final T params)
throws ImageWriteException, IOException {
- os.close(); // we are obligated to close stream.
-
throw new ImageWriteException("This image format (" + getName() + ") cannot be written.");
}
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 f2f26ef8..53e7d67d 100644
--- a/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java
+++ b/src/main/java/org/apache/commons/imaging/common/XmpImagingParameters.java
@@ -22,6 +22,7 @@ import org.apache.commons.imaging.ImagingParameters;
/**
* Parameters for formats that support Xmp.
*
+ * @param <E> this type
* @since 1.0-alpha3
*/
public class XmpImagingParameters<E extends XmpImagingParameters<E>> extends ImagingParameters<E> {
diff --git a/src/main/java/org/apache/commons/imaging/internal/Util.java b/src/main/java/org/apache/commons/imaging/internal/Util.java
index c3bd6d7a..355063cf 100644
--- a/src/main/java/org/apache/commons/imaging/internal/Util.java
+++ b/src/main/java/org/apache/commons/imaging/internal/Util.java
@@ -16,16 +16,17 @@
*/
package org.apache.commons.imaging.internal;
+import java.io.IOException;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+
import org.apache.commons.imaging.ImageFormat;
import org.apache.commons.imaging.ImageFormats;
import org.apache.commons.imaging.ImageParser;
import org.apache.commons.imaging.Imaging;
+import org.apache.commons.imaging.ImagingParameters;
import org.apache.commons.imaging.common.bytesource.ByteSource;
-import java.io.IOException;
-import java.util.function.Predicate;
-import java.util.function.Supplier;
-
/**
* Internal utilities.
*
@@ -35,18 +36,19 @@ public class Util {
private Util() {}
- public static ImageParser<?> getImageParser(final ImageFormat format) {
+ public static <T extends ImagingParameters<T>> ImageParser<T> getImageParser(final ImageFormat format) {
return getImageParser(parser -> parser.canAcceptType(format), () -> new IllegalArgumentException("Unknown Format: " + format));
}
- public static ImageParser<?> getImageParser(final String fileExtension) {
+ public static <T extends ImagingParameters<T>> ImageParser<T> getImageParser(final String fileExtension) {
return getImageParser(parser -> parser.canAcceptExtension(fileExtension), () -> new IllegalArgumentException("Unknown Extension: " + fileExtension));
}
// This generics suppression is as good as the predicate given. If the predicate violates a generics design,
// then there will be an error during runtime.
- private static ImageParser<?> getImageParser(final Predicate<ImageParser<?>> pred, final Supplier<? extends RuntimeException> supplier) {
- return ImageParser
+ @SuppressWarnings("unchecked")
+ private static <T extends ImagingParameters<T>> ImageParser<T> getImageParser(final Predicate<ImageParser<?>> pred, final Supplier<? extends RuntimeException> supplier) {
+ return (ImageParser<T>) ImageParser
.getAllImageParsers()
.stream()
.filter(pred)
@@ -54,7 +56,7 @@ public class Util {
.orElseThrow(supplier);
}
- public static ImageParser<?> getImageParser(final ByteSource byteSource) throws IOException {
+ public static <T extends ImagingParameters<T>> ImageParser<T> getImageParser(final ByteSource byteSource) throws IOException {
// TODO: circular dependency between Imaging and internal Util class below.
final ImageFormat format = Imaging.guessFormat(byteSource);
if (!format.equals(ImageFormats.UNKNOWN)) {
diff --git a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
index e8fc0658..c9bb876a 100644
--- a/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
+++ b/src/test/java/org/apache/commons/imaging/common/bytesource/ByteSourceImageTest.java
@@ -160,13 +160,13 @@ public class ByteSourceImageTest extends ByteSourceTest {
assertArrayEquals(iccBytesFile, iccBytesBytes);
}
- public void checkGetImageInfo(final File imageFile, final byte[] imageFileBytes) throws IOException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ImageReadException {
+ public void checkGetImageInfo(final File imageFile, final byte[] imageFileBytes)
+ throws IOException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ImageReadException {
final boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
final ImageFormat imageFormat = Imaging.guessFormat(imageFile);
ImagingParameters params = null;
if (imageFormat == ImageFormats.TIFF) {
- params = new TiffImagingParameters();
- ((TiffImagingParameters) params).setReadThumbnails(!ignoreImageData);
+ params = new TiffImagingParameters().setReadThumbnails(!ignoreImageData);
}
if (imageFormat == ImageFormats.JPEG) {
params = new JpegImagingParameters();
@@ -189,15 +189,14 @@ public class ByteSourceImageTest extends ByteSourceTest {
if (!method2.getName().startsWith("get")) {
continue;
}
- if (method2.getName().equals("getClass"))
- {
+ if (method2.getName().equals("getClass")) {
continue;
- // if (method.getGenericParameterTypes().length > 0)
- // continue;
+ // if (method.getGenericParameterTypes().length > 0)
+ // continue;
}
- final Object valueFile = method2.invoke(imageInfoFile, (Object[])null);
- final Object valueBytes = method2.invoke(imageInfoBytes, (Object[])null);
+ final Object valueFile = method2.invoke(imageInfoFile, (Object[]) null);
+ final Object valueBytes = method2.invoke(imageInfoBytes, (Object[]) null);
assertEquals(valueFile, valueBytes);
}
diff --git a/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java b/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
index a662b45c..13ddafe9 100644
--- a/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
+++ b/src/test/java/org/apache/commons/imaging/formats/xmp/XmpUpdateTest.java
@@ -16,6 +16,15 @@
*/
package org.apache.commons.imaging.formats.xmp;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.nio.file.Files;
+import java.util.List;
+
import org.apache.commons.imaging.ImageFormat;
import org.apache.commons.imaging.ImageFormats;
import org.apache.commons.imaging.ImageParser;
@@ -27,16 +36,7 @@ import org.apache.commons.imaging.internal.Debug;
import org.apache.commons.imaging.internal.Util;
import org.junit.jupiter.api.Test;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.nio.file.Files;
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-public class XmpUpdateTest extends ImagingTest {
+public class XmpUpdateTest<E extends XmpImagingParameters<E>> extends ImagingTest {
@Test
public void test() throws Exception {
@@ -68,9 +68,9 @@ public class XmpUpdateTest extends ImagingTest {
final File tempFile = Files.createTempFile(imageFile.getName() + ".", "." + imageFormat.getDefaultExtension()).toFile();
final BufferedImage image = Imaging.getBufferedImage(imageFile);
- final ImageParser parser = Util.getImageParser("." + imageFormat.getDefaultExtension());
- final ImagingParameters params = parser.getDefaultParameters();
- ((XmpImagingParameters) params).setXmpXml(xmpXml);
+ final ImageParser<E> parser = Util.getImageParser("." + imageFormat.getDefaultExtension());
+ final E params = parser.getDefaultParameters();
+ params.setXmpXml(xmpXml);
try (FileOutputStream fos = new FileOutputStream(tempFile)) {
parser.writeImage(image, fos, params);
}