X-Git-Url: http://secure.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/SQLQueryView.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/SQLQueryView.java index 0b14583..a438d7f 100644 --- a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/SQLQueryView.java +++ b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/SQLQueryView.java @@ -1,29 +1,15 @@ package com.quantum.view; 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.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.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.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; @@ -42,11 +28,31 @@ 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.Display; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.part.ViewPart; +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; + public class SQLQueryView extends ViewPart { private class ClearAction extends Action { @@ -87,7 +93,7 @@ public class SQLQueryView extends ViewPart { MultiSQLServer.getInstance().rollback(bookmarks[i].getConnection()); } } catch (SQLException e) { - ExceptionDisplayDialog.openError(getSite().getShell(), null, null, e); + SQLExceptionDialog.openException(getSite().getShell(), bookmarks[i], e); } catch (NotConnectedException e) { ExceptionDisplayDialog.openError(getSite().getShell(), null, null, e); } @@ -110,7 +116,7 @@ public class SQLQueryView extends ViewPart { MultiSQLServer.getInstance().commit(bookmarks[i].getConnection()); } } catch (SQLException e) { - ExceptionDisplayDialog.openError(getSite().getShell(), null, null, e); + SQLExceptionDialog.openException(getSite().getShell(), bookmarks[i], e); } catch (NotConnectedException e) { ExceptionDisplayDialog.openError(getSite().getShell(), null, null, e); } @@ -158,25 +164,32 @@ public class SQLQueryView extends ViewPart { private ImportQueryAction importQueryAction; private ExportQueryAction exportQueryAction; private StyledText widget; - 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(); - IPropertyChangeListener listener = new IPropertyChangeListener() { + this.listener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { setFont(); } }; QuantumPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(listener); } + + 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"); @@ -214,9 +227,6 @@ public class SQLQueryView extends ViewPart { this.executeAction); } - /** - * @param widget2 - */ private void setFont() { FontData font = PreferenceConverter.getFontData( QuantumPlugin.getDefault().getPreferenceStore(), @@ -228,12 +238,12 @@ public class SQLQueryView extends ViewPart { /** * @param parent */ - private void initializeColours(org.eclipse.swt.widgets.Composite parent) { - 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); + private void initializeColours(Composite parent) { + IPreferenceStore store = QuantumPlugin.getDefault().getPreferenceStore(); + + parent.setBackground(this.colorManager.getColor( + PreferenceConverter.getColor(store, PluginPreferences.BACKGROUND_COLOR))); + this.textUpdater.initializeColours(); } private void initActions() { @@ -263,16 +273,27 @@ public class SQLQueryView extends ViewPart { actionBars.getMenuManager().add(this.commitAction); } + /** + * Returns the query to be executed. The query is either 1) the + * text currently highlighted/selected in the editor or 2) all of + * the text in the editor. + * @return query string to be executed + */ public String getQuery() { - return widget.getText(); + String query; + + if (widget.getSelectionText().length() > 0) + query = widget.getSelectionText(); + else + query = widget.getText(); + + return query; } public void setQuery(String text) { widget.setText(text); } - SyntaxHighlighter textUpdater = new SyntaxHighlighter(); - private class UpdateRequest { public UpdateRequest(String text, int start, int length) { this.text = text; @@ -285,21 +306,42 @@ public class SQLQueryView extends ViewPart { } 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 { @@ -315,12 +357,12 @@ public class SQLQueryView extends ViewPart { //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(); @@ -349,25 +391,23 @@ public class SQLQueryView extends ViewPart { } 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); }