X-Git-Url: http://secure.phpeclipse.com

diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExecuteAction.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExecuteAction.java
index 295cfa3..d0044f5 100644
--- a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExecuteAction.java
+++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExecuteAction.java
@@ -1,161 +1,130 @@
 package com.quantum.actions;
 
+import java.io.IOException;
 import java.sql.Connection;
 import java.sql.SQLException;
+import java.util.List;
 import java.util.Vector;
 
+import com.quantum.ImageStore;
 import com.quantum.Messages;
-import com.quantum.QuantumPlugin;
 import com.quantum.model.Bookmark;
-import com.quantum.sql.MultiSQLServer;
+import com.quantum.model.BookmarkCollection;
 import com.quantum.sql.SQLParser;
-import com.quantum.sql.SQLResults;
-import com.quantum.view.LogProxy;
 import com.quantum.view.SQLQueryView;
-import com.quantum.view.bookmark.BookmarkNode;
-import com.quantum.view.bookmark.BookmarkView;
-import com.quantum.view.tableview.DefaultSizes;
-import com.quantum.view.tableview.TableView;
 
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.action.IAction;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IMenuCreator;
 import org.eclipse.jface.action.IStatusLineManager;
 import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
 
 /**
  * Executes a query from the QueryView
  *
  * @author panic
  */
