Save This Page
Home » openjdk-7 » javax » imageio » metadata » [javadoc | source]
    1   /*
    2    * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Oracle designates this
    8    * particular file as subject to the "Classpath" exception as provided
    9    * by Oracle in the LICENSE file that accompanied this code.
   10    *
   11    * This code is distributed in the hope that it will be useful, but WITHOUT
   12    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13    * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14    * version 2 for more details (a copy is included in the LICENSE file that
   15    * accompanied this code).
   16    *
   17    * You should have received a copy of the GNU General Public License version
   18    * 2 along with this work; if not, write to the Free Software Foundation,
   19    * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20    *
   21    * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   22    * or visit www.oracle.com if you need additional information or have any
   23    * questions.
   24    */
   25   
   26   package javax.imageio.metadata;
   27   
   28   import java.util.Locale;
   29   import javax.imageio.ImageTypeSpecifier;
   30   
   31   /**
   32    * An object describing the structure of metadata documents returned
   33    * from <code>IIOMetadata.getAsTree</code> and passed to
   34    * <code>IIOMetadata.setFromTree</code> and <code>mergeTree</code>.
   35    * Document structures are described by a set of constraints on the
   36    * type and number of child elements that may belong to a given parent
   37    * element type, the names, types, and values of attributes that may
   38    * belong to an element, and the type and values of
   39    * <code>Object</code> reference that may be stored at a node.
   40    *
   41    * <p> N.B: classes that implement this interface should contain a
   42    * method declared as <code>public static getInstance()</code> which
   43    * returns an instance of the class.  Commonly, an implentation will
   44    * construct only a single instance and cache it for future
   45    * invocations of <code>getInstance</code>.
   46    *
   47    * <p> The structures that may be described by this class are a subset
   48    * of those expressible using XML document type definitions (DTDs),
   49    * with the addition of some basic information on the datatypes of
   50    * attributes and the ability to store an <code>Object</code>
   51    * reference within a node.  In the future, XML Schemas could be used
   52    * to represent these structures, and many others.
   53    *
   54    * <p> The differences between
   55    * <code>IIOMetadataFormat</code>-described structures and DTDs are as
   56    * follows:
   57    *
   58    * <ul>
   59    * <li> Elements may not contain text or mix text with embedded
   60    * tags.
   61    *
   62    * <li> The children of an element must conform to one of a few simple
   63    * patterns, described in the documentation for the
   64    * <code>CHILD_*</code> constants;
   65    *
   66    * <li> The in-memory representation of an elements may contain a
   67    * reference to an <code>Object</code>.  There is no provision for
   68    * representing such objects textually.
   69    * </ul>
   70    *
   71    */
   72   public interface IIOMetadataFormat {
   73   
   74       // Child policies
   75   
   76       /**
   77        * A constant returned by <code>getChildPolicy</code> to indicate
   78        * that an element may not have any children.  In other words, it
   79        * is required to be a leaf node.
   80        */
   81       int CHILD_POLICY_EMPTY = 0;
   82   
   83       /**
   84        * A constant returned by <code>getChildPolicy</code> to indicate
   85        * that an element must have a single instance of each of its
   86        * legal child elements, in order.  In DTD terms, the contents of
   87        * the element are defined by a sequence <code>a,b,c,d,...</code>.
   88        */
   89       int CHILD_POLICY_ALL = 1;
   90   
   91       /**
   92        * A constant returned by <code>getChildPolicy</code> to indicate
   93        * that an element must have zero or one instance of each of its
   94        * legal child elements, in order.  In DTD terms, the contents of
   95        * the element are defined by a sequence
   96        * <code>a?,b?,c?,d?,...</code>.
   97        */
   98       int CHILD_POLICY_SOME = 2;
   99   
  100       /**
  101        * A constant returned by <code>getChildPolicy</code> to indicate
  102        * that an element must have zero or one children, selected from
  103        * among its legal child elements.  In DTD terms, the contents of
  104        * the element are defined by a selection
  105        * <code>a|b|c|d|...</code>.
  106        */
  107       int CHILD_POLICY_CHOICE = 3;
  108   
  109       /**
  110        * A constant returned by <code>getChildPolicy</code> to indicate
  111        * that an element must have a sequence of instances of any of its
  112        * legal child elements.  In DTD terms, the contents of the
  113        * element are defined by a sequence <code>(a|b|c|d|...)*</code>.
  114        */
  115       int CHILD_POLICY_SEQUENCE = 4;
  116   
  117       /**
  118        * A constant returned by <code>getChildPolicy</code> to indicate
  119        * that an element must have zero or more instances of its unique
  120        * legal child element.  In DTD terms, the contents of the element
  121        * are defined by a starred expression <code>a*</code>.
  122        */
  123       int CHILD_POLICY_REPEAT = 5;
  124   
  125       /**
  126        * The largest valid <code>CHILD_POLICY_*</code> constant,
  127        * to be used for range checks.
  128        */
  129       int CHILD_POLICY_MAX = CHILD_POLICY_REPEAT;
  130   
  131       /**
  132        * A constant returned by <code>getObjectValueType</code> to
  133        * indicate the absence of a user object.
  134        */
  135       int VALUE_NONE = 0;
  136   
  137       /**
  138        * A constant returned by <code>getAttributeValueType</code> and
  139        * <code>getObjectValueType</code> to indicate that the attribute
  140        * or user object may be set a single, arbitrary value.
  141        */
  142       int VALUE_ARBITRARY = 1;
  143   
  144       /**
  145        * A constant returned by <code>getAttributeValueType</code> and
  146        * <code>getObjectValueType</code> to indicate that the attribute
  147        * or user object may be set a range of values.  Both the minimum
  148        * and maximum values of the range are exclusive.  It is
  149        * recommended that ranges of integers be inclusive on both ends,
  150        * and that exclusive ranges be used only for floating-point data.
  151        *
  152        * @see #VALUE_RANGE_MIN_MAX_INCLUSIVE
  153        */
  154       int VALUE_RANGE = 2;
  155   
  156       /**
  157        * A value that may be or'ed with <code>VALUE_RANGE</code> to
  158        * obtain <code>VALUE_RANGE_MIN_INCLUSIVE</code>, and with
  159        * <code>VALUE_RANGE_MAX_INCLUSIVE</code> to obtain
  160        * <code>VALUE_RANGE_MIN_MAX_INCLUSIVE</code>.
  161        *
  162        * <p> Similarly, the value may be and'ed with the value of
  163        * <code>getAttributeValueType</code>or
  164        * <code>getObjectValueType</code> to determine if the minimum
  165        * value of the range is inclusive.
  166        */
  167       int VALUE_RANGE_MIN_INCLUSIVE_MASK = 4;
  168   
  169       /**
  170        * A value that may be or'ed with <code>VALUE_RANGE</code> to
  171        * obtain <code>VALUE_RANGE_MAX_INCLUSIVE</code>, and with
  172        * <code>VALUE_RANGE_MIN_INCLUSIVE</code> to obtain
  173        * <code>VALUE_RANGE_MIN_MAX_INCLUSIVE</code>.
  174        *
  175        * <p> Similarly, the value may be and'ed with the value of
  176        * <code>getAttributeValueType</code>or
  177        * <code>getObjectValueType</code> to determine if the maximum
  178        * value of the range is inclusive.
  179        */
  180       int VALUE_RANGE_MAX_INCLUSIVE_MASK = 8;
  181   
  182       /**
  183        * A constant returned by <code>getAttributeValueType</code> and
  184        * <code>getObjectValueType</code> to indicate that the attribute
  185        * or user object may be set to a range of values.  The minimum
  186        * (but not the maximum) value of the range is inclusive.
  187        */
  188       int VALUE_RANGE_MIN_INCLUSIVE = VALUE_RANGE |
  189           VALUE_RANGE_MIN_INCLUSIVE_MASK;
  190   
  191       /**
  192        * A constant returned by <code>getAttributeValueType</code> and
  193        * <code>getObjectValueType</code> to indicate that the attribute
  194        * or user object may be set to a range of values.  The maximum
  195        * (but not the minimum) value of the range is inclusive.
  196        */
  197       int VALUE_RANGE_MAX_INCLUSIVE = VALUE_RANGE |
  198           VALUE_RANGE_MAX_INCLUSIVE_MASK;
  199   
  200       /**
  201        * A constant returned by <code>getAttributeValueType</code> and
  202        * <code>getObjectValueType</code> to indicate that the attribute
  203        * or user object may be set a range of values.  Both the minimum
  204        * and maximum values of the range are inclusive.  It is
  205        * recommended that ranges of integers be inclusive on both ends,
  206        * and that exclusive ranges be used only for floating-point data.
  207        */
  208       int VALUE_RANGE_MIN_MAX_INCLUSIVE =
  209           VALUE_RANGE |
  210           VALUE_RANGE_MIN_INCLUSIVE_MASK |
  211           VALUE_RANGE_MAX_INCLUSIVE_MASK;
  212   
  213       /**
  214        * A constant returned by <code>getAttributeValueType</code> and
  215        * <code>getObjectValueType</code> to indicate that the attribute
  216        * or user object may be set one of a number of enumerated values.
  217        * In the case of attributes, these values are
  218        * <code>String</code>s; for objects, they are
  219        * <code>Object</code>s implementing a given class or interface.
  220        *
  221        * <p> Attribute values of type <code>DATATYPE_BOOLEAN</code>
  222        * should be marked as enumerations.
  223        */
  224       int VALUE_ENUMERATION = 16;
  225   
  226       /**
  227        * A constant returned by <code>getAttributeValueType</code> and
  228        * <code>getObjectValueType</code> to indicate that the attribute
  229        * or user object may be set to a list or array of values.  In the
  230        * case of attributes, the list will consist of
  231        * whitespace-separated values within a <code>String</code>; for
  232        * objects, an array will be used.
  233        */
  234       int VALUE_LIST = 32;
  235   
  236       /**
  237        * A constant returned by <code>getAttributeDataType</code>
  238        * indicating that the value of an attribute is a general Unicode
  239        * string.
  240        */
  241       int DATATYPE_STRING = 0;
  242   
  243       /**
  244        * A constant returned by <code>getAttributeDataType</code>
  245        * indicating that the value of an attribute is one of the boolean
  246        * values 'true' or 'false'.
  247        * Attribute values of type DATATYPE_BOOLEAN should be marked as
  248        * enumerations, and the permitted values should be the string
  249        * literal values "TRUE" or "FALSE", although a plugin may also
  250        * recognise lower or mixed case equivalents.
  251        */
  252       int DATATYPE_BOOLEAN = 1;
  253   
  254       /**
  255        * A constant returned by <code>getAttributeDataType</code>
  256        * indicating that the value of an attribute is a string
  257        * representation of an integer.
  258        */
  259       int DATATYPE_INTEGER = 2;
  260   
  261       /**
  262        * A constant returned by <code>getAttributeDataType</code>
  263        * indicating that the value of an attribute is a string
  264        * representation of a decimal floating-point number.
  265        */
  266       int DATATYPE_FLOAT = 3;
  267   
  268       /**
  269        * A constant returned by <code>getAttributeDataType</code>
  270        * indicating that the value of an attribute is a string
  271        * representation of a double-precision decimal floating-point
  272        * number.
  273        */
  274       int DATATYPE_DOUBLE = 4;
  275   
  276       // Root
  277   
  278       /**
  279        * Returns the name of the root element of the format.
  280        *
  281        * @return a <code>String</code>.
  282        */
  283       String getRootName();
  284   
  285       // Multiplicity
  286   
  287       /**
  288        * Returns <code>true</code> if the element (and the subtree below
  289        * it) is allowed to appear in a metadata document for an image of
  290        * the given type, defined by an <code>ImageTypeSpecifier</code>.
  291        * For example, a metadata document format might contain an
  292        * element that describes the primary colors of the image, which
  293        * would not be allowed when writing a grayscale image.
  294        *
  295        * @param elementName the name of the element being queried.
  296        * @param imageType an <code>ImageTypeSpecifier</code> indicating
  297        * the type of the image that will be associated with the
  298        * metadata.
  299        *
  300        * @return <code>true</code> if the node is meaningful for images
  301        * of the given type.
  302        */
  303       boolean canNodeAppear(String elementName, ImageTypeSpecifier imageType);
  304   
  305       /**
  306        * Returns the minimum number of children of the named element
  307        * with child policy <code>CHILD_POLICY_REPEAT</code>.  For
  308        * example, an element representing color primary information
  309        * might be required to have at least 3 children, one for each
  310        * primay.
  311        *
  312        * @param elementName the name of the element being queried.
  313        *
  314        * @return an <code>int</code>.
  315        *
  316        * @exception IllegalArgumentException if <code>elementName</code>
  317        * is <code>null</code> or is not a legal element name for this
  318        * format.
  319        * @exception IllegalArgumentException if the named element does
  320        * not have a child policy of <code>CHILD_POLICY_REPEAT</code>.
  321        */
  322       int getElementMinChildren(String elementName);
  323   
  324       /**
  325        * Returns the maximum number of children of the named element
  326        * with child policy <code>CHILD_POLICY_REPEAT</code>.  For
  327        * example, an element representing an entry in an 8-bit color
  328        * palette might be allowed to repeat up to 256 times.  A value of
  329        * <code>Integer.MAX_VALUE</code> may be used to specify that
  330        * there is no upper bound.
  331        *
  332        * @param elementName the name of the element being queried.
  333        *
  334        * @return an <code>int</code>.
  335        *
  336        * @exception IllegalArgumentException if <code>elementName</code>
  337        * is <code>null</code> or is not a legal element name for this
  338        * format.
  339        * @exception IllegalArgumentException if the named element does
  340        * not have a child policy of <code>CHILD_POLICY_REPEAT</code>.
  341        */
  342       int getElementMaxChildren(String elementName);
  343   
  344       /**
  345        * Returns a <code>String</code> containing a description of the
  346        * named element, or <code>null</code>.  The desciption will be
  347        * localized for the supplied <code>Locale</code> if possible.
  348        *
  349        * <p> If <code>locale</code> is <code>null</code>, the current
  350        * default <code>Locale</code> returned by <code>Locale.getLocale</code>
  351        * will be used.
  352        *
  353        * @param elementName the name of the element.
  354        * @param locale the <code>Locale</code> for which localization
  355        * will be attempted.
  356        *
  357        * @return the element description.
  358        *
  359        * @exception IllegalArgumentException if <code>elementName</code>
  360        * is <code>null</code>, or is not a legal element name for this format.
  361        */
  362       String getElementDescription(String elementName, Locale locale);
  363   
  364       // Children
  365   
  366       /**
  367        * Returns one of the constants starting with
  368        * <code>CHILD_POLICY_</code>, indicating the legal pattern of
  369        * children for the named element.
  370        *
  371        * @param elementName the name of the element being queried.
  372        *
  373        * @return one of the <code>CHILD_POLICY_*</code> constants.
  374        *
  375        * @exception IllegalArgumentException if <code>elementName</code>
  376        * is <code>null</code> or is not a legal element name for this
  377        * format.
  378        */
  379       int getChildPolicy(String elementName);
  380   
  381       /**
  382        * Returns an array of <code>String</code>s indicating the names
  383        * of the element which are allowed to be children of the named
  384        * element, in the order in which they should appear.  If the
  385        * element cannot have children, <code>null</code> is returned.
  386        *
  387        * @param elementName the name of the element being queried.
  388        *
  389        * @return an array of <code>String</code>s, or null.
  390        *
  391        * @exception IllegalArgumentException if <code>elementName</code>
  392        * is <code>null</code> or is not a legal element name for this
  393        * format.
  394        */
  395       String[] getChildNames(String elementName);
  396   
  397       // Attributes
  398   
  399       /**
  400        * Returns an array of <code>String</code>s listing the names of
  401        * the attributes that may be associated with the named element.
  402        *
  403        * @param elementName the name of the element being queried.
  404        *
  405        * @return an array of <code>String</code>s.
  406        *
  407        * @exception IllegalArgumentException if <code>elementName</code>
  408        * is <code>null</code> or is not a legal element name for this
  409        * format.
  410        */
  411       String[] getAttributeNames(String elementName);
  412   
  413       /**
  414        * Returns one of the constants starting with <code>VALUE_</code>,
  415        * indicating whether the values of the given attribute within the
  416        * named element are arbitrary, constrained to lie within a
  417        * specified range, constrained to be one of a set of enumerated
  418        * values, or are a whitespace-separated list of arbitrary values.
  419        *
  420        * @param elementName the name of the element being queried.
  421        * @param attrName the name of the attribute being queried.
  422        *
  423        * @return one of the <code>VALUE_*</code> constants.
  424        *
  425        * @exception IllegalArgumentException if <code>elementName</code>
  426        * is <code>null</code> or is not a legal element name for this
  427        * format.
  428        * @exception IllegalArgumentException if <code>attrName</code> is
  429        * <code>null</code> or is not a legal attribute name for this
  430        * element.
  431        */
  432       int getAttributeValueType(String elementName, String attrName);
  433   
  434       /**
  435        * Returns one of the constants starting with
  436        * <code>DATATYPE_</code>, indicating the format and
  437        * interpretation of the value of the given attribute within th
  438        * enamed element.  If <code>getAttributeValueType</code> returns
  439        * <code>VALUE_LIST</code>, then the legal value is a
  440        * whitespace-spearated list of values of the returned datatype.
  441        *
  442        * @param elementName the name of the element being queried.
  443        * @param attrName the name of the attribute being queried.
  444        *
  445        * @return one of the <code>DATATYPE_*</code> constants.
  446        *
  447        * @exception IllegalArgumentException if <code>elementName</code>
  448        * is <code>null</code> or is not a legal element name for this
  449        * format.
  450        * @exception IllegalArgumentException if <code>attrName</code> is
  451        * <code>null</code> or is not a legal attribute name for this
  452        * element.
  453        */
  454       int getAttributeDataType(String elementName, String attrName);
  455   
  456       /**
  457        * Returns <code>true</code> if the named attribute must be
  458        * present within the named element.
  459        *
  460        * @param elementName the name of the element being queried.
  461        * @param attrName the name of the attribute being queried.
  462        *
  463        * @return <code>true</code> if the attribut must be present.
  464        *
  465        * @exception IllegalArgumentException if <code>elementName</code>
  466        * is <code>null</code> or is not a legal element name for this
  467        * format.
  468        * @exception IllegalArgumentException if <code>attrName</code> is
  469        * <code>null</code> or is not a legal attribute name for this
  470        * element.
  471        */
  472       boolean isAttributeRequired(String elementName, String attrName);
  473   
  474       /**
  475        * Returns the default value of the named attribute, if it is not
  476        * explictly present within the named element, as a
  477        * <code>String</code>, or <code>null</code> if no default value
  478        * is available.
  479        *
  480        * @param elementName the name of the element being queried.
  481        * @param attrName the name of the attribute being queried.
  482        *
  483        * @return a <code>String</code> containing the default value, or
  484        * <code>null</code>.
  485        *
  486        * @exception IllegalArgumentException if <code>elementName</code>
  487        * is <code>null</code> or is not a legal element name for this
  488        * format.
  489        * @exception IllegalArgumentException if <code>attrName</code> is
  490        * <code>null</code> or is not a legal attribute name for this
  491        * element.
  492        */
  493       String getAttributeDefaultValue(String elementName, String attrName);
  494   
  495       /**
  496        * Returns an array of <code>String</code>s containing the legal
  497        * enumerated values for the given attribute within the named
  498        * element.  This method should only be called if
  499        * <code>getAttributeValueType</code> returns
  500        * <code>VALUE_ENUMERATION</code>.
  501        *
  502        * @param elementName the name of the element being queried.
  503        * @param attrName the name of the attribute being queried.
  504        *
  505        * @return an array of <code>String</code>s.
  506        *
  507        * @exception IllegalArgumentException if <code>elementName</code>
  508        * is <code>null</code> or is not a legal element name for this
  509        * format.
  510        * @exception IllegalArgumentException if <code>attrName</code> is
  511        * <code>null</code> or is not a legal attribute name for this
  512        * element.
  513        * @exception IllegalArgumentException if the given attribute is
  514        * not defined as an enumeration.
  515        */
  516       String[] getAttributeEnumerations(String elementName, String attrName);
  517   
  518       /**
  519        * Returns the minimum legal value for the attribute.  Whether
  520        * this value is inclusive or exclusive may be determined by the
  521        * value of <code>getAttributeValueType</code>.  The value is
  522        * returned as a <code>String</code>; its interpretation is
  523        * dependent on the value of <code>getAttributeDataType</code>.
  524        * This method should only be called if
  525        * <code>getAttributeValueType</code> returns
  526        * <code>VALUE_RANGE_*</code>.
  527        *
  528        * @param elementName the name of the element being queried.
  529        * @param attrName the name of the attribute being queried.
  530        *
  531        * @return a <code>String</code> containing the smallest legal
  532        * value for the attribute.
  533        *
  534        * @exception IllegalArgumentException if <code>elementName</code>
  535        * is <code>null</code> or is not a legal element name for this
  536        * format.
  537        * @exception IllegalArgumentException if <code>attrName</code> is
  538        * <code>null</code> or is not a legal attribute name for this
  539        * element.
  540        * @exception IllegalArgumentException if the given attribute is
  541        * not defined as a range.
  542        */
  543       String getAttributeMinValue(String elementName, String attrName);
  544   
  545       /**
  546        * Returns the maximum legal value for the attribute.  Whether
  547        * this value is inclusive or exclusive may be determined by the
  548        * value of <code>getAttributeValueType</code>.  The value is
  549        * returned as a <code>String</code>; its interpretation is
  550        * dependent on the value of <code>getAttributeDataType</code>.
  551        * This method should only be called if
  552        * <code>getAttributeValueType</code> returns
  553        * <code>VALUE_RANGE_*</code>.
  554        *
  555        * @param elementName the name of the element being queried, as a
  556        * <code>String</code>.
  557        * @param attrName the name of the attribute being queried.
  558        *
  559        * @return a <code>String</code> containing the largest legal
  560        * value for the attribute.
  561        *
  562        * @exception IllegalArgumentException if <code>elementName</code>
  563        * is <code>null</code> or is not a legal element name for this
  564        * format.
  565        * @exception IllegalArgumentException if <code>attrName</code> is
  566        * <code>null</code> or is not a legal attribute name for this
  567        * element.
  568        * @exception IllegalArgumentException if the given attribute is
  569        * not defined as a range.
  570        */
  571       String getAttributeMaxValue(String elementName, String attrName);
  572   
  573       /**
  574        * Returns the minimum number of list items that may be used to
  575        * define this attribute.  The attribute itself is defined as a
  576        * <code>String</code> containing multiple whitespace-separated
  577        * items.  This method should only be called if
  578        * <code>getAttributeValueType</code> returns
  579        * <code>VALUE_LIST</code>.
  580        *
  581        * @param elementName the name of the element being queried.
  582        * @param attrName the name of the attribute being queried.
  583        *
  584        * @return the smallest legal number of list items for the
  585        * attribute.
  586        *
  587        * @exception IllegalArgumentException if <code>elementName</code>
  588        * is <code>null</code> or is not a legal element name for this
  589        * format.
  590        * @exception IllegalArgumentException if <code>attrName</code> is
  591        * <code>null</code> or is not a legal attribute name for this
  592        * element.
  593        * @exception IllegalArgumentException if the given attribute is
  594        * not defined as a list.
  595        */
  596       int getAttributeListMinLength(String elementName, String attrName);
  597   
  598       /**
  599        * Returns the maximum number of list items that may be used to
  600        * define this attribute.  A value of
  601        * <code>Integer.MAX_VALUE</code> may be used to specify that
  602        * there is no upper bound.  The attribute itself is defined as a
  603        * <code>String</code> containing multiple whitespace-separated
  604        * items.  This method should only be called if
  605        * <code>getAttributeValueType</code> returns
  606        * <code>VALUE_LIST</code>.
  607        *
  608        * @param elementName the name of the element being queried.
  609        * @param attrName the name of the attribute being queried.
  610        *
  611        * @return the largest legal number of list items for the
  612        * attribute.
  613        *
  614        * @exception IllegalArgumentException if <code>elementName</code>
  615        * is <code>null</code> or is not a legal element name for this
  616        * format.
  617        * @exception IllegalArgumentException if <code>attrName</code> is
  618        * <code>null</code> or is not a legal attribute name for this
  619        * element.
  620        * @exception IllegalArgumentException if the given attribute is
  621        * not defined as a list.
  622        */
  623       int getAttributeListMaxLength(String elementName, String attrName);
  624   
  625       /**
  626        * Returns a <code>String</code> containing a description of the
  627        * named attribute, or <code>null</code>.  The desciption will be
  628        * localized for the supplied <code>Locale</code> if possible.
  629        *
  630        * <p> If <code>locale</code> is <code>null</code>, the current
  631        * default <code>Locale</code> returned by <code>Locale.getLocale</code>
  632        * will be used.
  633        *
  634        * @param elementName the name of the element.
  635        * @param attrName the name of the attribute.
  636        * @param locale the <code>Locale</code> for which localization
  637        * will be attempted.
  638        *
  639        * @return the attribute description.
  640        *
  641        * @exception IllegalArgumentException if <code>elementName</code>
  642        * is <code>null</code>, or is not a legal element name for this format.
  643        * @exception IllegalArgumentException if <code>attrName</code> is
  644        * <code>null</code> or is not a legal attribute name for this
  645        * element.
  646        */
  647       String getAttributeDescription(String elementName, String attrName,
  648                                      Locale locale);
  649   
  650       // Object value
  651   
  652       /**
  653        * Returns one of the enumerated values starting with
  654        * <code>VALUE_</code>, indicating the type of values
  655        * (enumeration, range, or array) that are allowed for the
  656        * <code>Object</code> reference.  If no object value can be
  657        * stored within the given element, the result of this method will
  658        * be <code>VALUE_NONE</code>.
  659        *
  660        * <p> <code>Object</code> references whose legal values are
  661        * defined as a range must implement the <code>Comparable</code>
  662        * interface.
  663        *
  664        * @param elementName the name of the element being queried.
  665        *
  666        * @return one of the <code>VALUE_*</code> constants.
  667        *
  668        * @exception IllegalArgumentException if <code>elementName</code>
  669        * is <code>null</code> or is not a legal element name for this
  670        * format.
  671        *
  672        * @see Comparable
  673        */
  674       int getObjectValueType(String elementName);
  675   
  676       /**
  677        * Returns the <code>Class</code> type of the <code>Object</code>
  678        * reference stored within the element.  If this element may not
  679        * contain an <code>Object</code> reference, an
  680        * <code>IllegalArgumentException</code> will be thrown.  If the
  681        * class type is an array, this field indicates the underlying
  682        * class type (<i>e.g</i>, for an array of <code>int</code>s, this
  683        * method would return <code>int.class</code>).
  684        *
  685        * <p> <code>Object</code> references whose legal values are
  686        * defined as a range must implement the <code>Comparable</code>
  687        * interface.
  688        *
  689        * @param elementName the name of the element being queried.
  690        *
  691        * @return a <code>Class</code> object.
  692        *
  693        * @exception IllegalArgumentException if <code>elementName</code>
  694        * is <code>null</code> or is not a legal element name for this
  695        * format.
  696        * @exception IllegalArgumentException if the named element cannot
  697        * contain an object value (<i>i.e.</i>, if
  698        * <code>getObjectValueType(elementName) == VALUE_NONE</code>).
  699        */
  700       Class<?> getObjectClass(String elementName);
  701   
  702       /**
  703        * Returns an <code>Object</code>s containing the default
  704        * value for the <code>Object</code> reference within
  705        * the named element.
  706        *
  707        * @param elementName the name of the element being queried.
  708        *
  709        * @return an <code>Object</code>.
  710        *
  711        * @exception IllegalArgumentException if <code>elementName</code>
  712        * is <code>null</code> or is not a legal element name for this
  713        * format.
  714        * @exception IllegalArgumentException if the named element cannot
  715        * contain an object value (<i>i.e.</i>, if
  716        * <code>getObjectValueType(elementName) == VALUE_NONE</code>).
  717        */
  718       Object getObjectDefaultValue(String elementName);
  719   
  720       /**
  721        * Returns an array of <code>Object</code>s containing the legal
  722        * enumerated values for the <code>Object</code> reference within
  723        * the named element.  This method should only be called if
  724        * <code>getObjectValueType</code> returns
  725        * <code>VALUE_ENUMERATION</code>.
  726        *
  727        * <p> The <code>Object</code> associated with a node that accepts
  728        * emuerated values must be equal to one of the values returned by
  729        * this method, as defined by the <code>==</code> operator (as
  730        * opposed to the <code>Object.equals</code> method).
  731        *
  732        * @param elementName the name of the element being queried.
  733        *
  734        * @return an array of <code>Object</code>s.
  735        *
  736        * @exception IllegalArgumentException if <code>elementName</code>
  737        * is <code>null</code> or is not a legal element name for this
  738        * format.
  739        * @exception IllegalArgumentException if the named element cannot
  740        * contain an object value (<i>i.e.</i>, if
  741        * <code>getObjectValueType(elementName) == VALUE_NONE</code>).
  742        * @exception IllegalArgumentException if the <code>Object</code>
  743        * is not defined as an enumeration.
  744        */
  745       Object[] getObjectEnumerations(String elementName);
  746   
  747       /**
  748        * Returns the minimum legal value for the <code>Object</code>
  749        * reference within the named element.  Whether this value is
  750        * inclusive or exclusive may be determined by the value of
  751        * <code>getObjectValueType</code>.  This method should only be
  752        * called if <code>getObjectValueType</code> returns one of the
  753        * constants starting with <code>VALUE_RANGE</code>.
  754        *
  755        * @param elementName the name of the element being queried.
  756        *
  757        * @return the smallest legal value for the attribute.
  758        *
  759        * @exception IllegalArgumentException if <code>elementName</code>
  760        * is <code>null</code> or is not a legal element name for this
  761        * format.
  762        * @exception IllegalArgumentException if the named element cannot
  763        * contain an object value (<i>i.e.</i>, if
  764        * <code>getObjectValueType(elementName) == VALUE_NONE</code>).
  765        * @exception IllegalArgumentException if the <code>Object</code>
  766        * is not defined as a range.
  767        */
  768       Comparable<?> getObjectMinValue(String elementName);
  769   
  770       /**
  771        * Returns the maximum legal value for the <code>Object</code>
  772        * reference within the named element.  Whether this value is
  773        * inclusive or exclusive may be determined by the value of
  774        * <code>getObjectValueType</code>.  This method should only be
  775        * called if <code>getObjectValueType</code> returns one of the
  776        * constants starting with <code>VALUE_RANGE</code>.
  777        *
  778        * @return the smallest legal value for the attribute.
  779        *
  780        * @param elementName the name of the element being queried.
  781        *
  782        * @exception IllegalArgumentException if <code>elementName</code>
  783        * is <code>null</code> or is not a legal element name for this
  784        * format.
  785        * @exception IllegalArgumentException if the named element cannot
  786        * contain an object value (<i>i.e.</i>, if
  787        * <code>getObjectValueType(elementName) == VALUE_NONE</code>).
  788        * @exception IllegalArgumentException if the <code>Object</code>
  789        * is not defined as a range.
  790        */
  791       Comparable<?> getObjectMaxValue(String elementName);
  792   
  793       /**
  794        * Returns the minimum number of array elements that may be used
  795        * to define the <code>Object</code> reference within the named
  796        * element.  This method should only be called if
  797        * <code>getObjectValueType</code> returns
  798        * <code>VALUE_LIST</code>.
  799        *
  800        * @param elementName the name of the element being queried.
  801        *
  802        * @return the smallest valid array length for the
  803        * <code>Object</code> reference.
  804        *
  805        * @exception IllegalArgumentException if <code>elementName</code>
  806        * is <code>null</code> or is not a legal element name for this
  807        * format.
  808        * @exception IllegalArgumentException if the named element cannot
  809        * contain an object value (<i>i.e.</i>, if
  810        * <code>getObjectValueType(elementName) == VALUE_NONE</code>).
  811        * @exception IllegalArgumentException if the <code>Object</code> is not
  812        * an array.
  813        */
  814       int getObjectArrayMinLength(String elementName);
  815   
  816       /**
  817        * Returns the maximum number of array elements that may be used
  818        * to define the <code>Object</code> reference within the named
  819        * element.  A value of <code>Integer.MAX_VALUE</code> may be used
  820        * to specify that there is no upper bound.  This method should
  821        * only be called if <code>getObjectValueType</code> returns
  822        * <code>VALUE_LIST</code>.
  823        *
  824        * @param elementName the name of the element being queried.
  825        *
  826        * @return the largest valid array length for the
  827        * <code>Object</code> reference.
  828        *
  829        * @exception IllegalArgumentException if <code>elementName</code>
  830        * is <code>null</code> or is not a legal element name for this
  831        * format.
  832        * @exception IllegalArgumentException if the named element cannot
  833        * contain an object value (<i>i.e.</i>, if
  834        * <code>getObjectValueType(elementName) == VALUE_NONE</code>).
  835        * @exception IllegalArgumentException if the <code>Object</code> is not
  836        * an array.
  837        */
  838       int getObjectArrayMaxLength(String elementName);
  839   }

Save This Page
Home » openjdk-7 » javax » imageio » metadata » [javadoc | source]