You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sanselan-commits@incubator.apache.org by cm...@apache.org on 2007/12/29 06:48:53 UTC

svn commit: r607388 [1/8] - in /incubator/sanselan/trunk/src: main/java/org/apache/sanselan/ main/java/org/apache/sanselan/common/ main/java/org/apache/sanselan/common/mylzw/ main/java/org/apache/sanselan/formats/bmp/ main/java/org/apache/sanselan/form...

Author: cmchen
Date: Fri Dec 28 22:48:44 2007
New Revision: 607388

URL: http://svn.apache.org/viewvc?rev=607388&view=rev
Log:
large commit that rolls up a few sets of changes.
1) globally replaced Vector with ArrayList, Hashtable with HashMap, etc.
   We don't need the synchronized/thread-safe version of these collections; 
   Sanselan doesn't have any shared state except static constants; 
   see TiffField.java for an example of where we are still using Hashtable.
2) Refactored Tiff/Exif tag constants.  
   I based the new constants on Phil Harvey's published information.
   The new constants are more complete, accurate, as well as formatted and organized much more neatly.
3) Elaborated the unit test suite a bit, and added more images to the test image suite.
4) I've also made some headway on the Jpeg EXIF rewriting functionality.  
   It's not done yet, but we've made good progress.  
   I've also had an idea about how to implement Maker Note (and general binary) compatability when
      when rewriting the EXIF segment.  I haven't had a change to test it yet.

