You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by da...@apache.org on 2012/02/04 10:21:01 UTC

svn commit: r1240468 - in /commons/proper/sanselan/trunk/src: main/java/org/apache/commons/sanselan/common/itu_t4/ main/java/org/apache/commons/sanselan/formats/jpeg/ main/java/org/apache/commons/sanselan/formats/jpeg/iptc/ test/java/org/apache/commons...

Author: damjan
Date: Sat Feb  4 09:21:00 2012
New Revision: 1240468

URL: http://svn.apache.org/viewvc?rev=1240468&view=rev
Log:
API immutability changes and Java 1.5 updates.

Deleted the unused legacy IptcConstants.IPTC_PREFIX array
(= IPTC_RECORD_TAG_MARKER + IPTC_APPLICATION_2_RECORD_NUMBER).
Converted IptcConstants.IPTC_TYPE_* to an enum.
Made some collections and classes generic.

Similar changes will be applied to the whole tree,
I am just starting here.


Added:
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypes.java   (with props)
Modified:
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/HuffmanTree.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/JpegPhotoshopMetadata.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcConstants.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcParser.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcRecord.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcType.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypeLookup.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/JpegIptcRewriter.java
    commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/PhotoshopApp13Data.java
    commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcDumpTest.java
    commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcUpdateTest.java

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/HuffmanTree.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/HuffmanTree.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/HuffmanTree.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/common/itu_t4/HuffmanTree.java Sat Feb  4 09:21:00 2012
@@ -26,7 +26,7 @@ import org.apache.commons.sanselan.commo
  * A Huffman tree implemented as 1 array for high locality of reference.
  */
 class HuffmanTree {
-    private static class Node {
+    private final static class Node {
         boolean isEmpty = true;
         Object value = null;
     }

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/JpegPhotoshopMetadata.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/JpegPhotoshopMetadata.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/JpegPhotoshopMetadata.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/JpegPhotoshopMetadata.java Sat Feb  4 09:21:00 2012
@@ -22,6 +22,7 @@ import java.util.List;
 import org.apache.commons.sanselan.common.ImageMetadata;
 import org.apache.commons.sanselan.formats.jpeg.iptc.IptcConstants;
 import org.apache.commons.sanselan.formats.jpeg.iptc.IptcRecord;
+import org.apache.commons.sanselan.formats.jpeg.iptc.IptcTypes;
 import org.apache.commons.sanselan.formats.jpeg.iptc.PhotoshopApp13Data;
 import org.apache.commons.sanselan.util.Debug;
 
@@ -35,12 +36,12 @@ public class JpegPhotoshopMetadata exten
     {
         this.photoshopApp13Data = photoshopApp13Data;
 
-        List records = photoshopApp13Data.getRecords();
+        List<IptcRecord> records = photoshopApp13Data.getRecords();
         Collections.sort(records, IptcRecord.COMPARATOR);
         for (int j = 0; j < records.size(); j++)
         {
             IptcRecord element = (IptcRecord) records.get(j);
-            if (element.iptcType.type != IPTC_TYPE_RECORD_VERSION.type)
+            if (element.iptcType != IptcTypes.RECORD_VERSION)
                 add(element.getIptcTypeName(), element.getValue());
         }
     }

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcConstants.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcConstants.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcConstants.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcConstants.java Sat Feb  4 09:21:00 2012
@@ -20,9 +20,6 @@ import org.apache.commons.sanselan.forma
 
 public interface IptcConstants extends JpegConstants
 {
-
-    public static final byte IPTC_PREFIX[] = { 0x1C, 0x02, };
-
     public static final int IPTC_NON_EXTENDED_RECORD_MAXIMUM_SIZE = 32767;
 
     public static final int IMAGE_RESOURCE_BLOCK_PHOTOSHOP2_INFO = 0x03e8;
@@ -90,153 +87,7 @@ public interface IptcConstants extends J
     public static final int IMAGE_RESOURCE_BLOCK_CLIPPING_PATH_NAME = 0x0bb7;
     public static final int IMAGE_RESOURCE_BLOCK_PRINT_FLAGS_INFO = 0x2710;
 
-    // public static final int IPTC_RECORD_PREFIX = 0x1c02;
     public static final int IPTC_RECORD_TAG_MARKER = 0x1c;
     public static final int IPTC_ENVELOPE_RECORD_NUMBER = 0x01;
     public static final int IPTC_APPLICATION_2_RECORD_NUMBER = 0x02;
-
-    public static final IptcType IPTC_TYPE_RECORD_VERSION = new IptcType(0,
-            "Record Version");
-    public static final IptcType IPTC_TYPE_OBJECT_TYPE_REFERENCE = new IptcType(
-            3, "Object Type Reference");
-    public static final IptcType IPTC_TYPE_OBJECT_ATTRIBUTE_REFERENCE = new IptcType(
-            4, "Object Attribute Reference");
-    public static final IptcType IPTC_TYPE_OBJECT_NAME = new IptcType(5,
-            "Object Name");
-    public static final IptcType IPTC_TYPE_EDIT_STATUS = new IptcType(7,
-            "Edit Status");
-    public static final IptcType IPTC_TYPE_EDITORIAL_UPDATE = new IptcType(8,
-            "Editorial Update");
-    public static final IptcType IPTC_TYPE_URGENCY = new IptcType(10, "Urgency");
-    public static final IptcType IPTC_TYPE_SUBJECT_REFERENCE = new IptcType(12,
-            "Subject Reference");
-    public static final IptcType IPTC_TYPE_CATEGORY = new IptcType(15,
-            "Category");
-    public static final IptcType IPTC_TYPE_SUPPLEMENTAL_CATEGORY = new IptcType(
-            20, "Supplemental Category");
-    public static final IptcType IPTC_TYPE_FIXTURE_IDENTIFIER = new IptcType(
-            22, "Fixture Identifier");
-    public static final IptcType IPTC_TYPE_KEYWORDS = new IptcType(25,
-            "Keywords");
-    public static final IptcType IPTC_TYPE_CONTENT_LOCATION_CODE = new IptcType(
-            26, "Content Location Code");
-    public static final IptcType IPTC_TYPE_CONTENT_LOCATION_NAME = new IptcType(
-            27, "Content Location Name");
-    public static final IptcType IPTC_TYPE_RELEASE_DATE = new IptcType(30,
-            "Release Date");
-    public static final IptcType IPTC_TYPE_RELEASE_TIME = new IptcType(35,
-            "Release Time");
-    public static final IptcType IPTC_TYPE_EXPIRATION_DATE = new IptcType(37,
-            "Expiration Date");
-    public static final IptcType IPTC_TYPE_EXPIRATION_TIME = new IptcType(38,
-            "Expiration Time");
-    public static final IptcType IPTC_TYPE_SPECIAL_INSTRUCTIONS = new IptcType(
-            40, "Special Instructions");
-    public static final IptcType IPTC_TYPE_ACTION_ADVISED = new IptcType(42,
-            "Action Advised");
-    public static final IptcType IPTC_TYPE_REFERENCE_SERVICE = new IptcType(45,
-            "Reference Service");
-    public static final IptcType IPTC_TYPE_REFERENCE_DATE = new IptcType(47,
-            "Reference Date");
-    public static final IptcType IPTC_TYPE_REFERENCE_NUMBER = new IptcType(50,
-            "Reference Number");
-    public static final IptcType IPTC_TYPE_DATE_CREATED = new IptcType(55,
-            "Date Created");
-    public static final IptcType IPTC_TYPE_TIME_CREATED = new IptcType(60,
-            "Time Created");
-    public static final IptcType IPTC_TYPE_DIGITAL_CREATION_DATE = new IptcType(
-            62, "Digital Creation Date");
-    public static final IptcType IPTC_TYPE_DIGITAL_CREATION_TIME = new IptcType(
-            63, "Digital Creation Time");
-    public static final IptcType IPTC_TYPE_ORIGINATING_PROGRAM = new IptcType(
-            65, "Originating Program");
-    public static final IptcType IPTC_TYPE_PROGRAM_VERSION = new IptcType(70,
-            "Program Version");
-    public static final IptcType IPTC_TYPE_OBJECT_CYCLE = new IptcType(75,
-            "Object Cycle");
-    public static final IptcType IPTC_TYPE_BYLINE = new IptcType(80, "By-line");
-    public static final IptcType IPTC_TYPE_BYLINE_TITLE = new IptcType(85,
-            "By-line Title");
-    public static final IptcType IPTC_TYPE_CITY = new IptcType(90, "City");
-    public static final IptcType IPTC_TYPE_SUBLOCATION = new IptcType(92,
-            "Sublocation");
-    public static final IptcType IPTC_TYPE_PROVINCE_STATE = new IptcType(95,
-            "Province/State");
-    public static final IptcType IPTC_TYPE_COUNTRY_PRIMARY_LOCATION_CODE = new IptcType(
-            100, "Country/Primary Location Code");
-    public static final IptcType IPTC_TYPE_COUNTRY_PRIMARY_LOCATION_NAME = new IptcType(
-            101, "Country/Primary Location Name");
-    public static final IptcType IPTC_TYPE_ORIGINAL_TRANSMISSION_REFERENCE = new IptcType(
-            103, "Original Transmission, Reference");
-    public static final IptcType IPTC_TYPE_HEADLINE = new IptcType(105,
-            "Headline");
-    public static final IptcType IPTC_TYPE_CREDIT = new IptcType(110, "Credit");
-    public static final IptcType IPTC_TYPE_SOURCE = new IptcType(115, "Source");
-    public static final IptcType IPTC_TYPE_COPYRIGHT_NOTICE = new IptcType(116,
-            "Copyright Notice");
-    public static final IptcType IPTC_TYPE_CONTACT = new IptcType(118,
-            "Contact");
-    public static final IptcType IPTC_TYPE_CAPTION_ABSTRACT = new IptcType(120,
-            "Caption/Abstract");
-    public static final IptcType IPTC_TYPE_WRITER_EDITOR = new IptcType(122,
-            "Writer/Editor");
-    public static final IptcType IPTC_TYPE_RASTERIZED_CAPTION = new IptcType(
-            125, "Rasterized Caption");
-    public static final IptcType IPTC_TYPE_IMAGE_TYPE = new IptcType(130,
-            "ImageType");
-    public static final IptcType IPTC_TYPE_IMAGE_ORIENTATION = new IptcType(
-            131, "Image Orientation");
-    public static final IptcType IPTC_TYPE_LANGUAGE_IDENTIFIER = new IptcType(
-            135, "Language Identifier");
-    public static final IptcType IPTC_TYPE_AUDIO_TYPE = new IptcType(150,
-            "Audio Type");
-    public static final IptcType IPTC_TYPE_AUDIO_SAMPLING_RATE = new IptcType(
-            151, "Audio Sampling Rate");
-    public static final IptcType IPTC_TYPE_AUDIO_SAMPLING_RESOLUTION = new IptcType(
-            152, "Audio Sampling Resolution");
-    public static final IptcType IPTC_TYPE_AUDIO_DURATION = new IptcType(153,
-            "Audio Duration");
-    public static final IptcType IPTC_TYPE_AUDIO_OUTCUE = new IptcType(154,
-            "Audio Outcue");
-    public static final IptcType IPTC_TYPE_OBJECT_DATA_PREVIEW_FILE_FORMAT = new IptcType(
-            200, "Object Data Preview, File Format");
-    public static final IptcType IPTC_TYPE_OBJECT_DATA_PREVIEW_FILE_FORMAT_VERSION = new IptcType(
-            201, "Object Data Preview, File Format Version");
-    public static final IptcType IPTC_TYPE_OBJECT_DATA_PREVIEW_DATA = new IptcType(
-            202, "Object Data Preview Data");
-    // --
-    // public static final IptcType IPTC_TYPE_UNKNOWN = new IptcType(-1,
-    // "Unknown");
-
-    public static final IptcType IPTC_TYPES[] = { IPTC_TYPE_RECORD_VERSION,
-            IPTC_TYPE_OBJECT_TYPE_REFERENCE,
-            IPTC_TYPE_OBJECT_ATTRIBUTE_REFERENCE, IPTC_TYPE_OBJECT_NAME,
-            IPTC_TYPE_EDIT_STATUS, IPTC_TYPE_EDITORIAL_UPDATE,
-            IPTC_TYPE_URGENCY, IPTC_TYPE_SUBJECT_REFERENCE, IPTC_TYPE_CATEGORY,
-            IPTC_TYPE_SUPPLEMENTAL_CATEGORY, IPTC_TYPE_FIXTURE_IDENTIFIER,
-            IPTC_TYPE_KEYWORDS, IPTC_TYPE_CONTENT_LOCATION_CODE,
-            IPTC_TYPE_CONTENT_LOCATION_NAME, IPTC_TYPE_RELEASE_DATE,
-            IPTC_TYPE_RELEASE_TIME, IPTC_TYPE_EXPIRATION_DATE,
-            IPTC_TYPE_EXPIRATION_TIME, IPTC_TYPE_SPECIAL_INSTRUCTIONS,
-            IPTC_TYPE_ACTION_ADVISED, IPTC_TYPE_REFERENCE_SERVICE,
-            IPTC_TYPE_REFERENCE_DATE, IPTC_TYPE_REFERENCE_NUMBER,
-            IPTC_TYPE_DATE_CREATED, IPTC_TYPE_TIME_CREATED,
-            IPTC_TYPE_DIGITAL_CREATION_DATE, IPTC_TYPE_DIGITAL_CREATION_TIME,
-            IPTC_TYPE_ORIGINATING_PROGRAM, IPTC_TYPE_PROGRAM_VERSION,
-            IPTC_TYPE_OBJECT_CYCLE, IPTC_TYPE_BYLINE, IPTC_TYPE_BYLINE_TITLE,
-            IPTC_TYPE_CITY, IPTC_TYPE_SUBLOCATION, IPTC_TYPE_PROVINCE_STATE,
-            IPTC_TYPE_COUNTRY_PRIMARY_LOCATION_CODE,
-            IPTC_TYPE_COUNTRY_PRIMARY_LOCATION_NAME,
-            IPTC_TYPE_ORIGINAL_TRANSMISSION_REFERENCE, IPTC_TYPE_HEADLINE,
-            IPTC_TYPE_CREDIT, IPTC_TYPE_SOURCE, IPTC_TYPE_COPYRIGHT_NOTICE,
-            IPTC_TYPE_CONTACT, IPTC_TYPE_CAPTION_ABSTRACT,
-            IPTC_TYPE_WRITER_EDITOR, IPTC_TYPE_RASTERIZED_CAPTION,
-            IPTC_TYPE_IMAGE_TYPE, IPTC_TYPE_IMAGE_ORIENTATION,
-            IPTC_TYPE_LANGUAGE_IDENTIFIER, IPTC_TYPE_AUDIO_TYPE,
-            IPTC_TYPE_AUDIO_SAMPLING_RATE, IPTC_TYPE_AUDIO_SAMPLING_RESOLUTION,
-            IPTC_TYPE_AUDIO_DURATION, IPTC_TYPE_AUDIO_OUTCUE,
-            IPTC_TYPE_OBJECT_DATA_PREVIEW_FILE_FORMAT,
-            IPTC_TYPE_OBJECT_DATA_PREVIEW_FILE_FORMAT_VERSION,
-            IPTC_TYPE_OBJECT_DATA_PREVIEW_DATA, };
-
 }

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcParser.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcParser.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcParser.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcParser.java Sat Feb  4 09:21:00 2012
@@ -111,9 +111,9 @@ public class IptcParser extends BinaryFi
             boolean verbose, boolean strict) throws ImageReadException,
             IOException
     {
-        List records = new ArrayList();
+        List<IptcRecord> records = new ArrayList<IptcRecord>();
 
-        List allBlocks = parseAllBlocks(bytes, verbose, strict);
+        List<IptcBlock> allBlocks = parseAllBlocks(bytes, verbose, strict);
 
         for (int i = 0; i < allBlocks.size(); i++)
         {
@@ -129,10 +129,10 @@ public class IptcParser extends BinaryFi
         return new PhotoshopApp13Data(records, allBlocks);
     }
 
-    protected List parseIPTCBlock(byte bytes[], boolean verbose)
+    protected List<IptcRecord> parseIPTCBlock(byte bytes[], boolean verbose)
             throws ImageReadException, IOException
     {
-        List elements = new ArrayList();
+        List<IptcRecord> elements = new ArrayList<IptcRecord>();
 
         int index = 0;
         // Integer recordVersion = null;
@@ -256,10 +256,10 @@ public class IptcParser extends BinaryFi
         return elements;
     }
 
-    protected List parseAllBlocks(byte bytes[], boolean verbose, boolean strict)
+    protected List<IptcBlock> parseAllBlocks(byte bytes[], boolean verbose, boolean strict)
             throws ImageReadException, IOException
     {
-        List blocks = new ArrayList();
+        List<IptcBlock> blocks = new ArrayList<IptcBlock>();
 
         BinaryInputStream bis = new BinaryInputStream(bytes, APP13_BYTE_ORDER);
 
@@ -353,7 +353,7 @@ public class IptcParser extends BinaryFi
 
         bos.write(PHOTOSHOP_IDENTIFICATION_STRING);
 
-        List blocks = data.getRawBlocks();
+        List<IptcBlock> blocks = data.getRawBlocks();
         for (int i = 0; i < blocks.size(); i++)
         {
             IptcBlock block = (IptcBlock) blocks.get(i);
@@ -386,7 +386,7 @@ public class IptcParser extends BinaryFi
         return os.toByteArray();
     }
 
-    public byte[] writeIPTCBlock(List elements) throws ImageWriteException,
+    public byte[] writeIPTCBlock(List<IptcRecord> elements) throws ImageWriteException,
             IOException
     {
         byte blockData[];
@@ -398,21 +398,19 @@ public class IptcParser extends BinaryFi
             // first, right record version record
             bos.write(IPTC_RECORD_TAG_MARKER);
             bos.write(IPTC_APPLICATION_2_RECORD_NUMBER);
-            bos.write(IPTC_TYPE_RECORD_VERSION.type); // record version record
+            bos.write(IptcTypes.RECORD_VERSION.type); // record version record
                                                         // type.
             bos.write2Bytes(2); // record version record size
             bos.write2Bytes(2); // record version value
 
             // make a copy of the list.
-            elements = new ArrayList(elements);
+            elements = new ArrayList<IptcRecord>(elements);
 
             // sort the list. Records must be in numerical order.
-            Comparator comparator = new Comparator() {
-                public int compare(Object o1, Object o2)
+            Comparator<IptcRecord> comparator = new Comparator<IptcRecord>() {
+                public int compare(IptcRecord e1, IptcRecord e2)
                 {
-                    IptcRecord e1 = (IptcRecord) o1;
-                    IptcRecord e2 = (IptcRecord) o2;
-                    return e2.iptcType.type - e1.iptcType.type;
+                    return e2.iptcType.getType() - e1.iptcType.getType();
                 }
             };
             Collections.sort(elements, comparator);
@@ -423,15 +421,15 @@ public class IptcParser extends BinaryFi
             {
                 IptcRecord element = (IptcRecord) elements.get(i);
 
-                if (element.iptcType.type == IPTC_TYPE_RECORD_VERSION.type)
+                if (element.iptcType == IptcTypes.RECORD_VERSION)
                     continue; // ignore
 
                 bos.write(IPTC_RECORD_TAG_MARKER);
                 bos.write(IPTC_APPLICATION_2_RECORD_NUMBER);
-                if (element.iptcType.type < 0 || element.iptcType.type > 0xff)
+                if (element.iptcType.getType() < 0 || element.iptcType.getType() > 0xff)
                     throw new ImageWriteException("Invalid record type: "
-                            + element.iptcType.type);
-                bos.write(element.iptcType.type);
+                            + element.iptcType.getType());
+                bos.write(element.iptcType.getType());
 
                 byte recordData[] = element.value.getBytes("ISO-8859-1");
                 if (!new String(recordData, "ISO-8859-1").equals(element.value))

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcRecord.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcRecord.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcRecord.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcRecord.java Sat Feb  4 09:21:00 2012
@@ -39,15 +39,13 @@ public class IptcRecord
 
     public String getIptcTypeName()
     {
-        return iptcType.name;
+        return iptcType.getName();
     }
 
-    public static final Comparator COMPARATOR = new Comparator() {
-        public int compare(Object o1, Object o2)
+    public static final Comparator<IptcRecord> COMPARATOR = new Comparator<IptcRecord>() {
+        public int compare(IptcRecord e1, IptcRecord e2)
         {
-            IptcRecord e1 = (IptcRecord) o1;
-            IptcRecord e2 = (IptcRecord) o2;
-            return e1.iptcType.type - e2.iptcType.type;
+            return e1.iptcType.getType() - e2.iptcType.getType();
         }
     };
 

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcType.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcType.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcType.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcType.java Sat Feb  4 09:21:00 2012
@@ -16,27 +16,10 @@
  */
 package org.apache.commons.sanselan.formats.jpeg.iptc;
 
-import org.apache.commons.sanselan.formats.jpeg.JpegConstants;
 
-public class IptcType implements JpegConstants, IptcConstants
+public interface IptcType
 {
-    public final int type;
-    public final String name;
-
-    public IptcType(int type, String name)
-    {
-        this.type = type;
-        this.name = name;
-    }
-
-    public String toString()
-    {
-        return name + " (" + type + ")";
-    }
-
-    public static IptcType getUnknown(int type)
-    {
-        return new IptcType(type, "Unknown");
-    }
-
+    public int getType();
+    public String getName();
+    public String toString();
 }
\ No newline at end of file

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypeLookup.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypeLookup.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypeLookup.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypeLookup.java Sat Feb  4 09:21:00 2012
@@ -25,19 +25,16 @@ public abstract class IptcTypeLookup imp
     private static final Map<Integer, IptcType> IPTC_TYPE_MAP = new HashMap<Integer, IptcType>();
     static
     {
-        for (int i = 0; i < IPTC_TYPES.length; i++)
+        for (IptcType iptcType : IptcTypes.values())
         {
-            IptcType iptcType = IPTC_TYPES[i];
-            Integer key = new Integer(iptcType.type);
-            IPTC_TYPE_MAP.put(key, iptcType);
+            IPTC_TYPE_MAP.put(iptcType.getType(), iptcType);
         }
     }
 
     public static final IptcType getIptcType(int type)
     {
-        Integer key = new Integer(type);
-        if (!IPTC_TYPE_MAP.containsKey(key))
-            return IptcType.getUnknown(type);
-        return IPTC_TYPE_MAP.get(key);
+        if (!IPTC_TYPE_MAP.containsKey(type))
+            return IptcTypes.getUnknown(type);
+        return IPTC_TYPE_MAP.get(type);
     }
 }
\ No newline at end of file

Added: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypes.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypes.java?rev=1240468&view=auto
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypes.java (added)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypes.java Sat Feb  4 09:21:00 2012
@@ -0,0 +1,156 @@
+package org.apache.commons.sanselan.formats.jpeg.iptc;
+
+public enum IptcTypes implements IptcType {
+    RECORD_VERSION(
+            0, "Record Version"),
+    OBJECT_TYPE_REFERENCE(
+            3, "Object Type Reference"),
+    OBJECT_ATTRIBUTE_REFERENCE(
+            4, "Object Attribute Reference"),
+    OBJECT_NAME(
+            5, "Object Name"),
+    EDIT_STATUS(
+            7, "Edit Status"),
+    EDITORIAL_UPDATE(
+            8, "Editorial Update"),
+    URGENCY(
+            10, "Urgency"),
+    SUBJECT_REFERENCE(
+            12, "Subject Reference"),
+    CATEGORY(
+            15, "Category"),
+    SUPPLEMENTAL_CATEGORY(
+            20, "Supplemental Category"),
+    FIXTURE_IDENTIFIER(
+            22, "Fixture Identifier"),
+    KEYWORDS(
+            25, "Keywords"),
+    CONTENT_LOCATION_CODE(
+            26, "Content Location Code"),
+    CONTENT_LOCATION_NAME(
+            27, "Content Location Name"),
+    RELEASE_DATE(
+            30, "Release Date"),
+    RELEASE_TIME(
+            35, "Release Time"),
+    EXPIRATION_DATE(
+            37, "Expiration Date"),
+    EXPIRATION_TIME(
+            38, "Expiration Time"),
+    SPECIAL_INSTRUCTIONS(
+            40, "Special Instructions"),
+    ACTION_ADVISED(
+            42, "Action Advised"),
+    REFERENCE_SERVICE(
+            45, "Reference Service"),
+    REFERENCE_DATE(
+            47, "Reference Date"),
+    REFERENCE_NUMBER(
+            50, "Reference Number"),
+    DATE_CREATED(
+            55, "Date Created"),
+    TIME_CREATED(
+            60, "Time Created"),
+    DIGITAL_CREATION_DATE(
+            62, "Digital Creation Date"),
+    DIGITAL_CREATION_TIME(
+            63, "Digital Creation Time"),
+    ORIGINATING_PROGRAM(
+            65, "Originating Program"),
+    PROGRAM_VERSION(
+            70, "Program Version"),
+    OBJECT_CYCLE(
+            75, "Object Cycle"),
+    BYLINE(
+            80, "By-line"),
+    BYLINE_TITLE(
+            85, "By-line Title"),
+    CITY(
+            90, "City"),
+    SUBLOCATION(
+            92, "Sublocation"),
+    PROVINCE_STATE(
+            95, "Province/State"),
+    COUNTRY_PRIMARY_LOCATION_CODE(
+            100, "Country/Primary Location Code"),
+    COUNTRY_PRIMARY_LOCATION_NAME(
+            101, "Country/Primary Location Name"),
+    ORIGINAL_TRANSMISSION_REFERENCE(
+            103, "Original Transmission, Reference"),
+    HEADLINE(
+            105, "Headline"),
+    CREDIT(
+            110, "Credit"),
+    SOURCE(
+            115, "Source"),
+    COPYRIGHT_NOTICE(
+            116, "Copyright Notice"),
+    CONTACT(
+            118, "Contact"),
+    CAPTION_ABSTRACT(
+            120, "Caption/Abstract"),
+    WRITER_EDITOR(
+            122, "Writer/Editor"),
+    RASTERIZED_CAPTION(
+            125, "Rasterized Caption"),
+    IMAGE_TYPE(
+            130, "ImageType"),
+    IMAGE_ORIENTATION(
+            131, "Image Orientation"),
+    LANGUAGE_IDENTIFIER(
+            135, "Language Identifier"),
+    AUDIO_TYPE(
+            150, "Audio Type"),
+    AUDIO_SAMPLING_RATE(
+            151, "Audio Sampling Rate"),
+    AUDIO_SAMPLING_RESOLUTION(
+            152, "Audio Sampling Resolution"),
+    AUDIO_DURATION(
+            153, "Audio Duration"),
+    AUDIO_OUTCUE(
+            154, "Audio Outcue"),
+    OBJECT_DATA_PREVIEW_FILE_FORMAT(
+            200, "Object Data Preview, File Format"),
+    OBJECT_DATA_PREVIEW_FILE_FORMAT_VERSION(
+            201, "Object Data Preview, File Format Version"),
+    OBJECT_DATA_PREVIEW_DATA(
+            202, "Object Data Preview Data");
+
+    public final int type;
+    public final String name;
+    
+    IptcTypes(int type, String name)
+    {
+        this.type = type;
+        this.name = name;
+    }
+    
+    public String getName() {
+        return name;
+    }
+    
+    public int getType() {
+        return type;
+    }
+
+    public String toString()
+    {
+        return name + " (" + type + ")";
+    }
+    
+    public static IptcType getUnknown(final int type) {
+        return new IptcType() {
+            public String getName() {
+                return "Unknown";
+            }
+            
+            public int getType() {
+                return type;
+            }
+            
+            public String toString() {
+                return "Unknown (" + type + ")";
+            }
+        };
+    }
+}

Propchange: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcTypes.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/JpegIptcRewriter.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/JpegIptcRewriter.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/JpegIptcRewriter.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/JpegIptcRewriter.java Sat Feb  4 09:21:00 2012
@@ -131,8 +131,8 @@ public class JpegIptcRewriter extends Jp
             Map params = new HashMap();
             PhotoshopApp13Data oldData = new IptcParser()
                     .parsePhotoshopSegment(oldSegment.segmentData, params);
-            List newBlocks = oldData.getNonIptcBlocks();
-            List newRecords = new ArrayList();
+            List<IptcBlock> newBlocks = oldData.getNonIptcBlocks();
+            List<IptcRecord> newRecords = new ArrayList<IptcRecord>();
             PhotoshopApp13Data newData = new PhotoshopApp13Data(newRecords,
                     newBlocks);
             byte segmentBytes[] = new IptcParser()

Modified: commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/PhotoshopApp13Data.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/PhotoshopApp13Data.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/PhotoshopApp13Data.java (original)
+++ commons/proper/sanselan/trunk/src/main/java/org/apache/commons/sanselan/formats/jpeg/iptc/PhotoshopApp13Data.java Sat Feb  4 09:21:00 2012
@@ -22,31 +22,31 @@ import java.util.List;
 
 public class PhotoshopApp13Data implements IptcConstants
 {
-    private final List records;
-    private final List rawBlocks;
+    private final List<IptcRecord> records;
+    private final List<IptcBlock> rawBlocks;
 
-    public PhotoshopApp13Data(List records, List rawBlocks)
+    public PhotoshopApp13Data(List<IptcRecord> records, List<IptcBlock> rawBlocks)
     {
         this.rawBlocks = rawBlocks;
         this.records = records;
     }
 
-    public List getRecords()
+    public List<IptcRecord> getRecords()
     {
-        return new ArrayList(records);
+        return new ArrayList<IptcRecord>(records);
     }
 
-    public List getRawBlocks()
+    public List<IptcBlock> getRawBlocks()
     {
-        return new ArrayList(rawBlocks);
+        return new ArrayList<IptcBlock>(rawBlocks);
     }
 
-    public List getNonIptcBlocks()
+    public List<IptcBlock> getNonIptcBlocks()
     {
-        List result = new ArrayList();
+        List<IptcBlock> result = new ArrayList<IptcBlock>();
         for (int i = 0; i < rawBlocks.size(); i++)
         {
-            IptcBlock block = (IptcBlock) rawBlocks.get(i);
+            IptcBlock block = rawBlocks.get(i);
             if (!block.isIPTCBlock())
                 result.add(block);
         }

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcDumpTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcDumpTest.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcDumpTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcDumpTest.java Sat Feb  4 09:21:00 2012
@@ -72,9 +72,9 @@ public class IptcDumpTest extends IptcBa
             for (int j = 0; j < oldRecords.size(); j++)
             {
                 IptcRecord record = (IptcRecord) oldRecords.get(j);
-                if (record.iptcType.type != IptcConstants.IPTC_TYPE_CITY.type)
-                    Debug.debug("Key: " + record.iptcType.name + " (0x"
-                            + Integer.toHexString(record.iptcType.type)
+                if (record.iptcType != IptcTypes.CITY)
+                    Debug.debug("Key: " + record.iptcType.getName() + " (0x"
+                            + Integer.toHexString(record.iptcType.getType())
                             + "), value: " + record.value);
             }
             Debug.debug();

Modified: commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcUpdateTest.java
URL: http://svn.apache.org/viewvc/commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcUpdateTest.java?rev=1240468&r1=1240467&r2=1240468&view=diff
==============================================================================
--- commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcUpdateTest.java (original)
+++ commons/proper/sanselan/trunk/src/test/java/org/apache/commons/sanselan/formats/jpeg/iptc/IptcUpdateTest.java Sat Feb  4 09:21:00 2012
@@ -177,14 +177,14 @@ public class IptcUpdateTest extends Iptc
                 for (int j = 0; j < oldRecords.size(); j++)
                 {
                     IptcRecord record = (IptcRecord) oldRecords.get(j);
-                    if (record.iptcType.type != IptcConstants.IPTC_TYPE_CITY.type
-                            && record.iptcType.type != IptcConstants.IPTC_TYPE_CREDIT.type)
+                    if (record.iptcType != IptcTypes.CITY
+                            && record.iptcType != IptcTypes.CREDIT)
                         newRecords.add(record);
                 }
 
-                newRecords.add(new IptcRecord(IptcConstants.IPTC_TYPE_CITY,
+                newRecords.add(new IptcRecord(IptcTypes.CITY,
                         "Albany, NY"));
-                newRecords.add(new IptcRecord(IptcConstants.IPTC_TYPE_CREDIT,
+                newRecords.add(new IptcRecord(IptcTypes.CREDIT,
                         "William Sorensen"));
 
                 PhotoshopApp13Data newData = new PhotoshopApp13Data(newRecords,
@@ -228,9 +228,9 @@ public class IptcUpdateTest extends Iptc
                 List newBlocks = metadata.photoshopApp13Data.getNonIptcBlocks();
                 List newRecords = new ArrayList();
 
-                newRecords.add(new IptcRecord(IptcConstants.IPTC_TYPE_CITY,
+                newRecords.add(new IptcRecord(IptcTypes.CITY,
                         "Albany, NY"));
-                newRecords.add(new IptcRecord(IptcConstants.IPTC_TYPE_CREDIT,
+                newRecords.add(new IptcRecord(IptcTypes.CREDIT,
                         "William Sorensen"));
 
                 PhotoshopApp13Data newData = new PhotoshopApp13Data(newRecords,
@@ -274,9 +274,9 @@ public class IptcUpdateTest extends Iptc
                 List newBlocks = new ArrayList();
                 List newRecords = new ArrayList();
 
-                newRecords.add(new IptcRecord(IptcConstants.IPTC_TYPE_CITY,
+                newRecords.add(new IptcRecord(IptcTypes.CITY,
                         "Albany, NY"));
-                newRecords.add(new IptcRecord(IptcConstants.IPTC_TYPE_CREDIT,
+                newRecords.add(new IptcRecord(IptcTypes.CREDIT,
                         "William Sorensen"));
 
                 PhotoshopApp13Data newData = new PhotoshopApp13Data(newRecords,
@@ -368,16 +368,16 @@ public class IptcUpdateTest extends Iptc
                         for (int j = 0; j < oldRecords.size(); j++)
                         {
                             IptcRecord record = (IptcRecord) oldRecords.get(j);
-                            if (record.iptcType.type != IptcConstants.IPTC_TYPE_CITY.type
-                                    && record.iptcType.type != IptcConstants.IPTC_TYPE_CREDIT.type)
+                            if (record.iptcType != IptcTypes.CITY
+                                    && record.iptcType != IptcTypes.CREDIT)
                                 newRecords.add(record);
                         }
                     }
                 }
 
-                newRecords.add(new IptcRecord(IptcConstants.IPTC_TYPE_CITY,
+                newRecords.add(new IptcRecord(IptcTypes.CITY,
                         "Albany, NY"));
-                newRecords.add(new IptcRecord(IptcConstants.IPTC_TYPE_CREDIT,
+                newRecords.add(new IptcRecord(IptcTypes.CREDIT,
                         "William Sorensen"));
 
                 PhotoshopApp13Data newData = new PhotoshopApp13Data(newRecords,