// 2^32 - 1
super(PNGMetadata.nativeMetadataFormatName,
CHILD_POLICY_SOME);
// root -> IHDR
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));
// root -> PLTE
addElement("PLTE", PNGMetadata.nativeMetadataFormatName,
1, 256);
// root -> PLTE -> PLTEEntry
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);
// root -> bKGD
addElement("bKGD", PNGMetadata.nativeMetadataFormatName,
CHILD_POLICY_CHOICE);
// root -> bKGD -> bKGD_Grayscale
addElement("bKGD_Grayscale", "bKGD",
CHILD_POLICY_EMPTY);
addAttribute("bKGD_Grayscale", "gray",
DATATYPE_INTEGER, true, null,
VALUE_0, VALUE_MAX_16, true, true);
// root -> bKGD -> bKGD_RGB
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);
// root -> bKGD -> bKGD_Palette
addElement("bKGD_Palette", "bKGD",
CHILD_POLICY_EMPTY);
addAttribute("bKGD_Palette", "index",
DATATYPE_INTEGER, true, null,
VALUE_0, VALUE_255, true, true);
// root -> cHRM
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);
// root -> gAMA
addElement("gAMA", PNGMetadata.nativeMetadataFormatName,
CHILD_POLICY_EMPTY);
addAttribute("gAMA", "value",
DATATYPE_INTEGER, true, null,
VALUE_0, VALUE_MAX_32, true, true);
// root -> hIST
addElement("hIST", PNGMetadata.nativeMetadataFormatName,
1, 256);
// root -> hISTEntry
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);
// root -> iCCP
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);
// root -> iTXt
addElement("iTXt", PNGMetadata.nativeMetadataFormatName,
1, Integer.MAX_VALUE);
// root -> iTXt -> iTXtEntry
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);
// root -> pHYS
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));
// root -> sBIT
addElement("sBIT", PNGMetadata.nativeMetadataFormatName,
CHILD_POLICY_CHOICE);
// root -> sBIT -> sBIT_Grayscale
addElement("sBIT_Grayscale", "sBIT",
CHILD_POLICY_EMPTY);
addAttribute("sBIT_Grayscale", "gray",
DATATYPE_INTEGER, true, null,
VALUE_0, VALUE_255, true, true);
// root -> sBIT -> sBIT_GrayAlpha
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);
// root -> sBIT -> sBIT_RGB
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);
// root -> sBIT -> sBIT_RGBAlpha
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);
// root -> sBIT -> sBIT_Palette
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);
// root -> sPLT
addElement("sPLT", PNGMetadata.nativeMetadataFormatName,
1, 256);
// root -> sPLT -> sPLTEntry
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);
// root -> sRGB
addElement("sRGB", PNGMetadata.nativeMetadataFormatName,
CHILD_POLICY_EMPTY);
addAttribute("sRGB", "renderingIntent",
DATATYPE_STRING, true, null,
Arrays.asList(PNGMetadata.renderingIntentNames));
// root -> tEXt
addElement("tEXt", PNGMetadata.nativeMetadataFormatName,
1, Integer.MAX_VALUE);
// root -> tEXt -> tEXtEntry
addElement("tEXtEntry", "tEXt",
CHILD_POLICY_EMPTY);
addAttribute("tEXtEntry", "keyword",
DATATYPE_STRING, true, null);
addAttribute("tEXtEntry", "value",
DATATYPE_STRING, true, null);
// root -> tIME
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);
// root -> tRNS
addElement("tRNS", PNGMetadata.nativeMetadataFormatName,
CHILD_POLICY_CHOICE);
// root -> tRNS -> tRNS_Grayscale
addElement("tRNS_Grayscale", "tRNS",
CHILD_POLICY_EMPTY);
addAttribute("tRNS_Grayscale", "gray",
DATATYPE_INTEGER, true, null,
VALUE_0, VALUE_MAX_16, true, true);
// root -> tRNS -> tRNS_RGB
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);
// root -> tRNS -> tRNS_Palette
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);
// root -> zTXt
addElement("zTXt", PNGMetadata.nativeMetadataFormatName,
1, Integer.MAX_VALUE);
// root -> zTXt -> zTXtEntry
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);
// root -> UnknownChunks
addElement("UnknownChunks", PNGMetadata.nativeMetadataFormatName,
1, Integer.MAX_VALUE);
// root -> UnknownChunks -> UnknownChunk
addElement("UnknownChunk", "UnknownChunks",
CHILD_POLICY_EMPTY);
addAttribute("UnknownChunk", "type",
DATATYPE_STRING, true, null);
addObjectValue("UnknownChunk", byte.class, 0, Integer.MAX_VALUE);