# This patch file was generated by NetBeans IDE
# Following Index: paths are relative to: /home/kos/spark/src
# This patch can be applied using context Tools: Patch action on respective folder.
# It uses platform neutral UTF-8 encoding and \n newlines.
# Above lines and this line are ignored by the patching process.
Index: java/org/jivesoftware/spark/ui/conferences/BookmarksListener.java
--- java/org/jivesoftware/spark/ui/conferences/BookmarksListener.java Locally New
+++ java/org/jivesoftware/spark/ui/conferences/BookmarksListener.java Locally New
@@ -0,0 +1,31 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.jivesoftware.spark.ui.conferences;
+
+/**
+ *
+ * @author kos
+ */
+public interface BookmarksListener {
+
+ /**
+ * Invoked by BookmarksUI
when a new Bookmark has been added.
+ *
+ * @param roomJID - the Bookmark
JID that has been added.
+ * @see BookmarkUI
+ */
+ void bookmarkAdded(String roomJID);
+
+ /**
+ * Invoked by BookmarksUI
when a new Bookmark has been removed.
+ *
+ * @param roomJID - the Bookmark
JID that has been removed.
+ * @see BookmarkUI
+ */
+ void bookmarkRemoved(String roomJID);
+
+
+}
Index: java/org/jivesoftware/spark/ui/conferences/BookmarksUI.java
--- java/org/jivesoftware/spark/ui/conferences/BookmarksUI.java Base (BASE)
+++ java/org/jivesoftware/spark/ui/conferences/BookmarksUI.java Locally Modified (Based On LOCAL)
@@ -26,6 +26,7 @@
import org.jivesoftware.spark.component.RolloverButton;
import org.jivesoftware.spark.component.Tree;
import org.jivesoftware.spark.plugin.ContextMenuListener;
+import org.jivesoftware.spark.ui.conferences.BookmarksListener;
import org.jivesoftware.spark.util.GraphicUtils;
import org.jivesoftware.spark.util.ResourceUtils;
import org.jivesoftware.spark.util.SwingTimerTask;
@@ -79,6 +80,11 @@
private List listeners = new ArrayList();
+ /**
+ * Bookmarks listeners
+ */
+ private List bookmarkListeners = new ArrayList();
+
private BookmarkManager manager;
/**
@@ -362,6 +368,7 @@
public void addBookmark(String roomName, String roomJID, boolean autoJoin) {
try {
manager.addBookmarkedConference(roomName, roomJID, autoJoin, null, null);
+ fireBookmarksAdded(roomJID); //fire bookmark event
}
catch (XMPPException e) {
Log.error(e);
@@ -371,6 +378,7 @@
public void removeBookmark(String roomJID) {
try {
manager.removeBookmarkedConference(roomJID);
+ fireBookmarksRemoved(roomJID); // fire bookmark remove event
}
catch (XMPPException e) {
Log.error(e);
@@ -587,6 +595,36 @@
}
/**
+ * Adds a new BookmarksListener.
+ *
+ * @param listener the bookmarkListener.
+ */
+ public void addBookmarksListener(BookmarksListener bookmarkListener) {
+ bookmarkListeners.add(bookmarkListener);
+ }
+
+ /**
+ * Removes a BookmarksListener.
+ *
+ * @param listener the bookmarkListener.
+ */
+ public void removeBookmarksListener(BookmarksListener bookmarkListener) {
+ bookmarkListeners.remove(bookmarkListener);
+ }
+
+ private void fireBookmarksAdded(String roomJID) {
+ for (BookmarksListener bookmarkListener : new ArrayList(bookmarkListeners)) {
+ bookmarkListener.bookmarkAdded(roomJID);
+ }
+ }
+
+ private void fireBookmarksRemoved(String roomJID) {
+ for (BookmarksListener bookmarkListener : new ArrayList(bookmarkListeners)) {
+ bookmarkListener.bookmarkRemoved(roomJID);
+ }
+ }
+
+ /**
* Returns a list of bookmarks.
* @return a Collection of bookmarks.
*/
Index: java/org/jivesoftware/sparkimpl/plugin/bookmarks/BookmarkPlugin.java
--- java/org/jivesoftware/sparkimpl/plugin/bookmarks/BookmarkPlugin.java Base (BASE)
+++ java/org/jivesoftware/sparkimpl/plugin/bookmarks/BookmarkPlugin.java Locally Modified (Based On LOCAL)
@@ -10,13 +10,10 @@
package org.jivesoftware.sparkimpl.plugin.bookmarks;
-import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smackx.PrivateDataManager;
import org.jivesoftware.smackx.bookmark.BookmarkedConference;
import org.jivesoftware.smackx.bookmark.BookmarkedURL;
-import org.jivesoftware.smackx.bookmark.Bookmarks;
import org.jivesoftware.spark.SparkManager;
import org.jivesoftware.spark.plugin.Plugin;
import org.jivesoftware.spark.ui.conferences.ConferenceUtils;
@@ -34,6 +31,10 @@
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JMenu;
+import org.jivesoftware.smackx.bookmark.BookmarkManager;
+import org.jivesoftware.spark.ui.conferences.BookmarksListener;
+import org.jivesoftware.spark.ui.conferences.BookmarksUI;
+import org.jivesoftware.spark.ui.conferences.ConferenceServices;
/**
* Allows for adding and removal of Bookmarks within Spark.
@@ -43,35 +44,86 @@
public void initialize() {
final SwingWorker bookmarkThreadWorker = new SwingWorker() {
public Object construct() {
- // Register own provider for simpler implementation.
- PrivateDataManager.addPrivateDataProvider("storage", "storage:bookmarks", new Bookmarks.Provider());
- PrivateDataManager manager = new PrivateDataManager(SparkManager.getConnection());
- Bookmarks bookmarks = null;
- try {
- bookmarks = (Bookmarks)manager.getPrivateData("storage", "storage:bookmarks");
+ return this;
}
- catch (XMPPException e) {
- Log.error(e);
+
+ /**
+ * Installing menu into spark menu and adding events to bookmarks
+ */
+ @Override
+ public void finished() {
+
+ final JMenu bookmarkMenu = new JMenu("Bookmarks");
+
+ createMenu(bookmarkMenu);
+
+ if (bookmarkMenu.getMenuComponentCount() > 0) {
+ int menuCount = SparkManager.getMainWindow().getMenu().getMenuCount();
+ SparkManager.getMainWindow().getMenu().add(bookmarkMenu, menuCount - 1);
}
- return bookmarks;
+ BookmarksUI bookmarksUi = ConferenceServices.getBookmarkedConferences();
+ if ( bookmarksUi != null ) {
+ bookmarksUi.addBookmarksListener(new BookmarksListener() {
+
+ public void bookmarkAdded(String roomJID) {
+ rescan(bookmarkMenu);
}
- public void finished() {
- final Bookmarks bookmarks = (Bookmarks)get();
+ public void bookmarkRemoved(String roomJID) {
+ rescan(bookmarkMenu);
+ }
+ });
+ }
+ }
- final JMenu bookmarkMenu = new JMenu("Bookmarks");
+ /**
+ * Rescaning our bookmarks and remaking menu items
+ *
+ * @param Bookmark menu Jmenu
+ */
+ public void rescan(JMenu bookmarkMenu)
+ {
+ bookmarkMenu.removeAll(); // removing old menus
+ try {
+ setBookmarks(bookmarkMenu); // making new
+ } catch (XMPPException ex) {
+ Log.error(ex);
+ }
+ }
- if (bookmarks != null) {
- bookmarkMenu.setToolTipText(Res.getString("title.view.bookmarks"));
+ /**
+ * Updating statusbar and generating menu items
+ *
+ * @param Bookmark menu Jmenu
+ */
+ public void createMenu(JMenu bookmarkMenu)
+ {
SparkManager.getWorkspace().getStatusBar().invalidate();
SparkManager.getWorkspace().getStatusBar().validate();
SparkManager.getWorkspace().getStatusBar().repaint();
+ try {
+ setBookmarks(bookmarkMenu);
+ } catch (XMPPException ex) {
+ Log.error(ex);
+ }
+ }
- Collection bookmarkedConferences = bookmarks.getBookmarkedConferences();
- final Collection bookmarkedLinks = bookmarks.getBookmarkedURLS();
+ /**
+ * loading menu items and setting bookmarks listeners
+ *
+ * @param Bookmark menu Jmenu
+ */
+ public void setBookmarks(JMenu bookmarkMenu ) throws XMPPException
+ {
+ BookmarkManager manager = BookmarkManager.getBookmarkManager(SparkManager.getConnection());
+ if (manager != null) {
+
+ Collection bookmarkedConferences = manager.getBookmarkedConferences();
+ final Collection bookmarkedLinks = manager.getBookmarkedURLs();
+
for (Object bookmarkedLink : bookmarkedLinks) {
final BookmarkedURL link = (BookmarkedURL) bookmarkedLink;
@@ -112,12 +164,7 @@
bookmarkMenu.add(conferenceAction);
}
}
-
- if (bookmarkMenu.getMenuComponentCount() > 0) {
- int menuCount = SparkManager.getMainWindow().getMenu().getMenuCount();
- SparkManager.getMainWindow().getMenu().add(bookmarkMenu, menuCount - 1);
}
- }
};
bookmarkThreadWorker.start();