XmlUtils.java revision 73bdf9761be2abdd85efc5fce165f3fa80fcfa65
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 191cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkeyimport android.graphics.Bitmap; 201cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkeyimport android.graphics.BitmapFactory; 211cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkeyimport android.graphics.Bitmap.CompressFormat; 221cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkeyimport android.net.Uri; 231cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkeyimport android.util.Base64; 24ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkeyimport android.util.Xml; 25087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 26087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport org.xmlpull.v1.XmlPullParser; 27087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport org.xmlpull.v1.XmlPullParserException; 28087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport org.xmlpull.v1.XmlSerializer; 29087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 301cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkeyimport java.io.ByteArrayOutputStream; 31087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.io.IOException; 32087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.io.InputStream; 33087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.io.OutputStream; 34ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkeyimport java.net.ProtocolException; 35087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.ArrayList; 36087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.HashMap; 37212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powellimport java.util.HashSet; 38087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.Iterator; 39087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.List; 40087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.Map; 41087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylorimport java.util.Set; 42087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 43087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor/** {@hide} */ 44ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkeypublic class XmlUtils { 45087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 46087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static void skipCurrentTag(XmlPullParser parser) 47087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, IOException { 48087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int outerDepth = parser.getDepth(); 49087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int type; 50087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((type=parser.next()) != XmlPullParser.END_DOCUMENT 51087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor && (type != XmlPullParser.END_TAG 52087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor || parser.getDepth() > outerDepth)) { 53087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 54087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 55087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 56087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final int 57087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor convertValueToList(CharSequence value, String[] options, int defaultValue) 58087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 59087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (null != value) { 60087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor for (int i = 0; i < options.length; i++) { 61087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (value.equals(options[i])) 62087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return i; 63087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 64087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 65087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 66087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return defaultValue; 67087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 68087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 69087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final boolean 70087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor convertValueToBoolean(CharSequence value, boolean defaultValue) 71087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 72087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor boolean result = false; 73087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 74087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (null == value) 75087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return defaultValue; 76087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 77087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (value.equals("1") 78087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor || value.equals("true") 79087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor || value.equals("TRUE")) 80087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor result = true; 81087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 82087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return result; 83087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 84087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 85087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final int 86087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor convertValueToInt(CharSequence charSeq, int defaultValue) 87087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 88087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (null == charSeq) 89087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return defaultValue; 90087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 91087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String nm = charSeq.toString(); 92087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 93087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // XXX This code is copied from Integer.decode() so we don't 94087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // have to instantiate an Integer! 95087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 96087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int value; 97087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int sign = 1; 98087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int index = 0; 99087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int len = nm.length(); 100087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int base = 10; 101087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 102087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('-' == nm.charAt(0)) { 103087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor sign = -1; 104087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 105087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 106087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 107087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('0' == nm.charAt(index)) { 108087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // Quick check for a zero by itself 109087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (index == (len - 1)) 110087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return 0; 111087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 112087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor char c = nm.charAt(index + 1); 113087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 114087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('x' == c || 'X' == c) { 115087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index += 2; 116087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 16; 117087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 118087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 119087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 8; 120087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 121087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 122087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor else if ('#' == nm.charAt(index)) 123087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 124087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 125087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 16; 126087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 127087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 128087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return Integer.parseInt(nm.substring(index), base) * sign; 129087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 130087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 131a8f6d5f0720f400b6f59b0809aaefea83c5f51d4Romain Guy public static int convertValueToUnsignedInt(String value, int defaultValue) { 132a8f6d5f0720f400b6f59b0809aaefea83c5f51d4Romain Guy if (null == value) { 133087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return defaultValue; 134a8f6d5f0720f400b6f59b0809aaefea83c5f51d4Romain Guy } 135087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 136087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return parseUnsignedIntAttribute(value); 137087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 138087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 139a8f6d5f0720f400b6f59b0809aaefea83c5f51d4Romain Guy public static int parseUnsignedIntAttribute(CharSequence charSeq) { 140087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String value = charSeq.toString(); 141087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 142087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor long bits; 143087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int index = 0; 144087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int len = value.length(); 145087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int base = 10; 146087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 147087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('0' == value.charAt(index)) { 148087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // Quick check for zero by itself 149087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (index == (len - 1)) 150087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return 0; 151087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 152087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor char c = value.charAt(index + 1); 153087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 154087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if ('x' == c || 'X' == c) { // check for hex 155087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index += 2; 156087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 16; 157087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { // check for octal 158087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 159087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 8; 160087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 161087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if ('#' == value.charAt(index)) { 162087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor index++; 163087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor base = 16; 164087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 165087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 166087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return (int) Long.parseLong(value.substring(index), base); 167087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 168087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 169087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 170087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a Map into an output stream as XML. The map can later be 171087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * read back with readMapXml(). 172087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 173087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The map to be flattened. 174087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out Where to write the XML data. 175087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 176087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml(Map, String, XmlSerializer) 177087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml 178087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 179087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 180087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 181087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeMapXml(Map val, OutputStream out) 182087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException { 183087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlSerializer serializer = new FastXmlSerializer(); 184087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.setOutput(out, "utf-8"); 185087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.startDocument(null, true); 186087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); 187087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeMapXml(val, null, serializer); 188087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.endDocument(); 189087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 190087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 191087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 192087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a List into an output stream as XML. The list can later be 193087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * read back with readListXml(). 194087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 195087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The list to be flattened. 196087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out Where to write the XML data. 197087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 198087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml(List, String, XmlSerializer) 199087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 200087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 201087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 202087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 203087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeListXml(List val, OutputStream out) 204087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 205087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 206087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlSerializer serializer = Xml.newSerializer(); 207087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.setOutput(out, "utf-8"); 208087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.startDocument(null, true); 209087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); 210087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeListXml(val, null, serializer); 211087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor serializer.endDocument(); 212087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 213087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 214087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 215087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a Map into an XmlSerializer. The map can later be read back 216087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * with readThisMapXml(). 217087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 218087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The map to be flattened. 219087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this list's tag, or null for 220087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * none. 221087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the map into. 222087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 223087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml(Map, OutputStream) 224087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml 225087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 226087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 227087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 228087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeMapXml(Map val, String name, XmlSerializer out) 229ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, java.io.IOException { 230ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner writeMapXml(val, name, out, null); 231ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 232ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 233ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 234ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Flatten a Map into an XmlSerializer. The map can later be read back 235ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * with readThisMapXml(). 236ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 237ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param val The map to be flattened. 238ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name Name attribute to include with this list's tag, or null for 239ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * none. 240ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param out XmlSerializer to write the map into. 241ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param callback Method to call when an Object type is not recognized. 242ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 243ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeMapXml(Map, OutputStream) 244ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeListXml 245ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeValueXml 246ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readMapXml 247ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 248ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @hide 249ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 250ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final void writeMapXml(Map val, String name, XmlSerializer out, 251ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner WriteMapCallback callback) throws XmlPullParserException, java.io.IOException { 252ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 253087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (val == null) { 254087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 255087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 256087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 257087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 258087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 259087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "map"); 260087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 261087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 262087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 263087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 264ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner writeMapXml(val, out, callback); 265ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 266ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "map"); 267ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 268ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 269ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 270ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Flatten a Map into an XmlSerializer. The map can later be read back 271ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * with readThisMapXml(). This method presumes that the start tag and 272ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * name attribute have already been written and does not write an end tag. 273ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 274ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param val The map to be flattened. 275ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param out XmlSerializer to write the map into. 276ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 277ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeMapXml(Map, OutputStream) 278ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeListXml 279ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeValueXml 280ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readMapXml 281ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 282ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @hide 283ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 284ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final void writeMapXml(Map val, XmlSerializer out, 285ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner WriteMapCallback callback) throws XmlPullParserException, java.io.IOException { 286ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (val == null) { 287ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return; 288ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 289ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 290ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner Set s = val.entrySet(); 291ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner Iterator i = s.iterator(); 292ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 293087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while (i.hasNext()) { 294087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor Map.Entry e = (Map.Entry)i.next(); 295ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner writeValueXml(e.getValue(), (String)e.getKey(), out, callback); 296087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 297087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 298087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 299087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 300087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a List into an XmlSerializer. The list can later be read back 301087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * with readThisListXml(). 302087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 303087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The list to be flattened. 304087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this list's tag, or null for 305087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * none. 306087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the list into. 307087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 308087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml(List, OutputStream) 309087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 310087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 311087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 312087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 313087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeListXml(List val, String name, XmlSerializer out) 314087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 315087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 316087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (val == null) { 317087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 318087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 319087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 320087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 321087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 322087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "list"); 323087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 324087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 325087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 326087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 327087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int N = val.size(); 328087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int i=0; 329087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while (i < N) { 330087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeValueXml(val.get(i), null, out); 331087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor i++; 332087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 333087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 334087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "list"); 335087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 336212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 337212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell public static final void writeSetXml(Set val, String name, XmlSerializer out) 338212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell throws XmlPullParserException, java.io.IOException { 339212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (val == null) { 340212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.startTag(null, "null"); 341212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.endTag(null, "null"); 342212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return; 343212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 344212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 345212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.startTag(null, "set"); 346212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (name != null) { 347212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.attribute(null, "name", name); 348212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 349212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 350212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell for (Object v : val) { 351212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell writeValueXml(v, null, out); 352212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 353212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 354212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell out.endTag(null, "set"); 355212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 356087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 357087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 358087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten a byte[] into an XmlSerializer. The list can later be read back 359087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * with readThisByteArrayXml(). 360087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 361087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The byte array to be flattened. 362087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this array's tag, or null for 363087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * none. 364087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the array into. 365087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 366087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 367087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 368087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 369087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeByteArrayXml(byte[] val, String name, 370087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlSerializer out) 371087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException { 372087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 373087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (val == null) { 374087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 375087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 376087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 377087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 378087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 379087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "byte-array"); 380087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 381087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 382087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 383087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 384087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor final int N = val.length; 385087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "num", Integer.toString(N)); 386087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 387087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor StringBuilder sb = new StringBuilder(val.length*2); 388087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor for (int i=0; i<N; i++) { 389087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int b = val[i]; 390087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int h = b>>4; 391087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor sb.append(h >= 10 ? ('a'+h-10) : ('0'+h)); 392087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor h = b&0xff; 393087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor sb.append(h >= 10 ? ('a'+h-10) : ('0'+h)); 394087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 395087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 396087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.text(sb.toString()); 397087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 398087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "byte-array"); 399087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 400087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 401087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 402087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten an int[] into an XmlSerializer. The list can later be read back 403087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * with readThisIntArrayXml(). 404087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 405087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param val The int array to be flattened. 406087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this array's tag, or null for 407087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * none. 408087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the array into. 409087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 410087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 411087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 412087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readThisIntArrayXml 413087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 414087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeIntArrayXml(int[] val, String name, 415087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlSerializer out) 416087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException { 417087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 418087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (val == null) { 419087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 420087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 421087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 422087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 423087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 424087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "int-array"); 425087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 426087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 427087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 428087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 429087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor final int N = val.length; 430087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "num", Integer.toString(N)); 431087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 432087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor for (int i=0; i<N; i++) { 433087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "item"); 434087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "value", Integer.toString(val[i])); 435087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "item"); 436087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 437087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 438087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "int-array"); 439087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 440087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 441087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 442ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Flatten a long[] into an XmlSerializer. The list can later be read back 443ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * with readThisLongArrayXml(). 444ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 445ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param val The long array to be flattened. 446ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name Name attribute to include with this array's tag, or null for 447ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * none. 448ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param out XmlSerializer to write the array into. 449ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 450ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeMapXml 451ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeValueXml 452ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readThisIntArrayXml 453ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 454ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final void writeLongArrayXml(long[] val, String name, XmlSerializer out) 455ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, java.io.IOException { 456ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 457ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (val == null) { 458ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.startTag(null, "null"); 459ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "null"); 460ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return; 461ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 462ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 463ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.startTag(null, "long-array"); 464ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (name != null) { 465ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.attribute(null, "name", name); 466ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 467ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 468ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner final int N = val.length; 469ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.attribute(null, "num", Integer.toString(N)); 470ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 471ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner for (int i=0; i<N; i++) { 472ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.startTag(null, "item"); 473ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.attribute(null, "value", Long.toString(val[i])); 474ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "item"); 475ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 476ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 477ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "long-array"); 478ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 479ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 480ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 481ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Flatten a double[] into an XmlSerializer. The list can later be read back 482ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * with readThisDoubleArrayXml(). 483ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 484ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param val The double array to be flattened. 485ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name Name attribute to include with this array's tag, or null for 486ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * none. 487ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param out XmlSerializer to write the array into. 488ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 489ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeMapXml 490ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeValueXml 491ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readThisIntArrayXml 492ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 493ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final void writeDoubleArrayXml(double[] val, String name, XmlSerializer out) 494ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, java.io.IOException { 495ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 496ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (val == null) { 497ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.startTag(null, "null"); 498ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "null"); 499ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return; 500ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 501ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 502ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.startTag(null, "double-array"); 503ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (name != null) { 504ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.attribute(null, "name", name); 505ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 506ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 507ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner final int N = val.length; 508ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.attribute(null, "num", Integer.toString(N)); 509ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 510ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner for (int i=0; i<N; i++) { 511ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.startTag(null, "item"); 512ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.attribute(null, "value", Double.toString(val[i])); 513ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "item"); 514ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 515ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 516ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "double-array"); 517ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 518ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 519ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 520ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Flatten a String[] into an XmlSerializer. The list can later be read back 521ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * with readThisStringArrayXml(). 522ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 52373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @param val The String array to be flattened. 524ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name Name attribute to include with this array's tag, or null for 525ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * none. 526ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param out XmlSerializer to write the array into. 527ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 528ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeMapXml 529ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeValueXml 530ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readThisIntArrayXml 531ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 532ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final void writeStringArrayXml(String[] val, String name, XmlSerializer out) 533ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, java.io.IOException { 534ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 535ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (val == null) { 536ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.startTag(null, "null"); 537ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "null"); 538ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return; 539ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 540ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 541ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.startTag(null, "string-array"); 542ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (name != null) { 543ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.attribute(null, "name", name); 544ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 545ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 546ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner final int N = val.length; 547ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.attribute(null, "num", Integer.toString(N)); 548ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 549ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner for (int i=0; i<N; i++) { 550ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.startTag(null, "item"); 551ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.attribute(null, "value", val[i]); 552ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "item"); 553ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 554ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 555ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner out.endTag(null, "string-array"); 556ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 557ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 558ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 55973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * Flatten a boolean[] into an XmlSerializer. The list can later be read back 56073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * with readThisBooleanArrayXml(). 56173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * 56273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @param val The boolean array to be flattened. 56373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @param name Name attribute to include with this array's tag, or null for 56473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * none. 56573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @param out XmlSerializer to write the array into. 56673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * 56773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @see #writeMapXml 56873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @see #writeValueXml 56973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @see #readThisIntArrayXml 57073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner */ 57173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner public static final void writeBooleanArrayXml(boolean[] val, String name, XmlSerializer out) 57273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner throws XmlPullParserException, java.io.IOException { 57373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 57473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner if (val == null) { 57573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner out.startTag(null, "null"); 57673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner out.endTag(null, "null"); 57773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner return; 57873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 57973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 58073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner out.startTag(null, "boolean-array"); 58173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner if (name != null) { 58273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner out.attribute(null, "name", name); 58373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 58473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 58573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner final int N = val.length; 58673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner out.attribute(null, "num", Integer.toString(N)); 58773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 58873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner for (int i=0; i<N; i++) { 58973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner out.startTag(null, "item"); 59073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner out.attribute(null, "value", Boolean.toString(val[i])); 59173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner out.endTag(null, "item"); 59273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 59373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 59473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner out.endTag(null, "boolean-array"); 59573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 59673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 59773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner /** 598087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Flatten an object's value into an XmlSerializer. The value can later 599087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * be read back with readThisValueXml(). 600087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 601087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Currently supported value types are: null, String, Integer, Long, 602087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Float, Double Boolean, Map, List. 603087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 604087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param v The object to be flattened. 605087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name Name attribute to include with this value's tag, or null 606087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * for none. 607087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param out XmlSerializer to write the object into. 608087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 609087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeMapXml 610087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml 611087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readValueXml 612087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 613087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void writeValueXml(Object v, String name, XmlSerializer out) 614ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, java.io.IOException { 615ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner writeValueXml(v, name, out, null); 616ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 617ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 618ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 619ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Flatten an object's value into an XmlSerializer. The value can later 620ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * be read back with readThisValueXml(). 621ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 622ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Currently supported value types are: null, String, Integer, Long, 623ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Float, Double Boolean, Map, List. 624ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 625ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param v The object to be flattened. 626ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name Name attribute to include with this value's tag, or null 627ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * for none. 628ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param out XmlSerializer to write the object into. 629ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param callback Handler for Object types not recognized. 630ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 631ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeMapXml 632ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #writeListXml 633ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readValueXml 634ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 635ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner private static final void writeValueXml(Object v, String name, XmlSerializer out, 636ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner WriteMapCallback callback) throws XmlPullParserException, java.io.IOException { 637087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String typeStr; 638087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (v == null) { 639087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "null"); 640087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 641087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 642087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 643087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "null"); 644087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 645087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof String) { 646087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "string"); 647087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 648087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 649087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 650087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.text(v.toString()); 651087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "string"); 652087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 653087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Integer) { 654087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "int"; 655087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Long) { 656087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "long"; 657087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Float) { 658087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "float"; 659087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Double) { 660087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "double"; 661087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Boolean) { 662087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor typeStr = "boolean"; 663087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof byte[]) { 664087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeByteArrayXml((byte[])v, name, out); 665087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 666087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof int[]) { 667087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeIntArrayXml((int[])v, name, out); 668087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 669ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (v instanceof long[]) { 670ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner writeLongArrayXml((long[])v, name, out); 671ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return; 672ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (v instanceof double[]) { 673ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner writeDoubleArrayXml((double[])v, name, out); 674ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return; 675ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (v instanceof String[]) { 676ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner writeStringArrayXml((String[])v, name, out); 677ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return; 67873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } else if (v instanceof boolean[]) { 67973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner writeBooleanArrayXml((boolean[])v, name, out); 68073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner return; 681087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof Map) { 682087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor writeMapXml((Map)v, name, out); 683087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 684087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof List) { 685ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner writeListXml((List) v, name, out); 686087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 687212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } else if (v instanceof Set) { 688ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner writeSetXml((Set) v, name, out); 689212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return; 690087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (v instanceof CharSequence) { 691087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // XXX This is to allow us to at least write something if 692087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // we encounter styled text... but it means we will drop all 693087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // of the styling information. :( 694087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, "string"); 695087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 696087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 697087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 698087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.text(v.toString()); 699087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, "string"); 700087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return; 701ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (callback != null) { 702ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner callback.writeUnknownObject(v, name, out); 703ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return; 704087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 705087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new RuntimeException("writeValueXml: unable to write value " + v); 706087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 707087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 708087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.startTag(null, typeStr); 709087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (name != null) { 710087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "name", name); 711087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 712087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.attribute(null, "value", v.toString()); 713087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor out.endTag(null, typeStr); 714087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 715087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 716087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 717087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read a HashMap from an InputStream containing XML. The stream can 718087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been written by writeMapXml(). 719087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 720087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param in The InputStream from which to read. 721087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 722087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return HashMap The resulting map. 723087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 724087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 725087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readValueXml 726087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readThisMapXml 727087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * #see #writeMapXml 728087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 729f748257eee651b974e15274e03fe9843a8393073Narayan Kamath @SuppressWarnings("unchecked") 730f748257eee651b974e15274e03fe9843a8393073Narayan Kamath public static final HashMap<String, ?> readMapXml(InputStream in) 731087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 732087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 733087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlPullParser parser = Xml.newPullParser(); 734087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.setInput(in, null); 735f748257eee651b974e15274e03fe9843a8393073Narayan Kamath return (HashMap<String, ?>) readValueXml(parser, new String[1]); 736087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 737087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 738087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 739087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read an ArrayList from an InputStream containing XML. The stream can 740087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been written by writeListXml(). 741087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 742087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param in The InputStream from which to read. 743087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 744212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @return ArrayList The resulting list. 745087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 746087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 747087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readValueXml 748087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readThisListXml 749087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeListXml 750087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 751087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final ArrayList readListXml(InputStream in) 752087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 753087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 754087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor XmlPullParser parser = Xml.newPullParser(); 755087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.setInput(in, null); 756087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return (ArrayList)readValueXml(parser, new String[1]); 757087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 758212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 759212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 760212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell /** 761212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * Read a HashSet from an InputStream containing XML. The stream can 762212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * previously have been written by writeSetXml(). 763212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 764212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param in The InputStream from which to read. 765212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 766212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @return HashSet The resulting set. 767212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 768212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @throws XmlPullParserException 769212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @throws java.io.IOException 770212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 771212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #readValueXml 772212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #readThisSetXml 773212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #writeSetXml 774212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell */ 775212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell public static final HashSet readSetXml(InputStream in) 776212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell throws XmlPullParserException, java.io.IOException { 777212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell XmlPullParser parser = Xml.newPullParser(); 778212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell parser.setInput(in, null); 779212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return (HashSet) readValueXml(parser, new String[1]); 780212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 781087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 782087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 783087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read a HashMap object from an XmlPullParser. The XML data could 784087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been generated by writeMapXml(). The XmlPullParser 785087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * must be positioned <em>after</em> the tag that begins the map. 786087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 787087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param parser The XmlPullParser from which to read the map data. 788087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param endTag Name of the tag that will end the map, usually "map". 789087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name An array of one string, used to return the name attribute 790087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * of the map's tag. 791087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 792087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return HashMap The newly generated map. 793087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 794087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 795087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 796f748257eee651b974e15274e03fe9843a8393073Narayan Kamath public static final HashMap<String, ?> readThisMapXml(XmlPullParser parser, String endTag, 797ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner String[] name) throws XmlPullParserException, java.io.IOException { 798ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return readThisMapXml(parser, endTag, name, null); 799ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 800ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 801ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 802ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Read a HashMap object from an XmlPullParser. The XML data could 803ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * previously have been generated by writeMapXml(). The XmlPullParser 804ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * must be positioned <em>after</em> the tag that begins the map. 805ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 806ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param parser The XmlPullParser from which to read the map data. 807ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param endTag Name of the tag that will end the map, usually "map". 808ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name An array of one string, used to return the name attribute 809ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * of the map's tag. 810ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 811ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @return HashMap The newly generated map. 812ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 813ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readMapXml 814ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @hide 815ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 816ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final HashMap<String, ?> readThisMapXml(XmlPullParser parser, String endTag, 817ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner String[] name, ReadMapCallback callback) 818ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, java.io.IOException 819087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 820f748257eee651b974e15274e03fe9843a8393073Narayan Kamath HashMap<String, Object> map = new HashMap<String, Object>(); 821087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 822087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType = parser.getEventType(); 823087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor do { 824087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.START_TAG) { 825ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner Object val = readThisValueXml(parser, name, callback); 826f748257eee651b974e15274e03fe9843a8393073Narayan Kamath map.put(name[0], val); 827087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.END_TAG) { 828087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals(endTag)) { 829087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return map; 830087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 831087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 832087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Expected " + endTag + " end tag at: " + parser.getName()); 833087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 834087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor eventType = parser.next(); 835087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } while (eventType != parser.END_DOCUMENT); 836087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 837087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 838087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Document ended before " + endTag + " end tag"); 839087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 840087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 841087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 842087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read an ArrayList object from an XmlPullParser. The XML data could 843087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been generated by writeListXml(). The XmlPullParser 844087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * must be positioned <em>after</em> the tag that begins the list. 845087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 846087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param parser The XmlPullParser from which to read the list data. 847087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param endTag Name of the tag that will end the list, usually "list". 848087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name An array of one string, used to return the name attribute 849087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * of the list's tag. 850087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 851087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return HashMap The newly generated list. 852087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 853087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 854087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 855ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final ArrayList readThisListXml(XmlPullParser parser, String endTag, 856ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner String[] name) throws XmlPullParserException, java.io.IOException { 857ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return readThisListXml(parser, endTag, name, null); 858ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 859ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 860ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 861ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Read an ArrayList object from an XmlPullParser. The XML data could 862ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * previously have been generated by writeListXml(). The XmlPullParser 863ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * must be positioned <em>after</em> the tag that begins the list. 864ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 865ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param parser The XmlPullParser from which to read the list data. 866ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param endTag Name of the tag that will end the list, usually "list". 867ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name An array of one string, used to return the name attribute 868ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * of the list's tag. 869ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 870ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @return HashMap The newly generated list. 871ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 872ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readListXml 873ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 874ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner private static final ArrayList readThisListXml(XmlPullParser parser, String endTag, 875ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner String[] name, ReadMapCallback callback) 876ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, java.io.IOException { 877087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor ArrayList list = new ArrayList(); 878087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 879087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType = parser.getEventType(); 880087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor do { 881087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.START_TAG) { 882ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner Object val = readThisValueXml(parser, name, callback); 883087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor list.add(val); 884087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Adding to list: " + val); 885087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.END_TAG) { 886087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals(endTag)) { 887087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return list; 888087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 889087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 890087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Expected " + endTag + " end tag at: " + parser.getName()); 891087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 892087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor eventType = parser.next(); 893087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } while (eventType != parser.END_DOCUMENT); 894087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 895087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 896087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Document ended before " + endTag + " end tag"); 897087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 898ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 899ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 900ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Read a HashSet object from an XmlPullParser. The XML data could previously 901ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * have been generated by writeSetXml(). The XmlPullParser must be positioned 902ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * <em>after</em> the tag that begins the set. 903ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 904ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param parser The XmlPullParser from which to read the set data. 905ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param endTag Name of the tag that will end the set, usually "set". 906ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name An array of one string, used to return the name attribute 907ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * of the set's tag. 908ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 909ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @return HashSet The newly generated set. 910ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 911ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @throws XmlPullParserException 912ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @throws java.io.IOException 913ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 914ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readSetXml 915ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 916ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final HashSet readThisSetXml(XmlPullParser parser, String endTag, String[] name) 917ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, java.io.IOException { 918ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return readThisSetXml(parser, endTag, name, null); 919ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 920ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 921212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell /** 922212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * Read a HashSet object from an XmlPullParser. The XML data could previously 923212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * have been generated by writeSetXml(). The XmlPullParser must be positioned 924212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * <em>after</em> the tag that begins the set. 925212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 926212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param parser The XmlPullParser from which to read the set data. 927212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param endTag Name of the tag that will end the set, usually "set". 928212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @param name An array of one string, used to return the name attribute 929212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * of the set's tag. 930212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 931212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @return HashSet The newly generated set. 932212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 933212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @throws XmlPullParserException 934212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @throws java.io.IOException 935212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * 936212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell * @see #readSetXml 937ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @hide 938212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell */ 939ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner private static final HashSet readThisSetXml(XmlPullParser parser, String endTag, String[] name, 940ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner ReadMapCallback callback) throws XmlPullParserException, java.io.IOException { 941212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell HashSet set = new HashSet(); 942212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 943212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell int eventType = parser.getEventType(); 944212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell do { 945212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (eventType == parser.START_TAG) { 946ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner Object val = readThisValueXml(parser, name, callback); 947212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell set.add(val); 948212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell //System.out.println("Adding to set: " + val); 949212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } else if (eventType == parser.END_TAG) { 950212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell if (parser.getName().equals(endTag)) { 951212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return set; 952212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 953212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell throw new XmlPullParserException( 954212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell "Expected " + endTag + " end tag at: " + parser.getName()); 955212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 956212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell eventType = parser.next(); 957212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } while (eventType != parser.END_DOCUMENT); 958212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell 959212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell throw new XmlPullParserException( 960212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell "Document ended before " + endTag + " end tag"); 961212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } 962087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 963087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 964087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read an int[] object from an XmlPullParser. The XML data could 965087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been generated by writeIntArrayXml(). The XmlPullParser 966087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * must be positioned <em>after</em> the tag that begins the list. 967087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 968087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param parser The XmlPullParser from which to read the list data. 969087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param endTag Name of the tag that will end the list, usually "list". 970087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name An array of one string, used to return the name attribute 971087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * of the list's tag. 972087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 973087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return Returns a newly generated int[]. 974087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 975087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 976087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 977087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final int[] readThisIntArrayXml(XmlPullParser parser, 978087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String endTag, String[] name) 979087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException { 980087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 981087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int num; 982087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor try { 983087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor num = Integer.parseInt(parser.getAttributeValue(null, "num")); 984087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } catch (NullPointerException e) { 985087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 986087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Need num attribute in byte-array"); 987087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } catch (NumberFormatException e) { 988087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 989087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Not a number in num attribute in byte-array"); 990087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 991ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner parser.next(); 992087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 993087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int[] array = new int[num]; 994087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int i = 0; 995087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 996087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType = parser.getEventType(); 997087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor do { 998087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.START_TAG) { 999087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals("item")) { 1000087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor try { 1001087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor array[i] = Integer.parseInt( 1002087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.getAttributeValue(null, "value")); 1003087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } catch (NullPointerException e) { 1004087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1005087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Need value attribute in item"); 1006087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } catch (NumberFormatException e) { 1007087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1008087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Not a number in value attribute in item"); 1009087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1010087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 1011087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1012087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Expected item tag at: " + parser.getName()); 1013087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1014087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.END_TAG) { 1015087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals(endTag)) { 1016087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return array; 1017087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (parser.getName().equals("item")) { 1018087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor i++; 1019087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 1020087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1021087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Expected " + endTag + " end tag at: " 1022087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor + parser.getName()); 1023087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1024087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1025087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor eventType = parser.next(); 1026087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } while (eventType != parser.END_DOCUMENT); 1027087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1028087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1029087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Document ended before " + endTag + " end tag"); 1030087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1031087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1032087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor /** 1033ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Read a long[] object from an XmlPullParser. The XML data could 1034ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * previously have been generated by writeLongArrayXml(). The XmlPullParser 1035ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * must be positioned <em>after</em> the tag that begins the list. 1036ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1037ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param parser The XmlPullParser from which to read the list data. 1038ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param endTag Name of the tag that will end the list, usually "list". 1039ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name An array of one string, used to return the name attribute 1040ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * of the list's tag. 1041ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1042ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @return Returns a newly generated long[]. 1043ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1044ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readListXml 1045ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 1046ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final long[] readThisLongArrayXml(XmlPullParser parser, 1047ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner String endTag, String[] name) 1048ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, java.io.IOException { 1049ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1050ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner int num; 1051ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner try { 1052ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner num = Integer.parseInt(parser.getAttributeValue(null, "num")); 1053ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NullPointerException e) { 1054ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Need num attribute in long-array"); 1055ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NumberFormatException e) { 1056ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Not a number in num attribute in long-array"); 1057ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1058ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner parser.next(); 1059ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1060ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner long[] array = new long[num]; 1061ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner int i = 0; 1062ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1063ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner int eventType = parser.getEventType(); 1064ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner do { 1065ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (eventType == parser.START_TAG) { 1066ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (parser.getName().equals("item")) { 1067ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner try { 1068ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner array[i] = Long.parseLong(parser.getAttributeValue(null, "value")); 1069ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NullPointerException e) { 1070ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Need value attribute in item"); 1071ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NumberFormatException e) { 1072ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Not a number in value attribute in item"); 1073ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1074ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else { 1075ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Expected item tag at: " + parser.getName()); 1076ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1077ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (eventType == parser.END_TAG) { 1078ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (parser.getName().equals(endTag)) { 1079ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return array; 1080ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (parser.getName().equals("item")) { 1081ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner i++; 1082ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else { 1083ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Expected " + endTag + " end tag at: " + 1084ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner parser.getName()); 1085ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1086ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1087ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner eventType = parser.next(); 1088ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } while (eventType != parser.END_DOCUMENT); 1089ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1090ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Document ended before " + endTag + " end tag"); 1091ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1092ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1093ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 1094ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Read a double[] object from an XmlPullParser. The XML data could 1095ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * previously have been generated by writeDoubleArrayXml(). The XmlPullParser 1096ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * must be positioned <em>after</em> the tag that begins the list. 1097ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1098ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param parser The XmlPullParser from which to read the list data. 1099ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param endTag Name of the tag that will end the list, usually "double-array". 1100ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name An array of one string, used to return the name attribute 1101ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * of the list's tag. 1102ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1103ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @return Returns a newly generated double[]. 1104ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1105ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readListXml 1106ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 1107ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final double[] readThisDoubleArrayXml(XmlPullParser parser, String endTag, 1108ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner String[] name) throws XmlPullParserException, java.io.IOException { 1109ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1110ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner int num; 1111ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner try { 1112ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner num = Integer.parseInt(parser.getAttributeValue(null, "num")); 1113ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NullPointerException e) { 1114ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Need num attribute in double-array"); 1115ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NumberFormatException e) { 1116ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Not a number in num attribute in double-array"); 1117ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1118ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner parser.next(); 1119ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1120ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner double[] array = new double[num]; 1121ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner int i = 0; 1122ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1123ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner int eventType = parser.getEventType(); 1124ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner do { 1125ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (eventType == parser.START_TAG) { 1126ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (parser.getName().equals("item")) { 1127ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner try { 1128ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner array[i] = Double.parseDouble(parser.getAttributeValue(null, "value")); 1129ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NullPointerException e) { 1130ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Need value attribute in item"); 1131ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NumberFormatException e) { 1132ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Not a number in value attribute in item"); 1133ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1134ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else { 1135ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Expected item tag at: " + parser.getName()); 1136ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1137ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (eventType == parser.END_TAG) { 1138ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (parser.getName().equals(endTag)) { 1139ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return array; 1140ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (parser.getName().equals("item")) { 1141ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner i++; 1142ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else { 1143ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Expected " + endTag + " end tag at: " + 1144ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner parser.getName()); 1145ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1146ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1147ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner eventType = parser.next(); 1148ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } while (eventType != parser.END_DOCUMENT); 1149ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1150ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Document ended before " + endTag + " end tag"); 1151ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1152ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1153ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 1154ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Read a String[] object from an XmlPullParser. The XML data could 1155ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * previously have been generated by writeStringArrayXml(). The XmlPullParser 1156ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * must be positioned <em>after</em> the tag that begins the list. 1157ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1158ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param parser The XmlPullParser from which to read the list data. 1159ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param endTag Name of the tag that will end the list, usually "string-array". 1160ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name An array of one string, used to return the name attribute 1161ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * of the list's tag. 1162ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1163ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @return Returns a newly generated String[]. 1164ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1165ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @see #readListXml 1166ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 1167ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public static final String[] readThisStringArrayXml(XmlPullParser parser, String endTag, 1168ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner String[] name) throws XmlPullParserException, java.io.IOException { 1169ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1170ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner int num; 1171ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner try { 1172ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner num = Integer.parseInt(parser.getAttributeValue(null, "num")); 1173ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NullPointerException e) { 1174ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Need num attribute in string-array"); 1175ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NumberFormatException e) { 1176ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Not a number in num attribute in string-array"); 1177ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1178ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner parser.next(); 1179ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1180ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner String[] array = new String[num]; 1181ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner int i = 0; 1182ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1183ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner int eventType = parser.getEventType(); 1184ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner do { 1185ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (eventType == parser.START_TAG) { 1186ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (parser.getName().equals("item")) { 1187ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner try { 1188ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner array[i] = parser.getAttributeValue(null, "value"); 1189ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NullPointerException e) { 1190ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Need value attribute in item"); 1191ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } catch (NumberFormatException e) { 1192ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Not a number in value attribute in item"); 1193ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1194ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else { 1195ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Expected item tag at: " + parser.getName()); 1196ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1197ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (eventType == parser.END_TAG) { 1198ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner if (parser.getName().equals(endTag)) { 1199ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return array; 1200ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (parser.getName().equals("item")) { 1201ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner i++; 1202ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else { 1203ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Expected " + endTag + " end tag at: " + 1204ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner parser.getName()); 1205ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1206ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1207ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner eventType = parser.next(); 1208ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } while (eventType != parser.END_DOCUMENT); 1209ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1210ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Document ended before " + endTag + " end tag"); 1211ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1212ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1213ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 121473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * Read a boolean[] object from an XmlPullParser. The XML data could 121573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * previously have been generated by writeBooleanArrayXml(). The XmlPullParser 121673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * must be positioned <em>after</em> the tag that begins the list. 121773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * 121873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @param parser The XmlPullParser from which to read the list data. 121973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @param endTag Name of the tag that will end the list, usually "string-array". 122073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @param name An array of one string, used to return the name attribute 122173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * of the list's tag. 122273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * 122373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @return Returns a newly generated boolean[]. 122473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * 122573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner * @see #readListXml 122673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner */ 122773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner public static final boolean[] readThisBooleanArrayXml(XmlPullParser parser, String endTag, 122873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner String[] name) throws XmlPullParserException, java.io.IOException { 122973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 123073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner int num; 123173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner try { 123273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner num = Integer.parseInt(parser.getAttributeValue(null, "num")); 123373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } catch (NullPointerException e) { 123473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner throw new XmlPullParserException("Need num attribute in string-array"); 123573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } catch (NumberFormatException e) { 123673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner throw new XmlPullParserException("Not a number in num attribute in string-array"); 123773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 123873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner parser.next(); 123973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 124073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner boolean[] array = new boolean[num]; 124173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner int i = 0; 124273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 124373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner int eventType = parser.getEventType(); 124473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner do { 124573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner if (eventType == parser.START_TAG) { 124673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner if (parser.getName().equals("item")) { 124773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner try { 124873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner array[i] = Boolean.valueOf(parser.getAttributeValue(null, "value")); 124973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } catch (NullPointerException e) { 125073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner throw new XmlPullParserException("Need value attribute in item"); 125173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } catch (NumberFormatException e) { 125273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner throw new XmlPullParserException("Not a number in value attribute in item"); 125373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 125473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } else { 125573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner throw new XmlPullParserException("Expected item tag at: " + parser.getName()); 125673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 125773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } else if (eventType == parser.END_TAG) { 125873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner if (parser.getName().equals(endTag)) { 125973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner return array; 126073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } else if (parser.getName().equals("item")) { 126173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner i++; 126273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } else { 126373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner throw new XmlPullParserException("Expected " + endTag + " end tag at: " + 126473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner parser.getName()); 126573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 126673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 126773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner eventType = parser.next(); 126873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } while (eventType != parser.END_DOCUMENT); 126973bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 127073bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner throw new XmlPullParserException("Document ended before " + endTag + " end tag"); 127173bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } 127273bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner 127373bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner /** 1274087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * Read a flattened object from an XmlPullParser. The XML data could 1275087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * previously have been written with writeMapXml(), writeListXml(), or 1276087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * writeValueXml(). The XmlPullParser must be positioned <em>at</em> the 1277087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * tag that defines the value. 1278087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 1279087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param parser The XmlPullParser from which to read the object. 1280087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @param name An array of one string, used to return the name attribute 1281087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * of the value's tag. 1282087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 1283087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @return Object The newly generated value object. 1284087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * 1285087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readMapXml 1286087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #readListXml 1287087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor * @see #writeValueXml 1288087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor */ 1289087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final Object readValueXml(XmlPullParser parser, String[] name) 1290087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throws XmlPullParserException, java.io.IOException 1291087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 1292087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType = parser.getEventType(); 1293087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor do { 1294087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.START_TAG) { 1295ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return readThisValueXml(parser, name, null); 1296087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.END_TAG) { 1297087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1298087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end tag at: " + parser.getName()); 1299087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.TEXT) { 1300087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1301087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected text: " + parser.getText()); 1302087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1303087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor eventType = parser.next(); 1304087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } while (eventType != parser.END_DOCUMENT); 1305087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1306087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1307087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end of document"); 1308087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1309087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1310ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner private static final Object readThisValueXml(XmlPullParser parser, String[] name, 1311ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner ReadMapCallback callback) throws XmlPullParserException, java.io.IOException { 1312087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor final String valueName = parser.getAttributeValue(null, "name"); 1313087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor final String tagName = parser.getName(); 1314087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1315087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Reading this value tag: " + tagName + ", name=" + valueName); 1316087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1317087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor Object res; 1318087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1319087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (tagName.equals("null")) { 1320087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = null; 1321087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("string")) { 1322087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor String value = ""; 1323087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType; 1324087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((eventType = parser.next()) != parser.END_DOCUMENT) { 1325087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.END_TAG) { 1326087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals("string")) { 1327087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 1328087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + value); 1329087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return value; 1330087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1331087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1332087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end tag in <string>: " + parser.getName()); 1333087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.TEXT) { 1334087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor value += parser.getText(); 1335087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.START_TAG) { 1336087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1337087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected start tag in <string>: " + parser.getName()); 1338087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1339087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1340087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1341087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end of document in <string>"); 13422ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } else if ((res = readThisPrimitiveValueXml(parser, tagName)) != null) { 13432ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko // all work already done by readThisPrimitiveValueXml 1344087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("int-array")) { 1345087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = readThisIntArrayXml(parser, "int-array", name); 1346087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 1347087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + res); 1348087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return res; 1349ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (tagName.equals("long-array")) { 1350ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner res = readThisLongArrayXml(parser, "long-array", name); 1351ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner name[0] = valueName; 1352ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner //System.out.println("Returning value for " + valueName + ": " + res); 1353ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return res; 1354ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (tagName.equals("double-array")) { 1355ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner res = readThisDoubleArrayXml(parser, "double-array", name); 1356ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner name[0] = valueName; 1357ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner //System.out.println("Returning value for " + valueName + ": " + res); 1358ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return res; 1359ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (tagName.equals("string-array")) { 1360ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner res = readThisStringArrayXml(parser, "string-array", name); 1361ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner name[0] = valueName; 1362ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner //System.out.println("Returning value for " + valueName + ": " + res); 1363ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return res; 136473bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner } else if (tagName.equals("boolean-array")) { 136573bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner res = readThisBooleanArrayXml(parser, "boolean-array", name); 136673bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner name[0] = valueName; 136773bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner //System.out.println("Returning value for " + valueName + ": " + res); 136873bdf9761be2abdd85efc5fce165f3fa80fcfa65Craig Mautner return res; 1369087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("map")) { 1370087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.next(); 1371087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = readThisMapXml(parser, "map", name); 1372087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 1373087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + res); 1374087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return res; 1375087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (tagName.equals("list")) { 1376087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor parser.next(); 1377087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor res = readThisListXml(parser, "list", name); 1378087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 1379087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + res); 1380087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return res; 1381212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell } else if (tagName.equals("set")) { 1382212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell parser.next(); 1383212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell res = readThisSetXml(parser, "set", name); 1384212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell name[0] = valueName; 1385212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell //System.out.println("Returning value for " + valueName + ": " + res); 1386212db7d3f8ce5297f4a556234a9c0675c697f1cfAdam Powell return res; 1387ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } else if (callback != null) { 1388ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner res = callback.readThisUnknownObjectXml(parser, tagName); 1389ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner name[0] = valueName; 1390ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner return res; 1391087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else { 1392ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throw new XmlPullParserException("Unknown tag: " + tagName); 1393087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1394087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1395087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor // Skip through to end tag. 1396087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int eventType; 1397087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((eventType = parser.next()) != parser.END_DOCUMENT) { 1398087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (eventType == parser.END_TAG) { 1399087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (parser.getName().equals(tagName)) { 1400087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor name[0] = valueName; 1401087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor //System.out.println("Returning value for " + valueName + ": " + res); 1402087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor return res; 1403087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1404087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1405087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end tag in <" + tagName + ">: " + parser.getName()); 1406087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.TEXT) { 1407087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1408087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected text in <" + tagName + ">: " + parser.getName()); 1409087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } else if (eventType == parser.START_TAG) { 1410087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1411087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected start tag in <" + tagName + ">: " + parser.getName()); 1412087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1413087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1414087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException( 1415087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor "Unexpected end of document in <" + tagName + ">"); 1416087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1417087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 14182ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko private static final Object readThisPrimitiveValueXml(XmlPullParser parser, String tagName) 14192ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko throws XmlPullParserException, java.io.IOException 14202ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko { 14212ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko try { 14222ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko if (tagName.equals("int")) { 14232ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko return Integer.parseInt(parser.getAttributeValue(null, "value")); 14242ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } else if (tagName.equals("long")) { 14252ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko return Long.valueOf(parser.getAttributeValue(null, "value")); 14262ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } else if (tagName.equals("float")) { 14272ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko return new Float(parser.getAttributeValue(null, "value")); 14282ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } else if (tagName.equals("double")) { 14292ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko return new Double(parser.getAttributeValue(null, "value")); 14302ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } else if (tagName.equals("boolean")) { 14312ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko return Boolean.valueOf(parser.getAttributeValue(null, "value")); 14322ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } else { 14332ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko return null; 14342ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } 14352ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } catch (NullPointerException e) { 14362ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko throw new XmlPullParserException("Need value attribute in <" + tagName + ">"); 14372ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } catch (NumberFormatException e) { 14382ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko throw new XmlPullParserException( 14392ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko "Not a number in value attribute in <" + tagName + ">"); 14402ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } 14412ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko } 14422ddce3226e2a1f380dfc4ad3f7e962dfdbfc39ddVladimir Marko 1443087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void beginDocument(XmlPullParser parser, String firstElementName) throws XmlPullParserException, IOException 1444087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 1445087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int type; 1446087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((type=parser.next()) != parser.START_TAG 1447087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor && type != parser.END_DOCUMENT) { 1448087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor ; 1449087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1450087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1451087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (type != parser.START_TAG) { 1452087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException("No start tag found"); 1453087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1454087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1455087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor if (!parser.getName().equals(firstElementName)) { 1456087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor throw new XmlPullParserException("Unexpected start tag: found " + parser.getName() + 1457087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor ", expected " + firstElementName); 1458087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1459087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1460087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor 1461087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor public static final void nextElement(XmlPullParser parser) throws XmlPullParserException, IOException 1462087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor { 1463087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor int type; 1464087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor while ((type=parser.next()) != parser.START_TAG 1465087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor && type != parser.END_DOCUMENT) { 1466087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor ; 1467087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1468087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor } 1469a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown 1470a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown public static boolean nextElementWithin(XmlPullParser parser, int outerDepth) 1471a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown throws IOException, XmlPullParserException { 1472a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown for (;;) { 1473a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown int type = parser.next(); 1474a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown if (type == XmlPullParser.END_DOCUMENT 1475a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown || (type == XmlPullParser.END_TAG && parser.getDepth() == outerDepth)) { 1476a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown return false; 1477a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown } 1478a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown if (type == XmlPullParser.START_TAG 1479a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown && parser.getDepth() == outerDepth + 1) { 1480a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown return true; 1481a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown } 1482a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown } 1483a3bc565882dd3984e995363642b1295fe3d24d10Jeff Brown } 1484ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 1485d85fc72fb810858f7502e7e7f1bad53e1bf03eddNicolas Prevot public static int readIntAttribute(XmlPullParser in, String name, int defaultValue) { 1486d85fc72fb810858f7502e7e7f1bad53e1bf03eddNicolas Prevot final String value = in.getAttributeValue(null, name); 1487d85fc72fb810858f7502e7e7f1bad53e1bf03eddNicolas Prevot try { 1488d85fc72fb810858f7502e7e7f1bad53e1bf03eddNicolas Prevot return Integer.parseInt(value); 1489d85fc72fb810858f7502e7e7f1bad53e1bf03eddNicolas Prevot } catch (NumberFormatException e) { 1490d85fc72fb810858f7502e7e7f1bad53e1bf03eddNicolas Prevot return defaultValue; 1491d85fc72fb810858f7502e7e7f1bad53e1bf03eddNicolas Prevot } 1492d85fc72fb810858f7502e7e7f1bad53e1bf03eddNicolas Prevot } 1493d85fc72fb810858f7502e7e7f1bad53e1bf03eddNicolas Prevot 1494ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static int readIntAttribute(XmlPullParser in, String name) throws IOException { 1495ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey final String value = in.getAttributeValue(null, name); 1496ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey try { 1497ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey return Integer.parseInt(value); 1498ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } catch (NumberFormatException e) { 1499ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throw new ProtocolException("problem parsing " + name + "=" + value + " as int"); 1500ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 1501ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 1502ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 1503ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static void writeIntAttribute(XmlSerializer out, String name, int value) 1504ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throws IOException { 1505ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey out.attribute(null, name, Integer.toString(value)); 1506ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 1507ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 1508e66c1778f80f4b18e29e018eca3a338f125f23b9Jeff Sharkey public static long readLongAttribute(XmlPullParser in, String name, long defaultValue) { 1509e66c1778f80f4b18e29e018eca3a338f125f23b9Jeff Sharkey final String value = in.getAttributeValue(null, name); 1510e66c1778f80f4b18e29e018eca3a338f125f23b9Jeff Sharkey try { 1511e66c1778f80f4b18e29e018eca3a338f125f23b9Jeff Sharkey return Long.parseLong(value); 1512e66c1778f80f4b18e29e018eca3a338f125f23b9Jeff Sharkey } catch (NumberFormatException e) { 1513e66c1778f80f4b18e29e018eca3a338f125f23b9Jeff Sharkey return defaultValue; 1514e66c1778f80f4b18e29e018eca3a338f125f23b9Jeff Sharkey } 1515e66c1778f80f4b18e29e018eca3a338f125f23b9Jeff Sharkey } 1516e66c1778f80f4b18e29e018eca3a338f125f23b9Jeff Sharkey 1517ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static long readLongAttribute(XmlPullParser in, String name) throws IOException { 1518ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey final String value = in.getAttributeValue(null, name); 1519ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey try { 1520ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey return Long.parseLong(value); 1521ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } catch (NumberFormatException e) { 1522ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throw new ProtocolException("problem parsing " + name + "=" + value + " as long"); 1523ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 1524ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 1525ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 1526ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static void writeLongAttribute(XmlSerializer out, String name, long value) 1527ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throws IOException { 1528ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey out.attribute(null, name, Long.toString(value)); 1529ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 1530ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 15311cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static float readFloatAttribute(XmlPullParser in, String name) throws IOException { 15321cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey final String value = in.getAttributeValue(null, name); 15331cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey try { 15341cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey return Float.parseFloat(value); 15351cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } catch (NumberFormatException e) { 15361cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey throw new ProtocolException("problem parsing " + name + "=" + value + " as long"); 15371cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15381cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15391cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 15401cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static void writeFloatAttribute(XmlSerializer out, String name, float value) 15411cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey throws IOException { 15421cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey out.attribute(null, name, Float.toString(value)); 15431cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15441cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 1545ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static boolean readBooleanAttribute(XmlPullParser in, String name) { 1546ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey final String value = in.getAttributeValue(null, name); 1547ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey return Boolean.parseBoolean(value); 1548ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 1549ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey 155077d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey public static boolean readBooleanAttribute(XmlPullParser in, String name, 155177d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey boolean defaultValue) { 155277d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey final String value = in.getAttributeValue(null, name); 155377d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey if (value == null) { 155477d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey return defaultValue; 155577d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey } else { 155677d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey return Boolean.parseBoolean(value); 155777d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey } 155877d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey } 155977d218e1869e69c8d436b09cd11dcfe45e50b2cfJeff Sharkey 1560ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey public static void writeBooleanAttribute(XmlSerializer out, String name, boolean value) 1561ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey throws IOException { 1562ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey out.attribute(null, name, Boolean.toString(value)); 1563ded7b75d1a353856ad8f126d171d598d15b97760Jeff Sharkey } 1564ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 15651cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static Uri readUriAttribute(XmlPullParser in, String name) { 15661cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey final String value = in.getAttributeValue(null, name); 15671cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey return (value != null) ? Uri.parse(value) : null; 15681cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15691cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 15701cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static void writeUriAttribute(XmlSerializer out, String name, Uri value) 15711cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey throws IOException { 15721cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey if (value != null) { 15731cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey out.attribute(null, name, value.toString()); 15741cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15751cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15761cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 15771cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static String readStringAttribute(XmlPullParser in, String name) { 15781cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey return in.getAttributeValue(null, name); 15791cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15801cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 15811cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static void writeStringAttribute(XmlSerializer out, String name, String value) 15821cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey throws IOException { 15831cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey if (value != null) { 15841cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey out.attribute(null, name, value); 15851cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15861cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15871cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 15881cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static byte[] readByteArrayAttribute(XmlPullParser in, String name) { 15891cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey final String value = in.getAttributeValue(null, name); 15901cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey if (value != null) { 15911cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey return Base64.decode(value, Base64.DEFAULT); 15921cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } else { 15931cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey return null; 15941cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15951cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 15961cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 15971cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static void writeByteArrayAttribute(XmlSerializer out, String name, byte[] value) 15981cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey throws IOException { 15991cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey if (value != null) { 16001cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey out.attribute(null, name, Base64.encodeToString(value, Base64.DEFAULT)); 16011cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 16021cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 16031cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 16041cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static Bitmap readBitmapAttribute(XmlPullParser in, String name) { 16051cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey final byte[] value = readByteArrayAttribute(in, name); 16061cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey if (value != null) { 16071cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey return BitmapFactory.decodeByteArray(value, 0, value.length); 16081cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } else { 16091cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey return null; 16101cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 16111cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 16121cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 161302bd78490d8594d225ecc70a74b2058cb968a657Jeff Sharkey @Deprecated 16141cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey public static void writeBitmapAttribute(XmlSerializer out, String name, Bitmap value) 16151cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey throws IOException { 16161cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey if (value != null) { 16171cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey final ByteArrayOutputStream os = new ByteArrayOutputStream(); 16181cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey value.compress(CompressFormat.PNG, 90, os); 16191cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey writeByteArrayAttribute(out, name, os.toByteArray()); 16201cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 16211cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey } 16221cb2d0d4bba387665128c62c342e59103ea4be26Jeff Sharkey 1623ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** @hide */ 1624ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public interface WriteMapCallback { 1625ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 1626ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Called from writeMapXml when an Object type is not recognized. The implementer 1627ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * must write out the entire element including start and end tags. 1628ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1629ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param v The object to be written out 1630ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param name The mapping key for v. Must be written into the "name" attribute of the 1631ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * start tag. 1632ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param out The XML output stream. 1633ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @throws XmlPullParserException on unrecognized Object type. 1634ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @throws IOException on XmlSerializer serialization errors. 1635ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @hide 1636ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 1637ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public void writeUnknownObject(Object v, String name, XmlSerializer out) 1638ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, IOException; 1639ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1640ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner 1641ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** @hide */ 1642ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public interface ReadMapCallback { 1643ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner /** 1644ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * Called from readThisMapXml when a START_TAG is not recognized. The input stream 1645ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * is positioned within the start tag so that attributes can be read using in.getAttribute. 1646ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * 1647ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param in the XML input stream 1648ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @param tag the START_TAG that was not recognized. 1649ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @return the Object parsed from the stream which will be put into the map. 1650ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @throws XmlPullParserException if the START_TAG is not recognized. 1651ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @throws IOException on XmlPullParser serialization errors. 1652ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner * @hide 1653ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner */ 1654ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner public Object readThisUnknownObjectXml(XmlPullParser in, String tag) 1655ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner throws XmlPullParserException, IOException; 1656ef73ee1dd98acfc4a19561367cfc3e4d8bbe06eaCraig Mautner } 1657087ff0b93580760bf0c5dd36a0081289224b1cdeTom Taylor} 1658