-public class ExecuteAction extends BaseSQLAction implements IViewActionDelegate {
-	SQLQueryView view;
-	String execute1 = Messages.getString("ExecuteAction.Executing_Query3"); //$NON-NLS-1$
-	String execute2 = Messages.getString("ExecuteAction.Executing_Query2"); //$NON-NLS-1$
-    
-	public ExecuteAction() {
+public class ExecuteAction extends BaseExecuteAction implements IMenuCreator {
+	private SQLQueryView view;
+	
+	public ExecuteAction(SQLQueryView view) {
+		this.view = view;
 		setActionDefinitionId("com.quantum.actions.ExecuteAction");
-		setImageDescriptor(QuantumPlugin.getImageDescriptor("play.gif"));
+		setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.PLAY));
 		setText(Messages.getString("sqlqueryview.executeQuery"));
 		setToolTipText(Messages.getString("sqlqueryview.executeQuery"));
-	}
-    
-	public void init(IViewPart view) {
-		this.view = (SQLQueryView) view;
+		setMenuCreator(this);
 	}
 
-	public void run(IAction action) {
-		run();
-	}
-    
-	public void run() {
-		BookmarkNode current = BookmarkView.getInstance().getCurrentBookmark();
-		if (current == null)
-		{
-			 MessageDialog.openInformation(
-			   view.getSite().getShell(),"Sorry","Please select a bookmark to use as connection.");
-			 return;
-		}		   
-		getStatusLineManager().setErrorMessage(null);
-		Connection con = getConnection();
-		getStatusLineManager().setMessage(execute1);
-		MultiSQLServer server = MultiSQLServer.getInstance();
-		getStatusLineManager().setMessage(Messages.getString("ExecuteAction.Parsing_sql_script3")); //$NON-NLS-1$
-		Vector queries = new Vector();
-		String viewQuery = view.getQuery();
-		// We parse the executable units to send to the JDBC driver
-		queries = SQLParser.parse(viewQuery);
-		for (int i = 0; i < queries.size(); i++) {
-			String query = (String) queries.elementAt(i);
-			System.out.println(query);
-		}
-		int resultCount = 0;
-		int resultUpdateCount = 0;
-		int errorCount = 0;
-		int resultsDisplayed = 0;
-		double startTime = 0.0; // stores the time when query is started
-		double queryDuration= 0.0; // stores query's execution time
-		
-		IProgressMonitor progressBar = getStatusLineManager().getProgressMonitor();
-		progressBar.beginTask("queries", queries.size());
-		for (int i = 0; i < queries.size(); i++) {
-			if (i % 2 == 0) {
-				getStatusLineManager().setMessage(execute1);
-			} else {
-				getStatusLineManager().setMessage(execute2);
-			}
-		   
-		   String query = (String) queries.elementAt(i);
-		   System.out.println(">" + query + "<"); //$NON-NLS-1$ //$NON-NLS-2$
-		   if (con != null && !query.equals("")) { //$NON-NLS-1$
 	
-			SQLResults results;
-			try {
-				startTime = System.currentTimeMillis(); // Start the measure of execution time
-				results = server.execute(con, query, 1, DefaultSizes.PAGE_SIZE, DefaultSizes.MAX_COLUMN_SIZE);
-				queryDuration = (System.currentTimeMillis() - startTime)/1000; // calculate the execution time (in seconds)				 
-				current.getBookmark().addQuery(query);
-			} catch (SQLException e) {
-				 errorCount++;
-				LogProxy log = LogProxy.getInstance();
-				log.addText(
-					LogProxy.ERROR,
-					"Error Executing: " + query + ":" + e.toString(), e); //$NON-NLS-1$ //$NON-NLS-2$
-				MessageDialog.openConfirm(view.getSite().getShell(), "Database returned error", e.getLocalizedMessage());  //$NON-NLS-1$ 
-				continue;
-			}
-			   resultCount++;
-			   if (results.isResultSet()) {
-				 TableView.getInstance().loadQuery(current.getBookmark(), results);
-				 resultsDisplayed++;
-			   } else {
-				 int count = results.getUpdateCount();
-				 if (count > 0) {
-					resultUpdateCount += results.getUpdateCount();
-				 }
-			   }
-		    }
-System.out.println(getStatusLineManager().getProgressMonitor() == null ? "not found" : "found!");
-			progressBar.worked(i);
-//		    view.setProgress(i + 1, queries.size());
+	
+	protected void execute(Bookmark bookmark, Connection connection) 
+			throws IOException, CoreException, SQLException {
+		
+		boolean autoCommitPreference = this.view.isAutoCommitPreference();
+		boolean changed = false;
+		if (connection.getAutoCommit() != autoCommitPreference) {
+			connection.setAutoCommit(autoCommitPreference);
+			changed = true;
 		}
-		progressBar.done();
-		String message = Messages.getString("ExecuteAction.Done") + "(" + //$NON-NLS-1$ //$NON-NLS-2$
-						resultCount + Messages.getString("ExecuteAction.QueriesExecuted") +  //$NON-NLS-1$
-						resultUpdateCount + Messages.getString("ExecuteAction.RowsUpdated") +  //$NON-NLS-1$
-						resultsDisplayed + Messages.getString("ExecuteAction.ResultsDisplayed") +  //$NON-NLS-1$
-						errorCount + Messages.getString("ExecuteAction.Errors") +  //$NON-NLS-1$
-						queryDuration  + Messages.getString("ExecutAction.TimeExec") + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-		if (errorCount > 0) {
-			getStatusLineManager().setErrorMessage(
-					QuantumPlugin.getImage("stop.gif"), message);
-		} else {
-			getStatusLineManager().setMessage(
-					QuantumPlugin.getImage("success.gif"), message);
+		
+		super.execute(bookmark, connection);
+		
+		if (changed) {
+			MessageDialog.openInformation(getShell(), 
+					Messages.getString(ExecuteAction.class, "autocommitTitle"), 
+					Messages.getString(ExecuteAction.class, "autocommitMessage", 
+							new Object[] { bookmark.getName() }));
 		}
 	}
+	/**
+	 * @return
+	 */
+	protected List getQueries() {
+		getStatusLineManager().setMessage(
+				Messages.getString(ExecuteAction.class, "parsing")); //$NON-NLS-1$
+		Vector queries = SQLParser.parse(view.getQuery());
+		return queries;
+	}
 
 	/**
 	 * @return
 	 */
-	private IStatusLineManager getStatusLineManager() {
+	protected IStatusLineManager getStatusLineManager() {
 		return this.view.getViewSite().getActionBars().getStatusLineManager();
 	}
 
-	public void selectionChanged(IAction action, ISelection selection) {
+	protected Shell getShell() {
+		return this.view.getViewSite().getShell();
 	}
-	protected Bookmark getBookmark() {
-		BookmarkNode current = BookmarkView.getInstance().getCurrentBookmark();
-		return current.getBookmark();
+
+	public void dispose() {
 	}
 
-	/* (non-Javadoc)
-	 * @see com.quantum.actions.BaseSQLAction#getShell()
-	 */
-	protected Shell getShell() {
-		return this.view.getViewSite().getShell();
+	public Menu getMenu(Control parent) {
+		Menu menu = new Menu(parent);
+		/**
+		 * Add listener to repopulate the menu each time
+		 * it is shown because the list of bookmarks may have changed.
+		 */
+		menu.addMenuListener(new MenuAdapter() {
+			public void menuShown(MenuEvent e) {
+				Menu menu = (Menu)e.widget;
+				MenuItem[] items = menu.getItems();
+				for (int i=0; i < items.length; i++) {
+					items[i].dispose();
+				}
+				fillMenu(menu);
+			}
+		});
+		return menu;
+	}
+
+	public Menu getMenu(Menu parent) {
+		// never called...
+		return null;
+	}
+
+	protected void fillMenu(Menu menu) {
+		Bookmark[] bookmarks = BookmarkCollection.getInstance().getBookmarks();
+		for (int i = 0, length = bookmarks == null ? 0 : bookmarks.length; i < length; i++) {
+			final Bookmark bookmark = bookmarks[i];
+			Action action = new Action() {
+				public void run() {
+					ExecuteAction.this.execute(bookmark);
+				}
+			};
+			action.setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.BOOKMARK));
+			action.setText(bookmark.getName());
+			ActionContributionItem item = new ActionContributionItem(action);
+			item.fill(menu, -1);
+		}
 	}
 }