newest quantum CVS sources
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / view / SQLQueryView.java
index efdac83..0b14583 100644 (file)
@@ -1,51 +1,57 @@
 package com.quantum.view;
 
-import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.LinkedList;
 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.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.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"));
                }
 
@@ -57,79 +63,119 @@ 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) {
+                       ExceptionDisplayDialog.openError(getSite().getShell(), null, null, 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) {
+                       ExceptionDisplayDialog.openError(getSite().getShell(), null, null, 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;
        
        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
+               IPropertyChangeListener listener = new IPropertyChangeListener() {
+                       public void propertyChange(PropertyChangeEvent event) {
+                               setFont();
                        }
-               }
-               
-               updateAutoCommitState(bookmark, con);
-
-               widget.setFocus();
-
-       }
-       /**
-        * @return
-        */
-       private Bookmark getBookmark() {
-               if (BookmarkView.getInstance() != null ) {
-                       BookmarkNode node = BookmarkView.getInstance().getCurrentBookmark();
-                       return node == null ? null : node.getBookmark();
-               } else {
-                       return null;
-               }
+               };
+               QuantumPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(listener);
        }
        public static SQLQueryView getInstance() {
                return (SQLQueryView) QuantumPlugin.getDefault().getView("com.quantum.view.sqlqueryview");
@@ -139,97 +185,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();
-                }
-                       }
-               });
-               
-               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);
@@ -240,64 +207,41 @@ 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);
        }
 
        /**
-        * 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));
                }
        }
+       /**
+        * @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 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,8 +253,15 @@ 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);
+}
 
        public String getQuery() {
                return widget.getText();
@@ -320,32 +271,6 @@ public class SQLQueryView extends ViewPart {
                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 {
@@ -413,8 +338,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;
                                                                        }
                                                                }
@@ -495,4 +420,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;
+       }
 }