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 d0044f5..26f869c 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 @@ -3,14 +3,17 @@ package com.quantum.actions; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; +import java.util.Arrays; 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.model.BookmarkCollection; -import com.quantum.sql.SQLParser; +import com.quantum.model.DisplayableComparator; +import com.quantum.sql.parser.SQLParser; import com.quantum.view.SQLQueryView; import org.eclipse.core.runtime.CoreException; @@ -18,6 +21,7 @@ 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.action.Separator; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.events.MenuAdapter; import org.eclipse.swt.events.MenuEvent; @@ -32,36 +36,60 @@ import org.eclipse.swt.widgets.Shell; * @author panic */ public class ExecuteAction extends BaseExecuteAction implements IMenuCreator { + +private static final String LAST_USED_BOOKMARK_PREFERENCE = ExecuteAction.class.getName() + ".bookmark"; private SQLQueryView view; public ExecuteAction(SQLQueryView view) { this.view = view; setActionDefinitionId("com.quantum.actions.ExecuteAction"); setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.PLAY)); - setText(Messages.getString("sqlqueryview.executeQuery")); - setToolTipText(Messages.getString("sqlqueryview.executeQuery")); + initTextAndToolTip(); setMenuCreator(this); } - - + /** + * + */ + private void initTextAndToolTip() { + Bookmark lastUsedBookmark = getLastUsedBookmark(); + if (lastUsedBookmark == null) { + setText(Messages.getString(ExecuteAction.class, "textNoBookmark")); + setToolTipText(Messages.getString(ExecuteAction.class, "textNoBookmark")); + } else { + Object[] parameters = new Object[] { lastUsedBookmark.getName() }; + setText(Messages.getString(ExecuteAction.class, "text", parameters)); + setToolTipText(Messages.getString(ExecuteAction.class, "text", parameters)); + } + } + + protected Bookmark getBookmark() { + Bookmark lastUsedBookmark = getLastUsedBookmark(); + return lastUsedBookmark == null ? super.getBookmark() : lastUsedBookmark; + } 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; - } - - super.execute(bookmark, connection); - - if (changed) { - MessageDialog.openInformation(getShell(), - Messages.getString(ExecuteAction.class, "autocommitTitle"), - Messages.getString(ExecuteAction.class, "autocommitMessage", - new Object[] { bookmark.getName() })); + try { + boolean autoCommitPreference = this.view.isAutoCommitPreference(); + boolean changed = false; + if (connection.getAutoCommit() != autoCommitPreference) { + connection.setAutoCommit(autoCommitPreference); + changed = true; + } + + super.execute(bookmark, connection); + + if (changed) { + MessageDialog.openInformation(getShell(), + Messages.getString(ExecuteAction.class, "autocommitTitle"), + Messages.getString(ExecuteAction.class, "autocommitMessage", + new Object[] { bookmark.getName() })); + } + } finally { + QuantumPlugin.getDefault().getPreferenceStore().setValue( + LAST_USED_BOOKMARK_PREFERENCE, bookmark.getName()); + initTextAndToolTip(); } } /** @@ -113,18 +141,58 @@ public class ExecuteAction extends BaseExecuteAction implements IMenuCreator { } protected void fillMenu(Menu menu) { + Bookmark lastUsedBookmark = getLastUsedBookmark(); + + if (lastUsedBookmark != null) { + createSubAction(menu, lastUsedBookmark); + Separator separator = new Separator(); + separator.fill(menu, -1); + } + Bookmark[] bookmarks = BookmarkCollection.getInstance().getBookmarks(); + Arrays.sort(bookmarks, new DisplayableComparator()); 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)); + createSubAction(menu, bookmark); + } + } + + + + /** + * @return + */ + private Bookmark getLastUsedBookmark() { + String lastUsedName = QuantumPlugin.getDefault().getPreferenceStore().getString( + LAST_USED_BOOKMARK_PREFERENCE); + Bookmark lastUsedBookmark = lastUsedName == null + ? null + : BookmarkCollection.getInstance().find(lastUsedName); + return lastUsedBookmark; + } + + + + /** + * @param menu + * @param bookmark + */ + private void createSubAction(Menu menu, final Bookmark bookmark) { + Action action = new Action() { + public void run() { + ExecuteAction.this.execute(bookmark); + } + }; + action.setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.BOOKMARK)); + + // The last '@' sign is treated specially, so if the + // bookmark name contains an '@', then add an extra one to the end + if (bookmark.getName().indexOf('@') >= 0) { + action.setText(bookmark.getName() + '@'); + } else { action.setText(bookmark.getName()); - ActionContributionItem item = new ActionContributionItem(action); - item.fill(menu, -1); } + ActionContributionItem item = new ActionContributionItem(action); + item.fill(menu, -1); } }