package com.quantum.view;
-import java.sql.Connection;
import java.sql.SQLException;
+import java.util.ArrayList;
import java.util.LinkedList;
+import java.util.List;
import java.util.NoSuchElementException;
import java.util.Vector;
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.PluginPreferences;
+import com.quantum.QuantumPlugin;
+import com.quantum.actions.ExecuteAction;
+import com.quantum.actions.ExportQueryAction;
+import com.quantum.actions.ImportQueryAction;
+import com.quantum.editors.ColorManager;
+import com.quantum.model.Bookmark;
+import com.quantum.model.BookmarkCollection;
+import com.quantum.model.NotConnectedException;
+import com.quantum.sql.MultiSQLServer;
+import com.quantum.sql.SQLGrammar;
+import com.quantum.sql.parser.SQLLexx;
+import com.quantum.sql.parser.Token;
+import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
+import com.quantum.util.versioning.VersioningHelper;
+
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ExtendedModifyEvent;
import org.eclipse.swt.custom.ExtendedModifyListener;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.dnd.Clipboard;
+import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IActionBars;
-import org.eclipse.ui.IKeyBindingService;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.part.ViewPart;
-import com.quantum.Messages;
-import com.quantum.QuantumPlugin;
-import com.quantum.actions.ExecuteAction;
-import com.quantum.actions.ExportQueryAction;
-import com.quantum.actions.ImportQueryAction;
-import com.quantum.model.Bookmark;
-import com.quantum.model.NotConnectedException;
-import com.quantum.sql.MultiSQLServer;
-import com.quantum.sql.parser.SQLLexx;
-import com.quantum.sql.parser.Token;
-import com.quantum.util.versioning.VersioningHelper;
-import com.quantum.view.bookmark.BookmarkNode;
-import com.quantum.view.bookmark.BookmarkView;
-
public class SQLQueryView extends ViewPart {
private class ClearAction extends Action {
public ClearAction() {
- setImageDescriptor(QuantumPlugin.getImageDescriptor("clear.gif"));
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.CLEAR));
setToolTipText(Messages.getString("sqlqueryview.clear"));
}
private class AutoCommitPreferenceAction extends Action {
public AutoCommitPreferenceAction() {
- super(Messages.getString("SQLQueryView.AutoCommit"), SWT.CHECK);
+ super(Messages.getString("SQLQueryView.AutoCommit"));
setToolTipText(Messages.getString("SQLQueryView.AutoCommit"));
- setImageDescriptor(QuantumPlugin.getImageDescriptor("autocommit.gif"));
+ setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.AUTOCOMMIT));
+ }
+
+ public void run() {
+ setAutoCommitPreference(isChecked());
+ }
+ }
+
+ private class RollbackAction extends Action {
+ public RollbackAction() {
+ setText(Messages.getString("SQLQueryView.RollBack"));
+ setToolTipText(Messages.getString("SQLQueryView.RollBack"));
+ }
+
+ public void run() {
+ Bookmark[] bookmarks = BookmarkCollection.getInstance().getBookmarks();
+ for (int i = 0, length = bookmarks == null ? 0 : bookmarks.length; i < length; i++) {
+ try {
+ if (bookmarks[i].isConnected() && !bookmarks[i].getConnection().getAutoCommit()) {
+ MultiSQLServer.getInstance().rollback(bookmarks[i].getConnection());
+ }
+ } catch (SQLException e) {
+ SQLExceptionDialog.openException(getSite().getShell(), bookmarks[i], e);
+ } catch (NotConnectedException e) {
+ ExceptionDisplayDialog.openError(getSite().getShell(), null, null, e);
+ }
+ }
+ }
+ }
+
+
+ private class CommitAction extends Action {
+ public CommitAction() {
+ setText(Messages.getString("SQLQueryView.Commit"));
+ setToolTipText(Messages.getString("SQLQueryView.Commit"));
}
public void run() {
- Connection connection = null;
- try {
- // Get the connection
- connection = getBookmark().getConnection();
- // If connected (else will throw exception and jump out) switchs the state of the
- // autoCommit option of the JDBC driver
- MultiSQLServer.getInstance().setAutoCommit( connection, isChecked());
- } catch (NotConnectedException e) {
- //Doesn't matter
- }
- // Update the bookmark and the buttons
- updateAutoCommitState(getBookmark(), connection);
+ Bookmark[] bookmarks = BookmarkCollection.getInstance().getBookmarks();
+ for (int i = 0, length = bookmarks == null ? 0 : bookmarks.length; i < length; i++) {
+ try {
+ if (bookmarks[i].isConnected() && !bookmarks[i].getConnection().getAutoCommit()) {
+ MultiSQLServer.getInstance().commit(bookmarks[i].getConnection());
+ }
+ } catch (SQLException e) {
+ SQLExceptionDialog.openException(getSite().getShell(), bookmarks[i], e);
+ } catch (NotConnectedException e) {
+ ExceptionDisplayDialog.openError(getSite().getShell(), null, null, e);
+ }
+ }
}
}
+ public class LabelProviderImpl implements ILabelProvider {
+ public Image getImage(Object element) {
+ return ImageStore.getImage(ImageStore.BOOKMARK);
+ }
+ public String getText(Object element) {
+ if (element instanceof Bookmark) {
+ return ((Bookmark) element).getName();
+ } else {
+ return null;
+ }
+ }
+ public void addListener(ILabelProviderListener listener) {
+ }
+ public void dispose() {
+ }
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+ public void removeListener(ILabelProviderListener listener) {
+ }
+ }
+ public class ContentProviderImpl implements IStructuredContentProvider {
+ public Object[] getElements(Object inputElement) {
+ if (inputElement instanceof BookmarkCollection) {
+ return ((BookmarkCollection) inputElement).getBookmarks();
+ } else {
+ return null;
+ }
+ }
+ public void dispose() {
+ }
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+ }
+
private ExecuteAction executeAction;
private ImportQueryAction importQueryAction;
private ExportQueryAction exportQueryAction;
private StyledText widget;
- private ToolItem autoCommitItem;
- private ToolItem commitItem;
- private ToolItem rollbackItem;
- private Color STRING_LITERAL;
- private Color KEYWORD;
- private Color COMMENT;
- private Color NUMERIC;
- private Color DEFAULT;
private AutoCommitPreferenceAction autoCommitPreferenceAction;
+ private RollbackAction rollbackAction;
+ private CommitAction commitAction;
+ private boolean autoCommitPreference = true;
+ private IPropertyChangeListener listener;
+ private ColorManager colorManager = new ColorManager();
+
+ private SyntaxHighlighter textUpdater = new SyntaxHighlighter(this.colorManager);
+
public SQLQueryView() {
super();
- }
- public void setFocus() {
-
- String title = "Quantum SQL Query Editor";
- Bookmark bookmark = null;
- Connection con = null;
- if (BookmarkView.getInstance() != null ) {
- bookmark = getBookmark();
- }
- if (bookmark != null) {
- title = bookmark.getName() + " (" + title + ")";
- VersioningHelper.setPartName(this, title);
-// setPartName("fred");
- try {
- con = bookmark.getConnection();
- } catch (NotConnectedException e) {
- // Doesn't matter, "con" remains null
+ this.listener = new IPropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent event) {
+ setFont();
}
- }
-
- updateAutoCommitState(bookmark, con);
-
- widget.setFocus();
-
+ };
+ QuantumPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(listener);
}
- /**
- * @return
- */
- private Bookmark getBookmark() {
- if (BookmarkView.getInstance() != null ) {
- BookmarkNode node = BookmarkView.getInstance().getCurrentBookmark();
- return node == null ? null : node.getBookmark();
- } else {
- return null;
- }
+
+ public void dispose() {
+ QuantumPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this.listener);
+ this.colorManager.dispose();
+ super.dispose();
}
+
public static SQLQueryView getInstance() {
return (SQLQueryView) QuantumPlugin.getDefault().getView("com.quantum.view.sqlqueryview");
public void createPartControl(org.eclipse.swt.widgets.Composite parent) {
initActions();
- KEYWORD = new Color(parent.getShell().getDisplay(), 126, 0, 75);
- STRING_LITERAL = new Color(parent.getShell().getDisplay(), 0, 0, 255);
- COMMENT = new Color(parent.getShell().getDisplay(), 88, 148, 64);
- NUMERIC = new Color(parent.getShell().getDisplay(), 255, 0, 0);
- DEFAULT = new Color(parent.getShell().getDisplay(), 0, 0, 0);
- Composite main = new Composite(parent, SWT.NONE);
+ initializeColours(parent);
GridLayout layout = new GridLayout(1, false);
layout.horizontalSpacing = 0;
layout.verticalSpacing = 0;
- main.setLayout(layout);
- ToolBar toolbar = new ToolBar(main, SWT.HORIZONTAL);
-
- commitItem = new ToolItem(toolbar, SWT.PUSH);
- commitItem.setImage(QuantumPlugin.getImage("commit.gif")); //$NON-NLS-1$
- commitItem.setToolTipText(Messages.getString("SQLQueryView.Commit")); //$NON-NLS-1$
- commitItem.addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- public void widgetSelected(SelectionEvent event) {
- try {
- BookmarkNode node = BookmarkView.getInstance().getCurrentBookmark();
- if (node != null) MultiSQLServer.getInstance().commit(
- node.getBookmark().getConnection());
- } catch (NotConnectedException e) {
- e.printStackTrace();
- }
- }
- });
-
- rollbackItem = new ToolItem(toolbar, SWT.PUSH);
- rollbackItem.setImage(QuantumPlugin.getImage("rollback.gif")); //$NON-NLS-1$
- rollbackItem.setToolTipText(Messages.getString("SQLQueryView.RollBack")); //$NON-NLS-1$
- rollbackItem.addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent event) {
- }
- public void widgetSelected(SelectionEvent event) {
- try {
- BookmarkNode node = BookmarkView.getInstance().getCurrentBookmark();
- if (node != null) MultiSQLServer.getInstance().rollback(
- node.getBookmark().getConnection());
- } catch (NotConnectedException e) {
- e.printStackTrace();
- }
- }
- });
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ parent.setLayout(layout);
+ parent.setLayoutData(new GridData(GridData.FILL_BOTH));
- autoCommitItem = new ToolItem(toolbar, SWT.CHECK);
- autoCommitItem.setImage(QuantumPlugin.getImage("autocommit.gif")); //$NON-NLS-1$
- autoCommitItem.setToolTipText(Messages.getString("SQLQueryView.AutoCommit")); //$NON-NLS-1$
- autoCommitItem.addSelectionListener(new SelectionListener() {
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- public void widgetSelected(SelectionEvent event) {
- BookmarkNode node = BookmarkView.getInstance().getCurrentBookmark();
- if (node == null) return;
- Connection con = null;
- try {
- // Get the connection
- con = node.getBookmark().getConnection();
- // If connected (else will throw exception and jump out) switchs the state of the
- // autoCommit option of the JDBC driver
- MultiSQLServer.getInstance().setAutoCommit( con, autoCommitItem.getSelection());
- } catch (NotConnectedException e) {
- //Doesn't matter
- }
- // Update the bookmark and the buttons
- updateAutoCommitState(node.getBookmark(), con);
-
- }
- });
-
- // TODO: BCH -- this is causing some problems during start-up
- Bookmark bookmark = null;
- try {
- bookmark = getBookmark();
- } catch (NullPointerException e) {
- }
+ widget = new StyledText(parent, SWT.H_SCROLL | SWT.V_SCROLL);
- if (bookmark == null) {
- autoCommitItem.setSelection(true);
- } else {
- autoCommitItem.setSelection(bookmark.isAutoCommit());
- }
- if (autoCommitItem.getSelection()) {
- commitItem.setEnabled(false);
- rollbackItem.setEnabled(false);
- } else {
- commitItem.setEnabled(true);
- rollbackItem.setEnabled(true);
- }
- widget = new StyledText(main, SWT.H_SCROLL | SWT.V_SCROLL);
+ setFont();
IActionBars bars = this.getViewSite().getActionBars();
bars.setGlobalActionHandler(IWorkbenchActionConstants.CUT, cutAction);
widget.setEditable(true);
widget.addExtendedModifyListener(modifyListener);
- GridData gridData = new GridData();
- gridData.horizontalAlignment = GridData.FILL;
- gridData.verticalAlignment = GridData.FILL;
- gridData.grabExcessHorizontalSpace = true;
- gridData.grabExcessVerticalSpace = true;
- widget.setLayoutData(gridData);
+ widget.setLayoutData(new GridData(GridData.FILL_BOTH));
- IKeyBindingService keyBindingService = getSite().getKeyBindingService();
- // TODO: check the version numbers for this method
- keyBindingService.setScopes(new String[] {
- "org.eclipse.ui.globalScope",
- "com.quantum.view.sql"
- });
- keyBindingService.registerAction(this.executeAction);
+ VersioningHelper.registerActionToKeyBindingService(getSite(),
+ new String[] { "org.eclipse.ui.globalScope", "com.quantum.view.sql" },
+ this.executeAction);
}
/**
- * Sets the state of the "Commit", "Rollback" and "autoCommit" buttons
- * to reflect the situation in the connection
+ * @param widget2
*/
- protected void updateAutoCommitState(Bookmark bookmark, Connection connection) {
- boolean autoCommit = true;
- // Calculate the state of the autoCommit option
- if (connection != null)
- {
- // If we have a connection, the autoCommit state is that of the connection
- try {
- autoCommit = connection.getAutoCommit();
- } catch (SQLException e) {
- // Doesn't matter, we take default
- }
- } else {
- // if no connection, we try the autoCommit of the bookmark, or else the default
- if (bookmark != null) autoCommit = bookmark.isAutoCommit();
- }
- // Set the autoCommit state of the bookmark to the calculated
- if (bookmark != null) bookmark.setAutoCommit(autoCommit);
- // Set the state of the buttons to the correct autoCommit state
- autoCommitItem.setSelection(autoCommit);
- this.autoCommitPreferenceAction.setChecked(autoCommit);
- if (autoCommitItem.getSelection()) {
- commitItem.setEnabled(false);
- rollbackItem.setEnabled(false);
- } else {
- commitItem.setEnabled(true);
- rollbackItem.setEnabled(true);
+ private void setFont() {
+ FontData font = PreferenceConverter.getFontData(
+ QuantumPlugin.getDefault().getPreferenceStore(),
+ "quantum.font"); //$NON-NLS-1$
+ if (font != null && this.widget != null) {
+ this.widget.setFont(new Font(Display.getCurrent(), font));
}
}
- private void initActions() {
+ /**
+ * @param parent
+ */
+ private void initializeColours(Composite parent) {
+ IPreferenceStore store = QuantumPlugin.getDefault().getPreferenceStore();
- executeAction = new ExecuteAction();
- executeAction.init(this);
+ parent.setBackground(this.colorManager.getColor(
+ PreferenceConverter.getColor(store, PluginPreferences.BACKGROUND_COLOR)));
+ this.textUpdater.initializeColours();
+ }
+
+ private void initActions() {
IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
+
+ executeAction = new ExecuteAction(this);
toolBar.add(this.executeAction);
-// toolBar.add(this.importQueryAction);
-// toolBar.add(this.exportQueryAction);
-
toolBar.add(new ClearAction());
IActionBars actionBars = getViewSite().getActionBars();
actionBars.getMenuManager().add(this.exportQueryAction);
actionBars.getMenuManager().add(new Separator());
this.autoCommitPreferenceAction = new AutoCommitPreferenceAction();
+ this.autoCommitPreferenceAction.setChecked(this.autoCommitPreference);
actionBars.getMenuManager().add(this.autoCommitPreferenceAction);
- }
+
+ this.rollbackAction = new RollbackAction();
+ actionBars.getMenuManager().add(this.rollbackAction);
+
+ this.commitAction = new CommitAction();
+ actionBars.getMenuManager().add(this.commitAction);
+}
public String getQuery() {
return widget.getText();
widget.setText(text);
}
- private String[] keywords = {
- "ADD", "ALL", "ALTER", "AND", "ANY",
- "AS", "ASC", "AUTOINCREMENT", "AVA", "BETWEEN",
- "BINARY", "BIT", "BOOLEAN", "BY", "CREATE",
- "BYTE", "CHAR", "CHARACTER", "COLUMN", "CONSTRAINT",
- "COUNT", "COUNTER", "CURRENCY", "DATABASE", "DATE",
- "DATETIME", "DELETE", "DESC", "DISALLOW", "DISTINCT",
- "DISTINCTROW", "DOUBLE", "DROP", "EXISTS", "FROM",
- "FLOAT", "FLOAT4", "FLOAT8", "FOREIGN", "GENERAL",
- "GROUP", "GUID", "HAVING", "INNER", "INSERT",
- "IGNORE", "IMP", "IN", "INDEX", "INT",
- "INTEGER", "INTEGER1", "INTEGER2", "INTEGER4", "INTO",
- "IS", "JOIN", "KEY", "LEFT", "LEVEL",
- "LIKE", "LOGICAL", "LONG", "LONGBINARY", "LONGTEXT",
- "MAX", "MEMO", "MIN", "MOD", "MONEY",
- "NOT", "NULL", "NUMBER", "NUMERIC", "OLEOBJECT",
- "ON", "PIVOT", "OPTION", "PRIMARY", "ORDER",
- "OUTER", "OWNERACCESS", "PARAMETERS", "PERCENT", "REAL",
- "REFERENCES", "RIGHT", "SELECT", "SET", "SHORT",
- "SINGLE", "SMALLINT", "SOME", "STDEV", "STDEVP",
- "STRING", "SUM", "TABLE", "TABLEID", "TEXT",
- "TIME", "TIMESTAMP", "TOP", "TRANSFORM", "UNION",
- "UNIQUE", "UPDATE", "VALUE", "VALUES", "VAR",
- "VARBINARY", "VARCHAR", "VARP", "WHERE", "WITH",
- "YESNO" };
-
- SyntaxHighlighter textUpdater = new SyntaxHighlighter();
-
private class UpdateRequest {
public UpdateRequest(String text, int start, int length) {
this.text = text;
}
private class SyntaxHighlighter extends Thread {
+
+ private Color STRING_LITERAL;
+ private Color KEYWORD;
+ private Color COMMENT;
+ private Color NUMERIC;
+ private Color DEFAULT;
+
private boolean running = true;
private LinkedList requests = new LinkedList();
- public SyntaxHighlighter() {
+ private final ColorManager colorManager;
+ public SyntaxHighlighter(ColorManager colorManager) {
super();
+ this.colorManager = colorManager;
+
setPriority(Thread.MIN_PRIORITY);
start();
}
+ public void initializeColours() {
+ IPreferenceStore store = QuantumPlugin.getDefault().getPreferenceStore();
+
+ this.DEFAULT = this.colorManager.getColor(
+ PreferenceConverter.getColor(store, PluginPreferences.TEXT_COLOR));
+ this.KEYWORD = this.colorManager.getColor(
+ PreferenceConverter.getColor(store, PluginPreferences.KEYWORD_COLOR));
+ this.STRING_LITERAL = this.colorManager.getColor(
+ PreferenceConverter.getColor(store, PluginPreferences.STRING_COLOR));
+ this.COMMENT = this.colorManager.getColor(
+ PreferenceConverter.getColor(store, PluginPreferences.COMMENT_COLOR));
+ this.NUMERIC = this.colorManager.getColor(
+ PreferenceConverter.getColor(store, PluginPreferences.NUMERIC_COLOR));
+
+ }
public synchronized void updateText(String text, int start, int length) {
requests.add(new UpdateRequest(text, start, length));
notify();
}
- public synchronized void shutdown() {
- running = false;
- interrupt();
- }
public void run() {
while (running) {
try {
//int dirtyStart = request.start;
//int dirtyEnd = request.start + request.length;
StyleRange styleRange;
- Vector tokens = SQLLexx.parse(text);
- Vector styles = new Vector();
+ List tokens = SQLLexx.parse(text);
+ List styles = new ArrayList();
int min = Integer.MAX_VALUE;
int max = 0;
for (int i = 0; i < tokens.size(); i++) {
- Token t = (Token) tokens.elementAt(i);
+ Token t = (Token) tokens.get(i);
String value = t.getValue();
int start = t.getStart();
int length = t.getEnd() - t.getStart();
max = Math.max(max, start + length);
if (t.getType() == Token.IDENTIFIER) {
boolean keyword = false;
- for (int index = 0; index < keywords.length; index++) {
- if (value.equals(keywords[index])) {
+ for (int index = 0; index < SQLGrammar.KEYWORDS.length; index++) {
+ if (value.equals(SQLGrammar.KEYWORDS[index])) {
keyword = true;
}
}
} else {
styleRange.foreground = DEFAULT;
}
- styles.addElement(styleRange);
+ styles.add(styleRange);
} else if (t.getType() == Token.COMMENT) {
styleRange.foreground = COMMENT;
- styles.addElement(styleRange);
+ styles.add(styleRange);
} else if (t.getType() == Token.LITERAL) {
styleRange.foreground = STRING_LITERAL;
- styles.addElement(styleRange);
+ styles.add(styleRange);
} else if (t.getType() == Token.NUMERIC) {
styleRange.foreground = NUMERIC;
- styles.addElement(styleRange);
+ styles.add(styleRange);
} else {
- styles.addElement(styleRange);
+ styles.add(styleRange);
}
}
}
- StyleRange[] ranges = new StyleRange[styles.size()];
- for (int k = 0; k < ranges.length; k++) {
- ranges[k] = (StyleRange) styles.elementAt(k);
- }
+ StyleRange[] ranges =
+ (StyleRange[]) styles.toArray(new StyleRange[styles.size()]);
if (max >= 0 && ranges.length > 0) {
setStyles(ranges, min, max - min);
}
widget.selectAll();
}
};
+
+ public void setFocus() {
+ }
+ public boolean isAutoCommitPreference() {
+ return this.autoCommitPreference;
+ }
+ public void setAutoCommitPreference(boolean autoCommitPreference) {
+ this.autoCommitPreference = autoCommitPreference;
+ }
}