You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2014/05/15 18:31:09 UTC

svn commit: r1594969 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter: DCTFilter.java Filter.java JBIG2Filter.java JPXFilter.java

Author: tilman
Date: Thu May 15 16:31:08 2014
New Revision: 1594969

URL: http://svn.apache.org/r1594969
Log:
PDFBOX-2070: DRY refactoring

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1594969&r1=1594968&r2=1594969&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java Thu May 15 16:31:08 2014
@@ -50,22 +50,7 @@ final class DCTFilter extends Filter
     public final DecodeResult decode(InputStream encoded, OutputStream decoded,
                                          COSDictionary parameters, int index) throws IOException
     {
-        // find suitable image reader
-        Iterator readers = ImageIO.getImageReadersByFormatName("JPEG");
-        ImageReader reader = null;
-        while(readers.hasNext()) {
-            reader = (ImageReader)readers.next();
-            if(reader.canReadRaster()) {
-                break;
-            }
-        }
-
-        if (reader == null)
-        {
-            throw new MissingImageReaderException("Cannot read JPEG image: " +
-                    "a suitable JAI I/O image filter is not installed");
-        }
-
+        ImageReader reader = findImageReader("JPEG", "a suitable JAI I/O image filter is not installed");
         ImageInputStream iis = null;
         try
         {

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java?rev=1594969&r1=1594968&r2=1594969&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java Thu May 15 16:31:08 2014
@@ -19,6 +19,9 @@ package org.apache.pdfbox.filter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Iterator;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageReader;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -46,6 +49,7 @@ public abstract class Filter
      * @param encoded the encoded byte stream
      * @param decoded the stream where decoded data will be written
      * @param parameters the parameters used for decoding
+     * @param index the index to the filter being decoded
      * @return repaired parameters dictionary, or the original parameters dictionary
      * @throws IOException if the stream cannot be decoded
      */
@@ -57,6 +61,7 @@ public abstract class Filter
      * @param input the byte stream to encode
      * @param encoded the stream where encoded data will be written
      * @param parameters the parameters used for encoding
+     * @param index the index to the filter being encoded
      * @throws IOException if the stream cannot be encoded
      */
     public final void encode(InputStream input, OutputStream encoded, COSDictionary parameters,
@@ -93,4 +98,32 @@ public abstract class Filter
         }
         return new COSDictionary();
     }
+
+    /**
+     * Finds a suitable image reader for a format.
+     *
+     * @param formatName The format to search for.
+     * @param errorCause The probably cause if something goes wrong.
+     * @return The image reader for the format.
+     * @throws MissingImageReaderException if no image reader is found.
+     */
+    protected ImageReader findImageReader(String formatName, String errorCause) throws MissingImageReaderException
+    {
+        Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(formatName);
+        ImageReader reader = null;
+        while (readers.hasNext())
+        {
+            reader = readers.next();
+            if (reader.canReadRaster())
+            {
+                break;
+            }
+        }
+        if (reader == null)
+        {
+            throw new MissingImageReaderException("Cannot read " + formatName + " image: " + errorCause);
+        }
+        return reader;
+    }
+
 }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java?rev=1594969&r1=1594968&r2=1594969&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JBIG2Filter.java Thu May 15 16:31:08 2014
@@ -55,22 +55,7 @@ final class JBIG2Filter extends Filter
     public final DecodeResult decode(InputStream encoded, OutputStream decoded,
                                          COSDictionary parameters, int index) throws IOException
     {
-        // find suitable image reader
-        Iterator readers = ImageIO.getImageReadersByFormatName("JBIG2");
-        ImageReader reader = null;
-        while(readers.hasNext()) {
-            reader = (ImageReader)readers.next();
-            if(reader.canReadRaster()) {
-                break;
-            }
-        }
-
-        if (reader == null)
-        {
-            throw new MissingImageReaderException("Cannot read JBIG2 image: " +
-                    "jbig2-imageio is not installed");
-        }
-
+        ImageReader reader = findImageReader("JBIG2", "jbig2-imageio is not installed");
         DecodeResult result = new DecodeResult(new COSDictionary());
         result.getParameters().addAll(parameters);
 

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java?rev=1594969&r1=1594968&r2=1594969&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/JPXFilter.java Thu May 15 16:31:08 2014
@@ -70,24 +70,9 @@ public final class JPXFilter extends Fil
     }
 
     // try to read using JAI Image I/O
-    private static BufferedImage readJPX(InputStream input, DecodeResult result) throws IOException
+    private BufferedImage readJPX(InputStream input, DecodeResult result) throws IOException
     {
-        // find suitable image reader
-        Iterator readers = ImageIO.getImageReadersByFormatName("JPEG2000");
-        ImageReader reader = null;
-        while(readers.hasNext()) {
-            reader = (ImageReader)readers.next();
-            if(reader.canReadRaster()) {
-                break;
-            }
-        }
-
-        if (reader == null)
-        {
-            throw new MissingImageReaderException("Cannot read JPEG 2000 (JPX) image: " +
-                    "Java Advanced Imaging (JAI) Image I/O Tools are not installed");
-        }
-
+        ImageReader reader = findImageReader("JPEG2000", "Java Advanced Imaging (JAI) Image I/O Tools are not installed");
         ImageInputStream iis = null;
         try
         {