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;
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;
* @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();
}
}
/**
}
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);
}
}