All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jivesoftware.smackx.bookmarks.Bookmarks Maven / Gradle / Ivy

/**
 *
 * Copyright 2003-2007 Jive Software.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jivesoftware.smackx.bookmarks;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;

import org.jivesoftware.smackx.iqprivate.packet.PrivateData;
import org.jivesoftware.smackx.iqprivate.provider.PrivateDataProvider;

import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.parts.Resourcepart;

/**
 * Bookmarks is used for storing and retrieving URLS and Conference rooms.
 * Bookmark Storage (XEP-0048) defined a protocol for the storage of bookmarks to conference rooms and other entities
 * in a Jabber user's account.
 * See the following code sample for saving Bookmarks:
 * 
 * XMPPConnection con = new XMPPTCPConnection("jabber.org");
 * con.login("john", "doe");
 * Bookmarks bookmarks = new Bookmarks();
 * // Bookmark a URL
 * BookmarkedURL url = new BookmarkedURL();
 * url.setName("Google");
 * url.setURL("http://www.jivesoftware.com");
 * bookmarks.addURL(url);
 * // Bookmark a Conference room.
 * BookmarkedConference conference = new BookmarkedConference();
 * conference.setName("My Favorite Room");
 * conference.setAutoJoin("true");
 * conference.setJID("[email protected]");
 * bookmarks.addConference(conference);
 * // Save Bookmarks using PrivateDataManager.
 * PrivateDataManager manager = new PrivateDataManager(con);
 * manager.setPrivateData(bookmarks);
 * LastActivity activity = LastActivity.getLastActivity(con, "[email protected]");
 * 
* * @author Derek DeMoro */ public class Bookmarks implements PrivateData { public static final String NAMESPACE = "storage:bookmarks"; public static final String ELEMENT = "storage"; private final List bookmarkedURLS; private final List bookmarkedConferences; /** * Required Empty Constructor to use Bookmarks. */ public Bookmarks() { bookmarkedURLS = new ArrayList<>(); bookmarkedConferences = new ArrayList<>(); } /** * Adds a BookmarkedURL. * * @param bookmarkedURL the bookmarked bookmarkedURL. */ public void addBookmarkedURL(BookmarkedURL bookmarkedURL) { bookmarkedURLS.add(bookmarkedURL); } /** * Removes a bookmarked bookmarkedURL. * * @param bookmarkedURL the bookmarked bookmarkedURL to remove. */ public void removeBookmarkedURL(BookmarkedURL bookmarkedURL) { bookmarkedURLS.remove(bookmarkedURL); } /** * Removes all BookmarkedURLs from user's bookmarks. */ public void clearBookmarkedURLS() { bookmarkedURLS.clear(); } /** * Add a BookmarkedConference to bookmarks. * * @param bookmarkedConference the conference to remove. */ public void addBookmarkedConference(BookmarkedConference bookmarkedConference) { bookmarkedConferences.add(bookmarkedConference); } /** * Removes a BookmarkedConference. * * @param bookmarkedConference the BookmarkedConference to remove. */ public void removeBookmarkedConference(BookmarkedConference bookmarkedConference) { bookmarkedConferences.remove(bookmarkedConference); } /** * Removes all BookmarkedConferences from Bookmarks. */ public void clearBookmarkedConferences() { bookmarkedConferences.clear(); } /** * Returns a Collection of all Bookmarked URLs for this user. * * @return a collection of all Bookmarked URLs. */ public List getBookmarkedURLS() { return bookmarkedURLS; } /** * Returns a Collection of all Bookmarked Conference for this user. * * @return a collection of all Bookmarked Conferences. */ public List getBookmarkedConferences() { return bookmarkedConferences; } /** * Returns the root element name. * * @return the element name. */ @Override public String getElementName() { return ELEMENT; } /** * Returns the root element XML namespace. * * @return the namespace. */ @Override public String getNamespace() { return NAMESPACE; } /** * Returns the XML representation of the PrivateData. * * @return the private data as XML. */ @Override public XmlStringBuilder toXML() { XmlStringBuilder buf = new XmlStringBuilder(); buf.halfOpenElement(ELEMENT).xmlnsAttribute(NAMESPACE).rightAngleBracket(); for (BookmarkedURL urlStorage : getBookmarkedURLS()) { if (urlStorage.isShared()) { continue; } buf.halfOpenElement("url").attribute("name", urlStorage.getName()).attribute("url", urlStorage.getURL()); buf.condAttribute(urlStorage.isRss(), "rss", "true"); buf.closeEmptyElement(); } // Add Conference additions for (BookmarkedConference conference : getBookmarkedConferences()) { if (conference.isShared()) { continue; } buf.halfOpenElement("conference"); buf.attribute("name", conference.getName()); buf.attribute("autojoin", Boolean.toString(conference.isAutoJoin())); buf.attribute("jid", conference.getJid()); buf.rightAngleBracket(); buf.optElement("nick", conference.getNickname()); buf.optElement("password", conference.getPassword()); buf.closeElement("conference"); } buf.closeElement(ELEMENT); return buf; } /** * The IQ Provider for BookmarkStorage. * * @author Derek DeMoro */ public static class Provider implements PrivateDataProvider { /** * Empty Constructor for PrivateDataProvider. */ public Provider() { super(); } @Override public PrivateData parsePrivateData(XmlPullParser parser) throws XmlPullParserException, IOException { Bookmarks storage = new Bookmarks(); boolean done = false; while (!done) { XmlPullParser.Event eventType = parser.next(); if (eventType == XmlPullParser.Event.START_ELEMENT && "url".equals(parser.getName())) { final BookmarkedURL urlStorage = getURLStorage(parser); if (urlStorage != null) { storage.addBookmarkedURL(urlStorage); } } else if (eventType == XmlPullParser.Event.START_ELEMENT && "conference".equals(parser.getName())) { final BookmarkedConference conference = getConferenceStorage(parser); storage.addBookmarkedConference(conference); } else if (eventType == XmlPullParser.Event.END_ELEMENT && "storage".equals(parser.getName())) { done = true; } } return storage; } } private static BookmarkedURL getURLStorage(XmlPullParser parser) throws IOException, XmlPullParserException { String name = parser.getAttributeValue("", "name"); String url = parser.getAttributeValue("", "url"); String rssString = parser.getAttributeValue("", "rss"); boolean rss = rssString != null && "true".equals(rssString); BookmarkedURL urlStore = new BookmarkedURL(url, name, rss); boolean done = false; while (!done) { XmlPullParser.Event eventType = parser.next(); if (eventType == XmlPullParser.Event.START_ELEMENT && "shared_bookmark".equals(parser.getName())) { urlStore.setShared(true); } else if (eventType == XmlPullParser.Event.END_ELEMENT && "url".equals(parser.getName())) { done = true; } } return urlStore; } private static BookmarkedConference getConferenceStorage(XmlPullParser parser) throws XmlPullParserException, IOException { String name = parser.getAttributeValue("", "name"); boolean autojoin = ParserUtils.getBooleanAttribute(parser, "autojoin", false); EntityBareJid jid = ParserUtils.getBareJidAttribute(parser); BookmarkedConference conf = new BookmarkedConference(jid); conf.setName(name); conf.setAutoJoin(autojoin); // Check for nickname boolean done = false; while (!done) { XmlPullParser.Event eventType = parser.next(); if (eventType == XmlPullParser.Event.START_ELEMENT && "nick".equals(parser.getName())) { String nickString = parser.nextText(); conf.setNickname(Resourcepart.from(nickString)); } else if (eventType == XmlPullParser.Event.START_ELEMENT && "password".equals(parser.getName())) { conf.setPassword(parser.nextText()); } else if (eventType == XmlPullParser.Event.START_ELEMENT && "shared_bookmark".equals(parser.getName())) { conf.setShared(true); } else if (eventType == XmlPullParser.Event.END_ELEMENT && "conference".equals(parser.getName())) { done = true; } } return conf; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy