001/** 002 * 003 * Copyright 2015-2016 Ishan Khanna 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.jivesoftware.smackx.geoloc.provider; 018 019import java.io.IOException; 020import java.net.URISyntaxException; 021import java.text.ParseException; 022 023import org.jivesoftware.smack.provider.ExtensionElementProvider; 024import org.jivesoftware.smack.util.ParserUtils; 025import org.jivesoftware.smackx.geoloc.packet.GeoLocation; 026import org.xmlpull.v1.XmlPullParser; 027import org.xmlpull.v1.XmlPullParserException; 028 029public class GeoLocationProvider extends ExtensionElementProvider<GeoLocation> { 030 031 @Override 032 public GeoLocation parse(XmlPullParser parser, int initialDepth) throws XmlPullParserException, IOException, 033 ParseException, URISyntaxException { 034 035 GeoLocation.Builder builder = GeoLocation.builder(); 036 037 outerloop: while (true) { 038 int event = parser.next(); 039 switch (event) { 040 case XmlPullParser.START_TAG: 041 String name = parser.getName(); 042 switch (name) { 043 case "accuracy": 044 builder.setAccuracy(ParserUtils.getDoubleFromNextText(parser)); 045 break; 046 case "alt": 047 builder.setAlt(ParserUtils.getDoubleFromNextText(parser)); 048 break; 049 case "area": 050 builder.setArea(parser.nextText()); 051 break; 052 case "bearing": 053 builder.setBearing(ParserUtils.getDoubleFromNextText(parser)); 054 break; 055 case "building": 056 builder.setBuilding(parser.nextText()); 057 break; 058 case "country": 059 builder.setCountry(parser.nextText()); 060 break; 061 case "countrycode": 062 builder.setCountryCode(parser.nextText()); 063 break; 064 case "datum": 065 builder.setDatum(parser.nextText()); 066 break; 067 case "description": 068 builder.setDescription(parser.nextText()); 069 break; 070 case "error": 071 builder.setError(ParserUtils.getDoubleFromNextText(parser)); 072 break; 073 case "floor": 074 builder.setFloor(parser.nextText()); 075 break; 076 case "lat": 077 builder.setLat(ParserUtils.getDoubleFromNextText(parser)); 078 break; 079 case "locality": 080 builder.setLocality(parser.nextText()); 081 break; 082 case "lon": 083 builder.setLon(ParserUtils.getDoubleFromNextText(parser)); 084 break; 085 case "postalcode": 086 builder.setPostalcode(parser.nextText()); 087 break; 088 case "region": 089 builder.setRegion(parser.nextText()); 090 break; 091 case "room": 092 builder.setRoom(parser.nextText()); 093 break; 094 case "speed": 095 builder.setSpeed(ParserUtils.getDoubleFromNextText(parser)); 096 break; 097 case "street": 098 builder.setStreet(parser.nextText()); 099 break; 100 case "text": 101 builder.setText(parser.nextText()); 102 break; 103 case "timestamp": 104 builder.setTimestamp(ParserUtils.getDateFromNextText(parser)); 105 break; 106 case "tzo": 107 builder.setTzo(parser.nextText()); 108 break; 109 case "uri": 110 builder.setUri(ParserUtils.getUriFromNextText(parser)); 111 break; 112 } 113 break; 114 case XmlPullParser.END_TAG: 115 if (parser.getDepth() == initialDepth) { 116 break outerloop; 117 } 118 } 119 } 120 121 return builder.build(); 122 } 123 124}