Added:
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegUtils.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/AllTagConstants.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/ExifTagConstants.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/GPSTagConstants.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagConstantsUtils.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo2.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TagInfo2Date.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffConstants.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffDirectoryConstants.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffFieldTypeConstants.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/constants/TiffTagConstants.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/ImageDataInfo.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/PointerDirectoriesInfo.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriterBase.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputDirectory.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputField.java   (with props)
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffOutputSet.java   (with props)
    incubator/sanselan/trunk/src/test/data/images/jpg/
    incubator/sanselan/trunk/src/test/data/images/jpg/1/
    incubator/sanselan/trunk/src/test/data/images/jpg/1/Canon Powershot SD750 - 2007.12.26.n.IMG_3704.JPG   (with props)
    incubator/sanselan/trunk/src/test/data/images/jpg/1/Nikon D50 - 2007.12.19.n.DSC_3656.JPG   (with props)
    incubator/sanselan/trunk/src/test/data/images/jpg/1/Oregon Scientific DS6639 - DSC_0307.JPG   (with props)
    incubator/sanselan/trunk/src/test/data/images/jpg/1/info.txt   (with props)
    incubator/sanselan/trunk/src/test/data/images/jpg/Thumbs.db   (with props)
    incubator/sanselan/trunk/src/test/data/images/tiff/
    incubator/sanselan/trunk/src/test/data/images/tiff/1/
    incubator/sanselan/trunk/src/test/data/images/tiff/1/PICT2833.TIF   (with props)
    incubator/sanselan/trunk/src/test/data/images/tiff/1/Ron at 2001 CWA convention.tif   (with props)
    incubator/sanselan/trunk/src/test/data/images/tiff/1/info.txt   (with props)
    incubator/sanselan/trunk/src/test/data/images/tiff/1/matthew2.tif   (with props)
    incubator/sanselan/trunk/src/test/data/images/tiff/1/ron and andy.2.tif   (with props)
    incubator/sanselan/trunk/src/test/data/images/tiff/1/ron and andy.tif   (with props)
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/app/   (with props)
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/app/swing/   (with props)
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/ExifBaseTest.java   (with props)
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/ExifDumpTest.java   (with props)
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/ExifRewriteTest.java   (with props)
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegBaseTest.java   (with props)
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/jpeg/JpegReadTest.java   (with props)
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/tiff/
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/formats/tiff/TiffReadTest.java   (with props)
Removed:
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffConstants.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/WriteField.java
Modified:
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/FormatCompliance.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageInfo.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/Sanselan.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/SanselanConstants.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/IImageMetadata.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/ImageMetadata.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/mylzw/MyLZWCompressor.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/bmp/BmpImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GenericGIFBlock.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GifImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/ImageContents.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/ico/IcoImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegConstants.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageMetadata.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/exifRewrite/ExifRewriter.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App13Segment.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App2Segment.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/GenericSegment.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/JFIFSegment.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/SOFNSegment.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/UnknownSegment.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngWriter.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/pnm/PNMImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/psd/PsdImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tga/TgaImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TagInfo.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffContents.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffDirectory.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffField.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffHeader.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageMetadata.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/TiffImageParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/datareaders/DataReader.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/debug/TiffConst.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/debug/TiffConst1.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/debug/TiffConst2.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/debug/TiffConst3.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/fieldtypes/FieldType.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tiff/write/TiffImageWriter.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/icc/IccProfileParser.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/palette/MedianCutQuantizer.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/palette/PaletteFactory.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/palette/QuantizedPalette.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/ImageWriteExample.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/MetadataExample.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/sampleUsage/SampleUsage.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/Debug.java
    incubator/sanselan/trunk/src/main/java/org/apache/sanselan/util/IOUtils.java
    incubator/sanselan/trunk/src/test/java/org/apache/sanselan/SanselanTest.java

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/FormatCompliance.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/FormatCompliance.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/FormatCompliance.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/FormatCompliance.java Fri Dec 28 22:48:44 2007
@@ -19,13 +19,13 @@
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.util.Vector;
+import java.util.ArrayList;
 
 public class FormatCompliance
 {
 	private final boolean failOnError;
 	private final String description;
-	private final Vector comments = new Vector();
+	private final ArrayList comments = new ArrayList();
 
 	public FormatCompliance(String description)
 	{

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageInfo.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageInfo.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageInfo.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageInfo.java Fri Dec 28 22:48:44 2007
@@ -19,7 +19,7 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
-import java.util.Vector;
+import java.util.ArrayList;
 
 /**
  * ImageInfo represents a collection of basic properties of an image, 
@@ -30,7 +30,7 @@
 	private final String formatDetails; // ie version
 
 	private final int bitsPerPixel;
-	private final Vector comments;
+	private final ArrayList comments;
 
 	private final ImageFormat format;
 	private final String formatName;
@@ -71,7 +71,7 @@
 
 	private final String compressionAlgorithm;
 
-	public ImageInfo(String FormatDetails, int BitsPerPixel, Vector Comments,
+	public ImageInfo(String FormatDetails, int BitsPerPixel, ArrayList Comments,
 			ImageFormat Format, String FormatName, int Height, String MimeType,
 			int NumberOfImages, int PhysicalHeightDpi,
 			float PhysicalHeightInch, int PhysicalWidthDpi,
@@ -117,9 +117,9 @@
 	 * <p/>
 	 * This is mostly obsolete.
 	 */
-	public Vector getComments()
+	public ArrayList getComments()
 	{
-		return new Vector(comments);
+		return new ArrayList(comments);
 	}
 
 	/** 

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/ImageParser.java Fri Dec 28 22:48:44 2007
@@ -24,7 +24,7 @@
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.common.BinaryFileParser;
 import org.apache.sanselan.common.IBufferedImageFactory;
@@ -140,25 +140,25 @@
 		return getFormatCompliance(new ByteSourceFile(file));
 	}
 
-	public Vector getAllBufferedImages(ByteSource byteSource)
+	public ArrayList getAllBufferedImages(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
 		BufferedImage bi = getBufferedImage(byteSource, null);
 
-		Vector result = new Vector();
+		ArrayList result = new ArrayList();
 
 		result.add(bi);
 
 		return result;
 	}
 
-	public final Vector getAllBufferedImages(byte bytes[])
+	public final ArrayList getAllBufferedImages(byte bytes[])
 			throws ImageReadException, IOException
 	{
 		return getAllBufferedImages(new ByteSourceArray(bytes));
 	}
 
-	public final Vector getAllBufferedImages(File file)
+	public final ArrayList getAllBufferedImages(File file)
 			throws ImageReadException, IOException
 	{
 		if (!canAcceptExtension(file))
@@ -171,7 +171,7 @@
 //			String dstRoot, ImageParser encoder) throws ImageReadException,
 //			IOException, ImageWriteException
 //	{
-//		Vector v = getAllBufferedImages(byteSource);
+//		ArrayList v = getAllBufferedImages(byteSource);
 //
 //		if (v == null)
 //			return false;

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/Sanselan.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/Sanselan.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/Sanselan.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/Sanselan.java Fri Dec 28 22:48:44 2007
@@ -26,9 +26,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.common.IImageMetadata;
 import org.apache.sanselan.common.byteSources.ByteSource;
@@ -51,7 +51,7 @@
  * 
  * @see org.apache.sanselan.sampleUsage.SampleUsage
  */
-public class Sanselan implements SanselanConstants
+public abstract class Sanselan implements SanselanConstants
 {
 
 	/** 
@@ -690,7 +690,7 @@
 	 * @param  filename Filename associated with image data (optional).
 	 * @return      A vector of BufferedImages.
 	 */
-	public static Vector getAllBufferedImages(InputStream is, String filename)
+	public static ArrayList getAllBufferedImages(InputStream is, String filename)
 			throws ImageReadException, IOException
 	{
 		return getAllBufferedImages(new ByteSourceInputStream(is, filename));
@@ -705,7 +705,7 @@
 	 * @param  bytes  Byte array containing an image file.
 	 * @return      A vector of BufferedImages.
 	 */
-	public static Vector getAllBufferedImages(byte bytes[])
+	public static ArrayList getAllBufferedImages(byte bytes[])
 			throws ImageReadException, IOException
 	{
 		return getAllBufferedImages(new ByteSourceArray(bytes));
@@ -720,13 +720,13 @@
 	 * @param  file  File containing image data.
 	 * @return      A vector of BufferedImages.
 	 */
-	public static Vector getAllBufferedImages(File file)
+	public static ArrayList getAllBufferedImages(File file)
 			throws ImageReadException, IOException
 	{
 		return getAllBufferedImages(new ByteSourceFile(file));
 	}
 
-	private static Vector getAllBufferedImages(ByteSource byteSource)
+	private static ArrayList getAllBufferedImages(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
 		ImageParser imageParser = getImageParser(byteSource);
@@ -889,7 +889,7 @@
 	{
 		ImageParser imageParser = getImageParser(byteSource);
 		if (null == params)
-			params = new Hashtable();
+			params = new HashMap();
 
 		return imageParser.getBufferedImage(byteSource, params);
 	}
@@ -988,7 +988,7 @@
 
 		// make sure params are non-null
 		if (params == null)
-			params = new Hashtable();
+			params = new HashMap();
 
 		params.put(PARAM_KEY_FORMAT, format);
 

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/SanselanConstants.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/SanselanConstants.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/SanselanConstants.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/SanselanConstants.java Fri Dec 28 22:48:44 2007
@@ -16,7 +16,7 @@
  */
 package org.apache.sanselan;
 
-import org.apache.sanselan.formats.tiff.TiffConstants;
+import org.apache.sanselan.formats.tiff.constants.TiffConstants;
 
 public interface SanselanConstants
 {

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/BinaryFileParser.java Fri Dec 28 22:48:44 2007
@@ -96,5 +96,19 @@
 	{
 		return read2Bytes(name, is, exception, byteOrder);
 	}
+	
+	
+	public static boolean byteArrayHasPrefix(byte bytes[], byte prefix[])
+	{
+		if ((bytes == null) || (bytes.length < prefix.length))
+			return false;
+
+		for (int i = 0; i < prefix.length; i++)
+			if (bytes[i] != prefix[i])
+				return false;
+
+		return true;
+	}
+
 
 }

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/IImageMetadata.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/IImageMetadata.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/IImageMetadata.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/IImageMetadata.java Fri Dec 28 22:48:44 2007
@@ -16,13 +16,13 @@
  */
 package org.apache.sanselan.common;
 
-import java.util.Vector;
+import java.util.ArrayList;
 
 public interface IImageMetadata
 {
 	public String toString(String prefix);
 
-	public Vector getItems();
+	public ArrayList getItems();
 
 	public interface IImageMetadataItem
 	{

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/ImageMetadata.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/ImageMetadata.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/ImageMetadata.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/ImageMetadata.java Fri Dec 28 22:48:44 2007
@@ -16,12 +16,12 @@
  */
 package org.apache.sanselan.common;
 
-import java.util.Vector;
+import java.util.ArrayList;
 
 public class ImageMetadata implements IImageMetadata
 {
 
-	private final Vector items = new Vector();
+	private final ArrayList items = new ArrayList();
 
 	public void add(String keyword, String text)
 	{
@@ -33,9 +33,9 @@
 		items.add(item);
 	}
 
-	public Vector getItems()
+	public ArrayList getItems()
 	{
-		return new Vector(items);
+		return new ArrayList(items);
 	}
 
 	protected static final String newline = System

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/mylzw/MyLZWCompressor.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/mylzw/MyLZWCompressor.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/mylzw/MyLZWCompressor.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/common/mylzw/MyLZWCompressor.java Fri Dec 28 22:48:44 2007
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.ArrayList;
 
 public class MyLZWCompressor
 {

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/bmp/BmpImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/bmp/BmpImageParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/bmp/BmpImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/bmp/BmpImageParser.java Fri Dec 28 22:48:44 2007
@@ -24,9 +24,9 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintWriter;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.FormatCompliance;
 import org.apache.sanselan.ImageFormat;
@@ -475,7 +475,7 @@
 		int Height = bhi.height;
 		int Width = bhi.width;
 
-		Vector Comments = new Vector();
+		ArrayList Comments = new ArrayList();
 		// TODO: comments...
 
 		int bitsPerPixel = bhi.bitsPerPixel;
@@ -589,7 +589,7 @@
 			throws ImageWriteException, IOException
 	{
 		// make copy of params; we'll clear keys as we consume them.
-		params = new Hashtable(params);
+		params = new HashMap(params);
 
 		// clear format key.
 		if (params.containsKey(PARAM_KEY_FORMAT))

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GenericGIFBlock.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GenericGIFBlock.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GenericGIFBlock.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GenericGIFBlock.java Fri Dec 28 22:48:44 2007
@@ -18,13 +18,13 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.util.Vector;
+import java.util.ArrayList;
 
 class GenericGIFBlock extends GIFBlock
 {
-	public final Vector subblocks;
+	public final ArrayList subblocks;
 
-	public GenericGIFBlock(int blockCode, Vector subblocks)
+	public GenericGIFBlock(int blockCode, ArrayList subblocks)
 	{
 		super(blockCode);
 

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GifImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GifImageParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GifImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/GifImageParser.java Fri Dec 28 22:48:44 2007
@@ -25,9 +25,9 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintWriter;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.FormatCompliance;
 import org.apache.sanselan.ImageFormat;
@@ -209,7 +209,7 @@
 			byte first[]) throws ImageReadException, IOException
 	{
 		byte bytes[] = null;
-		Vector subblocks = new Vector();
+		ArrayList subblocks = new ArrayList();
 
 		if (first != null)
 			subblocks.add(first);
@@ -231,11 +231,11 @@
 	private final static int PLAIN_TEXT_EXTENSION = 0x01;
 	private final static int TERMINATOR_BYTE = 0x3b;
 
-	private Vector readBlocks(GIFHeaderInfo ghi, InputStream is,
+	private ArrayList readBlocks(GIFHeaderInfo ghi, InputStream is,
 			boolean stop_before_image_data, FormatCompliance formatCompliance)
 			throws ImageReadException, IOException
 	{
-		Vector result = new Vector();
+		ArrayList result = new ArrayList();
 
 		while (true)
 		{
@@ -467,7 +467,7 @@
 		}
 	}
 
-	private GIFBlock findBlock(Vector v, int code)
+	private GIFBlock findBlock(ArrayList v, int code)
 	{
 		for (int i = 0; i < v.size(); i++)
 		{
@@ -502,7 +502,7 @@
 				globalColorTable = readColorTable(is,
 						ghi.sizeOfGlobalColorTable, formatCompliance);
 
-			Vector blocks = readBlocks(ghi, is, stop_before_image_data,
+			ArrayList blocks = readBlocks(ghi, is, stop_before_image_data,
 					formatCompliance);
 
 			ImageContents result = new ImageContents(ghi, globalColorTable,
@@ -559,9 +559,9 @@
 		return null;
 	}
 
-	private Vector getComments(Vector v) throws ImageReadException, IOException
+	private ArrayList getComments(ArrayList v) throws ImageReadException, IOException
 	{
-		Vector result = new Vector();
+		ArrayList result = new ArrayList();
 		int code = 0x21fe;
 
 		for (int i = 0; i < v.size(); i++)
@@ -600,7 +600,7 @@
 		int Height = bhi.logicalScreenHeight;
 		int Width = bhi.logicalScreenWidth;
 
-		Vector Comments;
+		ArrayList Comments;
 
 		Comments = getComments(blocks.blocks);
 
@@ -844,7 +844,7 @@
 			throws ImageWriteException, IOException
 	{
 		// make copy of params; we'll clear keys as we consume them.
-		params = new Hashtable(params);
+		params = new HashMap(params);
 
 		// clear format key.
 		if (params.containsKey(PARAM_KEY_FORMAT))

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/ImageContents.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/ImageContents.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/ImageContents.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/gif/ImageContents.java Fri Dec 28 22:48:44 2007
@@ -16,17 +16,17 @@
  */
 package org.apache.sanselan.formats.gif;
 
-import java.util.Vector;
+import java.util.ArrayList;
 
 class ImageContents
 {
 	public final GIFHeaderInfo gifHeaderInfo;
 
-	public final Vector blocks;
+	public final ArrayList blocks;
 	public final byte globalColorTable[];
 
 	public ImageContents(GIFHeaderInfo gifHeaderInfo, byte globalColorTable[],
-			Vector blocks)
+			ArrayList blocks)
 	{
 		this.gifHeaderInfo = gifHeaderInfo;
 		this.globalColorTable = globalColorTable;

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/ico/IcoImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/ico/IcoImageParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/ico/IcoImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/ico/IcoImageParser.java Fri Dec 28 22:48:44 2007
@@ -27,7 +27,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.ImageFormat;
 import org.apache.sanselan.ImageInfo;
@@ -496,10 +496,10 @@
 	}
 
 
-	public Vector getAllBufferedImages(ByteSource byteSource)
+	public ArrayList getAllBufferedImages(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
-		Vector result = new Vector();
+		ArrayList result = new ArrayList();
 		ImageContents contents = readImage(byteSource);
 
 		FileHeader fileHeader = contents.fileHeader;

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegConstants.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegConstants.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegConstants.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegConstants.java Fri Dec 28 22:48:44 2007
@@ -19,6 +19,10 @@
 public interface JpegConstants
 {
 
+	public static final byte JFIF0_SIGNATURE[] = new byte[]{
+			(byte) 'J', (byte) 'F', (byte) 'I', (byte) 'F', (byte) 0,
+	};
+
 	public static final byte ExifIdentifierCode[] = {
 			0xff & 'E', 0xff & 'x', 0xff & 'i', 0xff & 'f',
 	};
@@ -59,6 +63,16 @@
 	public static final int SOF13Marker = 0xFFc0 + 0xd;
 	public static final int SOF14Marker = 0xFFc0 + 0xe;
 	public static final int SOF15Marker = 0xFFc0 + 0xf;
+
+	public static final int MARKERS[] = {
+			SOS_Marker, JPEG_APP0, JPEG_APP0_Marker, JPEG_APP1_Marker,
+			JPEG_APP2_Marker, JPEG_APP13_Marker, JPEG_APP14_Marker,
+			JPEG_APP15_Marker, JFIFMarker, SOF0Marker, SOF1Marker, SOF2Marker,
+			SOF3Marker, SOF4Marker, SOF5Marker, SOF6Marker, SOF7Marker,
+			SOF8Marker, SOF9Marker, SOF10Marker, SOF11Marker, SOF12Marker,
+			SOF13Marker, SOF14Marker, SOF15Marker,
+	};
+
 
 	public static final byte icc_profile_label[] = {
 			0x49, 0x43, 0x43, 0x5F, 0x50, 0x52, 0x4F, 0x46, 0x49, 0x4C, 0x45,

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageMetadata.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageMetadata.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageMetadata.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageMetadata.java Fri Dec 28 22:48:44 2007
@@ -17,14 +17,15 @@
 package org.apache.sanselan.formats.jpeg;
 
 import java.awt.image.BufferedImage;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.common.IImageMetadata;
 import org.apache.sanselan.common.ImageMetadata;
 import org.apache.sanselan.formats.tiff.RawTiffImageData;
-import org.apache.sanselan.formats.tiff.TagInfo;
 import org.apache.sanselan.formats.tiff.TiffField;
 import org.apache.sanselan.formats.tiff.TiffImageMetadata;
+import org.apache.sanselan.formats.tiff.constants.TagInfo2;
+import org.apache.sanselan.util.Debug;
 
 public class JpegImageMetadata implements IImageMetadata
 {
@@ -52,9 +53,9 @@
 		return photoshop;
 	}
 
-	public TiffField findEXIFValue(TagInfo tagInfo)
+	public TiffField findEXIFValue(TagInfo2 tagInfo)
 	{
-		Vector items = getItems();
+		ArrayList items = getItems();
 		for (int i = 0; i < items.size(); i++)
 		{
 			Object o = items.get(i);
@@ -72,7 +73,7 @@
 
 	public BufferedImage getEXIFThumbnail()
 	{
-		Vector dirs = exif.getDirectories();
+		ArrayList dirs = exif.getDirectories();
 		for (int i = 0; i < dirs.size(); i++)
 		{
 			TiffImageMetadata.Directory dir = (TiffImageMetadata.Directory) dirs
@@ -88,7 +89,7 @@
 
 	public RawTiffImageData getRawImageData()
 	{
-		Vector dirs = exif.getDirectories();
+		ArrayList dirs = exif.getDirectories();
 		for (int i = 0; i < dirs.size(); i++)
 		{
 			TiffImageMetadata.Directory dir = (TiffImageMetadata.Directory) dirs
@@ -102,9 +103,9 @@
 		return null;
 	}
 
-	public Vector getItems()
+	public ArrayList getItems()
 	{
-		Vector result = new Vector();
+		ArrayList result = new ArrayList();
 
 		if (null != exif)
 			result.addAll(exif.getItems());
@@ -153,6 +154,13 @@
 		}
 
 		return result.toString();
+	}
+
+	
+
+	public void dump()
+	{
+		Debug.debug(this.toString());
 	}
 
 }

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegImageParser.java Fri Dec 28 22:48:44 2007
@@ -25,12 +25,13 @@
 import java.text.NumberFormat;
 import java.util.Collections;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.ImageFormat;
 import org.apache.sanselan.ImageInfo;
 import org.apache.sanselan.ImageParser;
 import org.apache.sanselan.ImageReadException;
+import org.apache.sanselan.ImageWriteException;
 import org.apache.sanselan.common.IImageMetadata;
 import org.apache.sanselan.common.byteSources.ByteSource;
 import org.apache.sanselan.formats.jpeg.segments.App13Segment;
@@ -102,110 +103,74 @@
 		return false;
 	}
 
-	private Vector readMarkers(InputStream is, int markers[],
-			boolean return_after_first, boolean readEverything)
+	public ArrayList readSegments(ByteSource byteSource, final int markers[],
+			final boolean returnAfterFirst, boolean readEverything)
 			throws ImageReadException, IOException
 	{
-		Vector result = new Vector();
+		final ArrayList result = new ArrayList();
+		final JpegImageParser parser = this;
 
-		for (int markerCount = 0; true; markerCount++)
+		JpegUtils.Visitor visitor = new JpegUtils.Visitor()
 		{
-			int marker = read2Bytes("marker", is, "Not a Valid JPEG File");
+			// return false to exit before reading image data.
+			public boolean beginSOS()
+			{
+				return false;
+			}
+
+			public void visitSOS(int marker, byte markerBytes[],
+					byte imageData[])
+			{
+			}
 
-			if (marker == 0xffd9)
-				break;
-			else
+			// return false to exit traversal.
+			public boolean visitSegment(int marker, byte markerBytes[],
+					int markerLength, byte markerLengthBytes[],
+					byte segmentData[]) throws ImageReadException, IOException
 			{
+				if (marker == 0xffd9)
+					return false;
 
-				int markerLength = read2Bytes("markerLength", is,
-						"Not a Valid JPEG File");
+				if (!keepMarker(marker, markers))
+					return true;
 
-				if (keepMarker(marker, markers))
+				if (marker == JPEG_APP13_Marker)
 				{
-					if (marker == JPEG_APP13_Marker)
-					{
-						result.add(new App13Segment(this, marker,
-								markerLength - 2, is));
-					}
-					else if (marker == JPEG_APP2_Marker)
-					{
-						result
-								.add(new App2Segment(marker, markerLength - 2,
-										is));
-					}
-					//					else if (marker == JPEG_APP14_Marker)
-					//					{
-					//						result.add(new Segment(markerLength - 2, is));
-					//					}
-					else if (marker == JFIFMarker)
-					{
-						result
-								.add(new JFIFSegment(marker, markerLength - 2,
-										is));
-					}
-					else if ((marker >= SOF0Marker) && (marker <= SOF15Marker))
-					{
-						result
-								.add(new SOFNSegment(marker, markerLength - 2,
-										is));
-					}
-					else if ((marker >= JPEG_APP1_Marker)
-							&& (marker <= JPEG_APP15_Marker))
-					{
-						result.add(new UnknownSegment(marker, markerLength - 2,
-								is));
-					}
-					else if (marker == SOS_Marker)
-					{
-						result.add(new UnknownSegment(marker, markerLength - 2,
-								is));
-
-						return result;
-					}
-					else
-					{
-						skipBytes(is, markerLength - 2,
-								"Not a Valid JPEG File: missing marker data");
-					}
-
-					if (debug)
-					{
-						System.out
-								.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
-						System.out
-								.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
-						System.out
-								.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
-						System.out
-								.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
-					}
-
-					if (return_after_first)
-						return result;
+					result.add(new App13Segment(parser, marker, segmentData));
 				}
-				else
+				else if (marker == JPEG_APP2_Marker)
 				{
-					skipBytes(is, markerLength - 2,
-							"Not a Valid JPEG File: missing marker data");
+					result.add(new App2Segment(marker, segmentData));
 				}
-
-				if (marker == SOS_Marker)
+				else if (marker == JFIFMarker)
+				{
+					result.add(new JFIFSegment(marker, segmentData));
+				}
+				else if ((marker >= SOF0Marker) && (marker <= SOF15Marker))
 				{
-					//					Debug.debug("SOS");
-					return result;
+					result.add(new SOFNSegment(marker, segmentData));
 				}
+				else if ((marker >= JPEG_APP1_Marker)
+						&& (marker <= JPEG_APP15_Marker))
+				{
+					result.add(new UnknownSegment(marker, segmentData));
+				}
+
+				if (returnAfterFirst)
+					return false;
 
+				return true;
 			}
-			if (debug)
-				System.out.println("");
-		}
+		};
+
+		new JpegUtils().traverseJFIF(byteSource, visitor);
 
 		return result;
 	}
 
 	public static final boolean permissive = true;
 
-	private byte[] assembleSegments(Vector v) throws ImageReadException,
+	private byte[] assembleSegments(ArrayList v) throws ImageReadException,
 			IOException
 	{
 		try
@@ -218,7 +183,7 @@
 		}
 	}
 
-	private byte[] assembleSegments(Vector v, boolean start_with_zero)
+	private byte[] assembleSegments(ArrayList v, boolean start_with_zero)
 			throws ImageReadException, IOException
 	{
 		if (v.size() < 1)
@@ -278,7 +243,7 @@
 		return result;
 	}
 
-	private void dumpSegments(Vector v)
+	private void dumpSegments(ArrayList v)
 	{
 		Debug.debug();
 		Debug.debug("dumpSegments", v.size());
@@ -293,51 +258,23 @@
 		Debug.debug();
 	}
 
-	public Vector readSegments(ByteSource byteSource, int markers[],
-			boolean return_after_first) throws ImageReadException, IOException
-	{
-		return readSegments(byteSource, markers, return_after_first, false);
-	}
-
-	public Vector readSegments(ByteSource byteSource, int markers[],
-			boolean return_after_first, boolean readEverything)
-			throws ImageReadException, IOException
+	public ArrayList readSegments(ByteSource byteSource, int markers[],
+			boolean returnAfterFirst) throws ImageReadException, IOException
 	{
-		InputStream is = null;
-
-		try
-		{
-			is = byteSource.getInputStream();
-
-			readAndVerifyBytes(is, SOI,
-					"Not a Valid JPEG File: doesn't begin with 0xffd8");
-
-			return readMarkers(is, markers, return_after_first, readEverything);
-		}
-		finally
-		{
-			try
-			{
-				is.close();
-			}
-			catch (Exception e)
-			{
-				Debug.debug(e);
-			}
-		}
+		return readSegments(byteSource, markers, returnAfterFirst, false);
 	}
 
 	public byte[] getICCProfileBytes(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
-		Vector segments = readSegments(byteSource, new int[]{
+		ArrayList segments = readSegments(byteSource, new int[]{
 			JPEG_APP2_Marker,
 		}, false);
 
 		if (segments != null)
 		{
 			// throw away non-icc profile app2 segments.
-			Vector filtered = new Vector();
+			ArrayList filtered = new ArrayList();
 			for (int i = 0; i < segments.size(); i++)
 			{
 				App2Segment segment = (App2Segment) segments.get(i);
@@ -379,21 +316,12 @@
 
 	public static boolean isExifAPP1Segment(GenericSegment segment)
 	{
-		byte bytes[] = segment.bytes;
-
-		if ((bytes == null) || (bytes.length < 4))
-			return false;
-
-		for (int i = 0; i < 4 && i < bytes.length; i++)
-			if (bytes[i] != ExifIdentifierCode[i])
-				return false;
-
-		return true;
+		return byteArrayHasPrefix(segment.bytes, ExifIdentifierCode);
 	}
 
-	private Vector filterAPP1Segments(Vector v)
+	private ArrayList filterAPP1Segments(ArrayList v)
 	{
-		Vector result = new Vector();
+		ArrayList result = new ArrayList();
 
 		for (int i = 0; i < v.size(); i++)
 		{
@@ -419,14 +347,14 @@
 	public byte[] getExifRawData(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
-		Vector segments = readSegments(byteSource, new int[]{
+		ArrayList segments = readSegments(byteSource, new int[]{
 			JPEG_APP1_Marker,
 		}, false);
 
 		if ((segments == null) || (segments.size() < 1))
 			return null;
 
-		Vector exifSegments = filterAPP1Segments(segments);
+		ArrayList exifSegments = filterAPP1Segments(segments);
 		if (debug)
 			System.out.println("exif_segments.size" + ": "
 					+ exifSegments.size());
@@ -450,7 +378,7 @@
 	private JpegImageMetadata.Photoshop getPhotoshopMetadata(
 			ByteSource byteSource) throws ImageReadException, IOException
 	{
-		Vector segments = readSegments(byteSource, new int[]{
+		ArrayList segments = readSegments(byteSource, new int[]{
 			JPEG_APP13_Marker,
 		}, false);
 
@@ -463,7 +391,7 @@
 		{
 			App13Segment segment = (App13Segment) segments.get(i);
 
-			Vector elements = segment.elements;
+			ArrayList elements = segment.elements;
 
 			for (int j = 0; j < elements.size(); j++)
 			{
@@ -478,7 +406,7 @@
 	public Dimension getImageSize(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
-		Vector segments = readSegments(byteSource, new int[]{
+		ArrayList segments = readSegments(byteSource, new int[]{
 				//			kJFIFMarker,
 				SOF0Marker,
 
@@ -513,7 +441,7 @@
 			throws ImageReadException, IOException
 	{
 
-		Vector SOF_segments = readSegments(byteSource, new int[]{
+		ArrayList SOF_segments = readSegments(byteSource, new int[]{
 				//				kJFIFMarker,
 
 				SOF0Marker, SOF1Marker, SOF2Marker, SOF3Marker, SOF5Marker,
@@ -529,7 +457,7 @@
 		//			System.out.println("Incoherent SOFN Data Found: "
 		//					+ SOF_segments.size());
 
-		Vector JFIF_segments = readSegments(byteSource, new int[]{
+		ArrayList JFIF_segments = readSegments(byteSource, new int[]{
 			JFIFMarker,
 		}, true);
 
@@ -561,12 +489,12 @@
 		{
 			x_density = fTheJFIFSegment.xDensity;
 			y_density = fTheJFIFSegment.yDensity;
-			int density_units = fTheJFIFSegment.density_units;
+			int density_units = fTheJFIFSegment.densityUnits;
 			//			JFIF_major_version = fTheJFIFSegment.JFIF_major_version;
 			//			JFIF_minor_version = fTheJFIFSegment.JFIF_minor_version;
 
-			FormatDetails = "Jpeg/JFIF v." + fTheJFIFSegment.JFIF_major_version
-					+ "." + fTheJFIFSegment.JFIF_minor_version;
+			FormatDetails = "Jpeg/JFIF v." + fTheJFIFSegment.jfifMajorVersion
+					+ "." + fTheJFIFSegment.jfifMinorVersion;
 
 			switch (density_units)
 			{
@@ -588,7 +516,7 @@
 
 			{
 				TiffField field = metadata
-						.findEXIFValue(TiffField.TIFF_TAG_XResolution);
+						.findEXIFValue(TiffField.TIFF_TAG_XRESOLUTION);
 				if (field == null)
 					throw new ImageReadException("No XResolution");
 
@@ -596,7 +524,7 @@
 			}
 			{
 				TiffField field = metadata
-						.findEXIFValue(TiffField.TIFF_TAG_YResolution);
+						.findEXIFValue(TiffField.TIFF_TAG_YRESOLUTION);
 				if (field == null)
 					throw new ImageReadException("No YResolution");
 
@@ -604,7 +532,7 @@
 			}
 			{
 				TiffField field = metadata
-						.findEXIFValue(TiffField.TIFF_TAG_ResolutionUnit);
+						.findEXIFValue(TiffField.TIFF_TAG_RESOLUTION_UNIT);
 				if (field == null)
 					throw new ImageReadException("No ResolutionUnits");
 
@@ -645,10 +573,10 @@
 			PhysicalHeightInch = (float) ((double) Height / (y_density * units_per_inch));
 		}
 
-		Vector Comments = new Vector();
+		ArrayList Comments = new ArrayList();
 		// TODO: comments...
 
-		int Number_of_components = fSOFNSegment.Number_of_components;
+		int Number_of_components = fSOFNSegment.numberOfComponents;
 		int Precision = fSOFNSegment.Precision;
 
 		int BitsPerPixel = Number_of_components * Precision;
@@ -699,7 +627,7 @@
 		pw.println("");
 
 		{
-			Vector segments = readSegments(byteSource, null, false);
+			ArrayList segments = readSegments(byteSource, null, false);
 
 			if (segments == null)
 				throw new ImageReadException("No Segments Found.");

Added: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegUtils.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegUtils.java?rev=607388&view=auto
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegUtils.java (added)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegUtils.java Fri Dec 28 22:48:44 2007
@@ -0,0 +1,203 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sanselan.formats.jpeg;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.sanselan.ImageReadException;
+import org.apache.sanselan.ImageWriteException;
+import org.apache.sanselan.common.BinaryFileParser;
+import org.apache.sanselan.common.byteSources.ByteSource;
+import org.apache.sanselan.util.Debug;
+
+public class JpegUtils extends BinaryFileParser implements JpegConstants
+{
+	public JpegUtils()
+	{
+		setByteOrder(BYTE_ORDER_NETWORK);
+	}
+
+	public static interface Visitor
+	{
+		// return false to exit before reading image data.
+		public boolean beginSOS();
+
+		public void visitSOS(int marker, byte markerBytes[], byte imageData[]);
+
+		// return false to exit traversal.
+		public boolean visitSegment(int marker, byte markerBytes[],
+				int markerLength, byte markerLengthBytes[], byte segmentData[])
+				throws ImageReadException, 
+//				ImageWriteException, 
+				IOException;
+	}
+
+	public void traverseJFIF(ByteSource byteSource, Visitor visitor)
+			throws ImageReadException, 
+//			ImageWriteException, 
+			IOException
+	{
+		InputStream is = null;
+
+		try
+		{
+			is = byteSource.getInputStream();
+
+			readAndVerifyBytes(is, SOI,
+					"Not a Valid JPEG File: doesn't begin with 0xffd8");
+
+			int byteOrder = getByteOrder();
+
+			for (int markerCount = 0; true; markerCount++)
+			{
+				byte markerBytes[] = readByteArray("markerBytes", 2, is,
+						"markerBytes");
+				int marker = convertByteArrayToShort("marker", markerBytes,
+						byteOrder);
+
+				if (marker == 0xffd9 || marker == SOS_Marker)
+				{
+					if (!visitor.beginSOS())
+						return;
+
+					byte imageData[] = getStreamBytes(is);
+					visitor.visitSOS(marker, markerBytes, imageData);
+					break;
+				}
+
+				byte markerLengthBytes[] = readByteArray("markerLengthBytes",
+						2, is, "markerLengthBytes");
+				int markerLength = convertByteArrayToShort("markerLength",
+						markerLengthBytes, byteOrder);
+
+				byte segmentData[] = readByteArray("Segment Data",
+						markerLength - 2, is,
+						"Invalid Segment: insufficient data");
+
+				if (!visitor.visitSegment(marker, markerBytes, markerLength,
+						markerLengthBytes, segmentData))
+					return;
+			}
+
+		}
+		finally
+		{
+			try
+			{
+				is.close();
+			}
+			catch (Exception e)
+			{
+				Debug.debug(e);
+			}
+		}
+	}
+
+	public static String getMarkerName(int marker)
+	{
+		switch (marker)
+		{
+			case SOS_Marker :
+				return "SOS_Marker";
+				//			case JPEG_APP0 :
+				//				return "JPEG_APP0";
+				//			case JPEG_APP0_Marker :
+				//				return "JPEG_APP0_Marker";
+			case JPEG_APP1_Marker :
+				return "JPEG_APP1_Marker";
+			case JPEG_APP2_Marker :
+				return "JPEG_APP2_Marker";
+			case JPEG_APP13_Marker :
+				return "JPEG_APP13_Marker";
+			case JPEG_APP14_Marker :
+				return "JPEG_APP14_Marker";
+			case JPEG_APP15_Marker :
+				return "JPEG_APP15_Marker";
+			case JFIFMarker :
+				return "JFIFMarker";
+			case SOF0Marker :
+				return "SOF0Marker";
+			case SOF1Marker :
+				return "SOF1Marker";
+			case SOF2Marker :
+				return "SOF2Marker";
+			case SOF3Marker :
+				return "SOF3Marker";
+			case SOF4Marker :
+				return "SOF4Marker";
+			case SOF5Marker :
+				return "SOF5Marker";
+			case SOF6Marker :
+				return "SOF6Marker";
+			case SOF7Marker :
+				return "SOF7Marker";
+			case SOF8Marker :
+				return "SOF8Marker";
+			case SOF9Marker :
+				return "SOF9Marker";
+			case SOF10Marker :
+				return "SOF10Marker";
+			case SOF11Marker :
+				return "SOF11Marker";
+			case SOF12Marker :
+				return "SOF12Marker";
+			case SOF13Marker :
+				return "SOF13Marker";
+			case SOF14Marker :
+				return "SOF14Marker";
+			case SOF15Marker :
+				return "SOF15Marker";
+			default :
+				return "Unknown";
+		}
+	}
+
+	public void dumpJFIF(ByteSource byteSource) throws ImageReadException,
+			IOException, ImageWriteException
+	{
+		Visitor visitor = new Visitor()
+		{
+			// return false to exit before reading image data.
+			public boolean beginSOS()
+			{
+				return true;
+			}
+
+			public void visitSOS(int marker, byte markerBytes[],
+					byte imageData[])
+			{
+				Debug.debug("SOS marker.  " + imageData.length
+						+ " bytes of image data.");
+				Debug.debug("");
+			}
+
+			// return false to exit traversal.
+			public boolean visitSegment(int marker, byte markerBytes[],
+					int markerLength, byte markerLengthBytes[],
+					byte segmentData[])
+			{
+				Debug.debug("Segment marker: " + Integer.toHexString(marker)
+						+ " (" + getMarkerName(marker) + "), "
+						+ segmentData.length + " bytes of segment data.");
+				return true;
+			}
+		};
+
+		traverseJFIF(byteSource, visitor);
+	}
+}
\ No newline at end of file

Propchange: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/JpegUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/exifRewrite/ExifRewriter.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/exifRewrite/ExifRewriter.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/exifRewrite/ExifRewriter.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/exifRewrite/ExifRewriter.java Fri Dec 28 22:48:44 2007
@@ -18,26 +18,24 @@
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
-import java.util.Vector;
 
 import org.apache.sanselan.ImageReadException;
 import org.apache.sanselan.ImageWriteException;
 import org.apache.sanselan.common.BinaryFileParser;
 import org.apache.sanselan.common.byteSources.ByteSource;
 import org.apache.sanselan.formats.jpeg.JpegConstants;
-import org.apache.sanselan.formats.jpeg.JpegImageParser;
+import org.apache.sanselan.formats.jpeg.JpegUtils;
 import org.apache.sanselan.formats.jpeg.segments.GenericSegment;
 import org.apache.sanselan.formats.jpeg.segments.UnknownSegment;
-import org.apache.sanselan.formats.tiff.TagInfo;
-import org.apache.sanselan.formats.tiff.TiffField;
 import org.apache.sanselan.formats.tiff.TiffImageMetadata;
 import org.apache.sanselan.formats.tiff.TiffImageParser;
-import org.apache.sanselan.formats.tiff.fieldtypes.FieldType;
 import org.apache.sanselan.formats.tiff.write.TiffImageWriter;
-import org.apache.sanselan.formats.tiff.write.WriteField;
+import org.apache.sanselan.formats.tiff.write.TiffOutputDirectory;
+import org.apache.sanselan.formats.tiff.write.TiffOutputSet;
 import org.apache.sanselan.util.Debug;
 
 public class ExifRewriter extends BinaryFileParser implements JpegConstants
@@ -47,110 +45,149 @@
 		setByteOrder(BYTE_ORDER_NETWORK);
 	}
 
-	public void rewriteEXIFMetadata(ByteSource byteSource, OutputStream os,
-			Map params) throws ImageReadException, IOException,
-			ImageWriteException
+	private static class JFIFPieces
 	{
-		Vector pieces = new Vector();
-		InputStream is = null;
-		GenericSegment exifSegment = null;
+		public final ArrayList pieces;
+		public final GenericSegment exifSegment;
 
-		try
+		public JFIFPieces(final ArrayList pieces, final GenericSegment exifSegment)
 		{
-			is = byteSource.getInputStream();
-
-			readAndVerifyBytes(is, SOI,
-					"Not a Valid JPEG File: doesn't begin with 0xffd8");
+			this.pieces = pieces;
+			this.exifSegment = exifSegment;
+		}
+	}
 
-			int byteOrder = getByteOrder();
+	private JFIFPieces analyzeJFIF(ByteSource byteSource)
+			throws ImageReadException, IOException
+	//			, ImageWriteException
+	{
+		final ArrayList pieces = new ArrayList();
+		final GenericSegment exifSegmentArray[] = new GenericSegment[]{
+			null,
+		};
 
-			for (int markerCount = 0; true; markerCount++)
+		JpegUtils.Visitor visitor = new JpegUtils.Visitor()
+		{
+			// return false to exit before reading image data.
+			public boolean beginSOS()
 			{
-				byte markerBytes[] = readByteArray("markerBytes", 2, is,
-						"markerBytes");
-				int marker = convertByteArrayToShort("marker", markerBytes,
-						byteOrder);
-
-				//					private boolean isExifAPP1Segment(GenericSegment segment)
-
-				if (marker == 0xffd9 || marker == SOS_Marker)
-				{
-					pieces.add(markerBytes);
-					pieces.add(getStreamBytes(is));
-					break;
-				}
-
-				byte markerLengthBytes[] = readByteArray("markerLengthBytes",
-						2, is, "markerLengthBytes");
-				int markerLength = convertByteArrayToShort("markerLength",
-						markerLengthBytes, byteOrder);
+				return true;
+			}
 
-				UnknownSegment segment = new UnknownSegment(marker,
-						markerLength - 2, is);
+			public void visitSOS(int marker, byte markerBytes[],
+					byte imageData[])
+			{
+				pieces.add(markerBytes);
+				pieces.add(imageData);
+			}
 
+			// return false to exit traversal.
+			public boolean visitSegment(int marker, byte markerBytes[],
+					int markerLength, byte markerLengthBytes[],
+					byte segmentData[]) throws
+			//					ImageWriteException,
+					ImageReadException, IOException
+			{
 				if (marker != JPEG_APP1_Marker)
 				{
 					pieces.add(markerBytes);
 					pieces.add(markerLengthBytes);
-					pieces.add(segment.bytes);
-					continue;
+					pieces.add(segmentData);
 				}
-
-				if (!JpegImageParser.isExifAPP1Segment(segment))
+				else if (!byteArrayHasPrefix(segmentData, ExifIdentifierCode))
 				{
 					pieces.add(markerBytes);
 					pieces.add(markerLengthBytes);
-					pieces.add(segment.bytes);
-					continue;
+					pieces.add(segmentData);
 				}
-
-				if (exifSegment != null)
+				else if (exifSegmentArray[0] != null)
 				{
 					// TODO: add support for multiple segments
-					throw new ImageWriteException(
+					throw new ImageReadException(
 							"More than one APP1 EXIF segment.");
 				}
+				else
+				{
+					UnknownSegment segment = new UnknownSegment(marker,
+							segmentData);
 
-				exifSegment = segment;
-				pieces.add(segment);
+					exifSegmentArray[0] = segment;
+					pieces.add(segment);
+				}
+				return true;
 			}
+		};
 
-		}
-		finally
-		{
-			try
-			{
-				is.close();
-			}
-			catch (Exception e)
-			{
-				Debug.debug(e);
-			}
-		}
+		new JpegUtils().traverseJFIF(byteSource, visitor);
 
+		GenericSegment exifSegment = exifSegmentArray[0];
 		if (exifSegment == null)
 		{
 			// TODO: add support for adding, not just replacing.
-			throw new ImageWriteException("No APP1 EXIF segment found.");
+			throw new ImageReadException("No APP1 EXIF segment found.");
 		}
 
+		return new JFIFPieces(pieces, exifSegment);
+	}
+
+	public void removeExifMetadata(ByteSource byteSource, OutputStream os,
+			Map params) throws ImageReadException, IOException,
+			ImageWriteException
+	{
+		JFIFPieces jfifPieces = analyzeJFIF(byteSource);
+		ArrayList pieces = jfifPieces.pieces;
+
+		pieces.remove(jfifPieces.exifSegment);
+		//		List filtered = new ArrayList();
+
+		writeSegmentsReplacingExif(os, pieces, null);
+	}
+
+	public void rewriteExifMetadata(ByteSource byteSource, OutputStream os,
+			Map params) throws ImageReadException, IOException,
+			ImageWriteException
+	{
+		JFIFPieces jfifPieces = analyzeJFIF(byteSource);
+		ArrayList pieces = jfifPieces.pieces;
+		GenericSegment exifSegment = jfifPieces.exifSegment;
+
 		byte exifBytes[] = exifSegment.bytes;
 		exifBytes = getBytearrayTail("trimmed exif bytes", exifBytes, 6);
 
 		TiffImageMetadata exifMetadata = (TiffImageMetadata) new TiffImageParser()
 				.getMetadata(exifBytes, params);
 
-		byte newBytes[] = rewriteExif(exifMetadata, true);
+		byte newBytes[] = writeExifSegment(exifMetadata, true);
 		//		exifSegment.bytes = newBytes;
 
-		//		Vector segments = readSegments(byteSource, null, false, true);
+		//		ArrayList segments = readSegments(byteSource, null, false, true);
 
 		//		TiffImageMetadata exif = getExifMetadata(byteSource, params);
 
-		writeSegments(os, pieces, newBytes);
+		writeSegmentsReplacingExif(os, pieces, newBytes);
+	}
+
+	public void updateExifMetadata(ByteSource byteSource, OutputStream os,
+			ArrayList outputDirectories, Map params) throws ImageReadException,
+			IOException, ImageWriteException
+	{
+		JFIFPieces jfifPieces = analyzeJFIF(byteSource);
+		ArrayList pieces = jfifPieces.pieces;
+		GenericSegment exifSegment = jfifPieces.exifSegment;
+
+		byte exifBytes[] = exifSegment.bytes;
+		exifBytes = getBytearrayTail("trimmed exif bytes", exifBytes, 6);
+
+		TiffImageMetadata exifMetadata = (TiffImageMetadata) new TiffImageParser()
+				.getMetadata(exifBytes, params);
+		int byteOrder = exifMetadata.contents.header.byteOrder;
+
+		byte newBytes[] = writeExifSegment(outputDirectories, byteOrder, true);
+
+		writeSegmentsReplacingExif(os, pieces, newBytes);
 	}
 
-	private void writeSegments(OutputStream os, Vector segments,
+	private void writeSegmentsReplacingExif(OutputStream os, ArrayList segments,
 			byte newBytes[]) throws ImageWriteException, IOException
 	{
 		int byteOrder = getByteOrder();
@@ -169,10 +206,6 @@
 				}
 				else if (o instanceof GenericSegment)
 				{
-					//					byte markerBytes[] = readByteArray("markerBytes", 2, is,
-					//					"markerBytes");
-					//			int marker = convertByteArrayToShort("marker", markerBytes,
-					//					byteOrder);
 					byte markerBytes[] = convertShortToByteArray(
 							JPEG_APP1_Marker, byteOrder);
 					os.write(markerBytes);
@@ -182,21 +215,11 @@
 							markerLength, byteOrder);
 					os.write(markerLengthBytes);
 
-					//
-					//			pieces.add(markerBytes);
-					//					pieces.add(markerLengthBytes);
-
 					os.write(newBytes);
-					//					GenericSegment segment = (GenericSegment) o;
-					//					os.write(segment.bytes);
 				}
 				else
 					throw new ImageWriteException("Unknown data: " + o);
 			}
-			//			readAndVerifyBytes(is, SOI,
-			//					"Not a Valid JPEG File: doesn't begin with 0xffd8");
-			//
-			//			return readMarkers(is, markers, return_after_first);
 		}
 		finally
 		{
@@ -211,26 +234,46 @@
 		}
 	}
 
-	public byte[] rewriteExif(TiffImageMetadata exif, boolean includeEXIFPrefix)
-			throws IOException, ImageWriteException
+	public byte[] writeExifSegment(TiffImageMetadata exif,
+			boolean includeEXIFPrefix) throws IOException, ImageWriteException
 	{
 		if (exif == null)
 			return null;
 
 		int byteOrder = exif.contents.header.byteOrder;
 
-		Vector dstDirs = new Vector();
-		Vector srcDirs = exif.getDirectories();
+		ArrayList outputDirectories = new ArrayList();
+		ArrayList srcDirs = exif.getDirectories();
 		for (int i = 0; i < srcDirs.size(); i++)
 		{
 			TiffImageMetadata.Directory srcDir = (TiffImageMetadata.Directory) srcDirs
 					.get(i);
 			//			Debug.debug("srcDir", srcDir);
 
-			TiffImageWriter.Directory dstDir = translate(srcDir, byteOrder);
-			dstDirs.add(dstDir);
+			//			TiffOutputDirectory outputDirectory = translate(srcDir, byteOrder);
+			TiffOutputDirectory outputDirectory = srcDir
+					.getOutputDirectory(byteOrder);
+			outputDirectories.add(outputDirectory);
 		}
 
+		return writeExifSegment(outputDirectories, byteOrder, includeEXIFPrefix);
+	}
+	
+
+	public byte[] writeExifSegment(TiffOutputSet outputSet, 
+			boolean includeEXIFPrefix) throws IOException, ImageWriteException
+	{
+		List outputDirectories = outputSet.getDirectories();
+		
+		return writeExifSegment( outputDirectories, outputSet.byteOrder,
+				 includeEXIFPrefix) ;
+	}
+
+	
+
+	public byte[] writeExifSegment(List outputDirectories, int byteOrder,
+			boolean includeEXIFPrefix) throws IOException, ImageWriteException
+	{
 		ByteArrayOutputStream os = new ByteArrayOutputStream();
 
 		if (includeEXIFPrefix)
@@ -240,48 +283,47 @@
 			os.write(0);
 		}
 
-		new TiffImageWriter(byteOrder).writeDirectories(os, dstDirs);
+		new TiffImageWriter(byteOrder).writeDirectories(os, outputDirectories);
 
 		return os.toByteArray();
 	}
 
-	private TiffImageWriter.Directory translate(
-			TiffImageMetadata.Directory srcDir, int byteOrder)
-			throws ImageWriteException
-	{
-		TiffImageWriter.Directory dstDir = new TiffImageWriter.Directory(
-				srcDir.type);
-
-		Vector entries = srcDir.getItems();
-		for (int i = 0; i < entries.size(); i++)
-		{
-			TiffImageMetadata.Item item = (TiffImageMetadata.Item) entries
-					.get(i);
-			TiffField srcField = item.getTiffField();
-
-			TagInfo tag = srcField.tagInfo;
-			FieldType tagtype = srcField.fieldType;
-			int count = srcField.length;
-			byte bytes[] = srcField.fieldType.getRawBytes(srcField);
-
-			//			Debug.debug("\t" + "srcField", srcField);
-			//			Debug.debug("\t" + "bytes", bytes);
-
-			Object value = srcField.getValue();
-			byte bytes2[];
-			if (tag.isDate)
-				bytes2 = tagtype.getRawBytes(srcField);
-			else
-				bytes2 = tagtype.writeData(value, byteOrder);
-			//			Debug.debug("\t" + "bytes2", bytes2);
-
-			WriteField dstField = new WriteField(tag, tagtype, count, bytes2);
-			dstDir.add(dstField);
-		}
-
-		dstDir.setRawTiffImageData(srcDir.getRawTiffImageData());
-		dstDir.setRawJpegImageData(srcDir.getRawJpegImageData());
-
-		return dstDir;
-	}
+	//	private TiffOutputDirectory translate(TiffImageMetadata.Directory srcDir,
+	//			int byteOrder) throws ImageWriteException
+	//	{
+	//		TiffOutputDirectory dstDir = new TiffOutputDirectory(srcDir.type);
+	//
+	//		ArrayList entries = srcDir.getItems();
+	//		for (int i = 0; i < entries.size(); i++)
+	//		{
+	//			TiffImageMetadata.Item item = (TiffImageMetadata.Item) entries
+	//					.get(i);
+	//			TiffField srcField = item.getTiffField();
+	//
+	//			TagInfo tag = srcField.tagInfo;
+	//			FieldType tagtype = srcField.fieldType;
+	//			int count = srcField.length;
+	//			//			byte bytes[] = srcField.fieldType.getRawBytes(srcField);
+	//
+	//			//			Debug.debug("\t" + "srcField", srcField);
+	//			//			Debug.debug("\t" + "bytes", bytes);
+	//
+	//			Object value = srcField.getValue();
+	//			byte bytes2[];
+	//			if (tag.isDate)
+	//				bytes2 = tagtype.getRawBytes(srcField);
+	//			else
+	//				bytes2 = tagtype.writeData(value, byteOrder);
+	//			//			Debug.debug("\t" + "bytes2", bytes2);
+	//
+	//			TiffOutputField dstField = new TiffOutputField(tag, tagtype, count,
+	//					bytes2);
+	//			dstDir.add(dstField);
+	//		}
+	//
+	//		dstDir.setRawTiffImageData(srcDir.getRawTiffImageData());
+	//		dstDir.setRawJpegImageData(srcDir.getRawJpegImageData());
+	//
+	//		return dstDir;
+	//	}
 }

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App13Segment.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App13Segment.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App13Segment.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App13Segment.java Fri Dec 28 22:48:44 2007
@@ -16,9 +16,10 @@
  */
 package org.apache.sanselan.formats.jpeg.segments;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.ImageReadException;
 import org.apache.sanselan.formats.jpeg.IptcElement;
@@ -28,12 +29,20 @@
 public class App13Segment extends APPNSegment
 {
 	protected final JpegImageParser parser;
-	public final Vector elements = new Vector();
+	public final ArrayList elements = new ArrayList();
 
+	public App13Segment(JpegImageParser parser, int marker, byte segmentData[])
+			throws ImageReadException, IOException
+	{
+		this(parser, marker, segmentData.length, new ByteArrayInputStream(
+				segmentData));
+	}
+
+	// TODO:
 	public App13Segment(JpegImageParser parser, int marker, int marker_length,
-			InputStream is2) throws ImageReadException, IOException
+			InputStream is) throws ImageReadException, IOException
 	{
-		super(marker, marker_length, is2);
+		super(marker, marker_length, is);
 		this.parser = parser;
 
 		//			InputStream bais = new ByteArrayInputStream(bytes);
@@ -123,20 +132,6 @@
 			}
 
 		}
-		//			System.out.println("								zimbabwe legit");
-
-		//
-		//			{
-		//				int i = read_byte("zero", is, "Invalid App13 Segment");
-		//				if (i != 0)
-		//					throw new ImageReadException("Invalid App13 Segment");
-		//			}
-
-		//			while (true)
-		//			{
-		//				readAndVerifyBytes(.CONST_8BIM", bais, .CONST_8BIM, "Invalid.CONST_8BIM Segment");
-		//				System.out.println();
-		//			}
 
 	}
 

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App2Segment.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App2Segment.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App2Segment.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/App2Segment.java Fri Dec 28 22:48:44 2007
@@ -28,6 +28,12 @@
 	public final byte icc_bytes[];
 	public final int cur_marker, num_markers;
 
+	public App2Segment(int marker, byte segmentData[])
+			throws ImageReadException, IOException
+	{
+		this(marker, segmentData.length, new ByteArrayInputStream(segmentData));
+	}
+
 	public App2Segment(int marker, int marker_length, InputStream is2)
 			throws ImageReadException, IOException
 	{

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/GenericSegment.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/GenericSegment.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/GenericSegment.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/GenericSegment.java Fri Dec 28 22:48:44 2007
@@ -35,6 +35,14 @@
 				"Invalid Segment: insufficient data");
 	}
 
+	public GenericSegment(int marker, byte bytes[]) throws ImageReadException,
+			IOException
+	{
+		super(marker, bytes.length);
+
+		this.bytes = bytes;
+	}
+
 	public void dump(PrintWriter pw)
 	{
 		dump(pw, 0);

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/JFIFSegment.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/JFIFSegment.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/JFIFSegment.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/JFIFSegment.java Fri Dec 28 22:48:44 2007
@@ -16,16 +16,18 @@
  */
 package org.apache.sanselan.formats.jpeg.segments;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.sanselan.ImageReadException;
+import org.apache.sanselan.formats.jpeg.JpegConstants;
 
 public class JFIFSegment extends Segment
 {
-	public final int JFIF_major_version;
-	public final int JFIF_minor_version;
-	public final int density_units;
+	public final int jfifMajorVersion;
+	public final int jfifMinorVersion;
+	public final int densityUnits;
 	public final int xDensity;
 	public final int yDensity;
 
@@ -38,37 +40,36 @@
 		return "JFIF (" + getSegmentType() + ")";
 	}
 
-	private static final byte JFIF0_SIGNATURE[] = new byte[]{
-			(byte) 'J', (byte) 'F', (byte) 'I', (byte) 'F', (byte) 0,
-	};
+	public JFIFSegment(int marker, byte segmentData[])
+			throws ImageReadException, IOException
+	{
+		this(marker, segmentData.length, new ByteArrayInputStream(segmentData));
+	}
 
 	public JFIFSegment(int marker, int marker_length, InputStream is)
 			throws ImageReadException, IOException
 	{
 		super(marker, marker_length);
 
-		{
-			readAndVerifyBytes(is, JFIF0_SIGNATURE,
-					"Not a Valid JPEG File: missing JFIF string");
+		readAndVerifyBytes(is, JpegConstants.JFIF0_SIGNATURE,
+				"Not a Valid JPEG File: missing JFIF string");
 
-			JFIF_major_version = readByte("JFIF_major_version", is,
-					"Not a Valid JPEG File");
-			JFIF_minor_version = readByte("JFIF_minor_version", is,
-					"Not a Valid JPEG File");
-			density_units = readByte("density_units", is,
-					"Not a Valid JPEG File");
-			xDensity = read2Bytes("x_density", is, "Not a Valid JPEG File");
-			yDensity = read2Bytes("y_density", is, "Not a Valid JPEG File");
-
-			xThumbnail = readByte("x_thumbnail", is, "Not a Valid JPEG File");
-			yThumbnail = readByte("y_thumbnail", is, "Not a Valid JPEG File");
-			thumbnailSize = xThumbnail * yThumbnail;
-			if (thumbnailSize > 0)
-			{
-				skipBytes(is, thumbnailSize,
-						"Not a Valid JPEG File: missing thumbnail");
+		jfifMajorVersion = readByte("JFIF_major_version", is,
+				"Not a Valid JPEG File");
+		jfifMinorVersion = readByte("JFIF_minor_version", is,
+				"Not a Valid JPEG File");
+		densityUnits = readByte("density_units", is, "Not a Valid JPEG File");
+		xDensity = read2Bytes("x_density", is, "Not a Valid JPEG File");
+		yDensity = read2Bytes("y_density", is, "Not a Valid JPEG File");
+
+		xThumbnail = readByte("x_thumbnail", is, "Not a Valid JPEG File");
+		yThumbnail = readByte("y_thumbnail", is, "Not a Valid JPEG File");
+		thumbnailSize = xThumbnail * yThumbnail;
+		if (thumbnailSize > 0)
+		{
+			skipBytes(is, thumbnailSize,
+					"Not a Valid JPEG File: missing thumbnail");
 
-			}
 		}
 
 		if (getDebug())

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/SOFNSegment.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/SOFNSegment.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/SOFNSegment.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/SOFNSegment.java Fri Dec 28 22:48:44 2007
@@ -16,6 +16,7 @@
  */
 package org.apache.sanselan.formats.jpeg.segments;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
@@ -25,11 +26,14 @@
 public class SOFNSegment extends Segment
 {
 	public final int width, height;
-	public final int Number_of_components;
+	public final int numberOfComponents;
 	public final int Precision;
 
-	//		public final byte bytes[];
-	//		public final int cur_marker, num_markers;
+	public SOFNSegment(int marker, byte segmentData[])
+			throws ImageReadException, IOException
+	{
+		this(marker, segmentData.length, new ByteArrayInputStream(segmentData));
+	}
 
 	public SOFNSegment(int marker, int marker_length, InputStream is)
 			throws ImageReadException, IOException
@@ -43,7 +47,7 @@
 			Precision = readByte("Data_precision", is, "Not a Valid JPEG File");
 			height = read2Bytes("Image_height", is, "Not a Valid JPEG File");
 			width = read2Bytes("Image_Width", is, "Not a Valid JPEG File");
-			Number_of_components = readByte("Number_of_components", is,
+			numberOfComponents = readByte("Number_of_components", is,
 					"Not a Valid JPEG File");
 
 			// ignore the rest of the segment for now...

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/UnknownSegment.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/UnknownSegment.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/UnknownSegment.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/jpeg/segments/UnknownSegment.java Fri Dec 28 22:48:44 2007
@@ -29,6 +29,12 @@
 		super(marker, marker_length, is);
 	}
 
+	public UnknownSegment(int marker, byte bytes[]) throws ImageReadException,
+			IOException
+	{
+		super(marker, bytes);
+	}
+
 	public String getDescription()
 	{
 		return "Unknown (" + getSegmentType() + ")";

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngImageParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngImageParser.java Fri Dec 28 22:48:44 2007
@@ -31,7 +31,7 @@
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 import java.util.zip.InflaterInputStream;
 
 import org.apache.sanselan.ColorTools;
@@ -113,10 +113,10 @@
 		return false;
 	}
 
-	private Vector readChunks(InputStream is, int ChunkTypes[],
+	private ArrayList readChunks(InputStream is, int ChunkTypes[],
 			boolean return_after_first) throws ImageReadException, IOException
 	{
-		Vector result = new Vector();
+		ArrayList result = new ArrayList();
 
 		while (true)
 		{
@@ -190,7 +190,7 @@
 
 	}
 
-	private Vector readChunks(ByteSource byteSource, int ChunkTypes[],
+	private ArrayList readChunks(ByteSource byteSource, int ChunkTypes[],
 			boolean return_after_first) throws ImageReadException, IOException
 	{
 		InputStream is = null;
@@ -199,7 +199,7 @@
 		{
 			is = byteSource.getInputStream();
 
-			Vector chunks = null;
+			ArrayList chunks = null;
 
 			readSignature(is);
 			chunks = readChunks(is, ChunkTypes, return_after_first);
@@ -221,7 +221,7 @@
 	public byte[] getICCProfileBytes(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
-		Vector chunks = readChunks(byteSource, new int[]{
+		ArrayList chunks = readChunks(byteSource, new int[]{
 			iCCP,
 		}, true);
 
@@ -244,7 +244,7 @@
 	public Dimension getImageSize(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
-		Vector chunks = readChunks(byteSource, new int[]{
+		ArrayList chunks = readChunks(byteSource, new int[]{
 			IHDR,
 		}, true);
 
@@ -272,7 +272,7 @@
 	public IImageMetadata getMetadata(ByteSource byteSource, Map params)
 			throws ImageReadException, IOException
 	{
-		Vector chunks = readChunks(byteSource, new int[]{
+		ArrayList chunks = readChunks(byteSource, new int[]{
 				tEXt, zTXt,
 		}, true);
 
@@ -379,9 +379,9 @@
 		throw new ImageReadException("PNG: unknown color type: " + colorType);
 	}
 
-	private Vector filterChunks(Vector v, int type)
+	private ArrayList filterChunks(ArrayList v, int type)
 	{
-		Vector result = new Vector();
+		ArrayList result = new ArrayList();
 
 		for (int i = 0; i < v.size(); i++)
 		{
@@ -463,7 +463,7 @@
 	public ImageInfo getImageInfo(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
-		Vector chunks = readChunks(byteSource, new int[]{
+		ArrayList chunks = readChunks(byteSource, new int[]{
 				IHDR, pHYs, tEXt, zTXt, tRNS, PLTE,
 		}, false);
 
@@ -473,7 +473,7 @@
 		if ((chunks == null) || (chunks.size() < 1))
 			throw new ImageReadException("PNG: no chunks");
 
-		Vector IHDRs = filterChunks(chunks, IHDR);
+		ArrayList IHDRs = filterChunks(chunks, IHDR);
 		if (IHDRs.size() != 1)
 			throw new ImageReadException("PNG contains more than one Header");
 
@@ -482,7 +482,7 @@
 
 		boolean isTransparent = false;
 
-		Vector tRNSs = filterChunks(chunks, tRNS);
+		ArrayList tRNSs = filterChunks(chunks, tRNS);
 		if (tRNSs.size() > 0)
 		{
 			isTransparent = true;
@@ -493,15 +493,15 @@
 
 		PNGChunkpHYs pngChunkpHYs = null;
 
-		Vector pHYss = filterChunks(chunks, pHYs);
+		ArrayList pHYss = filterChunks(chunks, pHYs);
 		if (pHYss.size() > 1)
 			throw new ImageReadException("PNG contains more than one pHYs: "
 					+ pHYss.size());
 		else if (pHYss.size() == 1)
 			pngChunkpHYs = (PNGChunkpHYs) pHYss.get(0);
 
-		Vector tEXts = filterChunks(chunks, tEXt);
-		Vector zTXts = filterChunks(chunks, zTXt);
+		ArrayList tEXts = filterChunks(chunks, tEXt);
+		ArrayList zTXts = filterChunks(chunks, zTXt);
 
 		//			private class PNGChunkpHYs extends PNGChunk
 		//			{
@@ -520,7 +520,7 @@
 			//				public final int FilterMethod;
 			//				public final int InterlaceMethod;
 
-			Vector Comments = new Vector();
+			ArrayList Comments = new ArrayList();
 
 			for (int i = 0; i < tEXts.size(); i++)
 			{
@@ -574,7 +574,7 @@
 
 			boolean usesPalette = false;
 
-			Vector PLTEs = filterChunks(chunks, PLTE);
+			ArrayList PLTEs = filterChunks(chunks, PLTE);
 			if (PLTEs.size() > 1)
 				usesPalette = true;
 
@@ -612,20 +612,20 @@
 	public BufferedImage getBufferedImage(ByteSource byteSource, Map params)
 			throws ImageReadException, IOException
 	{
-		Vector chunks = readChunks(byteSource, new int[]{
+		ArrayList chunks = readChunks(byteSource, new int[]{
 				IHDR, PLTE, IDAT, tRNS, iCCP, gAMA, sRGB,
 		}, false);
 
 		if ((chunks == null) || (chunks.size() < 1))
 			throw new ImageReadException("PNG: no chunks");
 
-		Vector IHDRs = filterChunks(chunks, IHDR);
+		ArrayList IHDRs = filterChunks(chunks, IHDR);
 		if (IHDRs.size() != 1)
 			throw new ImageReadException("PNG contains more than one Header");
 
 		PNGChunkIHDR pngChunkIHDR = (PNGChunkIHDR) IHDRs.get(0);
 
-		Vector PLTEs = filterChunks(chunks, PLTE);
+		ArrayList PLTEs = filterChunks(chunks, PLTE);
 		if (PLTEs.size() > 1)
 			throw new ImageReadException("PNG contains more than one Palette");
 
@@ -635,7 +635,7 @@
 
 		// -----
 
-		Vector IDATs = filterChunks(chunks, IDAT);
+		ArrayList IDATs = filterChunks(chunks, IDAT);
 		if (IDATs.size() < 1)
 			throw new ImageReadException("PNG missing image data");
 
@@ -654,7 +654,7 @@
 
 		TransparencyFilter transparencyFilter = null;
 
-		Vector tRNSs = filterChunks(chunks, tRNS);
+		ArrayList tRNSs = filterChunks(chunks, tRNS);
 		if (tRNSs.size() > 0)
 		{
 			PNGChunk pngChunktRNS = (PNGChunk) tRNSs.get(0);
@@ -665,9 +665,9 @@
 		ICC_Profile icc_profile = null;
 		GammaCorrection gammaCorrection = null;
 		{
-			Vector sRGBs = filterChunks(chunks, sRGB);
-			Vector gAMAs = filterChunks(chunks, gAMA);
-			Vector iCCPs = filterChunks(chunks, iCCP);
+			ArrayList sRGBs = filterChunks(chunks, sRGB);
+			ArrayList gAMAs = filterChunks(chunks, gAMA);
+			ArrayList iCCPs = filterChunks(chunks, iCCP);
 			if (sRGBs.size() > 1)
 				throw new ImageReadException("PNG: unexpected sRGB chunk");
 			if (gAMAs.size() > 1)
@@ -902,9 +902,9 @@
 		imageInfo.toString(pw, "");
 
 		{
-			Vector chunks = readChunks(byteSource, null, false);
+			ArrayList chunks = readChunks(byteSource, null, false);
 			{
-				Vector IHDRs = filterChunks(chunks, IHDR);
+				ArrayList IHDRs = filterChunks(chunks, IHDR);
 				if (IHDRs.size() != 1)
 				{
 					if (debug)

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngWriter.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngWriter.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngWriter.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/png/PngWriter.java Fri Dec 28 22:48:44 2007
@@ -21,7 +21,7 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.HashMap;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.zip.DeflaterOutputStream;
 
@@ -278,7 +278,7 @@
 			throws ImageWriteException, IOException
 	{
 		// make copy of params; we'll clear keys as we consume them.
-		params = new Hashtable(params);
+		params = new HashMap(params);
 
 		// clear format key.
 		if (params.containsKey(PARAM_KEY_FORMAT))

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/pnm/PNMImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/pnm/PNMImageParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/pnm/PNMImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/pnm/PNMImageParser.java Fri Dec 28 22:48:44 2007
@@ -23,9 +23,9 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintWriter;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.ImageFormat;
 import org.apache.sanselan.ImageInfo;
@@ -196,7 +196,7 @@
 		if (info == null)
 			throw new ImageReadException("PNM: Couldn't read Header");
 
-		Vector Comments = new Vector();
+		ArrayList Comments = new ArrayList();
 
 		int BitsPerPixel = info.getBitDepth() * info.getNumComponents();
 		ImageFormat Format = info.getImageType();
@@ -342,7 +342,7 @@
 			writer = new PPMWriter(RAWBITS);
 
 		// make copy of params; we'll clear keys as we consume them.
-		params = new Hashtable(params);
+		params = new HashMap(params);
 
 		// clear format key.
 		if (params.containsKey(PARAM_KEY_FORMAT))

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/psd/PsdImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/psd/PsdImageParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/psd/PsdImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/psd/PsdImageParser.java Fri Dec 28 22:48:44 2007
@@ -24,7 +24,7 @@
 import java.io.InputStream;
 import java.io.PrintWriter;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import org.apache.sanselan.ImageFormat;
 import org.apache.sanselan.ImageInfo;
@@ -175,7 +175,7 @@
 		return result;
 	}
 
-	private Vector readImageResourceBlocks(byte bytes[],
+	private ArrayList readImageResourceBlocks(byte bytes[],
 			int fImageResourceIDs[], int max_blocks_to_read)
 			throws ImageReadException, IOException
 	{
@@ -195,11 +195,11 @@
 		return false;
 	}
 
-	private Vector readImageResourceBlocks(InputStream is,
+	private ArrayList readImageResourceBlocks(InputStream is,
 			int fImageResourceIDs[], int max_blocks_to_read, int available)
 			throws ImageReadException, IOException
 	{
-		Vector result = new Vector();
+		ArrayList result = new ArrayList();
 
 		while (available > 0)
 		{
@@ -262,7 +262,7 @@
 		return result;
 	}
 
-	private Vector readImageResourceBlocks(ByteSource byteSource,
+	private ArrayList readImageResourceBlocks(ByteSource byteSource,
 			int fImageResourceIDs[], int max_blocks_to_read)
 			throws ImageReadException, IOException
 	{
@@ -477,7 +477,7 @@
 	public byte[] getICCProfileBytes(ByteSource byteSource)
 			throws ImageReadException, IOException
 	{
-		Vector segments = readImageResourceBlocks(byteSource, new int[]{
+		ArrayList segments = readImageResourceBlocks(byteSource, new int[]{
 			IMAGE_RESOURCE_Id_ICC_PROFILE,
 		}, 1);
 
@@ -560,7 +560,7 @@
 		int Width = header.Columns;
 		int Height = header.Rows;
 
-		Vector Comments = new Vector();
+		ArrayList Comments = new ArrayList();
 		// TODO: comments...
 
 		int BitsPerPixel = header.Depth * getChannelsPerMode(header.Mode);
@@ -610,7 +610,7 @@
 		return result;
 	}
 
-	private ImageResourceBlock findImageResourceBlock(Vector blocks, int ID)
+	private ImageResourceBlock findImageResourceBlock(ArrayList blocks, int ID)
 			throws ImageReadException, IOException
 	{
 		for (int i = 0; i < blocks.size(); i++)
@@ -641,7 +641,7 @@
 			imageContents.dump(pw);
 			imageContents.header.dump(pw);
 
-			Vector blocks = readImageResourceBlocks(byteSource,
+			ArrayList blocks = readImageResourceBlocks(byteSource,
 			//					fImageContents.ImageResources, 
 					null, -1);
 
@@ -694,7 +694,7 @@
 		//		GraphicControlExtension gce = (GraphicControlExtension) findBlock(
 		//				fImageContents.blocks, kGraphicControlExtension);
 
-		Vector blocks = readImageResourceBlocks(byteSource,
+		ArrayList blocks = readImageResourceBlocks(byteSource,
 		//					fImageContents.ImageResources, 
 				null, -1);
 

Modified: incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tga/TgaImageParser.java
URL: http://svn.apache.org/viewvc/incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tga/TgaImageParser.java?rev=607388&r1=607387&r2=607388&view=diff
==============================================================================
--- incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tga/TgaImageParser.java (original)
+++ incubator/sanselan/trunk/src/main/java/org/apache/sanselan/formats/tga/TgaImageParser.java Fri Dec 28 22:48:44 2007
@@ -23,7 +23,7 @@
 //import java.io.InputStream;
 //import java.io.PrintWriter;
 //import java.util.Map;
-//import java.util.Vector;
+//import java.util.ArrayList;
 //
 //import org.apache.sanselan.ImageFormat;
 //import org.apache.sanselan.ImageInfo;
@@ -197,7 +197,7 @@
 //		}
 //		String FormatDetails;
 //		int BitsPerPixel;
-//		Vector Comments;
+//		ArrayList Comments;
 //		ImageFormat Format = ImageFormat.IMAGE_FORMAT_TGA;
 //		String FormatName = Format.name;
 //		String MimeType = "image/tga";