1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Permission is hereby granted, free of charge, to any person obtaining a copy 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * of this software and associated documentation files (the "Software"), to deal 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * in the Software without restriction, including without limitation the rights 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to use, copy, modify, merge, publish, distribute, sublicense, and/or 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sell copies of the Software, and to permit persons to whom the Software is 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * furnished to do so, subject to the following conditions: 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The above copyright notice and this permission notice shall be included in 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * all copies or substantial portions of the Software. 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * IN THE SOFTWARE. */ 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.kxml2.kdom; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.*; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.*; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.xmlpull.v1.*; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * In order to create an element, please use the createElement method 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instead of invoking the constructor directly. The right place to 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * add user defined initialization code is the init method. */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Element extends Node { 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected String namespace; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected String name; 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected Vector attributes; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected Node parent; 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected Vector prefixes; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Element() { 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * called when all properties are set, but before children 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * are parsed. Please do not use setParent for initialization 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * code any longer. */ 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void init() { 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 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 * removes all children and attributes */ 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project attributes = null; 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project children = null; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Forwards creation request to parent if any, otherwise 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calls super.createElement. */ 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Element createElement( 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String namespace, 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String name) { 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (this.parent == null) 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ? super.createElement(namespace, name) 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project : this.parent.createElement(namespace, name); 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the number of attributes of this element. */ 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getAttributeCount() { 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return attributes == null ? 0 : attributes.size(); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getAttributeNamespace (int index) { 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((String []) attributes.elementAt (index)) [0]; 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* public String getAttributePrefix (int index) { 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((String []) attributes.elementAt (index)) [1]; 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }*/ 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getAttributeName (int index) { 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((String []) attributes.elementAt (index)) [1]; 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getAttributeValue (int index) { 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((String []) attributes.elementAt (index)) [2]; 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getAttributeValue (String namespace, String name) { 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < getAttributeCount (); i++) { 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (name.equals (getAttributeName (i)) 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && (namespace == null || namespace.equals (getAttributeNamespace(i)))) { 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return getAttributeValue (i); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the root node, determined by ascending to the 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * all parents un of the root element. */ 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Node getRoot() { 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Element current = this; 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (current.parent != null) { 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!(current.parent instanceof Element)) return current.parent; 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project current = (Element) current.parent; 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return current; 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * returns the (local) name of the element */ 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getName() { 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return name; 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * returns the namespace of the element */ 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getNamespace() { 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return namespace; 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * returns the namespace for the given prefix */ 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getNamespaceUri (String prefix) { 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int cnt = getNamespaceCount (); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < cnt; i++) { 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (prefix == getNamespacePrefix (i) || 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (prefix != null && prefix.equals (getNamespacePrefix (i)))) 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return getNamespaceUri (i); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return parent instanceof Element ? ((Element) parent).getNamespaceUri (prefix) : null; 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * returns the number of declared namespaces, NOT including 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * parent elements */ 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getNamespaceCount () { 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (prefixes == null ? 0 : prefixes.size ()); 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getNamespacePrefix (int i) { 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((String []) prefixes.elementAt (i)) [0]; 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getNamespaceUri (int i) { 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ((String []) prefixes.elementAt (i)) [1]; 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the parent node of this element */ 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Node getParent() { 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return parent; 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the parent element if available, null otherwise 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Element getParentElement() { 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return (parent instanceof Element) 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ? ((Element) parent) 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project : null; 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project*/ 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Builds the child elements from the given Parser. By overwriting 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * parse, an element can take complete control over parsing its 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * subtree. */ 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void parse(XmlPullParser parser) 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IOException, XmlPullParserException { 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = parser.getNamespaceCount (parser.getDepth () - 1); 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project i < parser.getNamespaceCount (parser.getDepth ()); i++) { 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setPrefix (parser.getNamespacePrefix (i), parser.getNamespaceUri(i)); 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < parser.getAttributeCount (); i++) 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setAttribute (parser.getAttributeNamespace (i), 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// parser.getAttributePrefix (i), 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project parser.getAttributeName (i), 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project parser.getAttributeValue (i)); 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if (prefixMap == null) throw new RuntimeException ("!!"); 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project init(); 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (parser.isEmptyElementTag()) 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project parser.nextToken (); 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else { 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project parser.nextToken (); 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super.parse(parser); 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (getChildCount() == 0) 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project addChild(IGNORABLE_WHITESPACE, ""); 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project parser.require( 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project XmlPullParser.END_TAG, 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project getNamespace(), 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project getName()); 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project parser.nextToken (); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the given attribute; a value of null removes the attribute */ 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setAttribute (String namespace, String name, String value) { 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (attributes == null) 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project attributes = new Vector (); 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (namespace == null) 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project namespace = ""; 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = attributes.size()-1; i >=0; i--){ 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String[] attribut = (String[]) attributes.elementAt(i); 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (attribut[0].equals(namespace) && 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project attribut[1].equals(name)){ 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (value == null) { 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project attributes.removeElementAt(i); 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else { 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project attribut[2] = value; 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project attributes.addElement 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (new String [] {namespace, name, value}); 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the given prefix; a namespace value of null removess the 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * prefix */ 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setPrefix (String prefix, String namespace) { 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (prefixes == null) prefixes = new Vector (); 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project prefixes.addElement (new String [] {prefix, namespace}); 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sets the name of the element */ 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setName(String name) { 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.name = name; 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sets the namespace of the element. Please note: For no 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * namespace, please use Xml.NO_NAMESPACE, null is not a legal 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * value. Currently, null is converted to Xml.NO_NAMESPACE, but 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * future versions may throw an exception. */ 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void setNamespace(String namespace) { 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (namespace == null) 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException ("Use \"\" for empty namespace"); 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.namespace = namespace; 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the Parent of this element. Automatically called from the 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * add method. Please use with care, you can simply 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * create inconsitencies in the document tree structure using 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this method! */ 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected void setParent(Node parent) { 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.parent = parent; 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Writes this element and all children to the given XmlWriter. */ 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void write(XmlSerializer writer) 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throws IOException { 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (prefixes != null) { 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < prefixes.size(); i++) { 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writer.setPrefix (getNamespacePrefix (i), getNamespaceUri (i)); 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writer.startTag( 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project getNamespace(), 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project getName()); 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int len = getAttributeCount(); 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < len; i++) { 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writer.attribute( 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project getAttributeNamespace(i), 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project getAttributeName(i), 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project getAttributeValue(i)); 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writeChildren(writer); 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project writer.endTag(getNamespace (), getName ()); 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 336