initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / actions / ConnectAction.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ConnectAction.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ConnectAction.java
new file mode 100644 (file)
index 0000000..05eeed9
--- /dev/null
@@ -0,0 +1,115 @@
+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