• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * $RCSfile$
3  * $Revision: 7071 $
4  * $Date: 2007-02-12 08:59:05 +0800 (Mon, 12 Feb 2007) $
5  *
6  * Copyright 2003-2007 Jive Software.
7  *
8  * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  */
20 
21 package org.jivesoftware.smackx.provider;
22 
23 import org.jivesoftware.smack.packet.IQ;
24 import org.jivesoftware.smack.provider.IQProvider;
25 import org.jivesoftware.smack.util.PacketParserUtils;
26 import org.jivesoftware.smackx.packet.DiscoverInfo;
27 import org.xmlpull.v1.XmlPullParser;
28 
29 /**
30 * The DiscoverInfoProvider parses Service Discovery information packets.
31 *
32 * @author Gaston Dombiak
33 */
34 public class DiscoverInfoProvider implements IQProvider {
35 
parseIQ(XmlPullParser parser)36     public IQ parseIQ(XmlPullParser parser) throws Exception {
37         DiscoverInfo discoverInfo = new DiscoverInfo();
38         boolean done = false;
39         DiscoverInfo.Feature feature = null;
40         DiscoverInfo.Identity identity = null;
41         String category = "";
42         String name = "";
43         String type = "";
44         String variable = "";
45         String lang = "";
46         discoverInfo.setNode(parser.getAttributeValue("", "node"));
47         while (!done) {
48             int eventType = parser.next();
49             if (eventType == XmlPullParser.START_TAG) {
50                 if (parser.getName().equals("identity")) {
51                     // Initialize the variables from the parsed XML
52                     category = parser.getAttributeValue("", "category");
53                     name = parser.getAttributeValue("", "name");
54                     type = parser.getAttributeValue("", "type");
55                     lang = parser.getAttributeValue(parser.getNamespace("xml"), "lang");
56                 }
57                 else if (parser.getName().equals("feature")) {
58                     // Initialize the variables from the parsed XML
59                     variable = parser.getAttributeValue("", "var");
60                 }
61                 // Otherwise, it must be a packet extension.
62                 else {
63                     discoverInfo.addExtension(PacketParserUtils.parsePacketExtension(parser
64                             .getName(), parser.getNamespace(), parser));
65                 }
66             } else if (eventType == XmlPullParser.END_TAG) {
67                 if (parser.getName().equals("identity")) {
68                     // Create a new identity and add it to the discovered info.
69                     identity = new DiscoverInfo.Identity(category, name, type);
70                     if (lang != null)
71                         identity.setLanguage(lang);
72                     discoverInfo.addIdentity(identity);
73                 }
74                 if (parser.getName().equals("feature")) {
75                     // Create a new feature and add it to the discovered info.
76                     discoverInfo.addFeature(variable);
77                 }
78                 if (parser.getName().equals("query")) {
79                     done = true;
80                 }
81             }
82         }
83 
84         return discoverInfo;
85     }
86 }