package com.sun.imageio.plugins.common;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageTypeSpecifier;
import javax.imageio.metadata.IIOMetadataFormatImpl;
public class StandardMetadataFormat extends IIOMetadataFormatImpl {
private void addSingleAttributeElement(String elementName,
String parentName,
int dataType) {
addElement(elementName, parentName, CHILD_POLICY_EMPTY);
addAttribute(elementName, "value", dataType, true, null);
}
public StandardMetadataFormat() {
super(standardMetadataFormatName, CHILD_POLICY_SOME);
List<String> values;
addElement("Chroma", standardMetadataFormatName,
CHILD_POLICY_SOME);
addElement("ColorSpaceType", "Chroma",
CHILD_POLICY_EMPTY);
values = new ArrayList<>();
values.add("XYZ");
values.add("Lab");
values.add("Luv");
values.add("YCbCr");
values.add("Yxy");
values.add("YCCK");
values.add("PhotoYCC");
values.add("RGB");
values.add("GRAY");
values.add("HSV");
values.add("HLS");
values.add("CMYK");
values.add("CMY");
values.add("2CLR");
values.add("3CLR");
values.add("4CLR");
values.add("5CLR");
values.add("6CLR");
values.add("7CLR");
values.add("8CLR");
values.add("9CLR");
values.add("ACLR");
values.add("BCLR");
values.add("CCLR");
values.add("DCLR");
values.add("ECLR");
values.add("FCLR");
addAttribute("ColorSpaceType",
"name",
DATATYPE_STRING,
true,
null,
values);
addElement("NumChannels", "Chroma",
CHILD_POLICY_EMPTY);
addAttribute("NumChannels", "value",
DATATYPE_INTEGER,
true,
0, Integer.MAX_VALUE);
addElement("Gamma", "Chroma", CHILD_POLICY_EMPTY);
addAttribute("Gamma", "value",
DATATYPE_FLOAT, true, null);
addElement("BlackIsZero", "Chroma", CHILD_POLICY_EMPTY);
addBooleanAttribute("BlackIsZero", "value", true, true);
addElement("Palette", "Chroma", 0, Integer.MAX_VALUE);
addElement("PaletteEntry", "Palette", CHILD_POLICY_EMPTY);
addAttribute("PaletteEntry", "index", DATATYPE_INTEGER,
true, null);
addAttribute("PaletteEntry", "red", DATATYPE_INTEGER,
true, null);
addAttribute("PaletteEntry", "green", DATATYPE_INTEGER,
true, null);
addAttribute("PaletteEntry", "blue", DATATYPE_INTEGER,
true, null);
addAttribute("PaletteEntry", "alpha", DATATYPE_INTEGER,
false, "255");
addElement("BackgroundIndex", "Chroma", CHILD_POLICY_EMPTY);
addAttribute("BackgroundIndex", "value", DATATYPE_INTEGER,
true, null);
addElement("BackgroundColor", "Chroma", CHILD_POLICY_EMPTY);
addAttribute("BackgroundColor", "red", DATATYPE_INTEGER,
true, null);
addAttribute("BackgroundColor", "green", DATATYPE_INTEGER,
true, null);
addAttribute("BackgroundColor", "blue", DATATYPE_INTEGER,
true, null);
addElement("Compression", standardMetadataFormatName,
CHILD_POLICY_SOME);
addSingleAttributeElement("CompressionTypeName",
"Compression",
DATATYPE_STRING);
addElement("Lossless", "Compression", CHILD_POLICY_EMPTY);
addBooleanAttribute("Lossless", "value", true, true);
addSingleAttributeElement("NumProgressiveScans",
"Compression",
DATATYPE_INTEGER);
addSingleAttributeElement("BitRate",
"Compression",
DATATYPE_FLOAT);
addElement("Data", standardMetadataFormatName,
CHILD_POLICY_SOME);
addElement("PlanarConfiguration", "Data", CHILD_POLICY_EMPTY);
values = new ArrayList<>();
values.add("PixelInterleaved");
values.add("PlaneInterleaved");
values.add("LineInterleaved");
values.add("TileInterleaved");
addAttribute("PlanarConfiguration", "value",
DATATYPE_STRING,
true,
null,
values);
addElement("SampleFormat", "Data", CHILD_POLICY_EMPTY);
values = new ArrayList<>();
values.add("SignedIntegral");
values.add("UnsignedIntegral");
values.add("Real");
values.add("Index");
addAttribute("SampleFormat", "value",
DATATYPE_STRING,
true,
null,
values);
addElement("BitsPerSample", "Data",
CHILD_POLICY_EMPTY);
addAttribute("BitsPerSample", "value",
DATATYPE_INTEGER,
true,
1, Integer.MAX_VALUE);
addElement("SignificantBitsPerSample", "Data", CHILD_POLICY_EMPTY);
addAttribute("SignificantBitsPerSample", "value",
DATATYPE_INTEGER,
true,
1, Integer.MAX_VALUE);
addElement("SampleMSB", "Data",
CHILD_POLICY_EMPTY);
addAttribute("SampleMSB", "value",
DATATYPE_INTEGER,
true,
1, Integer.MAX_VALUE);
addElement("Dimension", standardMetadataFormatName,
CHILD_POLICY_SOME);
addSingleAttributeElement("PixelAspectRatio",
"Dimension",
DATATYPE_FLOAT);
addElement("ImageOrientation", "Dimension",
CHILD_POLICY_EMPTY);
values = new ArrayList<>();
values.add("Normal");
values.add("Rotate90");
values.add("Rotate180");
values.add("Rotate270");
values.add("FlipH");
values.add("FlipV");
values.add("FlipHRotate90");
values.add("FlipVRotate90");
addAttribute("ImageOrientation", "value",
DATATYPE_STRING,
true,
null,
values);
addSingleAttributeElement("HorizontalPixelSize",
"Dimension",
DATATYPE_FLOAT);
addSingleAttributeElement("VerticalPixelSize",
"Dimension",
DATATYPE_FLOAT);
addSingleAttributeElement("HorizontalPhysicalPixelSpacing",
"Dimension",
DATATYPE_FLOAT);
addSingleAttributeElement("VerticalPhysicalPixelSpacing",
"Dimension",
DATATYPE_FLOAT);
addSingleAttributeElement("HorizontalPosition",
"Dimension",
DATATYPE_FLOAT);
addSingleAttributeElement("VerticalPosition",
"Dimension",
DATATYPE_FLOAT);
addSingleAttributeElement("HorizontalPixelOffset",
"Dimension",
DATATYPE_INTEGER);
addSingleAttributeElement("VerticalPixelOffset",
"Dimension",
DATATYPE_INTEGER);
addSingleAttributeElement("HorizontalScreenSize",
"Dimension",
DATATYPE_INTEGER);
addSingleAttributeElement("VerticalScreenSize",
"Dimension",
DATATYPE_INTEGER);
addElement("Document", standardMetadataFormatName,
CHILD_POLICY_SOME);
addElement("FormatVersion", "Document",
CHILD_POLICY_EMPTY);
addAttribute("FormatVersion", "value",
DATATYPE_STRING,
true,
null);
addElement("SubimageInterpretation", "Document",
CHILD_POLICY_EMPTY);
values = new ArrayList<>();
values.add("Standalone");
values.add("SinglePage");
values.add("FullResolution");
values.add("ReducedResolution");
values.add("PyramidLayer");
values.add("Preview");
values.add("VolumeSlice");
values.add("ObjectView");
values.add("Panorama");
values.add("AnimationFrame");
values.add("TransparencyMask");
values.add("CompositingLayer");
values.add("SpectralSlice");
values.add("Unknown");
addAttribute("SubimageInterpretation", "value",
DATATYPE_STRING,
true,
null,
values);
addElement("ImageCreationTime", "Document",
CHILD_POLICY_EMPTY);
addAttribute("ImageCreationTime", "year",
DATATYPE_INTEGER,
true,
null);
addAttribute("ImageCreationTime", "month",
DATATYPE_INTEGER,
true,
null,
"1", "12", true, true);
addAttribute("ImageCreationTime", "day",
DATATYPE_INTEGER,
true,
null,
"1", "31", true, true);
addAttribute("ImageCreationTime", "hour",
DATATYPE_INTEGER,
false,
"0",
"0", "23", true, true);
addAttribute("ImageCreationTime", "minute",
DATATYPE_INTEGER,
false,
"0",
"0", "59", true, true);
addAttribute("ImageCreationTime", "second",
DATATYPE_INTEGER,
false,
"0",
"0", "60", true, true);
addElement("ImageModificationTime", "Document",
CHILD_POLICY_EMPTY);
addAttribute("ImageModificationTime", "year",
DATATYPE_INTEGER,
true,
null);
addAttribute("ImageModificationTime", "month",
DATATYPE_INTEGER,
true,
null,
"1", "12", true, true);
addAttribute("ImageModificationTime", "day",
DATATYPE_INTEGER,
true,
null,
"1", "31", true, true);
addAttribute("ImageModificationTime", "hour",
DATATYPE_INTEGER,
false,
"0",
"0", "23", true, true);
addAttribute("ImageModificationTime", "minute",
DATATYPE_INTEGER,
false,
"0",
"0", "59", true, true);
addAttribute("ImageModificationTime", "second",
DATATYPE_INTEGER,
false,
"0",
"0", "60", true, true);
addElement("Text", standardMetadataFormatName,
0, Integer.MAX_VALUE);
addElement("TextEntry", "Text", CHILD_POLICY_EMPTY);
addAttribute("TextEntry", "keyword",
DATATYPE_STRING,
false,
null);
addAttribute("TextEntry", "value",
DATATYPE_STRING,
true,
null);
addAttribute("TextEntry", "language",
DATATYPE_STRING,
false,
null);
addAttribute("TextEntry", "encoding",
DATATYPE_STRING,
false,
null);
values = new ArrayList<>();
values.add("none");
values.add("lzw");
values.add("zip");
values.add("bzip");
values.add("other");
addAttribute("TextEntry", "compression",
DATATYPE_STRING,
false,
"none",
values);
addElement("Transparency", standardMetadataFormatName,
CHILD_POLICY_SOME);
addElement("Alpha", "Transparency", CHILD_POLICY_EMPTY);
values = new ArrayList<>();
values.add("none");
values.add("premultiplied");
values.add("nonpremultiplied");
addAttribute("Alpha", "value",
DATATYPE_STRING,
false,
"none",
values);
addSingleAttributeElement("TransparentIndex", "Transparency",
DATATYPE_INTEGER);
addElement("TransparentColor", "Transparency",
CHILD_POLICY_EMPTY);
addAttribute("TransparentColor", "value",
DATATYPE_INTEGER,
true,
0, Integer.MAX_VALUE);
addElement("TileTransparencies", "Transparency",
0, Integer.MAX_VALUE);
addElement("TransparentTile", "TileTransparencies",
CHILD_POLICY_EMPTY);
addAttribute("TransparentTile", "x",
DATATYPE_INTEGER,
true,
null);
addAttribute("TransparentTile", "y",
DATATYPE_INTEGER,
true,
null);
addElement("TileOpacities", "Transparency",
0, Integer.MAX_VALUE);
addElement("OpaqueTile", "TileOpacities",
CHILD_POLICY_EMPTY);
addAttribute("OpaqueTile", "x",
DATATYPE_INTEGER,
true,
null);
addAttribute("OpaqueTile", "y",
DATATYPE_INTEGER,
true,
null);
}
public boolean canNodeAppear(String elementName,
ImageTypeSpecifier imageType) {
return true;
}
}