X-Git-Url: http://git.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 f8c4418..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,142 +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.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.graphics.Image; +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; /** - * @author panic + * Executes a query from the QueryView * - * Executes a query from the QueryView + * @author panic */ -public class ExecuteAction extends BaseSQLAction implements IViewActionDelegate { - SQLQueryView view; - boolean flag = false; - 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"); - } - - public void init(IViewPart view) { - this.view = (SQLQueryView) view; + setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.PLAY)); + setText(Messages.getString("sqlqueryview.executeQuery")); + setToolTipText(Messages.getString("sqlqueryview.executeQuery")); + 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; - } - Connection con = getConnection(); - view.setStatus(execute1); - MultiSQLServer server = MultiSQLServer.getInstance(); - view.setStatus(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); + + + 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; } - 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 - for (int i = 0; i < queries.size(); i++) { - if (flag) { - view.setStatus(execute1); - } else { - view.setStatus(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(); - } - } - } - flag = !flag; - view.setProgress(i + 1, queries.size()); + super.execute(bookmark, connection); + + if (changed) { + MessageDialog.openInformation(getShell(), + Messages.getString(ExecuteAction.class, "autocommitTitle"), + Messages.getString(ExecuteAction.class, "autocommitMessage", + new Object[] { bookmark.getName() })); } - Image statImage = QuantumPlugin.getImage((errorCount > 0) ? "stop.gif" : "success.gif"); //$NON-NLS-1$ //$NON-NLS-2$ - view.setStatus(statImage, 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$ - - view.setProgress(0, 1); - } - - public void selectionChanged(IAction action, ISelection selection) { } - protected Bookmark getBookmark() { - BookmarkNode current = BookmarkView.getInstance().getCurrentBookmark(); - return current.getBookmark(); + /** + * @return + */ + protected List getQueries() { + getStatusLineManager().setMessage( + Messages.getString(ExecuteAction.class, "parsing")); //$NON-NLS-1$ + Vector queries = SQLParser.parse(view.getQuery()); + return queries; } - /* (non-Javadoc) - * @see com.quantum.actions.BaseSQLAction#getShell() + /** + * @return */ + protected IStatusLineManager getStatusLineManager() { + return this.view.getViewSite().getActionBars().getStatusLineManager(); + } + protected Shell getShell() { return this.view.getViewSite().getShell(); } + + public void dispose() { + } + + 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); + } + } }