mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			882 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			882 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* IIOMetadataFormatImpl.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 org.w3c.dom.Attr;
 | |
| import org.w3c.dom.Element;
 | |
| import org.w3c.dom.NamedNodeMap;
 | |
| import org.w3c.dom.NodeList;
 | |
| import org.w3c.dom.TypeInfo;
 | |
| import java.util.ArrayList;
 | |
| import java.util.HashMap;
 | |
| import java.util.Map;
 | |
| 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<String> 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 <T> void addObjectValue (String elementName, Class<T> classType,
 | |
|                                      boolean required, T defaultValue)
 | |
|   {
 | |
|     IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName);
 | |
|     addNodeObject (node, new NodeObject (node,
 | |
|                                          classType,
 | |
|                                          required,
 | |
|                                          defaultValue));
 | |
|   }
 | |
| 
 | |
|   protected <T> void addObjectValue (String elementName, Class<T> classType,
 | |
|                                      boolean required, T defaultValue,
 | |
|                                      List<? extends T> enumeratedValues)
 | |
|   {
 | |
|     IIOMetadataNode node = (IIOMetadataNode) nodes.get (elementName);
 | |
|     addNodeObject (node, new NodeObjectEnumerated (node,
 | |
|                                                    classType,
 | |
|                                                    required,
 | |
|                                                    defaultValue,
 | |
|                                                    enumeratedValues));
 | |
|   }
 | |
| 
 | |
|   protected <T extends Object & Comparable<? super T>>
 | |
|   void addObjectValue (String elementName, Class<T> classType,
 | |
|                        T defaultValue,
 | |
|                        Comparable<? super T> minValue,
 | |
|                        Comparable<? super T> 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();
 | |
|   }
 | |
| }
 |