XmlUtils.java revision ded7b75d1a353856ad8f126d171d598d15b97760
1087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor/* 2087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Copyright (C) 2006 The Android Open Source Project 3087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 4087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Licensed under the Apache License, Version 2.0 (the "License"); 5087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * you may not use this file except in compliance with the License. 6087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * You may obtain a copy of the License at 7087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 8087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * http://www.apache.org/licenses/LICENSE-2.0 9087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 10087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Unless required by applicable law or agreed to in writing, software 11087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * distributed under the License is distributed on an "AS IS" BASIS, 12087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * See the License for the specific language governing permissions and 14087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * limitations under the License. 15087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 16087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 172269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackbornpackage com.android.internal.util; 182269d1572e5fcfb725ea55f5764d8c3280d69f6dDianne Hackborn 19ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkeyimport android.util.Xml; 20087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 21087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport org.xmlpull.v1.XmlPullParser; 22087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport org.xmlpull.v1.XmlPullParserException; 23087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport org.xmlpull.v1.XmlSerializer; 24087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 25087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.io.IOException; 26087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.io.InputStream; 27087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.io.OutputStream; 28ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkeyimport java.net.ProtocolException; 29087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.ArrayList; 30087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.HashMap; 31212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powellimport java.util.HashSet; 32087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.Iterator; 33087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.List; 34087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.Map; 35087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.Set; 36087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 37087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor/** {@hide} */ 38ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkeypublic class XmlUtils { 39087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 40087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static void skipCurrentTag(XmlPullParser parser) 41087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, IOException { 42087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int outerDepth = parser.getDepth(); 43087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int type; 44087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 45087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor && (type != XmlPullParser.END_TAG 46087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor || parser.getDepth() > outerDepth)) { 47087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 48087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 49087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 50087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final int 51087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor convertValueToList(CharSequence value, String[] options, int defaultValue) 52087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 53087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (null != value) { 54087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor for (int i = 0; i < options.length; i++) { 55087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (value.equals(options[i])) 56087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return i; 57087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 58087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 59087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 60087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return defaultValue; 61087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 62087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 63087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final boolean 64087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor convertValueToBoolean(CharSequence value, boolean defaultValue) 65087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 66087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor boolean result = false; 67087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 68087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (null == value) 69087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return defaultValue; 70087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 71087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (value.equals("1") 72087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor || value.equals("true") 73087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor || value.equals("TRUE")) 74087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor result = true; 75087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 76087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return result; 77087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 78087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 79087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final int 80087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor convertValueToInt(CharSequence charSeq, int defaultValue) 81087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 82087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (null == charSeq) 83087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return defaultValue; 84087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 85087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String nm = charSeq.toString(); 86087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 87087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // XXX This code is copied from Integer.decode() so we don't 88087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // have to instantiate an Integer! 89087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 90087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int value; 91087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int sign = 1; 92087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int index = 0; 93087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int len = nm.length(); 94087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int base = 10; 95087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 96087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('-' == nm.charAt(0)) { 97087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor sign = -1; 98087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 99087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 100087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 101087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('0' == nm.charAt(index)) { 102087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // Quick check for a zero by itself 103087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (index == (len - 1)) 104087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return 0; 105087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 106087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor char c = nm.charAt(index + 1); 107087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 108087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('x' == c || 'X' == c) { 109087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index += 2; 110087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 16; 111087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 112087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 113087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 8; 114087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 115087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 116087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor else if ('#' == nm.charAt(index)) 117087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 118087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 119087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 16; 120087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 121087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 122087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return Integer.parseInt(nm.substring(index), base) * sign; 123087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 124087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 125a8f6d5f0720f400b6f59b0809aaefea83c5f51d4Romain Guy public static int convertValueToUnsignedInt(String value, int defaultValue) { 126a8f6d5f0720f400b6f59b0809aaefea83c5f51d4Romain Guy if (null == value) { 127087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return defaultValue; 128a8f6d5f0720f400b6f59b0809aaefea83c5f51d4Romain Guy } 129087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 130087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return parseUnsignedIntAttribute(value); 131087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 132087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 133a8f6d5f0720f400b6f59b0809aaefea83c5f51d4Romain Guy public static int parseUnsignedIntAttribute(CharSequence charSeq) { 134087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String value = charSeq.toString(); 135087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 136087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor long bits; 137087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int index = 0; 138087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int len = value.length(); 139087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int base = 10; 140087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 141087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('0' == value.charAt(index)) { 142087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // Quick check for zero by itself 143087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (index == (len - 1)) 144087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return 0; 145087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 146087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor char c = value.charAt(index + 1); 147087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 148087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('x' == c || 'X' == c) { // check for hex 149087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index += 2; 150087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 16; 151087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { // check for octal 152087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 153087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 8; 154087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 155087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if ('#' == value.charAt(index)) { 156087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 157087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 16; 158087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 159087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 160087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return (int) Long.parseLong(value.substring(index), base); 161087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 162087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 163087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 164087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a Map into an output stream as XML. The map can later be 165087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * read back with readMapXml(). 166087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 167087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The map to be flattened. 168087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out Where to write the XML data. 169087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 170087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml(Map, String, XmlSerializer) 171087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml 172087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 173087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 174087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 175087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeMapXml(Map val, OutputStream out) 176087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException { 177087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlSerializer serializer = new FastXmlSerializer(); 178087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.setOutput(out, "utf-8"); 179087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.startDocument(null, true); 180087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); 181087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeMapXml(val, null, serializer); 182087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.endDocument(); 183087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 184087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 185087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 186087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a List into an output stream as XML. The list can later be 187087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * read back with readListXml(). 188087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 189087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The list to be flattened. 190087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out Where to write the XML data. 191087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 192087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml(List, String, XmlSerializer) 193087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 194087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 195087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 196087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 197087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeListXml(List val, OutputStream out) 198087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 199087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 200087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlSerializer serializer = Xml.newSerializer(); 201087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.setOutput(out, "utf-8"); 202087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.startDocument(null, true); 203087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); 204087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeListXml(val, null, serializer); 205087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.endDocument(); 206087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 207087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 208087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 209087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a Map into an XmlSerializer. The map can later be read back 210087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * with readThisMapXml(). 211087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 212087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The map to be flattened. 213087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this list's tag, or null for 214087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * none. 215087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the map into. 216087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 217087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml(Map, OutputStream) 218087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml 219087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 220087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 221087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 222087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeMapXml(Map val, String name, XmlSerializer out) 223087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 224087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 225087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (val == null) { 226087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 227087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 228087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 229087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 230087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 231087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor Set s = val.entrySet(); 232087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor Iterator i = s.iterator(); 233087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 234087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "map"); 235087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 236087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 237087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 238087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 239087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while (i.hasNext()) { 240087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor Map.Entry e = (Map.Entry)i.next(); 241087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeValueXml(e.getValue(), (String)e.getKey(), out); 242087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 243087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 244087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "map"); 245087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 246087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 247087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 248087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a List into an XmlSerializer. The list can later be read back 249087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * with readThisListXml(). 250087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 251087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The list to be flattened. 252087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this list's tag, or null for 253087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * none. 254087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the list into. 255087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 256087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml(List, OutputStream) 257087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 258087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 259087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 260087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 261087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeListXml(List val, String name, XmlSerializer out) 262087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 263087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 264087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (val == null) { 265087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 266087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 267087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 268087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 269087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 270087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "list"); 271087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 272087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 273087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 274087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 275087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int N = val.size(); 276087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int i=0; 277087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while (i < N) { 278087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeValueXml(val.get(i), null, out); 279087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor i++; 280087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 281087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 282087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "list"); 283087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 284212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 285212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell public static final void writeSetXml(Set val, String name, XmlSerializer out) 286212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell throws XmlPullParserException, java.io.IOException { 287212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (val == null) { 288212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.startTag(null, "null"); 289212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.endTag(null, "null"); 290212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return; 291212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 292212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 293212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.startTag(null, "set"); 294212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (name != null) { 295212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.attribute(null, "name", name); 296212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 297212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 298212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell for (Object v : val) { 299212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell writeValueXml(v, null, out); 300212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 301212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 302212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.endTag(null, "set"); 303212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 304087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 305087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 306087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a byte[] into an XmlSerializer. The list can later be read back 307087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * with readThisByteArrayXml(). 308087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 309087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The byte array to be flattened. 310087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this array's tag, or null for 311087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * none. 312087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the array into. 313087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 314087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 315087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 316087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 317087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeByteArrayXml(byte[] val, String name, 318087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlSerializer out) 319087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException { 320087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 321087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (val == null) { 322087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 323087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 324087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 325087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 326087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 327087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "byte-array"); 328087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 329087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 330087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 331087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 332087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor final int N = val.length; 333087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "num", Integer.toString(N)); 334087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 335087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor StringBuilder sb = new StringBuilder(val.length*2); 336087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor for (int i=0; i<N; i++) { 337087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int b = val[i]; 338087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int h = b>>4; 339087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor sb.append(h >= 10 ? ('a'+h-10) : ('0'+h)); 340087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor h = b&0xff; 341087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor sb.append(h >= 10 ? ('a'+h-10) : ('0'+h)); 342087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 343087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 344087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.text(sb.toString()); 345087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 346087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "byte-array"); 347087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 348087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 349087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 350087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten an int[] into an XmlSerializer. The list can later be read back 351087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * with readThisIntArrayXml(). 352087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 353087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The int array to be flattened. 354087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this array's tag, or null for 355087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * none. 356087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the array into. 357087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 358087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 359087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 360087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readThisIntArrayXml 361087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 362087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeIntArrayXml(int[] val, String name, 363087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlSerializer out) 364087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException { 365087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 366087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (val == null) { 367087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 368087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 369087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 370087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 371087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 372087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "int-array"); 373087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 374087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 375087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 376087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 377087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor final int N = val.length; 378087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "num", Integer.toString(N)); 379087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 380087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor for (int i=0; i<N; i++) { 381087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "item"); 382087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "value", Integer.toString(val[i])); 383087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "item"); 384087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 385087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 386087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "int-array"); 387087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 388087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 389087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 390087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten an object's value into an XmlSerializer. The value can later 391087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * be read back with readThisValueXml(). 392087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 393087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Currently supported value types are: null, String, Integer, Long, 394087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Float, Double Boolean, Map, List. 395087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 396087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param v The object to be flattened. 397087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this value's tag, or null 398087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * for none. 399087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the object into. 400087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 401087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 402087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml 403087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readValueXml 404087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 405087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeValueXml(Object v, String name, XmlSerializer out) 406087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 407087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 408087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String typeStr; 409087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (v == null) { 410087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 411087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 412087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 413087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 414087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 415087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 416087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof String) { 417087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "string"); 418087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 419087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 420087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 421087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.text(v.toString()); 422087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "string"); 423087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 424087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Integer) { 425087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "int"; 426087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Long) { 427087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "long"; 428087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Float) { 429087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "float"; 430087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Double) { 431087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "double"; 432087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Boolean) { 433087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "boolean"; 434087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof byte[]) { 435087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeByteArrayXml((byte[])v, name, out); 436087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 437087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof int[]) { 438087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeIntArrayXml((int[])v, name, out); 439087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 440087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Map) { 441087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeMapXml((Map)v, name, out); 442087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 443087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof List) { 444087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeListXml((List)v, name, out); 445087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 446212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } else if (v instanceof Set) { 447212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell writeSetXml((Set)v, name, out); 448212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return; 449087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof CharSequence) { 450087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // XXX This is to allow us to at least write something if 451087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // we encounter styled text... but it means we will drop all 452087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // of the styling information. :( 453087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "string"); 454087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 455087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 456087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 457087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.text(v.toString()); 458087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "string"); 459087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 460087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 461087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new RuntimeException("writeValueXml: unable to write value " + v); 462087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 463087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 464087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, typeStr); 465087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 466087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 467087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 468087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "value", v.toString()); 469087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, typeStr); 470087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 471087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 472087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 473087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read a HashMap from an InputStream containing XML. The stream can 474087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been written by writeMapXml(). 475087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 476087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param in The InputStream from which to read. 477087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 478087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return HashMap The resulting map. 479087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 480087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 481087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readValueXml 482087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readThisMapXml 483087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * #see #writeMapXml 484087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 485087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final HashMap readMapXml(InputStream in) 486087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 487087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 488087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlPullParser parser = Xml.newPullParser(); 489087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.setInput(in, null); 490087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return (HashMap)readValueXml(parser, new String[1]); 491087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 492087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 493087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 494087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read an ArrayList from an InputStream containing XML. The stream can 495087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been written by writeListXml(). 496087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 497087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param in The InputStream from which to read. 498087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 499212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @return ArrayList The resulting list. 500087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 501087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 502087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readValueXml 503087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readThisListXml 504087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml 505087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 506087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final ArrayList readListXml(InputStream in) 507087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 508087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 509087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlPullParser parser = Xml.newPullParser(); 510087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.setInput(in, null); 511087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return (ArrayList)readValueXml(parser, new String[1]); 512087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 513212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 514212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 515212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell /** 516212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * Read a HashSet from an InputStream containing XML. The stream can 517212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * previously have been written by writeSetXml(). 518212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 519212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param in The InputStream from which to read. 520212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 521212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @return HashSet The resulting set. 522212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 523212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @throws XmlPullParserException 524212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @throws java.io.IOException 525212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 526212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #readValueXml 527212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #readThisSetXml 528212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #writeSetXml 529212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell */ 530212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell public static final HashSet readSetXml(InputStream in) 531212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell throws XmlPullParserException, java.io.IOException { 532212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell XmlPullParser parser = Xml.newPullParser(); 533212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell parser.setInput(in, null); 534212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return (HashSet) readValueXml(parser, new String[1]); 535212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 536087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 537087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 538087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read a HashMap object from an XmlPullParser. The XML data could 539087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been generated by writeMapXml(). The XmlPullParser 540087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * must be positioned <em>after</em> the tag that begins the map. 541087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 542087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param parser The XmlPullParser from which to read the map data. 543087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param endTag Name of the tag that will end the map, usually "map". 544087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name An array of one string, used to return the name attribute 545087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * of the map's tag. 546087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 547087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return HashMap The newly generated map. 548087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 549087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 550087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 551087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final HashMap readThisMapXml(XmlPullParser parser, String endTag, String[] name) 552087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 553087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 554087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor HashMap map = new HashMap(); 555087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 556087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType = parser.getEventType(); 557087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor do { 558087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.START_TAG) { 559087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor Object val = readThisValueXml(parser, name); 560087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name[0] != null) { 561087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Adding to map: " + name + " -> " + val); 562087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor map.put(name[0], val); 563087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 564087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 565087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Map value without name attribute: " + parser.getName()); 566087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 567087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.END_TAG) { 568087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals(endTag)) { 569087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return map; 570087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 571087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 572087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Expected " + endTag + " end tag at: " + parser.getName()); 573087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 574087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor eventType = parser.next(); 575087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } while (eventType != parser.END_DOCUMENT); 576087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 577087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 578087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Document ended before " + endTag + " end tag"); 579087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 580087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 581087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 582087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read an ArrayList object from an XmlPullParser. The XML data could 583087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been generated by writeListXml(). The XmlPullParser 584087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * must be positioned <em>after</em> the tag that begins the list. 585087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 586087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param parser The XmlPullParser from which to read the list data. 587087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param endTag Name of the tag that will end the list, usually "list". 588087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name An array of one string, used to return the name attribute 589087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * of the list's tag. 590087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 591087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return HashMap The newly generated list. 592087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 593087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 594087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 595087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final ArrayList readThisListXml(XmlPullParser parser, String endTag, String[] name) 596087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 597087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 598087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor ArrayList list = new ArrayList(); 599087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 600087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType = parser.getEventType(); 601087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor do { 602087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.START_TAG) { 603087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor Object val = readThisValueXml(parser, name); 604087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor list.add(val); 605087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Adding to list: " + val); 606087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.END_TAG) { 607087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals(endTag)) { 608087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return list; 609087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 610087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 611087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Expected " + endTag + " end tag at: " + parser.getName()); 612087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 613087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor eventType = parser.next(); 614087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } while (eventType != parser.END_DOCUMENT); 615087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 616087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 617087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Document ended before " + endTag + " end tag"); 618087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 619212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 620212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell /** 621212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * Read a HashSet object from an XmlPullParser. The XML data could previously 622212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * have been generated by writeSetXml(). The XmlPullParser must be positioned 623212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * <em>after</em> the tag that begins the set. 624212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 625212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param parser The XmlPullParser from which to read the set data. 626212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param endTag Name of the tag that will end the set, usually "set". 627212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param name An array of one string, used to return the name attribute 628212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * of the set's tag. 629212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 630212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @return HashSet The newly generated set. 631212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 632212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @throws XmlPullParserException 633212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @throws java.io.IOException 634212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 635212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #readSetXml 636212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell */ 637212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell public static final HashSet readThisSetXml(XmlPullParser parser, String endTag, String[] name) 638212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell throws XmlPullParserException, java.io.IOException { 639212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell HashSet set = new HashSet(); 640212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 641212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell int eventType = parser.getEventType(); 642212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell do { 643212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (eventType == parser.START_TAG) { 644212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell Object val = readThisValueXml(parser, name); 645212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell set.add(val); 646212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell //System.out.println("Adding to set: " + val); 647212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } else if (eventType == parser.END_TAG) { 648212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (parser.getName().equals(endTag)) { 649212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return set; 650212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 651212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell throw new XmlPullParserException( 652212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell "Expected " + endTag + " end tag at: " + parser.getName()); 653212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 654212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell eventType = parser.next(); 655212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } while (eventType != parser.END_DOCUMENT); 656212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 657212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell throw new XmlPullParserException( 658212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell "Document ended before " + endTag + " end tag"); 659212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 660087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 661087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 662087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read an int[] object from an XmlPullParser. The XML data could 663087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been generated by writeIntArrayXml(). The XmlPullParser 664087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * must be positioned <em>after</em> the tag that begins the list. 665087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 666087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param parser The XmlPullParser from which to read the list data. 667087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param endTag Name of the tag that will end the list, usually "list". 668087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name An array of one string, used to return the name attribute 669087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * of the list's tag. 670087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 671087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return Returns a newly generated int[]. 672087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 673087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 674087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 675087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final int[] readThisIntArrayXml(XmlPullParser parser, 676087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String endTag, String[] name) 677087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException { 678087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 679087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int num; 680087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor try { 681087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor num = Integer.parseInt(parser.getAttributeValue(null, "num")); 682087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } catch (NullPointerException e) { 683087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 684087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Need num attribute in byte-array"); 685087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } catch (NumberFormatException e) { 686087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 687087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Not a number in num attribute in byte-array"); 688087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 689087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 690087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int[] array = new int[num]; 691087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int i = 0; 692087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 693087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType = parser.getEventType(); 694087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor do { 695087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.START_TAG) { 696087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals("item")) { 697087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor try { 698087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor array[i] = Integer.parseInt( 699087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.getAttributeValue(null, "value")); 700087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } catch (NullPointerException e) { 701087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 702087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Need value attribute in item"); 703087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } catch (NumberFormatException e) { 704087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 705087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Not a number in value attribute in item"); 706087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 707087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 708087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 709087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Expected item tag at: " + parser.getName()); 710087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 711087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.END_TAG) { 712087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals(endTag)) { 713087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return array; 714087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (parser.getName().equals("item")) { 715087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor i++; 716087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 717087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 718087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Expected " + endTag + " end tag at: " 719087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor + parser.getName()); 720087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 721087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 722087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor eventType = parser.next(); 723087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } while (eventType != parser.END_DOCUMENT); 724087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 725087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 726087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Document ended before " + endTag + " end tag"); 727087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 728087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 729087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 730087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read a flattened object from an XmlPullParser. The XML data could 731087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been written with writeMapXml(), writeListXml(), or 732087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * writeValueXml(). The XmlPullParser must be positioned <em>at</em> the 733087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * tag that defines the value. 734087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 735087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param parser The XmlPullParser from which to read the object. 736087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name An array of one string, used to return the name attribute 737087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * of the value's tag. 738087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 739087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return Object The newly generated value object. 740087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 741087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 742087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 743087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 744087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 745087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final Object readValueXml(XmlPullParser parser, String[] name) 746087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 747087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 748087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType = parser.getEventType(); 749087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor do { 750087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.START_TAG) { 751087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return readThisValueXml(parser, name); 752087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.END_TAG) { 753087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 754087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end tag at: " + parser.getName()); 755087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.TEXT) { 756087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 757087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected text: " + parser.getText()); 758087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 759087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor eventType = parser.next(); 760087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } while (eventType != parser.END_DOCUMENT); 761087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 762087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 763087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end of document"); 764087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 765087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 766087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor private static final Object readThisValueXml(XmlPullParser parser, String[] name) 767087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 768087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 769087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor final String valueName = parser.getAttributeValue(null, "name"); 770087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor final String tagName = parser.getName(); 771087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 772087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Reading this value tag: " + tagName + ", name=" + valueName); 773087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 774087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor Object res; 775087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 776087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (tagName.equals("null")) { 777087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = null; 778087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("string")) { 779087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String value = ""; 780087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType; 781087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((eventType = parser.next()) != parser.END_DOCUMENT) { 782087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.END_TAG) { 783087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals("string")) { 784087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 785087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + value); 786087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return value; 787087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 788087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 789087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end tag in <string>: " + parser.getName()); 790087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.TEXT) { 791087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor value += parser.getText(); 792087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.START_TAG) { 793087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 794087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected start tag in <string>: " + parser.getName()); 795087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 796087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 797087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 798087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end of document in <string>"); 799087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("int")) { 800087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = Integer.parseInt(parser.getAttributeValue(null, "value")); 801087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("long")) { 802087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = Long.valueOf(parser.getAttributeValue(null, "value")); 803087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("float")) { 804087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = new Float(parser.getAttributeValue(null, "value")); 805087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("double")) { 806087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = new Double(parser.getAttributeValue(null, "value")); 807087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("boolean")) { 808087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = Boolean.valueOf(parser.getAttributeValue(null, "value")); 809087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("int-array")) { 810087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.next(); 811087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = readThisIntArrayXml(parser, "int-array", name); 812087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 813087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + res); 814087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return res; 815087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("map")) { 816087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.next(); 817087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = readThisMapXml(parser, "map", name); 818087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 819087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + res); 820087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return res; 821087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("list")) { 822087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.next(); 823087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = readThisListXml(parser, "list", name); 824087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 825087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + res); 826087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return res; 827212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } else if (tagName.equals("set")) { 828212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell parser.next(); 829212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell res = readThisSetXml(parser, "set", name); 830212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell name[0] = valueName; 831212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell //System.out.println("Returning value for " + valueName + ": " + res); 832212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return res; 833087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 834087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 835087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unknown tag: " + tagName); 836087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 837087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 838087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // Skip through to end tag. 839087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType; 840087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((eventType = parser.next()) != parser.END_DOCUMENT) { 841087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.END_TAG) { 842087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals(tagName)) { 843087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 844087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + res); 845087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return res; 846087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 847087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 848087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end tag in <" + tagName + ">: " + parser.getName()); 849087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.TEXT) { 850087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 851087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected text in <" + tagName + ">: " + parser.getName()); 852087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.START_TAG) { 853087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 854087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected start tag in <" + tagName + ">: " + parser.getName()); 855087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 856087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 857087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 858087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end of document in <" + tagName + ">"); 859087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 860087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 861087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void beginDocument(XmlPullParser parser, String firstElementName) throws XmlPullParserException, IOException 862087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 863087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int type; 864087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((type=parser.next()) != parser.START_TAG 865087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor && type != parser.END_DOCUMENT) { 866087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor ; 867087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 868087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 869087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (type != parser.START_TAG) { 870087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException("No start tag found"); 871087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 872087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 873087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (!parser.getName().equals(firstElementName)) { 874087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException("Unexpected start tag: found " + parser.getName() + 875087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor ", expected " + firstElementName); 876087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 877087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 878087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 879087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void nextElement(XmlPullParser parser) throws XmlPullParserException, IOException 880087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 881087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int type; 882087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((type=parser.next()) != parser.START_TAG 883087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor && type != parser.END_DOCUMENT) { 884087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor ; 885087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 886087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 887a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown 888a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown public static boolean nextElementWithin(XmlPullParser parser, int outerDepth) 889a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown throws IOException, XmlPullParserException { 890a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown for (;;) { 891a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown int type = parser.next(); 892a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown if (type == XmlPullParser.END_DOCUMENT 893a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown || (type == XmlPullParser.END_TAG && parser.getDepth() == outerDepth)) { 894a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown return false; 895a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown } 896a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown if (type == XmlPullParser.START_TAG 897a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown && parser.getDepth() == outerDepth + 1) { 898a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown return true; 899a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown } 900a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown } 901a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown } 902ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 903ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static int readIntAttribute(XmlPullParser in, String name) throws IOException { 904ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey final String value = in.getAttributeValue(null, name); 905ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey try { 906ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey return Integer.parseInt(value); 907ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } catch (NumberFormatException e) { 908ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throw new ProtocolException("problem parsing " + name + "=" + value + " as int"); 909ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 910ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 911ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 912ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static void writeIntAttribute(XmlSerializer out, String name, int value) 913ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throws IOException { 914ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey out.attribute(null, name, Integer.toString(value)); 915ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 916ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 917ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static long readLongAttribute(XmlPullParser in, String name) throws IOException { 918ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey final String value = in.getAttributeValue(null, name); 919ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey try { 920ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey return Long.parseLong(value); 921ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } catch (NumberFormatException e) { 922ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throw new ProtocolException("problem parsing " + name + "=" + value + " as long"); 923ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 924ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 925ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 926ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static void writeLongAttribute(XmlSerializer out, String name, long value) 927ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throws IOException { 928ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey out.attribute(null, name, Long.toString(value)); 929ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 930ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 931ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static boolean readBooleanAttribute(XmlPullParser in, String name) { 932ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey final String value = in.getAttributeValue(null, name); 933ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey return Boolean.parseBoolean(value); 934ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 935ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 936ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static void writeBooleanAttribute(XmlSerializer out, String name, boolean value) 937ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throws IOException { 938ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey out.attribute(null, name, Boolean.toString(value)); 939ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 940087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor} 941