| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package com.sun.imageio.plugins.png;  | 
 | 
 | 
 | 
import java.util.ArrayList;  | 
 | 
import java.util.Arrays;  | 
 | 
import java.util.List;  | 
 | 
import java.util.ListResourceBundle;  | 
 | 
import javax.imageio.ImageTypeSpecifier;  | 
 | 
import javax.imageio.metadata.IIOMetadataFormat;  | 
 | 
import javax.imageio.metadata.IIOMetadataFormatImpl;  | 
 | 
 | 
 | 
public class PNGMetadataFormat extends IIOMetadataFormatImpl { | 
 | 
 | 
 | 
    private static IIOMetadataFormat instance = null;  | 
 | 
 | 
 | 
    private static String VALUE_0 = "0";  | 
 | 
    private static String VALUE_1 = "1";  | 
 | 
    private static String VALUE_12 = "12";  | 
 | 
    private static String VALUE_23 = "23";  | 
 | 
    private static String VALUE_31 = "31";  | 
 | 
    private static String VALUE_59 = "59";  | 
 | 
    private static String VALUE_60 = "60";  | 
 | 
    private static String VALUE_255 = "255";  | 
 | 
    private static String VALUE_MAX_16 = "65535";   | 
 | 
    private static String VALUE_MAX_32 = "2147483647";   | 
 | 
 | 
 | 
    private PNGMetadataFormat() { | 
 | 
        super(PNGMetadata.nativeMetadataFormatName,  | 
 | 
              CHILD_POLICY_SOME);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("IHDR", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("IHDR", "width", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_1, VALUE_MAX_32, true, true);  | 
 | 
 | 
 | 
        addAttribute("IHDR", "height", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_1, VALUE_MAX_32, true, true);  | 
 | 
 | 
 | 
        addAttribute("IHDR", "bitDepth", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     Arrays.asList(PNGMetadata.IHDR_bitDepths));  | 
 | 
 | 
 | 
        String[] colorTypes = { | 
 | 
            "Grayscale", "RGB", "Palette", "GrayAlpha", "RGBAlpha"  | 
 | 
        };  | 
 | 
        addAttribute("IHDR", "colorType", | 
 | 
                     DATATYPE_STRING, true, null,  | 
 | 
                     Arrays.asList(colorTypes));  | 
 | 
 | 
 | 
        addAttribute("IHDR", "compressionMethod", | 
 | 
                     DATATYPE_STRING, true, null,  | 
 | 
                     Arrays.asList(PNGMetadata.IHDR_compressionMethodNames));  | 
 | 
 | 
 | 
        addAttribute("IHDR", "filterMethod", | 
 | 
                     DATATYPE_STRING, true, null,  | 
 | 
                     Arrays.asList(PNGMetadata.IHDR_filterMethodNames));  | 
 | 
 | 
 | 
        addAttribute("IHDR", "interlaceMethod", | 
 | 
                     DATATYPE_STRING, true, null,  | 
 | 
                     Arrays.asList(PNGMetadata.IHDR_interlaceMethodNames));  | 
 | 
 | 
 | 
          | 
 | 
        addElement("PLTE", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   1, 256);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("PLTEEntry", "PLTE", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("PLTEEntry", "index", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("PLTEEntry", "red", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("PLTEEntry", "green", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("PLTEEntry", "blue", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("bKGD", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_CHOICE);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("bKGD_Grayscale", "bKGD", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("bKGD_Grayscale", "gray", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("bKGD_RGB", "bKGD", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("bKGD_RGB", "red", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("bKGD_RGB", "green", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("bKGD_RGB", "blue", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("bKGD_Palette", "bKGD", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("bKGD_Palette", "index", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("cHRM", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("cHRM", "whitePointX", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("cHRM", "whitePointY", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("cHRM", "redX", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("cHRM", "redY", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("cHRM", "greenX", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("cHRM", "greenY", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("cHRM", "blueX", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("cHRM", "blueY", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("gAMA", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("gAMA", "value", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_32, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("hIST", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   1, 256);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("hISTEntry", "hIST", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("hISTEntry", "index", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("hISTEntry", "value", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("iCCP", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("iCCP", "profileName", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
        addAttribute("iCCP", "compressionMethod", | 
 | 
                     DATATYPE_STRING, true, null,  | 
 | 
                     Arrays.asList(PNGMetadata.iCCP_compressionMethodNames));  | 
 | 
 | 
 | 
        addObjectValue("iCCP", byte.class, 0, Integer.MAX_VALUE); | 
 | 
 | 
 | 
          | 
 | 
        addElement("iTXt", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   1, Integer.MAX_VALUE);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("iTXtEntry", "iTXt", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("iTXtEntry", "keyword", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
        addBooleanAttribute("iTXtEntry", "compressionFlag", | 
 | 
                            false, false);  | 
 | 
 | 
 | 
        addAttribute("iTXtEntry", "compressionMethod", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
        addAttribute("iTXtEntry", "languageTag", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
        addAttribute("iTXtEntry", "translatedKeyword", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
        addAttribute("iTXtEntry", "text", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("pHYS", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("pHYS", "pixelsPerUnitXAxis", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_32, true, true);  | 
 | 
        addAttribute("pHYS", "pixelsPerUnitYAxis", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_32, true, true);  | 
 | 
        addAttribute("pHYS", "unitSpecifier", | 
 | 
                     DATATYPE_STRING, true, null,  | 
 | 
                     Arrays.asList(PNGMetadata.unitSpecifierNames));  | 
 | 
 | 
 | 
          | 
 | 
        addElement("sBIT", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_CHOICE);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("sBIT_Grayscale", "sBIT", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("sBIT_Grayscale", "gray", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("sBIT_GrayAlpha", "sBIT", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("sBIT_GrayAlpha", "gray", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sBIT_GrayAlpha", "alpha", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("sBIT_RGB", "sBIT", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("sBIT_RGB", "red", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sBIT_RGB", "green", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sBIT_RGB", "blue", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("sBIT_RGBAlpha", "sBIT", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("sBIT_RGBAlpha", "red", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sBIT_RGBAlpha", "green", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sBIT_RGBAlpha", "blue", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sBIT_RGBAlpha", "alpha", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("sBIT_Palette", "sBIT", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("sBIT_Palette", "red", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sBIT_Palette", "green", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sBIT_Palette", "blue", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("sPLT", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   1, 256);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("sPLTEntry", "sPLT", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("sPLTEntry", "index", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sPLTEntry", "red", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sPLTEntry", "green", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sPLTEntry", "blue", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("sPLTEntry", "alpha", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("sRGB", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("sRGB", "renderingIntent", | 
 | 
                     DATATYPE_STRING, true, null,  | 
 | 
                     Arrays.asList(PNGMetadata.renderingIntentNames));  | 
 | 
 | 
 | 
          | 
 | 
        addElement("tEXt", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   1, Integer.MAX_VALUE);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("tEXtEntry", "tEXt", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("tEXtEntry", "keyword", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
        addAttribute("tEXtEntry", "value", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("tIME", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("tIME", "year", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("tIME", "month", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_1, VALUE_12, true, true);  | 
 | 
 | 
 | 
        addAttribute("tIME", "day", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_1, VALUE_31, true, true);  | 
 | 
 | 
 | 
        addAttribute("tIME", "hour", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_23, true, true);  | 
 | 
 | 
 | 
        addAttribute("tIME", "minute", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_59, true, true);  | 
 | 
 | 
 | 
        addAttribute("tIME", "second", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_60, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("tRNS", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   CHILD_POLICY_CHOICE);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("tRNS_Grayscale", "tRNS", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("tRNS_Grayscale", "gray", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("tRNS_RGB", "tRNS", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("tRNS_RGB", "red", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("tRNS_RGB", "green", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
        addAttribute("tRNS_RGB", "blue", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_MAX_16, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("tRNS_Palette", "tRNS", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("tRNS_Palette", "index", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
        addAttribute("tRNS_Palette", "alpha", | 
 | 
                     DATATYPE_INTEGER, true, null,  | 
 | 
                     VALUE_0, VALUE_255, true, true);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("zTXt", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   1, Integer.MAX_VALUE);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("zTXtEntry", "zTXt", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("zTXtEntry", "keyword", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
        addAttribute("zTXtEntry", "compressionMethod", | 
 | 
                     DATATYPE_STRING, true, null,  | 
 | 
                     Arrays.asList(PNGMetadata.zTXt_compressionMethodNames));  | 
 | 
 | 
 | 
        addAttribute("zTXtEntry", "text", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("UnknownChunks", PNGMetadata.nativeMetadataFormatName, | 
 | 
                   1, Integer.MAX_VALUE);  | 
 | 
 | 
 | 
          | 
 | 
        addElement("UnknownChunk", "UnknownChunks", | 
 | 
                   CHILD_POLICY_EMPTY);  | 
 | 
 | 
 | 
        addAttribute("UnknownChunk", "type", | 
 | 
                     DATATYPE_STRING, true, null);  | 
 | 
 | 
 | 
        addObjectValue("UnknownChunk", byte.class, 0, Integer.MAX_VALUE); | 
 | 
    }  | 
 | 
 | 
 | 
    public boolean canNodeAppear(String elementName,  | 
 | 
                                 ImageTypeSpecifier imageType) { | 
 | 
        return true;  | 
 | 
    }  | 
 | 
 | 
 | 
    public static synchronized IIOMetadataFormat getInstance() { | 
 | 
        if (instance == null) { | 
 | 
            instance = new PNGMetadataFormat();  | 
 | 
        }  | 
 | 
        return instance;  | 
 | 
    }  | 
 | 
}  |