1 /*
   2  * reserved comment block
   3  * DO NOT REMOVE OR ALTER!
   4  */
   5 /*
   6  * The Apache Software License, Version 1.1
   7  *
   8  *
   9  * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
  10  * reserved.
  11  *
  12  * Redistribution and use in source and binary forms, with or without
  13  * modification, are permitted provided that the following conditions
  14  * are met:
  15  *
  16  * 1. Redistributions of source code must retain the above copyright
  17  *    notice, this list of conditions and the following disclaimer.
  18  *
  19  * 2. Redistributions in binary form must reproduce the above copyright
  20  *    notice, this list of conditions and the following disclaimer in
  21  *    the documentation and/or other materials provided with the
  22  *    distribution.
  23  *
  24  * 3. The end-user documentation included with the redistribution,
  25  *    if any, must include the following acknowledgment:
  26  *       "This product includes software developed by the
  27  *        Apache Software Foundation (http://www.apache.org/)."
  28  *    Alternately, this acknowledgment may appear in the software itself,
  29  *    if and wherever such third-party acknowledgments normally appear.
  30  *
  31  * 4. The names "Xerces" and "Apache Software Foundation" must
  32  *    not be used to endorse or promote products derived from this
  33  *    software without prior written permission. For written
  34  *    permission, please contact apache@apache.org.
  35  *
  36  * 5. Products derived from this software may not be called "Apache",
  37  *    nor may "Apache" appear in their name, without prior written
  38  *    permission of the Apache Software Foundation.
  39  *
  40  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  41  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  42  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  43  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  44  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  45  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  46  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  47  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  48  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  49  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  50  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  51  * SUCH DAMAGE.
  52  * ====================================================================
  53  *
  54  * This software consists of voluntary contributions made by many
  55  * individuals on behalf of the Apache Software Foundation and was
  56  * originally based on software copyright (c) 1999, International
  57  * Business Machines, Inc., http://www.apache.org.  For more
  58  * information on the Apache Software Foundation, please see
  59  * <http://www.apache.org/>.
  60  */
  61 
  62 package com.sun.org.apache.xerces.internal.xni;
  63 
  64 /**
  65  * The XMLAttributes interface defines a collection of attributes for
  66  * an element. In the parser, the document source would scan the entire
  67  * start element and collect the attributes. The attributes are
  68  * communicated to the document handler in the startElement method.
  69  * <p>
  70  * The attributes are read-write so that subsequent stages in the document
  71  * pipeline can modify the values or change the attributes that are
  72  * propogated to the next stage.
  73  *
  74  * @see XMLDocumentHandler#startElement
  75  *
  76  * @author Andy Clark, IBM
  77  *
  78  */
  79 public interface XMLAttributes {
  80 
  81     //
  82     // XMLAttributes methods
  83     //
  84 
  85     /**
  86      * Adds an attribute. The attribute's non-normalized value of the
  87      * attribute will have the same value as the attribute value until
  88      * set using the <code>setNonNormalizedValue</code> method. Also,
  89      * the added attribute will be marked as specified in the XML instance
  90      * document unless set otherwise using the <code>setSpecified</code>
  91      * method.
  92      * <p>
  93      * <strong>Note:</strong> If an attribute of the same name already
  94      * exists, the old values for the attribute are replaced by the new
  95      * values.
  96      *
  97      * @param attrName  The attribute name.
  98      * @param attrType  The attribute type. The type name is determined by
  99      *                  the type specified for this attribute in the DTD.
 100      *                  For example: "CDATA", "ID", "NMTOKEN", etc. However,
 101      *                  attributes of type enumeration will have the type
 102      *                  value specified as the pipe ('|') separated list of
 103      *                  the enumeration values prefixed by an open
 104      *                  parenthesis and suffixed by a close parenthesis.
 105      *                  For example: "(true|false)".
 106      * @param attrValue The attribute value.
 107      *
 108      * @return Returns the attribute index.
 109      *
 110      * @see #setNonNormalizedValue
 111      * @see #setSpecified
 112      */
 113     public int addAttribute(QName attrName, String attrType, String attrValue);
 114 
 115     /**
 116      * Removes all of the attributes. This method will also remove all
 117      * entities associated to the attributes.
 118      */
 119     public void removeAllAttributes();
 120 
 121     /**
 122      * Removes the attribute at the specified index.
 123      * <p>
 124      * <strong>Note:</strong> This operation changes the indexes of all
 125      * attributes following the attribute at the specified index.
 126      *
 127      * @param attrIndex The attribute index.
 128      */
 129     public void removeAttributeAt(int attrIndex);
 130 
 131     /**
 132      * Returns the number of attributes in the list.
 133      * <p>
 134      * Once you know the number of attributes, you can iterate
 135      * through the list.
 136      *
 137      * @see #getURI(int)
 138      * @see #getLocalName(int)
 139      * @see #getQName(int)
 140      * @see #getType(int)
 141      * @see #getValue(int)
 142      */
 143     public int getLength();
 144 
 145     /**
 146      * Look up the index of an attribute by XML 1.0 qualified name.
 147      *
 148      * @param qName The qualified (prefixed) name.
 149      *
 150      * @return The index of the attribute, or -1 if it does not
 151      *         appear in the list.
 152      */
 153     public int getIndex(String qName);
 154 
 155     /**
 156      * Look up the index of an attribute by Namespace name.
 157      *
 158      * @param uri       The Namespace URI, or the empty string if
 159      *                  the name has no Namespace URI.
 160      * @param localName The attribute's local name.
 161      *
 162      * @return The index of the attribute, or -1 if it does not
 163      *         appear in the list.
 164      */
 165     public int getIndex(String uri, String localPart);
 166 
 167     /**
 168      * Sets the name of the attribute at the specified index.
 169      *
 170      * @param attrIndex The attribute index.
 171      * @param attrName  The new attribute name.
 172      */
 173     public void setName(int attrIndex, QName attrName);
 174 
 175     /**
 176      * Sets the fields in the given QName structure with the values
 177      * of the attribute name at the specified index.
 178      *
 179      * @param attrIndex The attribute index.
 180      * @param attrName  The attribute name structure to fill in.
 181      */
 182     public void getName(int attrIndex, QName attrName);
 183 
 184     /**
 185      * Returns the prefix of the attribute at the specified index.
 186      *
 187      * @param index The index of the attribute.
 188      */
 189     public String getPrefix(int index);
 190 
 191     /**
 192      * Look up an attribute's Namespace URI by index.
 193      *
 194      * @param index The attribute index (zero-based).
 195      *
 196      * @return The Namespace URI, or the empty string if none
 197      *         is available, or null if the index is out of
 198      *         range.
 199      *
 200      * @see #getLength
 201      */
 202     public String getURI(int index);
 203 
 204     /**
 205      * Look up an attribute's local name by index.
 206      *
 207      * @param index The attribute index (zero-based).
 208      *
 209      * @return The local name, or the empty string if Namespace
 210      *         processing is not being performed, or null
 211      *         if the index is out of range.
 212      *
 213      * @see #getLength
 214      */
 215     public String getLocalName(int index);
 216 
 217     /**
 218      * Look up an attribute's XML 1.0 qualified name by index.
 219      *
 220      * @param index The attribute index (zero-based).
 221      *
 222      * @return The XML 1.0 qualified name, or the empty string
 223      *         if none is available, or null if the index
 224      *         is out of range.
 225      *
 226      * @see #getLength
 227      */
 228     public String getQName(int index);
 229 
 230     //why the above method doens't return QName ?
 231     public QName getQualifiedName(int index);
 232 
 233 
 234     /**
 235      * Sets the type of the attribute at the specified index.
 236      *
 237      * @param attrIndex The attribute index.
 238      * @param attrType  The attribute type. The type name is determined by
 239      *                  the type specified for this attribute in the DTD.
 240      *                  For example: "CDATA", "ID", "NMTOKEN", etc. However,
 241      *                  attributes of type enumeration will have the type
 242      *                  value specified as the pipe ('|') separated list of
 243      *                  the enumeration values prefixed by an open
 244      *                  parenthesis and suffixed by a close parenthesis.
 245      *                  For example: "(true|false)".
 246      */
 247     public void setType(int attrIndex, String attrType);
 248 
 249     /**
 250      * Look up an attribute's type by index.
 251      * <p>
 252      * The attribute type is one of the strings "CDATA", "ID",
 253      * "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY", "ENTITIES",
 254      * or "NOTATION" (always in upper case).
 255      * <p>
 256      * If the parser has not read a declaration for the attribute,
 257      * or if the parser does not report attribute types, then it must
 258      * return the value "CDATA" as stated in the XML 1.0 Recommentation
 259      * (clause 3.3.3, "Attribute-Value Normalization").
 260      * <p>
 261      * For an enumerated attribute that is not a notation, the
 262      * parser will report the type as "NMTOKEN".
 263      *
 264      * @param index The attribute index (zero-based).
 265      *
 266      * @return The attribute's type as a string, or null if the
 267      *         index is out of range.
 268      *
 269      * @see #getLength
 270      */
 271     public String getType(int index);
 272 
 273     /**
 274      * Look up an attribute's type by XML 1.0 qualified name.
 275      * <p>
 276      * See {@link #getType(int) getType(int)} for a description
 277      * of the possible types.
 278      *
 279      * @param qName The XML 1.0 qualified name.
 280      *
 281      * @return The attribute type as a string, or null if the
 282      *         attribute is not in the list or if qualified names
 283      *         are not available.
 284      */
 285     public String getType(String qName);
 286 
 287     /**
 288      * Look up an attribute's type by Namespace name.
 289      * <p>
 290      * See {@link #getType(int) getType(int)} for a description
 291      * of the possible types.
 292      *
 293      * @param uri       The Namespace URI, or the empty String if the
 294      *                  name has no Namespace URI.
 295      * @param localName The local name of the attribute.
 296      *
 297      * @return The attribute type as a string, or null if the
 298      *         attribute is not in the list or if Namespace
 299      *         processing is not being performed.
 300      */
 301     public String getType(String uri, String localName);
 302 
 303     /**
 304      * Sets the value of the attribute at the specified index. This
 305      * method will overwrite the non-normalized value of the attribute.
 306      *
 307      * @param attrIndex The attribute index.
 308      * @param attrValue The new attribute value.
 309      *
 310      * @see #setNonNormalizedValue
 311      */
 312     public void setValue(int attrIndex, String attrValue);
 313 
 314     public void setValue(int attrIndex, String attrValue, XMLString value);
 315 
 316     /**
 317      * Look up an attribute's value by index.
 318      * <p>
 319      * If the attribute value is a list of tokens (IDREFS,
 320      * ENTITIES, or NMTOKENS), the tokens will be concatenated
 321      * into a single string with each token separated by a
 322      * single space.
 323      *
 324      * @param index The attribute index (zero-based).
 325      *
 326      * @return The attribute's value as a string, or null if the
 327      *         index is out of range.
 328      *
 329      * @see #getLength
 330      */
 331     public String getValue(int index);
 332 
 333     /**
 334      * Look up an attribute's value by XML 1.0 qualified name.
 335      * <p>
 336      * See {@link #getValue(int) getValue(int)} for a description
 337      * of the possible values.
 338      *
 339      * @param qName The XML 1.0 qualified name.
 340      *
 341      * @return The attribute value as a string, or null if the
 342      *         attribute is not in the list or if qualified names
 343      *         are not available.
 344      */
 345     public String getValue(String qName);
 346 
 347     /**
 348      * Look up an attribute's value by Namespace name.
 349      * <p>
 350      * See {@link #getValue(int) getValue(int)} for a description
 351      * of the possible values.
 352      *
 353      * @param uri       The Namespace URI, or the empty String if the
 354      *                  name has no Namespace URI.
 355      * @param localName The local name of the attribute.
 356      *
 357      * @return The attribute value as a string, or null if the
 358      *         attribute is not in the list.
 359      */
 360     public String getValue(String uri, String localName);
 361 
 362     /**
 363      * Sets the non-normalized value of the attribute at the specified
 364      * index.
 365      *
 366      * @param attrIndex The attribute index.
 367      * @param attrValue The new non-normalized attribute value.
 368      */
 369     public void setNonNormalizedValue(int attrIndex, String attrValue);
 370 
 371     /**
 372      * Returns the non-normalized value of the attribute at the specified
 373      * index. If no non-normalized value is set, this method will return
 374      * the same value as the <code>getValue(int)</code> method.
 375      *
 376      * @param attrIndex The attribute index.
 377      */
 378     public String getNonNormalizedValue(int attrIndex);
 379 
 380     /**
 381      * Sets whether an attribute is specified in the instance document
 382      * or not.
 383      *
 384      * @param attrIndex The attribute index.
 385      * @param specified True if the attribute is specified in the instance
 386      *                  document.
 387      */
 388     public void setSpecified(int attrIndex, boolean specified);
 389 
 390     /**
 391      * Returns true if the attribute is specified in the instance document.
 392      *
 393      * @param attrIndex The attribute index.
 394      */
 395     public boolean isSpecified(int attrIndex);
 396 
 397 
 398     /**
 399      * Look up an augmentation by attribute's index.
 400      *
 401      * @param attributeIndex The attribute index.
 402      * @return Augmentations
 403      */
 404     public Augmentations getAugmentations (int attributeIndex);
 405 
 406     /**
 407      * Look up an augmentation by namespace name.
 408      *
 409      * @param uri       The Namespace URI, or the empty string if
 410      *                  the name has no Namespace URI.
 411      * @param localPart
 412      * @return Augmentations
 413      */
 414     public Augmentations getAugmentations (String uri, String localPart);
 415 
 416 
 417     /**
 418      * Look up an augmentation by XML 1.0 qualified name.
 419      * <p>
 420      *
 421      * @param qName The XML 1.0 qualified name.
 422      *
 423      * @return Augmentations
 424      *
 425      */
 426     public Augmentations getAugmentations(String qName);
 427 
 428     /**
 429      * Sets the augmentations of the attribute at the specified index.
 430      *
 431      * @param attrIndex The attribute index.
 432      * @param augs      The augmentations.
 433      */
 434     public void setAugmentations(int attrIndex, Augmentations augs);
 435 
 436 
 437 
 438 
 439 } // interface XMLAttributes