--- /dev/null
+package com.quantum.actions;
+
+import java.sql.Connection;
+import java.util.Iterator;
+
+import com.quantum.Messages;
+import com.quantum.QuantumPlugin;
+import com.quantum.model.Bookmark;
+import com.quantum.util.connection.ConnectionUtil;
+import com.quantum.view.bookmark.BookmarkNode;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.actions.SelectionListenerAction;
+
+public class ConnectAction extends SelectionListenerAction {
+ /**
+ * @param text
+ */
+ public ConnectAction(IViewPart view) {
+ super(Messages.getString(ConnectAction.class.getName() + ".text"));
+ this.view = view;
+ setImageDescriptor(
+ QuantumPlugin.getImageDescriptor("connect.gif")); //$NON-NLS-1$
+ }
+
+ private IViewPart view;
+ private ConnectionUtil connectionUtil = new ConnectionUtil();
+
+ /**
+ * @see IActionDelegate#run(IAction)
+ */
+ public void run(IAction action) {
+ run();
+ }
+
+ /**
+ * @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)
+ */
+ public void init(IViewPart view) {
+ this.view = view;
+ }
+
+ /**
+ * @see org.eclipse.jface.action.IAction#run()
+ */
+ public void run() {
+
+ int bookmarks = 0;
+ int errors = 0;
+ String lastBookmarkName = null;
+ for (Iterator i = getSelectedNonResources().iterator(); i.hasNext();) {
+ Bookmark bookmark = ((BookmarkNode) i.next()).getBookmark();
+ Connection connection = this.connectionUtil.connect(bookmark, getShell());
+ if (connection == null) {
+ errors++;
+ }
+ bookmarks++;
+ lastBookmarkName = bookmark.getName();
+ }
+
+ if (bookmarks == 1 && errors == 0) {
+ updateStatusLine(getMessage("singleSuccessMessage",
+ new Object[] {lastBookmarkName}));
+ } else if (bookmarks == 1 && errors == 1) {
+ updateStatusLine(getMessage("singleFailureMessage",
+ new Object[] {lastBookmarkName}));
+ } else if (bookmarks > 1 && errors == 0) {
+ updateStatusLine(getMessage("multiSuccessMessage",
+ new Object[] {String.valueOf(bookmarks)}));
+ } else if (bookmarks > 1 && errors > 0) {
+ updateStatusLine(getMessage("multiFailureMessage",
+ new Object[] {String.valueOf(bookmarks - errors),
+ String.valueOf(errors)}));
+ }
+ }
+
+ private String getMessage(String key, Object[] arguments) {
+ return Messages.getString(getClass().getName() + "." + key, arguments);
+ }
+
+ /**
+ * Updates the message shown in the status line.
+ *
+ * @param message the message to display
+ */
+ protected void updateStatusLine(String message) {
+ this.view.getViewSite().getActionBars().getStatusLineManager().setMessage(message);
+ }
+
+ protected Shell getShell() {
+ return this.view.getSite().getShell();
+ }
+
+ /**
+ *
+ */
+ protected boolean updateSelection(IStructuredSelection selection) {
+ boolean enabled = super.updateSelection(selection);
+ for (Iterator i = selection.iterator();
+ enabled && i.hasNext();
+ ) {
+ Object object = i.next();
+ if (object instanceof BookmarkNode) {
+ BookmarkNode node = (BookmarkNode) object;
+ enabled &= !node.getBookmark().isConnected();
+ } else {
+ enabled = false;
+ }
+ }
+ return enabled;
+ }
+}
\ No newline at end of file