1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// AttributesImpl.java - default implementation of Attributes. 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// http://www.saxproject.org 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// Written by David Megginson 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// NO WARRANTY! This class is in the public domain. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// $Id: AttributesImpl.java,v 1.9 2002/01/30 20:52:24 dbrownell Exp $ 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.xml.sax.helpers; 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.xml.sax.Attributes; 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Default implementation of the Attributes interface. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <blockquote> 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <em>This module, both source code and documentation, is in the 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em> 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a> 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for further information. 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </blockquote> 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>This class provides a default implementation of the SAX2 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link org.xml.sax.Attributes Attributes} interface, with the 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * addition of manipulators so that the list can be modified or 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * reused.</p> 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>There are two typical uses of this class:</p> 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <ol> 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <li>to take a persistent snapshot of an Attributes object 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in a {@link org.xml.sax.ContentHandler#startElement startElement} event; or</li> 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <li>to construct or modify an Attributes object in a SAX2 driver or filter.</li> 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </ol> 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>This class replaces the now-deprecated SAX1 {@link 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * org.xml.sax.helpers.AttributeListImpl AttributeListImpl} 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * class; in addition to supporting the updated Attributes 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * interface rather than the deprecated {@link org.xml.sax.AttributeList 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * AttributeList} interface, it also includes a much more efficient 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * implementation using a single array rather than a set of Vectors.</p> 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since SAX 2.0 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @author David Megginson 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @version 2.0.1 (sax2r2) 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class AttributesImpl implements Attributes 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Constructors. 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Construct a new, empty AttributesImpl object. 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public AttributesImpl () 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project length = 0; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data = null; 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copy an existing Attributes object. 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>This constructor is especially useful inside a 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@link org.xml.sax.ContentHandler#startElement startElement} event.</p> 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param atts The existing Attributes object. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public AttributesImpl (Attributes atts) 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setAttributes(atts); 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Implementation of org.xml.sax.Attributes. 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return the number of attributes in the list. 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The number of attributes in the list. 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getLength 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getLength () 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return length; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return an attribute's Namespace URI. 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The attribute's index (zero-based). 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The Namespace URI, the empty string if none is 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * available, or null if the index is out of range. 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getURI 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getURI (int index) 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return data[index*5]; 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return an attribute's local name. 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The attribute's index (zero-based). 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's local name, the empty string if 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * none is available, or null if the index if out of range. 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getLocalName 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getLocalName (int index) 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return data[index*5+1]; 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return an attribute's qualified (prefixed) name. 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The attribute's index (zero-based). 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's qualified name, the empty string if 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * none is available, or null if the index is out of bounds. 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getQName 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getQName (int index) 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return data[index*5+2]; 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return an attribute's type by index. 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The attribute's index (zero-based). 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's type, "CDATA" if the type is unknown, or null 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the index is out of bounds. 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getType(int) 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getType (int index) 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return data[index*5+3]; 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return an attribute's value by index. 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The attribute's index (zero-based). 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's value or null if the index is out of bounds. 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getValue(int) 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getValue (int index) 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return data[index*5+4]; 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Look up an attribute's index by Namespace name. 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>In many cases, it will be more efficient to look up the name once and 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * use the index query methods rather than using the name query methods 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * repeatedly.</p> 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param uri The attribute's Namespace URI, or the empty 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * string if none is available. 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param localName The attribute's local name. 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's index, or -1 if none matches. 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getIndex(java.lang.String,java.lang.String) 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getIndex (String uri, String localName) 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int max = length * 5; 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < max; i += 5) { 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (data[i].equals(uri) && data[i+1].equals(localName)) { 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i / 5; 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Look up an attribute's index by qualified (prefixed) name. 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param qName The qualified name. 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's index, or -1 if none matches. 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getIndex(java.lang.String) 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getIndex (String qName) 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int max = length * 5; 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < max; i += 5) { 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (data[i+2].equals(qName)) { 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i / 5; 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Look up an attribute's type by Namespace-qualified name. 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param uri The Namespace URI, or the empty string for a name 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with no explicit Namespace URI. 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param localName The local name. 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's type, or null if there is no 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * matching attribute. 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getType(java.lang.String,java.lang.String) 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getType (String uri, String localName) 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int max = length * 5; 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < max; i += 5) { 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (data[i].equals(uri) && data[i+1].equals(localName)) { 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return data[i+3]; 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Look up an attribute's type by qualified (prefixed) name. 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param qName The qualified name. 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's type, or null if there is no 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * matching attribute. 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getType(java.lang.String) 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getType (String qName) 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int max = length * 5; 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < max; i += 5) { 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (data[i+2].equals(qName)) { 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return data[i+3]; 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Look up an attribute's value by Namespace-qualified name. 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param uri The Namespace URI, or the empty string for a name 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * with no explicit Namespace URI. 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param localName The local name. 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's value, or null if there is no 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * matching attribute. 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getValue(java.lang.String,java.lang.String) 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getValue (String uri, String localName) 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int max = length * 5; 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < max; i += 5) { 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (data[i].equals(uri) && data[i+1].equals(localName)) { 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return data[i+4]; 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Look up an attribute's value by qualified (prefixed) name. 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param qName The qualified name. 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return The attribute's value, or null if there is no 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * matching attribute. 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see org.xml.sax.Attributes#getValue(java.lang.String) 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getValue (String qName) 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int max = length * 5; 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < max; i += 5) { 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (data[i+2].equals(qName)) { 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return data[i+4]; 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Manipulators. 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Clear the attribute list for reuse. 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>Note that little memory is freed by this call: 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the current array is kept so it can be 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * reused.</p> 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear () 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (data != null) { 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < (length * 5); i++) 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data [i] = null; 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project length = 0; 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copy an entire Attributes object. 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>It may be more efficient to reuse an existing object 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * rather than constantly allocating new ones.</p> 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param atts The attributes to copy. 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setAttributes (Attributes atts) 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project clear(); 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project length = atts.getLength(); 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (length > 0) { 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data = new String[length*5]; 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < length; i++) { 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[i*5] = atts.getURI(i); 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[i*5+1] = atts.getLocalName(i); 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[i*5+2] = atts.getQName(i); 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[i*5+3] = atts.getType(i); 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[i*5+4] = atts.getValue(i); 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Add an attribute to the end of the list. 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>For the sake of speed, this method does no checking 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to see if the attribute is already in the list: that is 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the responsibility of the application.</p> 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param uri The Namespace URI, or the empty string if 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * none is available or Namespace processing is not 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * being performed. 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param localName The local name, or the empty string if 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Namespace processing is not being performed. 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param qName The qualified (prefixed) name, or the empty string 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if qualified names are not available. 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param type The attribute type as a string. 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value The attribute value. 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void addAttribute (String uri, String localName, String qName, 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String type, String value) 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ensureCapacity(length+1); 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[length*5] = uri; 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[length*5+1] = localName; 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[length*5+2] = qName; 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[length*5+3] = type; 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[length*5+4] = value; 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project length++; 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Set an attribute in the list. 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p>For the sake of speed, this method does no checking 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for name conflicts or well-formedness: such checks are the 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * responsibility of the application.</p> 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The index of the attribute (zero-based). 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param uri The Namespace URI, or the empty string if 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * none is available or Namespace processing is not 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * being performed. 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param localName The local name, or the empty string if 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Namespace processing is not being performed. 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param qName The qualified name, or the empty string 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if qualified names are not available. 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param type The attribute type as a string. 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value The attribute value. 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception java.lang.ArrayIndexOutOfBoundsException When the 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * supplied index does not point to an attribute 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the list. 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setAttribute (int index, String uri, String localName, 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String qName, String type, String value) 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5] = uri; 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5+1] = localName; 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5+2] = qName; 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5+3] = type; 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5+4] = value; 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project badIndex(index); 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Remove an attribute from the list. 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The index of the attribute (zero-based). 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception java.lang.ArrayIndexOutOfBoundsException When the 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * supplied index does not point to an attribute 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the list. 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void removeAttribute (int index) 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index < length - 1) { 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.arraycopy(data, (index+1)*5, data, index*5, 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (length-index-1)*5); 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project index = (length - 1) * 5; 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data [index++] = null; 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data [index++] = null; 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data [index++] = null; 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data [index++] = null; 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data [index] = null; 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project length--; 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project badIndex(index); 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Set the Namespace URI of a specific attribute. 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The index of the attribute (zero-based). 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param uri The attribute's Namespace URI, or the empty 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * string for none. 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception java.lang.ArrayIndexOutOfBoundsException When the 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * supplied index does not point to an attribute 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the list. 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setURI (int index, String uri) 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5] = uri; 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project badIndex(index); 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Set the local name of a specific attribute. 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The index of the attribute (zero-based). 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param localName The attribute's local name, or the empty 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * string for none. 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception java.lang.ArrayIndexOutOfBoundsException When the 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * supplied index does not point to an attribute 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the list. 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setLocalName (int index, String localName) 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5+1] = localName; 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project badIndex(index); 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Set the qualified name of a specific attribute. 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The index of the attribute (zero-based). 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param qName The attribute's qualified name, or the empty 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * string for none. 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception java.lang.ArrayIndexOutOfBoundsException When the 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * supplied index does not point to an attribute 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the list. 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setQName (int index, String qName) 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5+2] = qName; 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project badIndex(index); 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Set the type of a specific attribute. 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The index of the attribute (zero-based). 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param type The attribute's type. 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception java.lang.ArrayIndexOutOfBoundsException When the 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * supplied index does not point to an attribute 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the list. 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setType (int index, String type) 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5+3] = type; 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project badIndex(index); 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Set the value of a specific attribute. 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The index of the attribute (zero-based). 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value The attribute's value. 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception java.lang.ArrayIndexOutOfBoundsException When the 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * supplied index does not point to an attribute 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the list. 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setValue (int index, String value) 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index >= 0 && index < length) { 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data[index*5+4] = value; 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project badIndex(index); 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Internal methods. 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Ensure the internal array's capacity. 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param n The minimum number of attributes that the array must 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be able to hold. 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void ensureCapacity (int n) { 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (n <= 0) { 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int max; 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (data == null || data.length == 0) { 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project max = 25; 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else if (data.length >= n * 5) { 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else { 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project max = data.length; 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (max < n * 5) { 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project max *= 2; 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String newData[] = new String[max]; 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (length > 0) { 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project System.arraycopy(data, 0, newData, 0, length*5); 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project data = newData; 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Report a bad array index in a manipulator. 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index The index to report. 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @exception java.lang.ArrayIndexOutOfBoundsException Always. 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void badIndex (int index) 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws ArrayIndexOutOfBoundsException 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String msg = 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "Attempt to modify attribute at illegal index: " + index; 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new ArrayIndexOutOfBoundsException(msg); 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Internal state. 610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //////////////////////////////////////////////////////////////////// 611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int length; 613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String data []; 614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// end of AttributesImpl.java 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 619