001 package com.valhalla.jbother.jabber.smack.provider;
002
003 import java.util.ArrayList;
004 import java.util.Vector;
005
006 import com.valhalla.jbother.jabber.smack.*;
007 import org.jivesoftware.smackx.packet.PrivateData;
008 import org.jivesoftware.smackx.provider.PrivateDataProvider;
009 import org.xmlpull.v1.XmlPullParser;
010
011 /**
012 * The BookmarkProvider parses Bookmark Storage packets (JEP-48).
013 *
014 * @author George Weinberg
015 * a bookmark can either be a jabber conference or an url
016 */
017 public class BookmarkProvider implements PrivateDataProvider {
018 Vector vUrls;
019 Vector vConferences;
020 /**
021 * Creates a new BookmarkProvider.
022 * PrivateDataManager requires that every PrivateDataProvider has a public, no-argument constructor
023 */
024
025 public BookmarkProvider(){
026 }
027 /**
028 *Called by the ProvidermManager when when the server returns a packet containimg PrivateData
029 */
030 public PrivateData parsePrivateData(XmlPullParser parser) throws Exception {
031 boolean done = false;
032 boolean done2;
033 StringBuffer buffer = null;
034 String name;
035 String sUrl;
036 String jid;
037 boolean autojoin;
038 String nick;
039 String password;
040 Bookmark bookmark = new Bookmark();
041 Bookmark.Conference conference;
042 while (!done) {
043 name = null;
044 sUrl = null;
045 autojoin = false;
046 nick = null;
047 password = null;
048 jid = null;
049
050 int eventType = parser.next();
051 if (eventType == XmlPullParser.TEXT){
052 if (parser.getText().trim().equals(""))continue;
053 }
054 if (eventType == XmlPullParser.START_TAG) {
055 if (parser.getName().equals("url")) {
056 for (int j1 = 0; j1 < parser.getAttributeCount(); j1++){
057 if (parser.getAttributeName(j1).equals("name")) name = parser.getAttributeValue(j1);
058 if (parser.getAttributeName(j1).equals("url")) sUrl = parser.getAttributeValue(j1);
059 if ((name != null) && (sUrl != null)) bookmark.addurl(name,sUrl);
060 }
061 } else if (parser.getName().equals("conference")){
062 for (int j1 = 0; j1 < parser.getAttributeCount(); j1++){
063 if (parser.getAttributeName(j1).equals("name")) {
064 name = parser.getAttributeValue(j1);
065 }
066 if (parser.getAttributeName(j1).equals("jid")) jid = parser.getAttributeValue(j1);
067 if (parser.getAttributeName(j1).equals("autojoin")){
068 if (parser.getAttributeValue(j1).equals("1")) autojoin = true;
069 }
070 }
071 done2 = false;
072 while (!done2){
073 eventType = parser.next();
074 if (eventType == XmlPullParser.START_TAG){
075 if (parser.getName().equals("nick")){
076 eventType = parser.next();
077 nick = parser.getText();
078 } else if (parser.getName().equals("password")){
079 if( parser.next() != XmlPullParser.END_TAG )
080 {
081 password = parser.getText();
082 }
083 }
084 }
085
086 if (eventType == XmlPullParser.END_TAG){
087 if (parser.getName().equals("conference")) done2 = true;
088 }
089 }
090 if (name != null && jid != null){
091 bookmark.addConference(name,jid,nick,password,autojoin);
092 }
093
094
095 }
096 } else if (eventType == XmlPullParser.END_TAG) {
097 if (parser.getName().equals("storage")) {
098 done = true;
099 }
100 }
101
102 }
103 return bookmark;
104 }
105 }