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 efdac83..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,51 +1,63 @@ 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 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.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.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 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")); } @@ -57,80 +69,127 @@ public class SQLQueryView extends ViewPart { 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() { - 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); + 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() { + 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"); @@ -139,97 +198,18 @@ public class SQLQueryView extends ViewPart { 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(); - } - } - }); + layout.marginHeight = 0; + layout.marginWidth = 0; + parent.setLayout(layout); + parent.setLayoutData(new GridData(GridData.FILL_BOTH)); - 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(); - } - } - }); + widget = new StyledText(parent, SWT.H_SCROLL | SWT.V_SCROLL); - 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) { - } - - 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); @@ -240,64 +220,38 @@ public class SQLQueryView extends ViewPart { 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); } + 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)); + } + } /** - * Sets the state of the "Commit", "Rollback" and "autoCommit" buttons - * to reflect the situation in the connection + * @param parent */ - 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 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() { - executeAction = new ExecuteAction(); - executeAction.init(this); - 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(); @@ -309,45 +263,37 @@ public class SQLQueryView extends ViewPart { 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); +} + + /** + * 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); } - 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; @@ -360,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 { @@ -390,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(); @@ -413,8 +380,8 @@ public class SQLQueryView extends ViewPart { 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; } } @@ -424,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); } @@ -495,4 +460,13 @@ public class SQLQueryView extends ViewPart { widget.selectAll(); } }; + + public void setFocus() { + } + public boolean isAutoCommitPreference() { + return this.autoCommitPreference; + } + public void setAutoCommitPreference(boolean autoCommitPreference) { + this.autoCommitPreference = autoCommitPreference; + } }