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    }