Factor out RFC 2301 tags and TIFF4 tags.



git-svn-id: https://svn.apache.org/repos/asf/commons/proper/sanselan/trunk@1302103 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/AllTagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/AllTagConstants.java
index 7504f31..4b0c213 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/AllTagConstants.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/AllTagConstants.java
@@ -27,9 +27,11 @@
             SanselanConstants
 {
     public static final List<TagInfo> ALL_TAGS = Collections.unmodifiableList(
-            TagConstantsUtils.mergeTagLists(TiffTagConstants.ALL_TIFF_TAGS,
+            TagConstantsUtils.mergeTagLists(
+                    Tiff4TagConstants.ALL_TIFF_4_TAGS,
+                    TiffTagConstants.ALL_TIFF_TAGS,
                     ExifTagConstants.ALL_EXIF_TAGS,
-                    TiffClassFTagConstants.ALL_TIFF_CLASS_F_TAGS,
+                    Rfc2301TagConstants.ALL_RFC_2301_TAGS,
                     AdobePageMaker6TagConstants.ALL_ADOBE_PAGEMAKER_6_TAG_CONSTANTS,
                     GpsTagConstants.ALL_GPS_TAGS));
 
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/ExifTagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/ExifTagConstants.java
index f0b0d1a..0bad046 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/ExifTagConstants.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/ExifTagConstants.java
@@ -83,38 +83,8 @@
     public static final TagInfoLong EXIF_TAG_JPG_FROM_RAW_LENGTH_SUB_IFD2 = new TagInfoLong(
             "Jpg From Raw Length", 0x0117, 1,
             TiffDirectoryType.EXIF_DIRECTORY_SUB_IFD2);
-    public static final TagInfoShort EXIF_TAG_COLOR_RESPONSE_UNIT = new TagInfoShort(
-            "Color Response Unit", 0x012c, 1,
-            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
     public static final TagInfoUndefined EXIF_TAG_JPEGTABLES = new TagInfoUndefined("JPEGTables",
             0x015b, -1, TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfoLong EXIF_TAG_GLOBAL_PARAMETERS_IFD = new TagInfoLong(
-            "Global Parameters IFD", 0x0190, 1,
-            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN, true);
-    public static final TagInfoLong EXIF_TAG_PROFILE_TYPE = new TagInfoLong(
-            "Profile Type", 0x0191, 1,
-            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
-    public static final int PROFILE_TYPE_VALUE_UNSPECIFIED = 0;
-    public static final int PROFILE_TYPE_VALUE_GROUP_3_FAX = 1;
-    public static final TagInfoByte EXIF_TAG_FAX_PROFILE = new TagInfoByte(
-            "Fax Profile", 0x0192, 1,
-            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
-    public static final int FAX_PROFILE_VALUE_UNKNOWN = 0;
-    public static final int FAX_PROFILE_VALUE_MINIMAL_B_AND_W_LOSSLESS_S = 1;
-    public static final int FAX_PROFILE_VALUE_EXTENDED_B_AND_W_LOSSLESS_F = 2;
-    public static final int FAX_PROFILE_VALUE_LOSSLESS_JBIG_B_AND_W_J = 3;
-    public static final int FAX_PROFILE_VALUE_LOSSY_COLOR_AND_GRAYSCALE_C = 4;
-    public static final int FAX_PROFILE_VALUE_LOSSLESS_COLOR_AND_GRAYSCALE_L = 5;
-    public static final int FAX_PROFILE_VALUE_MIXED_RASTER_CONTENT_M = 6;
-    public static final TagInfoLong EXIF_TAG_CODING_METHODS = new TagInfoLong(
-            "Coding Methods", 0x0193, 1,
-            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfoByte EXIF_TAG_VERSION_YEAR = new TagInfoByte(
-            "Version Year", 0x0194, 4,
-            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
-    public static final TagInfoByte EXIF_TAG_MODE_NUMBER = new TagInfoByte(
-            "Mode Number", 0x0195, 1,
-            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
     public static final TagInfoRational EXIF_TAG_DECODE = new TagInfoRational("Decode", 0x01b1,
             -1, TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
     public static final TagInfoShort EXIF_TAG_DEFAULT_IMAGE_COLOR = new TagInfoShort(
@@ -1050,11 +1020,8 @@
                     EXIF_TAG_PREVIEW_IMAGE_LENGTH_IFD0,
                     EXIF_TAG_PREVIEW_IMAGE_LENGTH_SUB_IFD1,
                     EXIF_TAG_JPG_FROM_RAW_LENGTH_SUB_IFD2,
-                    EXIF_TAG_COLOR_RESPONSE_UNIT,
                     EXIF_TAG_JPEGTABLES,
-                    EXIF_TAG_GLOBAL_PARAMETERS_IFD, EXIF_TAG_PROFILE_TYPE,
-                    EXIF_TAG_FAX_PROFILE, EXIF_TAG_CODING_METHODS,
-                    EXIF_TAG_VERSION_YEAR, EXIF_TAG_MODE_NUMBER, EXIF_TAG_DECODE,
+                    EXIF_TAG_DECODE,
                     EXIF_TAG_DEFAULT_IMAGE_COLOR,
                     EXIF_TAG_PREVIEW_IMAGE_START_MAKER_NOTES,
                     EXIF_TAG_JPG_FROM_RAW_START_SUB_IFD,
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/Rfc2301TagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/Rfc2301TagConstants.java
new file mode 100644
index 0000000..b8bf821
--- /dev/null
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/Rfc2301TagConstants.java
@@ -0,0 +1,82 @@
+package org.apache.commons.sanselan.formats.tiff.constants;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfo;
+import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfoByte;
+import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfoLong;
+import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfoShort;
+import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfoShortOrLong;
+
+/**
+ * RFC 2301: File Format for Internet Fax
+ * <BR>
+ * www.ietf.org/rfc/rfc2301.txt
+ * <BR>
+ * Also subsumes  "The spirit of TIFF class F"
+ * <BR>
+ * http://cool.conservation-us.org/bytopic/imaging/std/tiff-f.html
+ */
+public interface Rfc2301TagConstants extends TiffFieldTypeConstants {
+    public static final TagInfoShortOrLong TIFF_TAG_BAD_FAX_LINES = new TagInfoShortOrLong(
+            "Bad Fax Lines", 0x0146, 1,
+            TiffDirectoryType.TIFF_DIRECTORY_ROOT);
+    
+    public static final TagInfoShort TIFF_TAG_CLEAN_FAX_DATA = new TagInfoShort(
+            "Clean Fax Data", 0x0147, 1,
+            TiffDirectoryType.TIFF_DIRECTORY_ROOT);
+    public static final int CLEAN_FAX_DATA_VALUE_CLEAN = 0;
+    public static final int CLEAN_FAX_DATA_VALUE_REGENERATED = 1;
+    public static final int CLEAN_FAX_DATA_VALUE_UNCLEAN = 2;
+    
+    public static final TagInfoShortOrLong TIFF_TAG_CONSECUTIVE_BAD_FAX_LINES = new TagInfoShortOrLong(
+            "Consecutive Bad Fax Lines", 0x0148,
+            1, TiffDirectoryType.TIFF_DIRECTORY_ROOT);
+
+    public static final TagInfoLong TIFF_TAG_GLOBAL_PARAMETERS_IFD = new TagInfoLong(
+            "Global Parameters IFD", 0x0190, 1,
+            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN, true);
+    
+    public static final TagInfoLong TIFF_TAG_PROFILE_TYPE = new TagInfoLong(
+            "Profile Type", 0x0191, 1,
+            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
+    public static final int PROFILE_TYPE_VALUE_UNSPECIFIED = 0;
+    public static final int PROFILE_TYPE_VALUE_GROUP_3_FAX = 1;
+    
+    public static final TagInfoByte TIFF_TAG_FAX_PROFILE = new TagInfoByte(
+            "Fax Profile", 0x0192, 1,
+            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
+    public static final int FAX_PROFILE_VALUE_UNKNOWN = 0;
+    public static final int FAX_PROFILE_VALUE_MINIMAL_B_AND_W_LOSSLESS_S = 1;
+    public static final int FAX_PROFILE_VALUE_EXTENDED_B_AND_W_LOSSLESS_F = 2;
+    public static final int FAX_PROFILE_VALUE_LOSSLESS_JBIG_B_AND_W_J = 3;
+    public static final int FAX_PROFILE_VALUE_LOSSY_COLOR_AND_GRAYSCALE_C = 4;
+    public static final int FAX_PROFILE_VALUE_LOSSLESS_COLOR_AND_GRAYSCALE_L = 5;
+    public static final int FAX_PROFILE_VALUE_MIXED_RASTER_CONTENT_M = 6;
+    
+    public static final TagInfoLong TIFF_TAG_CODING_METHODS = new TagInfoLong(
+            "Coding Methods", 0x0193, 1,
+            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
+    
+    public static final TagInfoByte TIFF_TAG_VERSION_YEAR = new TagInfoByte(
+            "Version Year", 0x0194, 4,
+            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
+    
+    public static final TagInfoByte TIFF_TAG_MODE_NUMBER = new TagInfoByte(
+            "Mode Number", 0x0195, 1,
+            TiffDirectoryType.EXIF_DIRECTORY_UNKNOWN);
+
+    public static final List<TagInfo> ALL_RFC_2301_TAGS =
+            Collections.unmodifiableList(Arrays.asList(
+                    TIFF_TAG_BAD_FAX_LINES,
+                    TIFF_TAG_CLEAN_FAX_DATA,
+                    TIFF_TAG_CONSECUTIVE_BAD_FAX_LINES,
+                    TIFF_TAG_GLOBAL_PARAMETERS_IFD,
+                    TIFF_TAG_PROFILE_TYPE,
+                    TIFF_TAG_FAX_PROFILE,
+                    TIFF_TAG_CODING_METHODS,
+                    TIFF_TAG_VERSION_YEAR,
+                    TIFF_TAG_MODE_NUMBER));
+}
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/Tiff4TagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/Tiff4TagConstants.java
new file mode 100644
index 0000000..cfc66e9
--- /dev/null
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/Tiff4TagConstants.java
@@ -0,0 +1,28 @@
+package org.apache.commons.sanselan.formats.tiff.constants;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfo;
+import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfoShort;
+
+/**
+ * Tags in TIFF4 but NOT in TIFF6.
+ * <BR>
+ * http://cool.conservation-us.org/bytopic/imaging/std/tiff4.html
+ */
+public class Tiff4TagConstants {
+    public static final TagInfoShort TIFF_TAG_COLOR_RESPONSE_UNIT = new TagInfoShort(
+            "Color Response Unit", 0x12C, 1,
+            TiffDirectoryType.TIFF_DIRECTORY_ROOT);
+    public static final int COLOR_RESPONSE_UNIT_VALUE_0_1 = 1;
+    public static final int COLOR_RESPONSE_UNIT_VALUE_0_01 = 2;
+    public static final int COLOR_RESPONSE_UNIT_VALUE_0_001 = 3;
+    public static final int COLOR_RESPONSE_UNIT_VALUE_0_0001 = 4;
+    public static final int COLOR_RESPONSE_UNIT_VALUE_0_00001 = 5;
+    
+    public static final List<TagInfo> ALL_TIFF_4_TAGS =
+            Collections.unmodifiableList(Arrays.asList(
+                    new TagInfo[] {TIFF_TAG_COLOR_RESPONSE_UNIT}));
+}
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffClassFTagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffClassFTagConstants.java
deleted file mode 100644
index c1661cc..0000000
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffClassFTagConstants.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.apache.commons.sanselan.formats.tiff.constants;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfo;
-import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfoShort;
-import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfoShortOrLong;
-
-/**
- * "The spirit of TIFF class F"
- * http://cool.conservation-us.org/bytopic/imaging/std/tiff-f.html
- */
-public interface TiffClassFTagConstants extends TiffFieldTypeConstants {
-    public static final TagInfoShortOrLong TIFF_TAG_BAD_FAX_LINES = new TagInfoShortOrLong(
-            "Bad Fax Lines", 0x0146, 1,
-            TiffDirectoryType.TIFF_DIRECTORY_ROOT);
-    
-    public static final TagInfoShort TIFF_TAG_CLEAN_FAX_DATA = new TagInfoShort(
-            "Clean Fax Data", 0x0147, 1,
-            TiffDirectoryType.TIFF_DIRECTORY_ROOT);
-    public static final int CLEAN_FAX_DATA_VALUE_CLEAN = 0;
-    public static final int CLEAN_FAX_DATA_VALUE_REGENERATED = 1;
-    public static final int CLEAN_FAX_DATA_VALUE_UNCLEAN = 2;
-    
-    public static final TagInfoShortOrLong TIFF_TAG_CONSECUTIVE_BAD_FAX_LINES = new TagInfoShortOrLong(
-            "Consecutive Bad Fax Lines", 0x0148,
-            1, TiffDirectoryType.TIFF_DIRECTORY_ROOT);
-
-    public static final List<TagInfo> ALL_TIFF_CLASS_F_TAGS =
-            Collections.unmodifiableList(Arrays.asList(
-                    TIFF_TAG_BAD_FAX_LINES, TIFF_TAG_CLEAN_FAX_DATA,
-                    TIFF_TAG_CONSECUTIVE_BAD_FAX_LINES));
-}
diff --git a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffTagConstants.java b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffTagConstants.java
index 5059e68..925f1ee 100644
--- a/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffTagConstants.java
+++ b/src/main/java/org/apache/commons/sanselan/formats/tiff/constants/TiffTagConstants.java
@@ -33,6 +33,8 @@
 
 /**
  * Tags from the TIFF6 specification.
+ * <BR>
+ * http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf
  */
 public interface TiffTagConstants
         extends
@@ -232,10 +234,10 @@
             "Gray Response Unit", 0x122, 1,
             TiffDirectoryType.TIFF_DIRECTORY_ROOT);
     public static final int GRAY_RESPONSE_UNIT_VALUE_0_1 = 1;
-    public static final int GRAY_RESPONSE_UNIT_VALUE_0_001 = 2;
-    public static final int GRAY_RESPONSE_UNIT_VALUE_0_0001 = 3;
-    public static final int GRAY_RESPONSE_UNIT_VALUE_1E_05 = 4;
-    public static final int GRAY_RESPONSE_UNIT_VALUE_1E_06 = 5;
+    public static final int GRAY_RESPONSE_UNIT_VALUE_0_01 = 2;
+    public static final int GRAY_RESPONSE_UNIT_VALUE_0_001 = 3;
+    public static final int GRAY_RESPONSE_UNIT_VALUE_0_0001 = 4;
+    public static final int GRAY_RESPONSE_UNIT_VALUE_0_00001 = 5;
 
     public static final TagInfoShort TIFF_TAG_GRAY_RESPONSE_CURVE = new TagInfoShort(
             "Gray Response Curve", 0x123, -1,
diff --git a/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffTagIntegrityTest.java b/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffTagIntegrityTest.java
index e98a478..8fb5067 100644
--- a/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffTagIntegrityTest.java
+++ b/src/test/java/org/apache/commons/sanselan/formats/tiff/TiffTagIntegrityTest.java
@@ -23,7 +23,7 @@
 import org.apache.commons.sanselan.formats.tiff.constants.AdobePageMaker6TagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.ExifTagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.GpsTagConstants;
-import org.apache.commons.sanselan.formats.tiff.constants.TiffClassFTagConstants;
+import org.apache.commons.sanselan.formats.tiff.constants.Rfc2301TagConstants;
 import org.apache.commons.sanselan.formats.tiff.constants.TiffTagConstants;
 import org.apache.commons.sanselan.formats.tiff.taginfos.TagInfo;
 
@@ -32,7 +32,7 @@
         verifyFields(TiffTagConstants.class, TiffTagConstants.ALL_TIFF_TAGS);
         verifyFields(GpsTagConstants.class, GpsTagConstants.ALL_GPS_TAGS);
         verifyFields(ExifTagConstants.class, ExifTagConstants.ALL_EXIF_TAGS);
-        verifyFields(TiffClassFTagConstants.class, TiffClassFTagConstants.ALL_TIFF_CLASS_F_TAGS);
+        verifyFields(Rfc2301TagConstants.class, Rfc2301TagConstants.ALL_RFC_2301_TAGS);
         verifyFields(AdobePageMaker6TagConstants.class, AdobePageMaker6TagConstants.ALL_ADOBE_PAGEMAKER_6_TAG_CONSTANTS);
     }