diff options
author | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-15 23:20:01 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2005-11-15 23:20:01 +0000 |
commit | 8f523f3a1047919d3563daf1ef47ba87336ebe89 (patch) | |
tree | a5eb7cf42a51869cc8aa1fad7ad6a90cca47fdd8 /libjava/classpath/javax/imageio/metadata | |
parent | 02e549bfaaec38f68307e7f34e46ea57ea1809af (diff) | |
download | gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.zip gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.tar.gz gcc-8f523f3a1047919d3563daf1ef47ba87336ebe89.tar.bz2 |
Imported GNU Classpath 0.19 + gcj-import-20051115.
* sources.am: Regenerated.
* Makefile.in: Likewise.
* scripts/makemake.tcl: Use glob -nocomplain.
From-SVN: r107049
Diffstat (limited to 'libjava/classpath/javax/imageio/metadata')
6 files changed, 1091 insertions, 610 deletions
diff --git a/libjava/classpath/javax/imageio/metadata/IIOAttr.java b/libjava/classpath/javax/imageio/metadata/IIOAttr.java deleted file mode 100644 index 0c1d3d2..0000000 --- a/libjava/classpath/javax/imageio/metadata/IIOAttr.java +++ /dev/null @@ -1,378 +0,0 @@ -/* IIOAttr.java -- - Copyright (C) 2004, 2005 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - - -package javax.imageio.metadata; - -import org.w3c.dom.Attr; -import org.w3c.dom.DOMException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.TypeInfo; -import org.w3c.dom.UserDataHandler; - -/** - * Simple Attr node for metadata trees - * - * @author jlquinn - */ -class IIOAttr implements Attr -{ - String name; - String value; - IIOMetadataNode owner; - - public IIOAttr(String name, String value, IIOMetadataNode owner) - { - this.name = name; - this.value = value; - this.owner = owner; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Attr#getName() - */ - public String getName() - { - return name; - } - - public TypeInfo getSchemaTypeInfo() - { - throw new Error("not implemented"); - } - - /* (non-Javadoc) - * @see org.w3c.dom.Attr#getSpecified() - */ - public boolean getSpecified() - { - // I don't think there can be default attrs in metadata - return true; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Attr#getValue() - */ - public String getValue() - { - return value; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Attr#setValue(java.lang.String) - */ - public void setValue(String value) throws DOMException - { - this.value = value; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Attr#getOwnerElement() - */ - public Element getOwnerElement() - { - return owner; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getNodeName() - */ - public String getNodeName() - { - return name; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getNodeValue() - */ - public String getNodeValue() throws DOMException - { - return value; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#setNodeValue(java.lang.String) - */ - public void setNodeValue(String nodeValue) throws DOMException - { - this.value = nodeValue; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getNodeType() - */ - public short getNodeType() - { - return ATTRIBUTE_NODE; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getParentNode() - */ - public Node getParentNode() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getChildNodes() - */ - public NodeList getChildNodes() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getFirstChild() - */ - public Node getFirstChild() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getLastChild() - */ - public Node getLastChild() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getPreviousSibling() - */ - public Node getPreviousSibling() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getNextSibling() - */ - public Node getNextSibling() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getAttributes() - */ - public NamedNodeMap getAttributes() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getOwnerDocument() - */ - public Document getOwnerDocument() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#insertBefore(org.w3c.dom.Node, org.w3c.dom.Node) - */ - public Node insertBefore(Node newChild, Node refChild) throws DOMException - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#replaceChild(org.w3c.dom.Node, org.w3c.dom.Node) - */ - public Node replaceChild(Node newChild, Node oldChild) throws DOMException - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#removeChild(org.w3c.dom.Node) - */ - public Node removeChild(Node oldChild) throws DOMException - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#appendChild(org.w3c.dom.Node) - */ - public Node appendChild(Node newChild) throws DOMException - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#hasChildNodes() - */ - public boolean hasChildNodes() - { - return false; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#cloneNode(boolean) - */ - public Node cloneNode(boolean deep) - { - return new IIOAttr(name, value, owner); - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#normalize() - */ - public void normalize() - { - } - - public boolean isDefaultNamespace(String namespaceURI) - { - throw new Error("not implemented"); - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#isSupported(java.lang.String, java.lang.String) - */ - public boolean isSupported(String feature, String version) - { - return false; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getNamespaceURI() - */ - public String getNamespaceURI() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getPrefix() - */ - public String getPrefix() - { - return null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#setPrefix(java.lang.String) - */ - public void setPrefix(String prefix) throws DOMException - { - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#getLocalName() - */ - public String getLocalName() - { - return name; - } - - public Object getUserData(String key) - { - throw new Error("not implemented"); - } - - /* (non-Javadoc) - * @see org.w3c.dom.Node#hasAttributes() - */ - public boolean hasAttributes() - { - return false; - } - - public boolean isId() - { - throw new Error("not implemented"); - } - - public String lookupNamespaceURI(String prefix) - { - throw new Error("not implemented"); - } - - public String lookupPrefix(String namespaceURI) - { - throw new Error("not implemented"); - } - - public Object setUserData(String key, Object data, UserDataHandler handler) - { - throw new Error("not implemented"); - } - - public String getBaseURI() - { - throw new Error("not implemented"); - } - - public String getTextContent() - { - throw new Error("not implemented"); - } - - public void setTextContent(String textContent) - { - throw new Error("not implemented"); - } - - public short compareDocumentPosition(Node other) - throws DOMException - { - throw new Error("not implemented"); - } - - public Object getFeature(String feature, String version) - { - throw new Error("not implemented"); - } - - public boolean isEqualNode(Node other) - { - throw new Error("not implemented"); - } - - public boolean isSameNode(Node other) - { - throw new Error("not implemented"); - } -} diff --git a/libjava/classpath/javax/imageio/metadata/IIOMetadata.java b/libjava/classpath/javax/imageio/metadata/IIOMetadata.java index d727e1d..e5105de 100644 --- a/libjava/classpath/javax/imageio/metadata/IIOMetadata.java +++ b/libjava/classpath/javax/imageio/metadata/IIOMetadata.java @@ -38,8 +38,41 @@ exception statement from your version. */ package javax.imageio.metadata; +import org.w3c.dom.Node; + /** + * Represents metadata that describe an image or an image stream. + * Each ImageIO plugin will represent image data using an opaque + * object but all such objects should expose their internal + * information as a tree of IIOMetadataNodes. + * + * There are three formats of metadata that a plugin can support: + * + * <ul> + * <li>a "native" format</li> + * <li>a custom format</li> + * <li>a standard plugin-neutral format</li> + * </ul> + * + * If a plugin supports more than one format of metadata, the other + * formats can be retrieved by calling getMetadataFormatNames. + * + * The native format is used to transfer metadata from one image to + * another image of the same type, losslessly. + * + * The custom format describes the image metadata and exposes a tree + * of IIOMetadataNodes but its internal representation is specific to + * this plugin. + * + * The plugin-neutral format uses a generic tree structure as its + * internal representation. + * + * ImageTranscoders may be used to convert metadata understood by one + * plugin to metadata understood by another, however the conversion + * may be lossy. + * * @author Michael Koch (konqueror@gmx.de) + * @author Thomas Fitzsimmons (fitzsim@redhat.com) */ public abstract class IIOMetadata { @@ -52,7 +85,7 @@ public abstract class IIOMetadata protected boolean standardFormatSupported; /** - * Creates a <code>IIOMetaData</code> object. + * Construct an IIOMetadata object. */ protected IIOMetadata() { @@ -60,7 +93,7 @@ public abstract class IIOMetadata } /** - * Creates a <code>IIOMetaData</code> object with the given arguments. + * Construct an IIOMetadata object. * * @param standardMetadataFormatSupported * @param nativeMetadataFormatName @@ -210,4 +243,81 @@ public abstract class IIOMetadata { this.controller = controller; } + + public abstract Node getAsTree (String formatName); + + protected IIOMetadataNode getStandardChromaNode () + { + return null; + } + + protected IIOMetadataNode getStandardCompressionNode () + { + return null; + } + + protected IIOMetadataNode getStandardDataNode () + { + return null; + } + + protected IIOMetadataNode getStandardDimensionNode () + { + return null; + } + + protected IIOMetadataNode getStandardDocumentNode () + { + return null; + } + + protected IIOMetadataNode getStandardTextNode () + { + return null; + } + + protected IIOMetadataNode getStandardTileNode () + { + return null; + } + + protected IIOMetadataNode getStandardTransparencyNode () + { + return null; + } + + private void appendChild (IIOMetadataNode node, + IIOMetadataNode child) + { + if (child != null) + node.appendChild(child); + } + + protected final IIOMetadataNode getStandardTree () + { + IIOMetadataNode node = new IIOMetadataNode(); + + appendChild (node, getStandardChromaNode()); + appendChild (node, getStandardCompressionNode()); + appendChild (node, getStandardDataNode()); + appendChild (node, getStandardDimensionNode()); + appendChild (node, getStandardDocumentNode()); + appendChild (node, getStandardTextNode()); + appendChild (node, getStandardTileNode()); + appendChild (node, getStandardTransparencyNode()); + + return node; + } + + public abstract void mergeTree (String formatName, + Node root) + throws IIOInvalidTreeException; + + public void setFromTree (String formatName, Node root) + throws IIOInvalidTreeException + { + reset(); + + mergeTree (formatName, root); + } } diff --git a/libjava/classpath/javax/imageio/metadata/IIOMetadataFormatImpl.java b/libjava/classpath/javax/imageio/metadata/IIOMetadataFormatImpl.java index 2ce8f9c..aad3044 100644 --- a/libjava/classpath/javax/imageio/metadata/IIOMetadataFormatImpl.java +++ b/libjava/classpath/javax/imageio/metadata/IIOMetadataFormatImpl.java @@ -38,6 +38,848 @@ exception statement from your version. */ package javax.imageio.metadata; +import org.w3c.dom.Attr; +import org.w3c.dom.DOMException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.TypeInfo; +import org.w3c.dom.UserDataHandler; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.ResourceBundle; +import java.util.MissingResourceException; +import javax.imageio.ImageTypeSpecifier; + public abstract class IIOMetadataFormatImpl implements IIOMetadataFormat { + /** + * The standard metadata format name constant set to + * "javax_imageio_1.0". + */ + public static final String standardMetadataFormatName = "javax_imageio_1.0"; + + private String rootName; + + // These maps assume that each element name is unique. + + private Map nodes = new HashMap(); + + // A mapping from element name to child policy. + private Map childPolicies = new HashMap(); + + // A mapping from element name to the permissible number of + // children. Values in this map are length-two integer arrays; the + // first index is the minimum bound, the second index is the maximum + // bound. + private Map childRanges = new HashMap(); + + private String resourceBaseName; + + // Package-private so that it may be used in IIOMetadataNode. + static class IIOMetadataNodeAttr extends IIOMetadataNode + implements Attr + { + protected Element owner; + protected String name; + protected int dataType; + protected boolean required; + protected String defaultValue; + + public IIOMetadataNodeAttr (Element owner, + String name, + String defaultValue) + { + this (owner, name, IIOMetadataFormat.DATATYPE_STRING, + true, defaultValue); + } + + public IIOMetadataNodeAttr (Element owner, + String name, + int dataType, + boolean required, + String defaultValue) + { + this.owner = owner; + this.name = name; + this.dataType = dataType; + this.required = required; + this.defaultValue = defaultValue; + } + + public String getName () + { + return name; + } + + public Element getOwnerElement () + { + return owner; + } + + public int getDataType () + { + return dataType; + } + + public TypeInfo getSchemaTypeInfo () + { + return null; + } + + public boolean getSpecified () + { + return false; + } + + public String getValue () + { + return defaultValue; + } + + public boolean isId() + { + return false; + } + + public void setValue (String value) + { + } + + // new methods + + public boolean isRequired () + { + return required; + } + } + + private class IIOMetadataNodeAttrEnumerated extends IIOMetadataNodeAttr + { + protected List enumeratedValues; + + public IIOMetadataNodeAttrEnumerated (Element owner, + String name, + int dataType, + boolean required, + String defaultValue, + List enumeratedValues) + { + super (owner, name, dataType, required, defaultValue); + this.enumeratedValues = new ArrayList (enumeratedValues); + } + + public Object[] getEnumerations () + { + return enumeratedValues.toArray (); + } + } + + private class IIOMetadataNodeAttrBounded extends IIOMetadataNodeAttr + { + protected String minValue; + protected String maxValue; + protected boolean minInclusive; + protected boolean maxInclusive; + + public IIOMetadataNodeAttrBounded (Element owner, + String name, + int dataType, + boolean required, + String defaultValue, + String minValue, + String maxValue, + boolean minInclusive, + boolean maxInclusive) + { + super (owner, name, dataType, required, defaultValue); + this.minValue = minValue; + this.maxValue = maxValue; + this.minInclusive = minInclusive; + this.maxInclusive = maxInclusive; + } + + public String getMinValue () + { + return minValue; + } + + public String getMaxValue () + { + return maxValue; + } + } + + private class IIOMetadataNodeAttrList extends IIOMetadataNodeAttr + { + protected int listMinLength; + protected int listMaxLength; + + public IIOMetadataNodeAttrList (Element owner, + String name, + int dataType, + boolean required, + int listMinLength, + int listMaxLength) + { + super (owner, name, dataType, required, null); + this.listMinLength = listMinLength; + this.listMaxLength = listMaxLength; + } + + public int getListMinLength () + { + return listMinLength; + } + + public int getListMaxLength () + { + return listMaxLength; + } + } + + private class NodeObject + { + protected Element owner; + protected Class classType; + protected boolean required; + protected Object defaultValue; + protected int valueType; + + public NodeObject (Element owner, + Class classType, + boolean required, + Object defaultValue) + { + this.owner = owner; + this.classType = classType; + this.required = required; + this.defaultValue = defaultValue; + valueType = IIOMetadataFormat.VALUE_ARBITRARY; + } + + public int getValueType () + { + return valueType; + } + + public Class getClassType () + { + return classType; + } + + public Element getOwnerElement () + { + return owner; + } + + public Object getDefaultValue () + { + return defaultValue; + } + + public boolean isRequired () + { + return required; + } + } + + private class NodeObjectEnumerated extends NodeObject + { + protected List enumeratedValues; + + public NodeObjectEnumerated (Element owner, + Class classType, + boolean required, + Object defaultValue, + List enumeratedValues) + { + super (owner, classType, false, defaultValue); + this.enumeratedValues = enumeratedValues; + valueType = IIOMetadataFormat.VALUE_ENUMERATION; + } + + public Object[] getEnumerations () + { + return enumeratedValues.toArray(); + } + } + + private class NodeObjectBounded extends NodeObject + { + protected Comparable minValue; + protected Comparable maxValue; + protected boolean minInclusive; + protected boolean maxInclusive; + + public NodeObjectBounded (Element owner, + Class classType, + Object defaultValue, + Comparable minValue, + Comparable maxValue, + boolean minInclusive, + boolean maxInclusive) + { + super (owner, classType, false, defaultValue); + this.minValue = minValue; + this.maxValue = maxValue; + this.minInclusive = minInclusive; + this.maxInclusive = maxInclusive; + if (minInclusive) + { + if (maxInclusive) + valueType = IIOMetadataFormat.VALUE_RANGE_MIN_MAX_INCLUSIVE; + else + valueType = IIOMetadataFormat.VALUE_RANGE_MIN_INCLUSIVE; + } + else + { + if (maxInclusive) + valueType = IIOMetadataFormat.VALUE_RANGE_MAX_INCLUSIVE; + else + valueType = IIOMetadataFormat.VALUE_RANGE; + } + } + + public Comparable getMinValue () + { + return minValue; + } + + public Comparable getMaxValue () + { + return maxValue; + } + } + + private class NodeObjectArray extends NodeObject + { + protected Integer arrayMinLength; + protected Integer arrayMaxLength; + + public NodeObjectArray (Element owner, + Class classType, + int arrayMinLength, + int arrayMaxLength) + { + super (owner, classType, false, null); + this.arrayMinLength = new Integer (arrayMinLength); + this.arrayMaxLength = new Integer (arrayMaxLength); + valueType = IIOMetadataFormat.VALUE_LIST; + } + + public Comparable getArrayMinLength () + { + return arrayMinLength; + } + + public Comparable getArrayMaxLength () + { + return arrayMaxLength; + } + } + + /** + * Construct a blank IIOMetadataFormatImpl with the given root name + * and child policy. + * + * @param rootName the root element name + * @param childPolicy the child policy of the root element + * + * @exception IllegalArgumentException if rootName is null + * @exception IllegalArgumentException if childPolicy is + * CHILD_POLICY_REPEAT or if childPolicy is not a CHILD_POLICY + * constant + */ + public IIOMetadataFormatImpl (String rootName, int childPolicy) + { + if (rootName == null) + throw new IllegalArgumentException ("null argument"); + + if (childPolicy < IIOMetadataFormat.CHILD_POLICY_ALL + || childPolicy > IIOMetadataFormat.CHILD_POLICY_SOME + || childPolicy == IIOMetadataFormat.CHILD_POLICY_REPEAT) + throw new IllegalArgumentException ("wrong child policy"); + + nodes.put (rootName, new IIOMetadataNode (rootName)); + childPolicies.put (rootName, new Integer (childPolicy)); + this.rootName = rootName; + } + + /** + * Construct a blank IIOMetadataFormatImpl with the given root name, + * a child policy of CHILD_POLICY_REPEAT and the given minimum and + * maximum limits on the number of root element children. + * + * @param rootName the root element name + * @param minChildren the minimum number of children that this node + * can have + * @param maxChildren the maximum number of children that this node + * can have + * + * @exception IllegalArgumentException if rootName is null + * @exception IllegalArgumentException if minChildren is less than + * zero or greater than maxChildren + */ + public IIOMetadataFormatImpl (String rootName, + int minChildren, + int maxChildren) + { + if (rootName == null) + throw new IllegalArgumentException ("null argument"); + + if (minChildren < 0 || maxChildren < minChildren) + throw new IllegalArgumentException ("invalid min or max children argument"); + + nodes.put (rootName, new IIOMetadataNode (rootName)); + childPolicies.put (rootName, new Integer (IIOMetadataFormat.CHILD_POLICY_REPEAT)); + childRanges.put (rootName, new int [] { minChildren, maxChildren }); + this.rootName = rootName; + } + + protected void addAttribute (String elementName, + String attrName, + int dataType, + boolean required, + String defaultValue) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + node.setAttributeNode (new IIOMetadataNodeAttr (node, + attrName, + dataType, + required, + defaultValue)); + } + + protected void addAttribute (String elementName, + String attrName, + int dataType, + boolean required, + String defaultValue, + List enumeratedValues) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + node.setAttributeNode (new IIOMetadataNodeAttrEnumerated (node, + attrName, + dataType, + required, + defaultValue, + enumeratedValues)); + } + + protected void addAttribute (String elementName, + String attrName, + int dataType, + boolean required, + String defaultValue, + String minValue, + String maxValue, + boolean minInclusive, + boolean maxInclusive) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + node.setAttributeNode (new IIOMetadataNodeAttrBounded (node, + attrName, + dataType, + required, + defaultValue, + minValue, + maxValue, + minInclusive, + maxInclusive)); + } + + protected void addAttribute (String elementName, + String attrName, + int dataType, + boolean required, + int listMinLength, + int listMaxLength) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + node.setAttributeNode (new IIOMetadataNodeAttrList (node, + attrName, + dataType, + required, + listMinLength, + listMaxLength)); + } + + protected void addBooleanAttribute (String elementName, + String attrName, + boolean hasDefaultValue, + boolean defaultValue) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + + List enumeratedValues = new ArrayList(); + enumeratedValues.add ("TRUE"); + enumeratedValues.add ("FALSE"); + + node.setAttributeNode (new IIOMetadataNodeAttrEnumerated (node, + attrName, + IIOMetadataFormat.DATATYPE_BOOLEAN, + hasDefaultValue, + defaultValue ? "TRUE" : "FALSE", + enumeratedValues)); + } + + protected void addChildElement (String elementName, String parentName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (parentName); + + node.appendChild (new IIOMetadataNode (elementName)); + childPolicies.put (elementName, new Integer (IIOMetadataFormat.CHILD_POLICY_REPEAT)); + } + + protected void addElement (String elementName, String parentName, int childPolicy) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (parentName); + + node.appendChild (new IIOMetadataNode (elementName)); + childPolicies.put (elementName, new Integer (childPolicy)); + } + + protected void addElement (String elementName, String parentName, + int minChildren, int maxChildren) + { + addChildElement (elementName, parentName); + childRanges.put (elementName, new int [] { minChildren, maxChildren }); + } + + private void addNodeObject (IIOMetadataNode node, NodeObject o) + { + node.setUserObject (o); + } + + private NodeObject getNodeObject (IIOMetadataNode node) + { + return (NodeObject) node.getUserObject (); + } + + private void removeNodeObject (IIOMetadataNode node) + { + node.setUserObject (null); + } + + protected void addObjectValue (String elementName, Class classType, + boolean required, Object defaultValue) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + addNodeObject (node, new NodeObject (node, + classType, + required, + defaultValue)); + } + + protected void addObjectValue (String elementName, Class classType, + boolean required, Object defaultValue, + List enumeratedValues) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + addNodeObject (node, new NodeObjectEnumerated (node, + classType, + required, + defaultValue, + enumeratedValues)); + } + + protected void addObjectValue (String elementName, Class classType, + Object defaultValue, + Comparable minValue, + Comparable maxValue, + boolean minInclusive, + boolean maxInclusive) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + addNodeObject (node, new NodeObjectBounded (node, + classType, + defaultValue, + minValue, + maxValue, + minInclusive, + maxInclusive)); + } + + protected void addObjectValue (String elementName, Class classType, + int arrayMinLength, int arrayMaxLength) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + addNodeObject (node, new NodeObjectArray (node, + classType, + arrayMinLength, + arrayMaxLength)); + } + + public String getRootName () + { + return rootName; + } + + protected String getResourceBaseName () + { + return resourceBaseName; + } + + public static IIOMetadataFormat getStandardFormatInstance () + { + // FIXME: populate this with the standard metadata format + return new IIOMetadataFormatImpl (standardMetadataFormatName, + IIOMetadataFormat.CHILD_POLICY_ALL) + { + public boolean canNodeAppear (String elementName, + ImageTypeSpecifier specifier) + { + return true; + } + }; + } + + public abstract boolean canNodeAppear (String elementName, + ImageTypeSpecifier specifier); + + protected void removeAttribute (String elementName, + String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + node.removeAttribute (attrName); + } + + protected void removeElement (String elementName) + { + nodes.remove (elementName); + } + + protected void removeObjectValue (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + removeNodeObject (node); + } + + protected void setResourceBaseName (String resourceBaseName) + { + this.resourceBaseName = resourceBaseName; + } + + public int getAttributeDataType (String elementName, String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + IIOMetadataNodeAttr attr = (IIOMetadataNodeAttr) node.getAttributeNode (attrName); + return attr.getDataType (); + } + + public String getAttributeDefaultValue (String elementName, String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + IIOMetadataNodeAttr attr = (IIOMetadataNodeAttr) node.getAttributeNode (attrName); + return attr.getValue(); + } + + public String getAttributeDescription (String elementName, String attrName, Locale locale) + { + return getDescription (elementName + "/" + attrName, locale); + } + + public String[] getAttributeEnumerations (String elementName, String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + IIOMetadataNodeAttrEnumerated attr = + (IIOMetadataNodeAttrEnumerated) node.getAttributeNode (attrName); + + Object[] attrEnums = attr.getEnumerations(); + + String[] attrNames = new String[attrEnums.length]; + + for (int i = 0; i < attrEnums.length; i++) + { + attrNames[i] = (String) attrEnums[i]; + } + + return attrNames; + } + + public int getAttributeListMaxLength (String elementName, String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + IIOMetadataNodeAttrList attr = + (IIOMetadataNodeAttrList) node.getAttributeNode (attrName); + return attr.getListMaxLength(); + } + + public int getAttributeListMinLength (String elementName, String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + IIOMetadataNodeAttrList attr = + (IIOMetadataNodeAttrList) node.getAttributeNode (attrName); + return attr.getListMinLength(); + } + + public String getAttributeMaxValue (String elementName, String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + IIOMetadataNodeAttrBounded attr = + (IIOMetadataNodeAttrBounded) node.getAttributeNode (attrName); + return attr.getMaxValue(); + } + + public String getAttributeMinValue (String elementName, String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + IIOMetadataNodeAttrBounded attr = + (IIOMetadataNodeAttrBounded) node.getAttributeNode (attrName); + return attr.getMinValue(); + } + + public String[] getAttributeNames (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + + NamedNodeMap attrNodes = node.getAttributes(); + + String[] attrNames = new String[attrNodes.getLength()]; + + for (int i = 0; i < attrNodes.getLength(); i++) + { + attrNames[i] = attrNodes.item (i).getLocalName(); + } + + return attrNames; + } + + public int getAttributeValueType (String elementName, String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + IIOMetadataNodeAttr attr = (IIOMetadataNodeAttr) node.getAttributeNode (attrName); + return attr.getDataType(); + } + + public String[] getChildNames (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + + NodeList childNodes = node.getChildNodes(); + + String[] childNames = new String[childNodes.getLength()]; + + for (int i = 0; i < childNodes.getLength(); i++) + { + childNames[i] = childNodes.item (i).getLocalName(); + } + + return childNames; + } + + public int getChildPolicy (String elementName) + { + return ((Integer) childPolicies.get (elementName)).intValue(); + } + + private String getDescription (String resourceName, Locale locale) + { + if (resourceBaseName == null) + return null; + + Locale l = locale; + + if (l == null) + l = Locale.getDefault(); + + ResourceBundle bundle = ResourceBundle.getBundle (resourceBaseName, locale); + + String desc = null; + + if (bundle == null) + { + try + { + desc = bundle.getString (resourceName); + } + catch (MissingResourceException e) + { + desc = null; + } + } + + return desc; + } + + public String getElementDescription (String elementName, Locale locale) + { + return getDescription (elementName, locale); + } + + public int getElementMaxChildren (String elementName) + { + return ((int[]) childRanges.get (elementName))[1]; + } + + public int getElementMinChildren (String elementName) + { + return ((int[]) childRanges.get (elementName))[0]; + } + + public int getObjectArrayMaxLength (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + return ((Integer) ((NodeObjectArray) getNodeObject (node)).getArrayMaxLength ()).intValue(); + } + + public int getObjectArrayMinLength (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + return ((Integer) ((NodeObjectArray) getNodeObject (node)).getArrayMinLength ()).intValue(); + } + + public Class getObjectClass (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + return getNodeObject (node).getClassType (); + } + + public Object getObjectDefaultValue (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + return getNodeObject (node).getDefaultValue (); + } + + public Object[] getObjectEnumerations (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + return ((NodeObjectEnumerated) getNodeObject (node)).getEnumerations (); + } + + public Comparable getObjectMaxValue (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + return ((NodeObjectBounded) getNodeObject (node)).getMaxValue (); + } + + public Comparable getObjectMinValue (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + return ((NodeObjectBounded) getNodeObject (node)).getMinValue (); + } + + public int getObjectValueType (String elementName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + NodeObject n = getNodeObject (node); + + if (n == null) + return IIOMetadataFormat.VALUE_NONE; + else + return n.getValueType (); + } + + public boolean isAttributeRequired (String elementName, String attrName) + { + IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName); + return ((IIOMetadataNodeAttr) node.getAttributeNode (attrName)).isRequired(); + } } diff --git a/libjava/classpath/javax/imageio/metadata/IIOMetadataNode.java b/libjava/classpath/javax/imageio/metadata/IIOMetadataNode.java index d9e0983..2d52e46 100644 --- a/libjava/classpath/javax/imageio/metadata/IIOMetadataNode.java +++ b/libjava/classpath/javax/imageio/metadata/IIOMetadataNode.java @@ -52,6 +52,7 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.TypeInfo; import org.w3c.dom.UserDataHandler; +import javax.imageio.metadata.IIOMetadataFormatImpl.IIOMetadataNodeAttr; public class IIOMetadataNode implements Element, NodeList @@ -61,7 +62,127 @@ public class IIOMetadataNode private List children = new ArrayList(); private IIOMetadataNode parent; private Object obj; + + /** + * Simple NamedNodeMap class for IIOMetadataNode. + * + * @author jlquinn + */ + private class IIONamedNodeMap implements NamedNodeMap + { + HashMap attrs; + + /** + * @param attrs + * @param node + */ + public IIONamedNodeMap(HashMap attrs) + { + this.attrs = attrs; + } + + /* (non-Javadoc) + * @see org.w3c.dom.NamedNodeMap#getNamedItem(java.lang.String) + */ + public Node getNamedItem(String name) + { + return (Node)attrs.get(name); + } + + /* (non-Javadoc) + * @see org.w3c.dom.NamedNodeMap#setNamedItem(org.w3c.dom.Node) + */ + public Node setNamedItem(Node arg) throws DOMException + { + if (arg instanceof IIOMetadataNodeAttr) + { + IIOMetadataNodeAttr attr = (IIOMetadataNodeAttr) arg; + // The only code that can successfully do this is in this package. + if (attr.owner != null) + throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR, ""); + return (Node)attrs.put(attr.name, attr); + } + // Anything else gets treated as an invalid op. + throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, ""); + } + + /* (non-Javadoc) + * @see org.w3c.dom.NamedNodeMap#removeNamedItem(java.lang.String) + */ + public Node removeNamedItem(String name) throws DOMException + { + return (Node)attrs.remove(name); + } + + /* (non-Javadoc) + * @see org.w3c.dom.NamedNodeMap#item(int) + */ + public Node item(int index) + { + return (Node)attrs.values().toArray()[index]; + } + + /* (non-Javadoc) + * @see org.w3c.dom.NamedNodeMap#getLength() + */ + public int getLength() + { + return attrs.size(); + } + + /* (non-Javadoc) + * @see org.w3c.dom.NamedNodeMap#getNamedItemNS(java.lang.String, java.lang.String) + */ + public Node getNamedItemNS(String namespaceURI, String localName) + { + return getNamedItem(localName); + } + + /* (non-Javadoc) + * @see org.w3c.dom.NamedNodeMap#setNamedItemNS(org.w3c.dom.Node) + */ + public Node setNamedItemNS(Node arg) throws DOMException + { + return setNamedItem(arg); + } + + /* (non-Javadoc) + * @see org.w3c.dom.NamedNodeMap#removeNamedItemNS(java.lang.String, java.lang.String) + */ + public Node removeNamedItemNS(String namespaceURI, String localName) + throws DOMException + { + return removeNamedItem(localName); + } + } + + /** + * Simple NodeList implementation for IIOMetadataNode. + * + * @author jlquinn + * + */ + private class IIONodeList implements NodeList + { + List children = new ArrayList(); + /* (non-Javadoc) + * @see org.w3c.dom.NodeList#item(int) + */ + public Node item(int index) + { + return (index < children.size()) ? (Node)children.get(index) : null; + } + + /* (non-Javadoc) + * @see org.w3c.dom.NodeList#getLength() + */ + public int getLength() + { + return children.size(); + } + } + public IIOMetadataNode() { // Do nothing here. @@ -71,12 +192,12 @@ public class IIOMetadataNode { name = nodename; } - + public Object getUserObject() { return obj; } - + public void setUserObject(Object o) { obj = o; @@ -85,7 +206,7 @@ public class IIOMetadataNode public short compareDocumentPosition(Node other) throws DOMException { - throw new Error("not implemented"); + return Element.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC; } /* (non-Javadoc) @@ -104,7 +225,7 @@ public class IIOMetadataNode { String val = getAttribute(name); if (val != null) - return new IIOAttr(name, val, this); + return new IIOMetadataNodeAttr(this, name, val); return null; } @@ -126,7 +247,7 @@ public class IIOMetadataNode public String getBaseURI() { - throw new Error("not implemented"); + return null; } // Recursive function for assembling a node list. @@ -217,7 +338,7 @@ public class IIOMetadataNode if (attr != null) attr.setValue(value); else - attrs.put(name, new IIOAttr(name, value, this)); + attrs.put(name, new IIOMetadataNodeAttr(this, name, value)); } /* (non-Javadoc) @@ -295,7 +416,7 @@ public class IIOMetadataNode // clone attrs for (Iterator it = attrs.values().iterator(); it.hasNext();) { - IIOAttr attr = (IIOAttr)it.next(); + IIOMetadataNodeAttr attr = (IIOMetadataNodeAttr)it.next(); newnode.attrs.put(attr.name, attr.cloneNode(deep)); attr.owner = newnode; } @@ -321,7 +442,7 @@ public class IIOMetadataNode public Object getFeature(String feature, String version) { - throw new Error("not implemented"); + return null; } /* (non-Javadoc) @@ -432,18 +553,18 @@ public class IIOMetadataNode public TypeInfo getSchemaTypeInfo() { - throw new Error("not implemented"); + return null; } public String getTextContent() throws DOMException { - throw new Error("not implemented"); + return null; } public Object getUserData(String key) { - throw new Error("not implemented"); + return null; } /* (non-Javadoc) @@ -482,12 +603,12 @@ public class IIOMetadataNode public boolean isDefaultNamespace(String namespaceURI) { - throw new Error("not implemented"); + return true; } public boolean isEqualNode(Node arg) { - throw new Error("not implemented"); + return true; } public boolean isSameNode(Node other) @@ -506,12 +627,12 @@ public class IIOMetadataNode public String lookupNamespaceURI(String prefix) { - throw new Error("not implemented"); + return null; } public String lookupPrefix(String namespaceURI) { - throw new Error("not implemented"); + return null; } /* (non-Javadoc) @@ -550,19 +671,16 @@ public class IIOMetadataNode public void setIdAttribute(String name, boolean isId) throws DOMException { - throw new Error("not implemented"); } public void setIdAttributeNode(Attr idAttr, boolean isId) throws DOMException { - throw new Error("not implemented"); } public void setIdAttributeNS(String namespaceURI, String localName, boolean isId) throws DOMException { - throw new Error("not implemented"); } /* (non-Javadoc) @@ -582,11 +700,10 @@ public class IIOMetadataNode public void setTextContent(String textContent) throws DOMException { - throw new Error("not implemented"); } public Object setUserData(String key, Object data, UserDataHandler handler) { - throw new Error("not implemented"); + return null; } } diff --git a/libjava/classpath/javax/imageio/metadata/IIONamedNodeMap.java b/libjava/classpath/javax/imageio/metadata/IIONamedNodeMap.java deleted file mode 100644 index 92da28d..0000000 --- a/libjava/classpath/javax/imageio/metadata/IIONamedNodeMap.java +++ /dev/null @@ -1,138 +0,0 @@ -/* IIONamedNodeMap.java -- - Copyright (C) 2004 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - -package javax.imageio.metadata; - -import java.util.HashMap; - -import org.w3c.dom.DOMException; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; - -/** - * Simple NamedNodeMap class for IIOMetadataNode. - * - * @author jlquinn - */ -class IIONamedNodeMap implements NamedNodeMap -{ - HashMap attrs; - - /** - * @param attrs - * @param node - */ - public IIONamedNodeMap(HashMap attrs) - { - this.attrs = attrs; - } - - /* (non-Javadoc) - * @see org.w3c.dom.NamedNodeMap#getNamedItem(java.lang.String) - */ - public Node getNamedItem(String name) - { - return (Node)attrs.get(name); - } - - /* (non-Javadoc) - * @see org.w3c.dom.NamedNodeMap#setNamedItem(org.w3c.dom.Node) - */ - public Node setNamedItem(Node arg) throws DOMException - { - if (arg instanceof IIOAttr) - { - IIOAttr attr = (IIOAttr) arg; - // The only code that can successfully do this is in this package. - if (attr.owner != null) - throw new DOMException(DOMException.INUSE_ATTRIBUTE_ERR, ""); - return (Node)attrs.put(attr.name, attr); - } - // Anything else gets treated as an invalid op. - throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR, ""); - } - - /* (non-Javadoc) - * @see org.w3c.dom.NamedNodeMap#removeNamedItem(java.lang.String) - */ - public Node removeNamedItem(String name) throws DOMException - { - return (Node)attrs.remove(name); - } - - /* (non-Javadoc) - * @see org.w3c.dom.NamedNodeMap#item(int) - */ - public Node item(int index) - { - return (Node)attrs.values().toArray()[index]; - } - - /* (non-Javadoc) - * @see org.w3c.dom.NamedNodeMap#getLength() - */ - public int getLength() - { - return attrs.size(); - } - - /* (non-Javadoc) - * @see org.w3c.dom.NamedNodeMap#getNamedItemNS(java.lang.String, java.lang.String) - */ - public Node getNamedItemNS(String namespaceURI, String localName) - { - return getNamedItem(localName); - } - - /* (non-Javadoc) - * @see org.w3c.dom.NamedNodeMap#setNamedItemNS(org.w3c.dom.Node) - */ - public Node setNamedItemNS(Node arg) throws DOMException - { - return setNamedItem(arg); - } - - /* (non-Javadoc) - * @see org.w3c.dom.NamedNodeMap#removeNamedItemNS(java.lang.String, java.lang.String) - */ - public Node removeNamedItemNS(String namespaceURI, String localName) - throws DOMException - { - return removeNamedItem(localName); - } - -} diff --git a/libjava/classpath/javax/imageio/metadata/IIONodeList.java b/libjava/classpath/javax/imageio/metadata/IIONodeList.java deleted file mode 100644 index 395d261..0000000 --- a/libjava/classpath/javax/imageio/metadata/IIONodeList.java +++ /dev/null @@ -1,72 +0,0 @@ -/* IIOAttr.java -- - Copyright (C) 2004 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - -package javax.imageio.metadata; - -import java.util.ArrayList; -import java.util.List; - -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Simple NodeList implementation for IIOMetadataNode. - * - * @author jlquinn - * - */ -class IIONodeList implements NodeList -{ - List children = new ArrayList(); - - /* (non-Javadoc) - * @see org.w3c.dom.NodeList#item(int) - */ - public Node item(int index) - { - return (index < children.size()) ? (Node)children.get(index) : null; - } - - /* (non-Javadoc) - * @see org.w3c.dom.NodeList#getLength() - */ - public int getLength() - { - return children.size(); - } - -} |