Quantum version 2.4.2
authorkhartlage <khartlage>
Tue, 17 Aug 2004 09:54:03 +0000 (09:54 +0000)
committerkhartlage <khartlage>
Tue, 17 Aug 2004 09:54:03 +0000 (09:54 +0000)
63 files changed:
archive/net.sourceforge.phpeclipse.quantum.sql/plugin.xml
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/IQuantumConstants.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/ImageStore.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/PluginPreferences.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/QuantumPlugin.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/QuantumResources.properties
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/BaseExecuteAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/DeleteAllRowsAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/DisconnectAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ExecuteAgainstAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/NewBookmarkAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/OpenQueryAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/RefreshBookmarkAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ViewTableAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/actions/ViewTableDetailsAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/editors/ColorManager.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/editors/SQLColorConstants.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/editors/SQLSourceViewerConfiguration.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/Bookmark.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/DataType.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/Database.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/Entity.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/model/EntityImpl.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/preferences/GlobalPreferences.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/preferences/SQLEditorPreferences.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/properties/DataTypesPropertyPage.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/properties/DatabaseInformationPropertyPage.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/ConnectionEstablisher.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/MultiSQLServer.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/SQLMetaDataResults.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/SQLStandardResultSetResults.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/parser/DropEntityStatement.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/ui/dialog/SQLExceptionDialog.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/util/connection/ConnectionUtil.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/util/sql/SQLStates.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/SQLQueryView.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/SchemaSelectionControl.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/ViewHelper.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/BookmarkContentProvider.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/BookmarkNode.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/BookmarkViewActionGroup.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/ColumnNode.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/DeleteAction.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/DropEntityAction.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/EntityNode.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/GroupNode.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/QueryNode.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/SchemaNode.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/TreeNode.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/subset/ObjectNode.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/ResultSetAction.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/widget/ComboViewer.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/widget/SimpleLabelProvider.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/BaseSQLPage.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/BookmarkConnectionWizardPage.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/BookmarkWizard.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/ExportBookmarkWizardPage.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/InsertRowPage.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/SortFilterPage.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/UpdateRowPage.java
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/sql/DropEntityWizardPage.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/sql/SQLStatementWizard.java [new file with mode: 0644]
archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/sql/ShowSQLStatementWizardPage.java [new file with mode: 0644]

index 710df0b..ef6a869 100644 (file)
@@ -3,8 +3,8 @@
 <plugin
    id="net.sourceforge.phpeclipse.quantum.sql"
    name="%quantum.name"
-   version="2.4.1"
-   provider-name="Tom Schneider, Julen Parra, BC Holmes, JSurfer.de"
+   version="2.4.2"
+   provider-name="The QuantumDB Development Team"
    class="com.quantum.QuantumPlugin">
 
    <runtime>
             id="com.quantum.properties.DatabaseInformationPropertyPage">
       </page>
       <page
+            objectClass="com.quantum.view.bookmark.TreeNode"
+            name="Data Types"
+            nameFilter="*"
+            class="com.quantum.properties.DataTypesPropertyPage"
+            id="com.quantum.properties.DataTypesPropertyPage">
+      </page>
+      <page
             objectClass="com.quantum.view.bookmark.BookmarkNode"
             name="Bookmark"
             nameFilter="*"
             A wizard that exports the list of database bookmarks to a Quantum bookmark file.
          </description>
       </wizard>
-      <wizard
+ <!--     <wizard
             name="Export to Torque Configuration File"
             icon="./icons/torque.gif"
             class="com.quantum.wizards.ExportTorqueWizard"
          <selection
                class="com.quantum.view.bookmark.BookmarkNode">
          </selection>
-      </wizard>
+      </wizard> -->
    </extension>
    <extension
          point="org.eclipse.help.toc">
index 444e96c..b9bd47d 100644 (file)
@@ -1,22 +1,11 @@
-/*
- * Created on 12-jul-2003
- *
- */
 package com.quantum;
 
 /**
- * @author panic
- *
  * Constants for general use in the quantum plug-in
+ *
+ * @author panic
  */
 public interface IQuantumConstants {
-       public static final String PLUGIN_ID ="com.quantum"; //$NON-NLS-1$
-       public static final String PREFIX = PLUGIN_ID+"."; //$NON-NLS-1$
-
-       //Constants for specifying Tables, Views and Sequences to the JDBC driver
-       public static final String Table = "TABLE";             
-       public static final String View = "VIEW";
-       public static final String Sequence = "SEQUENCE";
 
        public static final String autoCommitTrue = "Always True";
        public static final String autoCommitFalse = "Always False";
index 1a7495f..565de9f 100644 (file)
@@ -25,6 +25,7 @@ public class ImageStore {
        
        private static final String VERSION_2 = "_2x";
        private static final String GIF_FILE_EXTENSION = ".gif";
+       private static final String JPG_FILE_EXTENSION = ".jpg";
        
        public static final String ADD = "add";
        public static final String ADD_SCHEMA = "add_schema";
@@ -62,6 +63,8 @@ public class ImageStore {
        public static final String MISSINGSCHEMA = "missingschema";
        public static final String MISSINGTABLE = "table";
        public static final String NEXT = "next";
+       public static final String NEW_BOOKMARK = "new_bookmark";
+       public static final String NEW_BOOKMARK_WIZARD = "new_bookmark_wizard";
        public static final String OPEN_TABLE = "table";
        public static final String PASTE = "paste";
        public static final String PLAY = "play";
@@ -81,12 +84,13 @@ public class ImageStore {
        public static final String TABLE = "bigtable";
        public static final String TABLE_DETAILS = "table_details";
        public static final String TEMPLATE = "template";
-       public static final String TORQUE = "torque";
        public static final String TRIGGER = "trigger";
        public static final String USER = "user";
        public static final String VIEW = "view";
        public static final String WARNING = "warning";
        public static final String XML = "xml";
+       public static final String CHECKED = "checked";
+       public static final String UNCHECKED = "unchecked";
        
        public static ImageDescriptor getImageDescriptor(String imageName) {
                return getImageDescriptor(imageName, QuantumPlugin.getDefault());
@@ -104,39 +108,51 @@ public class ImageStore {
        public static Image getImage(String imageName, AbstractUIPlugin plugin) {
                ImageRegistry registry = plugin.getImageRegistry();
                String key = stripSuffix(imageName);
-               Image image = registry.get(getVersionAppropriateImage(key));
+               Image image = registry.get(getVersionAppropriateImage(key, plugin));
                return image;
        }
 
        public static ImageDescriptor getImageDescriptor(String imageName, AbstractUIPlugin plugin) {
                ImageRegistry registry = plugin.getImageRegistry();
                String key = stripSuffix(imageName);
-               key = getVersionAppropriateImage(key);
+               key = getVersionAppropriateImage(key, plugin);
 
                if (VersioningHelper.isEclipse21OrHigher()) {
                        return VersioningHelper.getDescriptor(registry, key);
                } else {
-                       return (ImageDescriptor) imageDescriptorMap.get(key);
+                       return (ImageDescriptor) getImageDescriptorMap(plugin).get(key);
                }
        }
+       
+       private static Map getImageDescriptorMap(AbstractUIPlugin plugin) {
+               String key = plugin.getClass().getName();
+               if (!imageDescriptorMap.containsKey(key)) {
+                       imageDescriptorMap.put(key, new HashMap());
+               }
+               return (Map) imageDescriptorMap.get(key);
+       }
 
        /**
         * @param imageName
         * @return
         */
        private static String stripSuffix(String imageName) {
-               return imageName.endsWith(GIF_FILE_EXTENSION) 
-                       ? imageName.substring(0, imageName.length() - 4)
-                       : imageName;
+               if (imageName.endsWith(GIF_FILE_EXTENSION)) {
+                       return imageName.substring(0, imageName.length() - 4);
+               }else if (imageName.endsWith(JPG_FILE_EXTENSION)) {
+                               return imageName.substring(0, imageName.length() - 4);
+               } else {
+                       return imageName;
+               }
        }
 
        /**
         * @param imageName
         * @return
         */
-       private static String getVersionAppropriateImage(String imageName) {
+       private static String getVersionAppropriateImage(String imageName, AbstractUIPlugin plugin) {
                String version2Key = imageName + VERSION_2;
-               return !VersioningHelper.isEclipse30() && imageDescriptorMap.containsKey(version2Key) 
+               return !VersioningHelper.isEclipse30() && getImageDescriptorMap(plugin).containsKey(version2Key) 
                        ? version2Key : imageName;
        }
 
@@ -144,94 +160,98 @@ public class ImageStore {
         * @param registry
         * @param url
         */
-       static void initialize(ImageRegistry registry, URL url) {
+       static void initialize(AbstractUIPlugin plugin, ImageRegistry registry, URL url) {
                
-               addImage(registry, url, ADD);
-               addImage(registry, url, BOOKMARK);
-               addImage(registry, url, DISCONNECT);
-               addImage(registry, url, ADD);
-               addImage(registry, url, ADD_SCHEMA);
-               addImage(registry, url, APPEND);
-               addImage(registry, url, AUTOCOMMIT);
-               addImage(registry, url, BOOKMARK);
-               addImage(registry, url, BOOKMARKFILE);
-               addImage(registry, url, CLASS);
-               addImage(registry, url, CLEAR);
-               addImage(registry, url, CLOSE);
-               addImage(registry, url, CLOSE_DISABLED);
-               addImage(registry, url, CLOSE_ALL);
-               addImage(registry, url, CLOSE_ALL_DISABLED);
-               addImage(registry, url, COLUMN);
-               addImage(registry, url, CONNECT);
-               addImage(registry, url, CONNECTED);
-               addImage(registry, url, COPY);
-               addImage(registry, url, CUT);
-               addImage(registry, url, DELETE);
-               addImage(registry, url, DISCONNECT);
-               addImage(registry, url, DRIVER);
-               addImage(registry, url, EDIT);
-               addImage(registry, url, ENTITYGROUP);
-               addImage(registry, url, EXPORT);
-               addImage(registry, url, EXTERNAL_JAR);
-               addImage(registry, url, FILTER);
-               addImage(registry, url, FOREIGNKEY);
-               addImage(registry, url, FULLDATA);
-               addImage(registry, url, GRID);
-               addImage(registry, url, GROUP);
-               addImage(registry, url, IMPORT);
-               addImage(registry, url, KEY);
-               addImage(registry, url, KEYCOLUMN);
-               addImage(registry, url, LOG);
-               addImage(registry, url, MISSINGSCHEMA);
-               addImage(registry, url, MISSINGTABLE);
-               addImage(registry, url, NEXT);
-               addImage(registry, url, PASTE);
-               addImage(registry, url, PLAY);
-               addImage(registry, url, PREVIOUS);
-               addImage(registry, url, QMODEL);
-               addImage(registry, url, QUANTUM);
-               addImage(registry, url, REFRESH);
-               addImage(registry, url, ROLLBACK);
-               addImage(registry, url, SAMPLE);
-               addImage(registry, url, SCHEMA);
-               addImage(registry, url, SCRIPT);
-               addImage(registry, url, SEQUENCE);
-               addImage(registry, url, STATEMENT);
-               addImage(registry, url, STOP);
-               addImage(registry, url, SUBSET);
-               addImage(registry, url, SUCCESS);
-               addImage(registry, url, TABLE);
-               addImage(registry, url, TABLE_DETAILS);
-               addImage(registry, url, TEMPLATE);
-               addImage(registry, url, TORQUE);
-               addImage(registry, url, TRIGGER);
-               addImage(registry, url, USER);
-               addImage(registry, url, VIEW);
-               addImage(registry, url, WARNING);
-               addImage(registry, url, XML);
+               addImage(plugin, registry, url, ADD);
+               addImage(plugin, registry, url, BOOKMARK);
+               addImage(plugin, registry, url, DISCONNECT);
+               addImage(plugin, registry, url, ADD);
+               addImage(plugin, registry, url, ADD_SCHEMA);
+               addImage(plugin, registry, url, APPEND);
+               addImage(plugin, registry, url, AUTOCOMMIT);
+               addImage(plugin, registry, url, BOOKMARK);
+               addImage(plugin, registry, url, BOOKMARKFILE);
+               addImage(plugin, registry, url, CLASS);
+               addImage(plugin, registry, url, CLEAR);
+               addImage(plugin, registry, url, CLOSE);
+               addImage(plugin, registry, url, CLOSE_DISABLED);
+               addImage(plugin, registry, url, CLOSE_ALL);
+               addImage(plugin, registry, url, CLOSE_ALL_DISABLED);
+               addImage(plugin, registry, url, COLUMN);
+               addImage(plugin, registry, url, CONNECT);
+               addImage(plugin, registry, url, CONNECTED);
+               addImage(plugin, registry, url, COPY);
+               addImage(plugin, registry, url, CUT);
+               addImage(plugin, registry, url, DELETE);
+               addImage(plugin, registry, url, DISCONNECT);
+               addImage(plugin, registry, url, DRIVER);
+               addImage(plugin, registry, url, EDIT);
+               addImage(plugin, registry, url, ENTITYGROUP);
+               addImage(plugin, registry, url, EXPORT);
+               addImage(plugin, registry, url, EXTERNAL_JAR);
+               addImage(plugin, registry, url, FILTER);
+               addImage(plugin, registry, url, FOREIGNKEY);
+               addImage(plugin, registry, url, FULLDATA);
+               addImage(plugin, registry, url, GRID);
+               addImage(plugin, registry, url, GROUP);
+               addImage(plugin, registry, url, IMPORT);
+               addImage(plugin, registry, url, KEY);
+               addImage(plugin, registry, url, KEYCOLUMN);
+               addImage(plugin, registry, url, LOG);
+               addImage(plugin, registry, url, MISSINGSCHEMA);
+               addImage(plugin, registry, url, MISSINGTABLE);
+               addImage(plugin, registry, url, NEXT);
+               addImage(plugin, registry, url, NEW_BOOKMARK);
+               addImage(plugin, registry, url, NEW_BOOKMARK_WIZARD, JPG_FILE_EXTENSION);
+               addImage(plugin, registry, url, PASTE);
+               addImage(plugin, registry, url, PLAY);
+               addImage(plugin, registry, url, PREVIOUS);
+               addImage(plugin, registry, url, QMODEL);
+               addImage(plugin, registry, url, QUANTUM);
+               addImage(plugin, registry, url, REFRESH);
+               addImage(plugin, registry, url, ROLLBACK);
+               addImage(plugin, registry, url, SAMPLE);
+               addImage(plugin, registry, url, SCHEMA);
+               addImage(plugin, registry, url, SCRIPT);
+               addImage(plugin, registry, url, SEQUENCE);
+               addImage(plugin, registry, url, STATEMENT);
+               addImage(plugin, registry, url, STOP);
+               addImage(plugin, registry, url, SUBSET);
+               addImage(plugin, registry, url, SUCCESS);
+               addImage(plugin, registry, url, TABLE);
+               addImage(plugin, registry, url, TABLE_DETAILS);
+               addImage(plugin, registry, url, TEMPLATE);
+               addImage(plugin, registry, url, TRIGGER);
+               addImage(plugin, registry, url, USER);
+               addImage(plugin, registry, url, VIEW);
+               addImage(plugin, registry, url, WARNING);
+               addImage(plugin, registry, url, XML);
+               addImage(plugin, registry, url, CHECKED);
+               addImage(plugin, registry, url, UNCHECKED);
                
                if (!VersioningHelper.isEclipse30()) {
-                       addImage(registry, url, CLOSE + VERSION_2);
-                       addImage(registry, url, CLOSE_ALL + VERSION_2);
-                       addImage(registry, url, COPY + VERSION_2);
-                       addImage(registry, url, DELETE + VERSION_2);
-                       addImage(registry, url, EXPORT + VERSION_2);
-                       addImage(registry, url, EXTERNAL_JAR + VERSION_2);
-                       addImage(registry, url, IMPORT + VERSION_2);
-                       addImage(registry, url, PASTE + VERSION_2);
-                       addImage(registry, url, REFRESH + VERSION_2);
+                       addImage(plugin, registry, url, CLOSE + VERSION_2);
+                       addImage(plugin, registry, url, CLOSE_ALL + VERSION_2);
+                       addImage(plugin, registry, url, COPY + VERSION_2);
+                       addImage(plugin, registry, url, DELETE + VERSION_2);
+                       addImage(plugin, registry, url, EXPORT + VERSION_2);
+                       addImage(plugin, registry, url, EXTERNAL_JAR + VERSION_2);
+                       addImage(plugin, registry, url, IMPORT + VERSION_2);
+                       addImage(plugin, registry, url, PASTE + VERSION_2);
+                       addImage(plugin, registry, url, REFRESH + VERSION_2);
                }
        }
+       public static void addImage(AbstractUIPlugin plugin, ImageRegistry registry, 
+                       URL url, String key) {
+               addImage(plugin, registry, url, key, GIF_FILE_EXTENSION);
+       }
 
-       /**
-        * @param registry
-        * @param url
-        */
-       private static void addImage(ImageRegistry registry, URL url, String key) {
+       public static void addImage(AbstractUIPlugin plugin, ImageRegistry registry, 
+                       URL url, String key, String extension) {
                try {
                        ImageDescriptor descriptor = ImageDescriptor.createFromURL(
-                                       new URL(url, key + GIF_FILE_EXTENSION));
-                       ImageStore.imageDescriptorMap.put(key, descriptor);
+                                       new URL(url, key + extension));
+                       getImageDescriptorMap(plugin).put(key, descriptor);
                        registry.put(key, descriptor);
                } catch (MalformedURLException e) {
                        // skip, but try to go on to the next one...
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/PluginPreferences.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/PluginPreferences.java
new file mode 100644 (file)
index 0000000..9b554fd
--- /dev/null
@@ -0,0 +1,55 @@
+package com.quantum;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.RGB;
+
+
+/**
+ * @author BC Holmes
+ */
+public class PluginPreferences {
+       
+       public static final String NUMERIC_COLOR = "quantum.numeric.color";
+       public static final String STRING_COLOR = "quantum.string.color";
+       public static final String COMMENT_COLOR = "quantum.comment.color";
+       public static final String KEYWORD_COLOR = "quantum.keyword.color";
+       public static final String TEXT_COLOR = "quantum.text.color";
+       public static final String BACKGROUND_COLOR = "quantum.background.color";
+       
+       public static void initialize(IPreferenceStore store) {
+               initializeColors(store);
+               
+               store.setDefault("quantum.text.bold", false); //$NON-NLS-1$
+               store.setDefault("quantum.keyword.bold", true); //$NON-NLS-1$
+               store.setDefault("quantum.string.bold", false); //$NON-NLS-1$
+               store.setDefault("quantum.comment.bold", false); //$NON-NLS-1$
+               store.setDefault("quantum.numeric.bold", false); //$NON-NLS-1$
+               PreferenceConverter.setDefault(store, "quantum.font", //$NON-NLS-1$
+                               JFaceResources.getTextFont().getFontData()); 
+               store.setDefault("com.quantum.model.Bookmark.queryHistorySize", 20); //$NON-NLS-1$
+       }
+
+       /**
+        * @param store
+        */
+       private static void initializeColors(IPreferenceStore store) {
+               PreferenceConverter.setDefault(store, BACKGROUND_COLOR, new RGB(255, 255, 255));
+               PreferenceConverter.setDefault(store, TEXT_COLOR, new RGB(0, 0, 0));
+               PreferenceConverter.setDefault(store, KEYWORD_COLOR, new RGB(126, 0, 75));
+               PreferenceConverter.setDefault(store, COMMENT_COLOR, new RGB(88, 148, 64));
+               PreferenceConverter.setDefault(store, STRING_COLOR, new RGB(0, 0, 255));
+               PreferenceConverter.setDefault(store, NUMERIC_COLOR, new RGB(255, 0, 0));
+       }
+
+       /**
+        * 
+        */
+       public static FontData getDefaultFont() {
+           FontData[] temp =  JFaceResources.getTextFont().getFontData();
+           return temp == null || temp.length == 0 ? null : temp[0];
+       }
+
+}
index 5a8b0e9..3842086 100644 (file)
@@ -12,6 +12,10 @@ import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import com.quantum.model.BookmarkCollection;
+import com.quantum.util.xml.XMLHelper;
+import com.quantum.view.subset.SubsetContentProvider;
+
 import org.eclipse.core.resources.ISavedState;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
@@ -35,10 +39,6 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.SAXException;
 
-import com.quantum.model.BookmarkCollection;
-import com.quantum.util.xml.XMLHelper;
-import com.quantum.view.subset.SubsetContentProvider;
-
 /**
  * Main class of the quantum plugin, sets defaults, saves and recovers state.
  * @author root
@@ -128,7 +128,7 @@ public class QuantumPlugin extends AbstractUIPlugin {
         sysClip = new Clipboard(null);
        }
 
-       
+    
        /**
         * Write the bookmarks and subsets to a file, saving them for next use of the quantum plugin
         * @param target
@@ -156,43 +156,10 @@ public class QuantumPlugin extends AbstractUIPlugin {
         }
        }
        
-       
-//     public static Image getImage(String name) {
-//        ImageDescriptor imageDescriptor = getImageDescriptor(name);
-//             return imageDescriptor == null ? null : imageDescriptor.createImage();
-//     }
-
        protected void initializeDefaultPluginPreferences() {
-               RGB BACKGROUND = new RGB(255, 255, 255);
-               RGB COMMENT = new RGB(88, 148, 64);
-               RGB KEYWORD = new RGB(126, 0, 75);
-               RGB STRING = new RGB(0, 0, 255);
-               RGB NUMERIC = new RGB(255, 0, 0);
-               RGB DEFAULT = new RGB(0, 0, 0);
-               IPreferenceStore store = getPreferenceStore();
-               PreferenceConverter.setDefault(store,
-                       "quantum.background.color", BACKGROUND); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.text.color", DEFAULT); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.keyword.color", KEYWORD); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.comment.color", COMMENT); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.string.color", STRING); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.numeric.color", NUMERIC); //$NON-NLS-1$
-               getPreferenceStore().setDefault("quantum.text.bold", false); //$NON-NLS-1$
-               getPreferenceStore().setDefault("quantum.keyword.bold", true); //$NON-NLS-1$
-               getPreferenceStore().setDefault("quantum.string.bold", false); //$NON-NLS-1$
-               getPreferenceStore().setDefault("quantum.comment.bold", false); //$NON-NLS-1$
-               getPreferenceStore().setDefault("quantum.numeric.bold", false); //$NON-NLS-1$
-               PreferenceConverter.setDefault(getPreferenceStore(), "quantum.font", //$NON-NLS-1$
-                       JFaceResources.getTextFont().getFontData()); 
-               getPreferenceStore().setDefault("com.quantum.model.Bookmark.queryHistorySize", 20); //$NON-NLS-1$
-           
-
-        getPreferenceStore().setDefault(
+               PluginPreferences.initialize(getPreferenceStore());
+               
+               getPreferenceStore().setDefault(
             "phpeclipse.sql.select.template",
             "$results = mysql_query(\"SELECT {0} FROM {1} WHERE {2} \");");
 
@@ -250,6 +217,8 @@ public class QuantumPlugin extends AbstractUIPlugin {
                return tableView;
        }
 
+
+
        /**
         * @return
         */
@@ -259,7 +228,7 @@ public class QuantumPlugin extends AbstractUIPlugin {
        protected void initializeImageRegistry(ImageRegistry registry) {
                super.initializeImageRegistry(registry);
                try {
-                       ImageStore.initialize(registry, getIconLocation());
+                       ImageStore.initialize(this, registry, getIconLocation());
                } catch (MalformedURLException e) {
                        // this should never happen, but if it does, we don't get images.
                }
@@ -269,8 +238,8 @@ public class QuantumPlugin extends AbstractUIPlugin {
         * @return
         * @throws MalformedURLException
         */
-       URL getIconLocation() throws MalformedURLException {
-               URL installURL = QuantumPlugin.getDefault().getDescriptor().getInstallURL();
+       private URL getIconLocation() throws MalformedURLException {
+               URL installURL = getDescriptor().getInstallURL();
                return new URL(installURL, "icons/");
        }
 }
\ No newline at end of file
index 7cb2931..cb2d1bb 100644 (file)
@@ -69,16 +69,6 @@ QuantumPlugin.Not_saving_unchanged_bookmarks_18=Not saving unchanged bookmarks
 QuantumPlugin.iconsDir=icons/
 QuantumPlugin.saveDir=save
 QuantumPlugin.saveFileExtension=.xml
-ExecuteAction.Executing_Query3=Executing Query...
-ExecuteAction.Executing_Query2=Executing Query..
-ExecuteAction.Parsing_sql_script3=Parsing sql script...
-ExecuteAction.QueriesExecuted=\ queries executed, 
-ExecuteAction.RowsUpdated=\ rows updated, 
-ExecuteAction.Errors=\ errors, 
-ExecutAction.TimeExec=\ seconds
-ExecuteAction.Done=Done
-ExecuteAction.RowUpdated=\ rows updated, 
-ExecuteAction.ResultsDisplayed=\ results displayed, 
 ExportXMLAction.XMLExporting=XML struct: Exporting to file: 
 ExportXMLAction.Metadata=Metadata
 ExportXMLAction.Author=Author
@@ -129,22 +119,6 @@ MetaDataKeySeparator=:
 NoFeature.Views=Views
 NoFeature.Sequences=Sequences
 Error.NoDatabase=Database not supported: 
-PreferencesPage.PickFont=Pick Font
-PreferencesPage.DefaultFont=Default Font
-PreferencesPage.BackgroundColor=Background Color
-PreferencesPage.DefaultTextColor=Default Text Color
-PreferencesPage.quantum.keyword.color_26=quantum.keyword.color
-PreferencesPage.KeywordTextColor=Keyword Text Color
-PreferencesPage.Bold=Bold
-PreferencesPage.CommentTextColor=Comment Text Color
-PreferencesPage.StringTextColor=String Text Color
-PreferencesPage.NumericTextColor=Numeric Text Color
-PreferencesPage.Font_Default=Font: default
-PreferencesPage.regular=regular
-PreferencesPage.bold=bold
-PreferencesPage.italic=italic
-PreferencesPage.boldItalic=bold italic
-PreferencesPage.FontPrompt=Font: 
 DeleteColumnAction.DeleteColumns=Delete Columns...
 DeleteColumnAction.ConfirmDeleteColumns=Are you sure you want to delete the selected columns? 
 DeleteObjectAction.DeleteSubset=Delete Subset...
@@ -216,11 +190,6 @@ BookmarkView.SetExtraSchemas=Set Extra Schemas
 BookmarkView.CopyColumnSeparator=\ 
 MultiSQLServer.Enter_Password=Enter Password
 MultiSQLServer.PasswordNotProvided=Password not provided in Bookmark
-BookmarkSelectionDialog.text=Select a bookmark
-BookmarkSelectionDialog.title=Bookmark Selection
-ExecuteAgainstAction.IOException=An I/O Exception was encountered while \ntrying to read the input file.
-ExecuteAgainstAction.SQLException=A database error was encountered while \ntrying to execute the SQL statements.
-ExecuteAgainstAction.title=Problem Encountered
 ExceptionDisplayDialog.stackTrace=Stack trace:
 
 # Actions
@@ -235,7 +204,6 @@ com.quantum.actions.DisconnectAction.text = Disconnect
 com.quantum.actions.DisconnectAction.message = Disconnected
 com.quantum.actions.ViewTableAction.text = View Table
 com.quantum.actions.OpenQueryAction.text = Open
-com.quantum.actions.DeleteBookmarkAction.text = Delete
 com.quantum.actions.RefreshBookmarkAction.text = Refresh
 com.quantum.actions.NextSequenceAction.text = Increment Sequence Value
 com.quantum.actions.PrevSequenceAction.text = Current Sequence Value
@@ -246,18 +214,24 @@ com.quantum.actions.DeleteAllRowsAction.confirmTitle = Warning
 com.quantum.actions.DeleteAllRowsAction.confirmText = Are you sure you want to delete all the rows from the table {0}?
 com.quantum.actions.ViewTableDetailsAction.text = View Table Details
 
+com.quantum.adapters.DatabaseAdapter.GENERIC = Generic JDBC
+com.quantum.adapters.DatabaseAdapter.HSQLDB = HSQL (Hypersonic)
+com.quantum.adapters.DatabaseAdapter.ORACLE = Oracle
+com.quantum.adapters.DatabaseAdapter.POSTGRES = Postgres
+com.quantum.adapters.DatabaseAdapter.MYSQL = MySQL
+com.quantum.adapters.DatabaseAdapter.DB2 = DB2
+com.quantum.adapters.DatabaseAdapter.DB2AS400 = DB2 for AS400
+com.quantum.adapters.DatabaseAdapter.ADABASD = Adabas-D
+com.quantum.adapters.DatabaseAdapter.INFORMIX = Informix Dynamic Server
+com.quantum.adapters.DatabaseAdapter.REDBRICK = Red Brick
+com.quantum.adapters.DatabaseAdapter.SYBASE = Sybase
+com.quantum.adapters.DatabaseAdapter.POINTBASE = Pointbase
+com.quantum.adapters.DatabaseAdapter.JDBC_ODBC_BRIDGE = JDBC-ODBC Bridge
+com.quantum.adapters.DatabaseAdapter.MS_SQL_SERVER = Microsoft SQL Server
+
 com.quantum.util.connection.ConnectionUtil.title = Connection Not Established
 com.quantum.util.connection.ConnectionUtil.message = The bookmark could not be connected.
 
-com.quantum.view.bookmark.CopyAction.text = Copy
-com.quantum.view.bookmark.PasteAction.text = Paste
-com.quantum.view.bookmark.RenameAction.text = Rename
-com.quantum.view.bookmark.QuickListNode.labelName=Quick List
-com.quantum.view.bookmark.QueryListNode.labelName=Recent SQL Statements
-com.quantum.view.bookmark.GroupNode.TABLE=Tables
-com.quantum.view.bookmark.GroupNode.VIEW=Views
-com.quantum.view.bookmark.GroupNode.SEQUENCE=Sequences
-
 com.quantum.preferences.GlobalPreferences.com.quantum.model.Bookmark.queryHistorySize=Maximum size of query history:
 
 com.quantum.wizards.ExportBookmarkWizardPage.title = Export Bookmark List
@@ -310,21 +284,6 @@ com.quantum.wizards.AddDriverWizard.browse=Browse...
 com.quantum.wizards.AddDriverWizard.jars=Driver Jars:
 com.quantum.wizards.AddDriverWizard.driverClassName=Class name:
 
-com.quantum.adapters.DatabaseAdapter.GENERIC = Generic JDBC
-com.quantum.adapters.DatabaseAdapter.HSQLDB = HSQL (Hypersonic)
-com.quantum.adapters.DatabaseAdapter.ORACLE = Oracle
-com.quantum.adapters.DatabaseAdapter.POSTGRES = Postgres
-com.quantum.adapters.DatabaseAdapter.MYSQL = MySQL
-com.quantum.adapters.DatabaseAdapter.DB2 = DB2
-com.quantum.adapters.DatabaseAdapter.DB2AS400 = DB2 for AS400
-com.quantum.adapters.DatabaseAdapter.ADABASD = Adabas-D
-com.quantum.adapters.DatabaseAdapter.INFORMIX = Informix Dynamic Server
-com.quantum.adapters.DatabaseAdapter.REDBRICK = Red Brick
-com.quantum.adapters.DatabaseAdapter.SYBASE = Sybase
-com.quantum.adapters.DatabaseAdapter.POINTBASE = Pointbase
-com.quantum.adapters.DatabaseAdapter.JDBC_ODBC_BRIDGE = JDBC-ODBC Bridge
-com.quantum.adapters.DatabaseAdapter.MS_SQL_SERVER = Microsoft SQL Server
-
 com.quantum.view.SchemaSelectionControl.addSchemaDialog = Select a Schema
 com.quantum.view.SchemaSelectionControl.connectTitle = Connect Required
 com.quantum.view.SchemaSelectionControl.connectMessage = We must connect to the database to retrieve schemas.
@@ -332,13 +291,36 @@ com.quantum.view.SchemaSelectionControl.useAllSchemas = Show all schemas
 com.quantum.view.SchemaSelectionControl.useUsernameAsSchema = Show the default schema
 com.quantum.view.SchemaSelectionControl.useSelectedSchemas = Show selected schemas
 
-com.quantum.properties.DatabaseInformationPropertyPage.dataTypes = The following data types are supported by this database:
-com.quantum.properties.DatabaseInformationPropertyPage.column0 = Data Type
-com.quantum.properties.DatabaseInformationPropertyPage.column1 = Java Type
+com.quantum.preferences.SQLEditorPreferences.font=Font
+com.quantum.preferences.SQLEditorPreferences.pickFont=Pick Font
+com.quantum.preferences.SQLEditorPreferences.defaultFont=Default Font
+com.quantum.preferences.SQLEditorPreferences.backgroundColor=Background Color
+com.quantum.preferences.SQLEditorPreferences.defaultTextColor=Default Text Color
+com.quantum.preferences.SQLEditorPreferences.keywordTextColor=Keyword Text Color
+com.quantum.preferences.SQLEditorPreferences.bold=Bold
+com.quantum.preferences.SQLEditorPreferences.commentTextColor=Comment Text Color
+com.quantum.preferences.SQLEditorPreferences.stringTextColor=String Text Color
+com.quantum.preferences.SQLEditorPreferences.numericTextColor=Numeric Text Color
+com.quantum.preferences.SQLEditorPreferences.default=Font: default
+com.quantum.preferences.SQLEditorPreferences.regularFont={0} {1}
+com.quantum.preferences.SQLEditorPreferences.boldFont={0} {1} Bold
+com.quantum.preferences.SQLEditorPreferences.italicFont={0} {1} Italic
+com.quantum.preferences.SQLEditorPreferences.boldItalicFont={0} {1} Bold Italic
+
 com.quantum.properties.DatabaseInformationPropertyPage.product = Product:
 com.quantum.properties.DatabaseInformationPropertyPage.unknown = <unknown>
 com.quantum.properties.DatabaseInformationPropertyPage.error = QuantumDB could not retrieve the database information due to an error:
 
+com.quantum.properties.DataTypesPropertyPage.dataTypes = The following data types are supported by this database:
+com.quantum.properties.DataTypesPropertyPage.column0 = Data Type
+com.quantum.properties.DataTypesPropertyPage.column1 = Java Type
+com.quantum.properties.DataTypesPropertyPage.column2 = Precision
+com.quantum.properties.DataTypesPropertyPage.column3 = Literal Prefix
+com.quantum.properties.DataTypesPropertyPage.column4 = Literal Suffix
+com.quantum.properties.DataTypesPropertyPage.column5 = Create Parameters
+com.quantum.properties.DataTypesPropertyPage.unknown = <unknown>
+com.quantum.properties.DataTypesPropertyPage.error = QuantumDB could not retrieve the data type due to an error:
+
 com.quantum.properties.BaseEntityPropertyPage.name = Name:
 com.quantum.properties.BaseEntityPropertyPage.schema = Schema:
 com.quantum.properties.BaseEntityPropertyPage.error = QuantumDB could not retrieve the information due to an error:
@@ -379,6 +361,22 @@ com.quantum.actions.ExecuteAction.text=Execute Against "{0}"
 com.quantum.actions.ExecuteAction.parsing=Parsing sql script...
 com.quantum.actions.ExecuteAction.autocommitTitle=Autocommit changed
 com.quantum.actions.ExecuteAction.autocommitMessage=The autocommit setting of the bookmark, {0} has been changed.
+
+com.quantum.view.bookmark.CopyAction.text = Copy
+com.quantum.view.bookmark.DeleteAction.text = Delete
+com.quantum.view.bookmark.DeleteAction.confirmTitle = Delete Bookmark
+com.quantum.view.bookmark.DeleteAction.confirmText = Are you sure you want to delete the selected bookmarks?
+com.quantum.view.bookmark.DropEntityAction.text=Drop Table/View/Sequence...
+com.quantum.view.bookmark.GroupNode.TABLE=Tables
+com.quantum.view.bookmark.GroupNode.VIEW=Views
+com.quantum.view.bookmark.GroupNode.SEQUENCE=Sequences
+com.quantum.view.bookmark.PasteAction.text = Paste
+com.quantum.view.bookmark.QuickListNode.labelName=Quick List
+com.quantum.view.bookmark.QueryListNode.labelName=Recent SQL Statements
+com.quantum.view.bookmark.RenameAction.text = Rename
+
+com.quantum.view.bookmark.BookmarkViewActionGroup.sqlAction.text = SQL Statements
+
 com.quantum.view.driver.DeleteDriverAction.text=Delete
 com.quantum.view.driver.DeleteDriverAction.confirm=Confirm Delete
 com.quantum.view.driver.DeleteDriverAction.confirmText=Are you sure you want to delete "{0}"?
@@ -411,4 +409,10 @@ com.quantum.wizards.URLSetupControl.datasource=Data Source:
 com.quantum.wizards.InformixURLSetupControl.informixserver=Informix Server:
 com.quantum.wizards.URLSetupControl.url=URL:
 
+com.quantum.ui.dialog.SQLExceptionDialog.title=SQL Exception
+com.quantum.ui.dialog.SQLExceptionDialog.sqlState=SQL State:
+com.quantum.ui.dialog.SQLExceptionDialog.errorCode=Error Code:
+com.quantum.ui.dialog.SQLExceptionDialog.titleWithBookmark=SQL Exception on Bookmark: {0}
+
 com.quantum.model.ConnectionException.couldNotInstaniateDriver = The driver, {0}, could not be instantiated.\nPlease ensure that the bookmark, {1}, is properly defined.
+
index c5ab79e..830e5ee 100644 (file)
@@ -15,6 +15,7 @@ import com.quantum.sql.SQLResultSetResults;
 import com.quantum.sql.SQLResults;
 import com.quantum.sql.SQLUpdateResults;
 import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.ui.dialog.SimpleSelectionDialog;
 import com.quantum.util.connection.ConnectionUtil;
 import com.quantum.view.LogProxy;
@@ -22,17 +23,16 @@ import com.quantum.view.tableview.TableView;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IStatusLineManager;
 import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.actions.SelectionListenerAction;
 
 /**
  * @author BC
  */
-public abstract class BaseExecuteAction extends Action {
+public abstract class BaseExecuteAction extends SelectionListenerAction {
        
        class Metrics {
                int resultCount = 0;
@@ -81,6 +81,14 @@ public abstract class BaseExecuteAction extends Action {
        String execute1 = Messages.getString(BaseExecuteAction.class, "execute1");
        String execute2 = Messages.getString(BaseExecuteAction.class, "execute2");
 
+       protected BaseExecuteAction(String text) {
+               super(text);
+       }
+       
+       protected BaseExecuteAction() {
+               super(null);
+       }
+       
        public void run() {
                Bookmark bookmark = getBookmark();
                if (bookmark != null) {
@@ -102,7 +110,7 @@ public abstract class BaseExecuteAction extends Action {
                } catch (IOException e) {
                    ExceptionDisplayDialog.openError(getShell(), null, null, e);
                } catch (SQLException e) {
-                   ExceptionDisplayDialog.openError(getShell(), null, null, e);
+                   SQLExceptionDialog.openException(getShell(), bookmark, e);
                } catch (CoreException e) {
                    ErrorDialog.openError(getShell(), null, null, e.getStatus());
                }
@@ -197,9 +205,7 @@ public abstract class BaseExecuteAction extends Action {
                        LogProxy log = LogProxy.getInstance();
                        log.addText(LogProxy.ERROR,
                                "Error Executing: " + query + ":" + e.toString(), e); //$NON-NLS-1$ //$NON-NLS-2$
-                       MessageDialog.openConfirm(getShell(), 
-                                       "Database returned error", 
-                                       e.getLocalizedMessage());  //$NON-NLS-1$ 
+                       SQLExceptionDialog.openException(getShell(), bookmark, e);
                }
                return results;
        }
index 63e5979..439f8ad 100644 (file)
@@ -6,6 +6,7 @@ import com.quantum.Messages;
 import com.quantum.model.ConnectionException;
 import com.quantum.model.Table;
 import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.view.bookmark.EntityNode;
 
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -30,8 +31,8 @@ public class DeleteAllRowsAction extends SelectionListenerAction {
        }
 
        public void run() {
+        Table table = getTable();
         try {
-            Table table = getTable();
                        if (table != null) {
                                boolean flag = MessageDialog.openConfirm(
                     view.getSite().getShell(), 
@@ -43,9 +44,8 @@ public class DeleteAllRowsAction extends SelectionListenerAction {
                                }
                        }
         } catch (SQLException e) {
-            ExceptionDisplayDialog.openError(getShell(), 
-                Messages.getString("ExecuteAgainstAction.title"), 
-                Messages.getString("ExecuteAgainstAction.ConnectionException"), e);
+            SQLExceptionDialog.openException(getShell(), 
+                       table == null ? null : table.getBookmark(), e);
         } catch (ConnectionException e) {
             ExceptionDisplayDialog.openError(getShell(), 
                 Messages.getString("ExecuteAgainstAction.title"), 
index 3860403..aa0ca9c 100644 (file)
@@ -1,5 +1,6 @@
 package com.quantum.actions;
 
+import java.sql.SQLException;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
@@ -7,7 +8,7 @@ import java.util.Vector;
 import com.quantum.ImageStore;
 import com.quantum.Messages;
 import com.quantum.model.Bookmark;
-import com.quantum.model.ConnectionException;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.view.bookmark.BookmarkNode;
 
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -35,12 +36,13 @@ public class DisconnectAction extends SelectionListenerAction {
 
 
     public void run() {
-        for (Iterator i = this.selections.iterator(); i.hasNext();) {
+        for (Iterator i = this.selections.iterator(); i.hasNext(); ) {
             Bookmark bookmark = (Bookmark) i.next();
             try {
                 bookmark.disconnect();
-            } catch (ConnectionException e) {
-                e.printStackTrace();
+            } catch (SQLException e) {
+                SQLExceptionDialog.openException(
+                               this.view.getViewSite().getShell(), bookmark, e);
             }
         }
         updateStatusLine(getMessage("message"));
index 0051eaf..0479ab8 100644 (file)
@@ -32,7 +32,6 @@ public class ExecuteAgainstAction extends BaseExecuteAction
 
     private IWorkbenchPart workbenchPart;
     
-
     /**
      * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
      */
index 13ade29..106580d 100644 (file)
@@ -19,7 +19,7 @@ public class NewBookmarkAction extends Action {
         this.view = view;
         setText(Messages.getString(getClass(), "text")); //$NON-NLS-1$
         setToolTipText(Messages.getString(getClass(), "text")); //$NON-NLS-1$
-        setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.BOOKMARK));
+        setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.NEW_BOOKMARK));
     }
 
     public void run() {
index 8a78c6e..071b130 100644 (file)
@@ -35,7 +35,8 @@ public class OpenQueryAction extends SelectionListenerAction {
     private String getQuery() {
         if (isEnabled()) {
             QueryNode node = (QueryNode) getSelectedNonResources().get(0);
-            return node.getQuery();
+            String query = node.getQuery();
+            return query == null || query.trim().endsWith(";") ? query : (query + ";");
         } else {
             return null;
         }
index 366644b..3250564 100644 (file)
@@ -8,6 +8,7 @@ import com.quantum.ImageStore;
 import com.quantum.Messages;
 import com.quantum.model.NotConnectedException;
 import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.view.bookmark.TreeNode;
 
 import org.eclipse.ui.IViewPart;
@@ -44,7 +45,12 @@ public class RefreshBookmarkAction extends SelectionListenerAction {
         * @param e
         */
        private void handleException(Throwable t) {
-               ExceptionDisplayDialog.openError(
-                               this.view.getSite().getShell(), null, null, t);
+               if (t instanceof SQLException) {
+                       SQLExceptionDialog.openException(
+                                       this.view.getSite().getShell(), null, (SQLException) t);
+               } else {
+                       ExceptionDisplayDialog.openError(
+                                       this.view.getSite().getShell(), null, null, t);
+               }
        }
 }
index 7975f0b..5bd627b 100644 (file)
@@ -11,7 +11,7 @@ import com.quantum.sql.MultiSQLServer;
 import com.quantum.sql.SQLResultSetCollection;
 import com.quantum.sql.SQLResultSetResults;
 import com.quantum.sql.SQLResults;
-import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.util.connection.ConnectionUtil;
 import com.quantum.view.bookmark.EntityNode;
 
@@ -53,7 +53,7 @@ public class ViewTableAction extends SelectionListenerAction {
                                SQLResultSetCollection.getInstance().addSQLResultSet((SQLResultSetResults) results);
                        }
                } catch (SQLException e) {
-                       ExceptionDisplayDialog.openError(getShell(), null, null, e);
+                       SQLExceptionDialog.openException(getShell(), bookmark, e);
                }
        }
 
index 19d803c..80db996 100644 (file)
@@ -12,6 +12,7 @@ import com.quantum.sql.MultiSQLServer;
 import com.quantum.sql.SQLResultSetCollection;
 import com.quantum.sql.SQLResultSetResults;
 import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.util.connection.ConnectionUtil;
 import com.quantum.view.bookmark.EntityNode;
 
@@ -43,7 +44,8 @@ public class ViewTableDetailsAction extends SelectionListenerAction  {
                        SQLResultSetCollection.getInstance().addSQLResultSet(results);
                    }
                } catch (SQLException e) {
-                       ExceptionDisplayDialog.openError(getShell(), null, null, e);
+                       SQLExceptionDialog.openException(getShell(), 
+                                       entity == null ? null : entity.getBookmark(), e);
                }
         }
        }
index a7a662c..6b12a99 100644 (file)
@@ -10,18 +10,19 @@ import org.eclipse.swt.widgets.Display;
 
 public class ColorManager {
 
-       protected Map fColorTable = new HashMap(10);
+       protected Map colorTable = new HashMap(10);
 
        public void dispose() {
-               Iterator e= fColorTable.values().iterator();
-               while (e.hasNext())
+               Iterator e= this.colorTable.values().iterator();
+               while (e.hasNext()) {
                        ((Color) e.next()).dispose();
+               }
        }
        public Color getColor(RGB rgb) {
-               Color color= (Color) fColorTable.get(rgb);
+               Color color= (Color) colorTable.get(rgb);
                if (color == null) {
                        color= new Color(Display.getCurrent(), rgb);
-                       fColorTable.put(rgb, color);
+                       this.colorTable.put(rgb, color);
                }
                return color;
        }
index ae519bf..21557d2 100644 (file)
@@ -2,7 +2,7 @@ package com.quantum.editors;
 
 import org.eclipse.swt.graphics.RGB;
 
-public class SQLColorConstants {
+class SQLColorConstants {
        public static RGB BACKGROUND = new RGB(255, 0, 255);
        public static RGB COMMENT = new RGB(88, 148, 64);
        public static RGB IDENTIFIER = new RGB(0, 0, 0);
index 8582103..9ebc7b3 100644 (file)
@@ -2,6 +2,7 @@ package com.quantum.editors;
 
 import java.util.HashMap;
 
+import com.quantum.PluginPreferences;
 import com.quantum.QuantumPlugin;
 
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -49,13 +50,13 @@ public class SQLSourceViewerConfiguration extends SourceViewerConfiguration {
                stringBold = store.getBoolean("quantum.string.bold"); //$NON-NLS-1$
                commentBold = store.getBoolean("quantum.comment.bold"); //$NON-NLS-1$
                numericBold = store.getBoolean("quantum.numeric.bold"); //$NON-NLS-1$
-               SQLColorConstants.BACKGROUND = PreferenceConverter.getColor(store, "quantum.background.color"); //$NON-NLS-1$
-               SQLColorConstants.DEFAULT = PreferenceConverter.getColor(store, "quantum.text.color"); //$NON-NLS-1$
-               SQLColorConstants.IDENTIFIER = PreferenceConverter.getColor(store, "quantum.text.color"); //$NON-NLS-1$
-               SQLColorConstants.KEYWORD = PreferenceConverter.getColor(store, "quantum.keyword.color"); //$NON-NLS-1$
-               SQLColorConstants.STRING = PreferenceConverter.getColor(store, "quantum.string.color"); //$NON-NLS-1$
-               SQLColorConstants.COMMENT = PreferenceConverter.getColor(store, "quantum.comment.color"); //$NON-NLS-1$
-               SQLColorConstants.NUMERIC = PreferenceConverter.getColor(store, "quantum.numeric.color"); //$NON-NLS-1$
+               SQLColorConstants.BACKGROUND = PreferenceConverter.getColor(store, PluginPreferences.BACKGROUND_COLOR); //$NON-NLS-1$
+               SQLColorConstants.DEFAULT = PreferenceConverter.getColor(store, PluginPreferences.TEXT_COLOR); //$NON-NLS-1$
+               SQLColorConstants.IDENTIFIER = PreferenceConverter.getColor(store, PluginPreferences.TEXT_COLOR); //$NON-NLS-1$
+               SQLColorConstants.KEYWORD = PreferenceConverter.getColor(store, PluginPreferences.KEYWORD_COLOR); //$NON-NLS-1$
+               SQLColorConstants.STRING = PreferenceConverter.getColor(store, PluginPreferences.STRING_COLOR); //$NON-NLS-1$
+               SQLColorConstants.COMMENT = PreferenceConverter.getColor(store, PluginPreferences.COMMENT_COLOR); //$NON-NLS-1$
+               SQLColorConstants.NUMERIC = PreferenceConverter.getColor(store, PluginPreferences.NUMERIC_COLOR); //$NON-NLS-1$
        }
        public void initializeColors() {
                setDamageRepairer(getAttr(SQLColorConstants.KEYWORD, keywordBold), SQLPartitionScanner.SQL_KEYWORD);
index 4b42669..8b3feef 100644 (file)
@@ -57,6 +57,7 @@ public class Bookmark implements Displayable {
     private boolean promptForPassword = false;
     private boolean autoCommit = true;
     private String autoCommitPreference = IQuantumConstants.autoCommitTrue;
+       private Database database;
        
        public Bookmark() {
         this(MultiSQLServer.getInstance());
@@ -239,7 +240,7 @@ public class Bookmark implements Displayable {
        this.connection = connection;
     }
 
-    public void disconnect() throws ConnectionException {
+    public void disconnect() throws SQLException {
         boolean isConnected = isConnected();
         try {
             if (this.connection != null) {
@@ -247,6 +248,7 @@ public class Bookmark implements Displayable {
             }
         } finally {
             this.connection = null;
+            this.database = null;
             if (isConnected() != isConnected) {
                 this.propertyChangeSupport.firePropertyChange(
                     "connected", isConnected, isConnected());
@@ -398,7 +400,10 @@ public class Bookmark implements Displayable {
         if (!isConnected()) {
             throw new NotConnectedException();
         }
-        return new Database(this);
+        if (this.database == null) {
+               this.database = new Database(this);
+        }
+        return this.database;
     }
     
     public DatabaseAdapter getAdapter() {
@@ -545,4 +550,14 @@ public class Bookmark implements Displayable {
        public String getDisplayName() {
                return this.name;
        }
+
+       /**
+        * @param query
+        */
+       public void removeQuery(String query) {
+               if (this.queries.remove(query)) {
+               this.propertyChangeSupport.firePropertyChange("queries", null, null);
+               this.changed = true;
+               }
+       }
 }
index 2eb26a0..9640df1 100644 (file)
@@ -11,10 +11,30 @@ import com.quantum.util.sql.TypesHelper;
 public class DataType {
        private final int javaType;
        private final String databaseTypeName;
+       private final int precision;
+       private final String literalPrefix;
+       private final String literalSuffix;
+       private final String createParameters;
 
-       public DataType(int javaType, String databaseTypeName) {
+       
+       /**
+        * @param javaType
+        * @param databaseTypeName
+        * @param precision
+        * @param literalPrefix
+        * @param literalSuffix
+        * @param createParameters
+        */
+       public DataType(final int javaType, final String databaseTypeName,
+                       final int precision, final String literalPrefix, final String literalSuffix,
+                       final String createParameters) {
+               super();
                this.javaType = javaType;
                this.databaseTypeName = databaseTypeName;
+               this.precision = precision;
+               this.literalPrefix = literalPrefix;
+               this.literalSuffix = literalSuffix;
+               this.createParameters = createParameters;
        }
        public String getDatabaseTypeName() {
                return this.databaseTypeName;
@@ -25,4 +45,16 @@ public class DataType {
        public String getJavaNameType() {
                return TypesHelper.getTypeName(this.javaType);
        }
+       public String getCreateParameters() {
+               return this.createParameters;
+       }
+       public String getLiteralPrefix() {
+               return this.literalPrefix;
+       }
+       public String getLiteralSuffix() {
+               return this.literalSuffix;
+       }
+       public int getPrecision() {
+               return this.precision;
+       }
 }
index cdc3501..058c48d 100644 (file)
@@ -5,6 +5,7 @@ import java.sql.DatabaseMetaData;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -36,10 +37,16 @@ public class Database {
        
        private static final int TYPE_INFO_METADATA_TYPE_NAME = 1;
        private static final int TYPE_INFO_METADATA_DATA_TYPE = 2;
+       private static final int TYPE_INFO_METADATA_PRECISION = 3;
+       private static final int TYPE_INFO_METADATA_LITERAL_PREFIX = 4;
+       private static final int TYPE_INFO_METADATA_LITERAL_SUFFIX = 5;
+       private static final int TYPE_INFO_METADATA_CREATE_PARMS = 6;
        
        private DatabaseAdapter databaseAdapter;
     private Bookmark bookmark;
     
+    private List entityTypes;
+    
     public Database(Bookmark bookmark) {
         this.bookmark = bookmark;
         this.databaseAdapter = bookmark.getAdapter();
@@ -61,9 +68,13 @@ public class Database {
         }
     }
     
-    public String[] getEntityTypes() 
+    public synchronized String[] getEntityTypes() 
         throws NotConnectedException, SQLException {
-        return getEntityTypes(this.bookmark.getConnection());
+       if (this.entityTypes == null) {
+               Collection collection = initializeEntityTypes(this.bookmark.getConnection());
+            this.entityTypes = Collections.synchronizedList(new ArrayList(collection));
+       }
+        return (String[]) this.entityTypes.toArray(new String[this.entityTypes.size()]);
     }
     
     public String getUsername() throws NotConnectedException, SQLException {
@@ -72,7 +83,7 @@ public class Database {
 
 
     /**
-     * <p>This method returns a list of entity types supported by the database
+     * <p>This method returns a set of entity types supported by the database
      * adapter.  This list will always be limited to Tables, Views and 
      * Sequences.</p>
      * 
@@ -81,10 +92,10 @@ public class Database {
      * Tables, Views and Sequences.</p>
      * 
      * @param connection
-     * @return
+     * @return a set of Strings, typically "TABLE", "VIEW", and "SEQUENCE"
      * @throws SQLException
      */
-    public String[] getEntityTypes(Connection connection) throws SQLException {
+    private Set initializeEntityTypes(Connection connection) throws SQLException {
         
         Set set = new HashSet();
         if (this.databaseAdapter.getShowTableQuery(this.bookmark.getUsername()) != null) {
@@ -107,8 +118,7 @@ public class Database {
                 set.add(type);
             }
         }
-        
-        return (String[]) set.toArray(new String[set.size()]);
+        return set;
     }
 
     public String getInformation() throws SQLException {
@@ -165,30 +175,8 @@ public class Database {
     protected List getEntitiesList(Bookmark bookmark, Connection connection, String type, Schema schema)
         throws SQLException {
 
-        String sql = getSQL(bookmark, type, schema);
         List list = new ArrayList();
-        SQLResultSetResults results = null;
-        if (sql != null) {
-            results = (SQLResultSetResults) MultiSQLServer.getInstance().execute(
-                       bookmark, connection, sql, Integer.MAX_VALUE);
-            for (int i = 1, size = (results == null) ? 0 : results.getRowCount(); i <= size; i++) {
-                String schemaName = results.getColumnCount() == 1 
-                    ? schema.getName() : results.getElement(1, i).toString();
-                String tableName = results.getColumnCount() == 1 
-                    ? results.getElement(1, i).toString() 
-                    : results.getElement(2, i).toString();
-                if (tableName != null && tableName.length() > 0) {
-                    Entity entity = EntityFactory.getInstance().create(
-                        bookmark, schemaName, tableName, type);
-                    if (entity != null) {
-                        list.add(entity);
-                    }
-                }
-            }
-        }
-        // If we have some results, we go back
-        if (results != null) return list;
-        // Else, we try the JDBC driver
+        //      We try first the JDBC driver
         DatabaseMetaData metaData = connection.getMetaData();
         // getTables needs a null schema to get all the schemas. So we don't pass a "" schema, but a null one
                ResultSet set = null;
@@ -212,6 +200,38 @@ public class Database {
             }
         }
         set.close();
+        // If we have some results, then the JDBC driver is working, 
+        // so we return the results and quit
+        if (list.size() > 0) 
+               return list;
+        
+        
+        // If no results, we check also the sql query to get the list of entities
+        SQLResultSetResults results = null;
+        // Get the proper sql query to the appropiate type of entity
+        String sql = getSQL(bookmark, type, schema);
+        // If nothing returned, too bad, it seems there is no sql query for that database and entity type
+        if (sql != null) {
+            results = (SQLResultSetResults) MultiSQLServer.getInstance().execute(
+                       bookmark, connection, sql, Integer.MAX_VALUE);
+            for (int i = 1, size = (results == null) ? 0 : results.getRowCount(); i <= size; i++) {
+                String schemaName = results.getColumnCount() == 1 
+                    ? schema.getName() : results.getElement(1, i).toString();
+                if (schemaName != null) {
+                       schemaName = schemaName.trim();
+                }
+                String tableName = results.getColumnCount() == 1 
+                    ? results.getElement(1, i).toString() 
+                    : results.getElement(2, i).toString();
+                if (tableName != null && tableName.length() > 0) {
+                    Entity entity = EntityFactory.getInstance().create(
+                        bookmark, schemaName, tableName, type);
+                    if (entity != null) {
+                        list.add(entity);
+                    }
+                }
+            }
+        }
         return list;
     }
     
@@ -221,9 +241,14 @@ public class Database {
        ResultSet results = metaData.getTypeInfo();
        try {
                while (results.next()) {
-                       String name = results.getString(TYPE_INFO_METADATA_TYPE_NAME);
-                       int type = results.getInt(TYPE_INFO_METADATA_DATA_TYPE);
-                       list.add(new DataType(type, name));
+                       list.add(new DataType(
+                                       results.getInt(TYPE_INFO_METADATA_DATA_TYPE),
+                                       results.getString(TYPE_INFO_METADATA_TYPE_NAME),
+                                               results.getInt(TYPE_INFO_METADATA_PRECISION),
+                                               results.getString(TYPE_INFO_METADATA_LITERAL_PREFIX),
+                                               results.getString(TYPE_INFO_METADATA_LITERAL_SUFFIX),
+                                               results.getString(TYPE_INFO_METADATA_CREATE_PARMS)
+                                               ));
                }
        } finally {
                results.close();
@@ -313,15 +338,18 @@ public class Database {
        public Schema[] getSchemas() throws NotConnectedException, SQLException {
                DatabaseMetaData metaData = getMetaData();
                List list = new ArrayList();
-               ResultSet resultSet = metaData.getSchemas();
-               try {
-                       while (resultSet.next()) {
-                               String schemaName = resultSet.getString("TABLE_SCHEM");
-                               list.add(new Schema(schemaName));
+               
+               if (metaData.supportsSchemasInTableDefinitions()) {
+                       ResultSet resultSet = metaData.getSchemas();
+                       try {
+                               while (resultSet.next()) {
+                                       String schemaName = resultSet.getString("TABLE_SCHEM");
+                                       list.add(new Schema(schemaName));
+                               }
+                       } finally {
+                               resultSet.close();
                        }
-                       return (Schema[]) list.toArray(new Schema[list.size()]);
-               } finally {
-                       resultSet.close();
                }
+               return (Schema[]) list.toArray(new Schema[list.size()]);
        }
 }
index c911730..66632cc 100644 (file)
@@ -2,16 +2,14 @@ package com.quantum.model;
 
 import java.sql.SQLException;
 
-import com.quantum.IQuantumConstants;
-
 /**
  * @author BC
  */
 public interface Entity extends BookmarkHolder, Comparable {
     
-    public static final String TABLE_TYPE = IQuantumConstants.Table;
-    public static final String VIEW_TYPE = IQuantumConstants.View;
-    public static final String SEQUENCE_TYPE = IQuantumConstants.Sequence;
+    public static final String TABLE_TYPE = "TABLE";
+    public static final String VIEW_TYPE = "VIEW";
+    public static final String SEQUENCE_TYPE = "SEQUENCE";
     
     public String getName();
     public String getSchema();
index f16a1e0..966329a 100644 (file)
@@ -11,7 +11,11 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.quantum.adapters.AdapterFactory;
 import com.quantum.adapters.DatabaseAdapter;
+import com.quantum.sql.MultiSQLServer;
+import com.quantum.sql.SQLMetaDataResults;
+import com.quantum.util.sql.SQLStates;
 
 /**
  * This class models a table or view.
@@ -81,54 +85,103 @@ abstract class EntityImpl implements Entity {
     }
     public Column[] getColumns() throws NotConnectedException, SQLException {
         
-        Map temp = new HashMap();
         Connection connection = this.bookmark.getConnection();
-        DatabaseMetaData metaData = connection.getMetaData();
-        ResultSet resultSet = metaData.getColumns(null, getSchema(), getName(), null);
         try {
-               while (resultSet.next()) {
-                   ColumnImpl column = new ColumnImpl(
-                       this, 
-                       resultSet.getString(COLUMN_METADATA_COLUMN_NAME),
-                       resultSet.getString(COLUMN_METATDATA_TYPE_NAME),
-                       resultSet.getInt(COLUMN_METATDATA_DATA_TYPE),
-                       resultSet.getInt(COLUMN_METADATA_COLUMN_SIZE),
-                       resultSet.getInt(COLUMN_METADATA_DECIMAL_DIGITS),
-                       "YES".equalsIgnoreCase(resultSet.getString(COLUMN_METADATA_IS_NULLABLE)),
-                       resultSet.getInt(COLUMN_METADATA_ORDINAL_POSITION),
+               return getColumnsFromMetaData(connection);
+        } catch (SQLException e) {
+               if (SQLStates.ODBC_DRIVER_NOT_CAPABLE.equals(e.getSQLState()) 
+                               && AdapterFactory.JDBC_ODBC_BRIDGE.equals(
+                                               getBookmark().getJDBCDriver().getType())) {
+                       return getColumnsFromQuery(connection);
+               } else {
+                       throw e;
+               }
+        }
+        
+    }
+    
+    /**
+        * @param connection
+        * @return
+        * @throws SQLException
+        */
+       private Column[] getColumnsFromMetaData(Connection connection) throws SQLException {
+               Map temp = new HashMap();
+               DatabaseMetaData metaData = connection.getMetaData();
+               ResultSet resultSet = metaData.getColumns(null, getSchema(), getName(), null);
+               try {
+                   while (resultSet.next()) {
+                       ColumnImpl column = new ColumnImpl(
+                           this, 
+                           resultSet.getString(COLUMN_METADATA_COLUMN_NAME),
+                           resultSet.getString(COLUMN_METATDATA_TYPE_NAME),
+                           resultSet.getInt(COLUMN_METATDATA_DATA_TYPE),
+                           resultSet.getInt(COLUMN_METADATA_COLUMN_SIZE),
+                           resultSet.getInt(COLUMN_METADATA_DECIMAL_DIGITS),
+                           "YES".equalsIgnoreCase(resultSet.getString(COLUMN_METADATA_IS_NULLABLE)),
+                           resultSet.getInt(COLUMN_METADATA_ORDINAL_POSITION),
                                        getComments(
                                                        resultSet.getString(COLUMN_METADATA_REMARKS),
                                                        getQualifiedName(), 
                                                        resultSet.getString(COLUMN_METADATA_COLUMN_NAME))
-                       );
-                   temp.put(column.getName(), column);
-               }
-        } finally {
-               resultSet.close();
-        }
+                           );
+                       temp.put(column.getName(), column);
+                   }
+               } finally {
+                       resultSet.close();
+               }
 
-        resultSet = metaData.getPrimaryKeys(null, getSchema(), getName());
-        try {
-               while (resultSet.next()) {
-                   String name = resultSet.getString(PRIMARY_KEYS_METADATA_COLUMN_NAME);
-                   short keySequence = resultSet.getShort(PRIMARY_KEYS_METADATA_KEY_SEQ);
-                   ColumnImpl column = (ColumnImpl) temp.get(name);
-                   if (column != null) {
-                       column.setPrimaryKeyOrder(keySequence);
-                   }
-               }
-               resultSet.close();
-               
-               List columnList = Collections.synchronizedList(
-                   new ArrayList(temp.values()));
-               Collections.sort(columnList);
-               return (Column[]) columnList.toArray(new Column[columnList.size()]);
-        } finally {
-               resultSet.close();
-        }
-    }
-    
-    /**
+               resultSet = metaData.getPrimaryKeys(null, getSchema(), getName());
+               try {
+                   while (resultSet.next()) {
+                       String name = resultSet.getString(PRIMARY_KEYS_METADATA_COLUMN_NAME);
+                       short keySequence = resultSet.getShort(PRIMARY_KEYS_METADATA_KEY_SEQ);
+                       ColumnImpl column = (ColumnImpl) temp.get(name);
+                       if (column != null) {
+                           column.setPrimaryKeyOrder(keySequence);
+                       }
+                       
+                   }
+                   
+                   List columnList = Collections.synchronizedList(
+                       new ArrayList(temp.values()));
+                   Collections.sort(columnList);
+                   return (Column[]) columnList.toArray(new Column[columnList.size()]);
+                   
+               } finally {
+                       resultSet.close();
+               }
+       }
+       
+       /**
+        * Some databases, (in particular, MS Access under ODBC) aren't terribly friendly
+        * about supporting metadata.  This method scrapes out the data the old-fashioned way.
+        * 
+        * @param temp
+        * @param connection
+        * @throws SQLException
+        */
+       private Column[] getColumnsFromQuery(Connection connection) throws SQLException {
+               List temp = new ArrayList();
+               SQLMetaDataResults results = 
+                               (SQLMetaDataResults) MultiSQLServer.getInstance().getMetaData(
+                                       this, connection);
+               SQLMetaDataResults.Row[] rows = results.getRows();
+               for (int i = 0, length = results.getRowCount(); i < length; i++) {
+                   ColumnImpl column = new ColumnImpl(
+                           this, 
+                           (String) rows[i].get(1),
+                           (String) rows[i].get(2),
+                           ((Integer) rows[i].get(7)).intValue(),
+                           ((Integer) rows[i].get(3)).intValue(),
+                           ((Integer) rows[i].get(4)).intValue(),
+                           "Nullable".equalsIgnoreCase((String) rows[i].get(5)),
+                           i+1, "");
+                       temp.add(column);
+               }
+               return (Column[]) temp.toArray(new Column[temp.size()]);
+       }
+       /**
      * Some JDBC drivers (Oracle for example) won't return the comments
      * We recheck with a custom query, if it's defined
         * @param iniComment The already got comment
index 01c9eb6..079ca43 100644 (file)
@@ -1,15 +1,14 @@
 package com.quantum.preferences;
 
 
-import com.quantum.Messages;
-import com.quantum.QuantumPlugin;
-
 import org.eclipse.jface.preference.FieldEditorPreferencePage;
-import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.IntegerFieldEditor;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
+import com.quantum.Messages;
+import com.quantum.QuantumPlugin;
+
 /**
  * PreferencePage for the global options on QuantumDB
  * @author panic
@@ -21,19 +20,12 @@ implements IWorkbenchPreferencePage {
 
        public GlobalPreferences() {
                super(FieldEditorPreferencePage.GRID);
-               
-               // Set the preference store for the preference page.
-               IPreferenceStore store =
-                       QuantumPlugin.getDefault().getPreferenceStore();
-               setPreferenceStore(store);
+               setPreferenceStore(QuantumPlugin.getDefault().getPreferenceStore());
        }
 
        public void init(IWorkbench workbench) {
-               this.workbench = workbench;
        }
 
-       IWorkbench workbench;
-               
        protected void createFieldEditors() {
         IntegerFieldEditor queryHistorySize = new IntegerFieldEditor(
             "com.quantum.model.Bookmark.queryHistorySize", 
index daf8164..ec0c7e1 100644 (file)
@@ -1,93 +1,74 @@
 package com.quantum.preferences;
 
-
 import com.quantum.Messages;
+import com.quantum.PluginPreferences;
 import com.quantum.QuantumPlugin;
-import com.quantum.editors.ColorManager;
-import com.quantum.editors.SQLColorConstants;
 import com.quantum.util.versioning.VersioningHelper;
 
 import org.eclipse.jface.preference.ColorFieldEditor;
-import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferenceConverter;
 import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.FontDialog;
+import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 
-public class SQLEditorPreferences extends PreferencePage
-       implements IWorkbenchPreferencePage {
-       FontDialog fontDialog;
-       ColorFieldEditor backgroundColorEditor;
+
+/**
+ * A preference page for font and colour preferences for the SQL
+ * Editor.  
+ * 
+ * @author Tom Schneider
+ */
+public class SQLEditorPreferences extends PreferencePage 
+               implements IWorkbenchPreferencePage {
+
+    private FontDialog fontDialog;
+
+    private ColorFieldEditor backgroundColorEditor;
+    private ColorFieldEditor textColorEditor;
+    private ColorFieldEditor keywordColorEditor;
+    private ColorFieldEditor stringColorEditor;
+    private ColorFieldEditor numericColorEditor;
+    private ColorFieldEditor commentColorEditor;
+
+    private boolean textFlag;
+    private boolean keywordFlag;
+    private boolean stringFlag;
+    private boolean numericFlag;
+    private boolean commentFlag;
        
-       ColorFieldEditor textColorEditor;
-       boolean textFlag;
-       ColorFieldEditor keywordColorEditor;
-       boolean keywordFlag;
-       ColorFieldEditor stringColorEditor;
-       boolean stringFlag;
-       ColorFieldEditor numericColorEditor;
-       boolean numericFlag;
-       ColorFieldEditor commentColorEditor;
-       boolean commentFlag;
+    private Button boldText;
+    private Button boldKeyword;
+    private Button boldString;
+    private Button boldNumeric;
+    private Button boldComment;
        
-       Button boldText;
-       Button boldKeyword;
-       Button boldString;
-       Button boldNumeric;
-       Button boldComment;
+       private FontData fontData;
+       private Label fontDisplay;
        
-       IWorkbench workbench;
-       FontData fontData;
-       Label fontDisplay;
        public void init(IWorkbench workbench) {
-               //Initialize the preference store
-               this.workbench = workbench;
                setPreferenceStore(QuantumPlugin.getDefault().getPreferenceStore());
-               initializeColorDefaults(getPreferenceStore());
-       }
-
-       private void initializeColorDefaults(IPreferenceStore store) {
-               RGB BACKGROUND = new RGB(255, 255, 255);
-               RGB COMMENT = new RGB(88, 148, 64);
-               RGB KEYWORD = new RGB(126, 0, 75);
-               RGB STRING = new RGB(0, 0, 255);
-               RGB NUMERIC = new RGB(255, 0, 0);
-               RGB DEFAULT = new RGB(0, 0, 0);
-               PreferenceConverter.setDefault(store,
-                       "quantum.background.color", BACKGROUND); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.text.color", DEFAULT); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.keyword.color", KEYWORD); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.comment.color", COMMENT); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.string.color", STRING); //$NON-NLS-1$
-               PreferenceConverter.setDefault(store,
-                       "quantum.numeric.color", NUMERIC); //$NON-NLS-1$
        }
 
        protected void performDefaults() {
-               fontData = null;
+               fontData = PluginPreferences.getDefaultFont();
                updateFontDisplay();
-               textFlag = false;
-               keywordFlag = true;
-               stringFlag = false;
-               numericFlag = false;
-               commentFlag = false;
+               this.textFlag = false;
+               this.keywordFlag = true;
+               this.stringFlag = false;
+               this.numericFlag = false;
+               this.commentFlag = false;
                updateFlags();
                backgroundColorEditor.loadDefault();
                textColorEditor.loadDefault();
@@ -114,87 +95,62 @@ public class SQLEditorPreferences extends PreferencePage
                numericColorEditor.store();
                return super.performOk();
        }
+       
        protected Control createContents(Composite parent) {
                Composite main = new Composite(parent, SWT.NULL);
+               main.setLayout(new GridLayout());
                
-               GridLayout innerLayout = new GridLayout();
-               innerLayout.numColumns = 4;
-               main.setLayout(innerLayout);
+        createFontSelectionArea(main);
+        Label label = new Label(main, SWT.NONE);
+        label.setText("");
+        
+               createColorSelectionArea(main);
 
-               fontData = PreferenceConverter.getFontData(getPreferenceStore(), "quantum.font"); //$NON-NLS-1$
-               textFlag = getPreferenceStore().getBoolean("quantum.text.bold"); //$NON-NLS-1$
-               keywordFlag = getPreferenceStore().getBoolean("quantum.keyword.bold"); //$NON-NLS-1$
-               stringFlag = getPreferenceStore().getBoolean("quantum.string.bold"); //$NON-NLS-1$
-               commentFlag = getPreferenceStore().getBoolean("quantum.comment.bold"); //$NON-NLS-1$
-               numericFlag = getPreferenceStore().getBoolean("quantum.numeric.bold"); //$NON-NLS-1$
-               
-               fontDialog = new FontDialog(workbench.getActiveWorkbenchWindow().getShell());
-               Button fontButton = new Button(main, SWT.PUSH);
-               fontButton.setText(Messages.getString("PreferencesPage.PickFont")); //$NON-NLS-1$
-               fontButton.addSelectionListener(new SelectionListener() {
-                       public void widgetDefaultSelected(SelectionEvent e) {
-                       }
-                       public void widgetSelected(SelectionEvent e) {
-                               if (fontData != null) {
-                    VersioningHelper.setFont(fontDialog, new FontData[] { fontData} );
-                               }
-                               FontData data = fontDialog.open();
-                               if (data != null) {
-                                       fontData = data;
-                                       updateFontDisplay();
-                               }
-                       }
-               });
-               Button defaultButton = new Button(main, SWT.PUSH);
-               defaultButton.setText(Messages.getString("PreferencesPage.DefaultFont")); //$NON-NLS-1$
-               defaultButton.addSelectionListener(new SelectionListener() {
-                       public void widgetDefaultSelected(SelectionEvent e) {
-                       }
-                       public void widgetSelected(SelectionEvent e) {
-                               FontData[] temp =  JFaceResources.getTextFont().getFontData();
-                               fontData = temp == null || temp.length == 0 ? null : temp[0];
-                               updateFontDisplay();
-                       }
-               });
-
-               fontDisplay = new Label(main, SWT.NULL);
-               GridData data = new GridData(GridData.FILL_HORIZONTAL);
-               data.grabExcessHorizontalSpace = true;
-               fontDisplay.setLayoutData(data);
-               updateFontDisplay();
-
-               ColorManager manager = new ColorManager();
+               return main;
+       }
+       /**
+     * @param main
+     * @return
+     */
+    private void createColorSelectionArea(Composite parent) {
+        Composite main = new Composite(parent, SWT.NULL);
 
-               Composite comp = new Composite(main, SWT.NULL);
-               GridData layoutData = new GridData();
-               layoutData.horizontalSpan = 2;
-               comp.setLayoutData(layoutData);
+               this.textFlag = getPreferenceStore().getBoolean("quantum.text.bold"); //$NON-NLS-1$
+               this.keywordFlag = getPreferenceStore().getBoolean("quantum.keyword.bold"); //$NON-NLS-1$
+               this.stringFlag = getPreferenceStore().getBoolean("quantum.string.bold"); //$NON-NLS-1$
+               this.commentFlag = getPreferenceStore().getBoolean("quantum.comment.bold"); //$NON-NLS-1$
+               this.numericFlag = getPreferenceStore().getBoolean("quantum.numeric.bold"); //$NON-NLS-1$
+               
+        
+        GridLayout layout = new GridLayout();
+               
+               // the colour preference chooser really, really wants to take up a whole
+               // row, so we need to pretend that our row is only two cells wide, then
+               // pull a switcheroo later...
+               layout.numColumns = 2;
+               main.setLayout(layout);
                
-               manager.getColor(SQLColorConstants.DEFAULT);
                backgroundColorEditor =
                        new ColorFieldEditor(
-                               "quantum.background.color", //$NON-NLS-1$
-                               Messages.getString("PreferencesPage.BackgroundColor"), //$NON-NLS-1$
-                               comp);                          
+                               PluginPreferences.BACKGROUND_COLOR,
+                               Messages.getString(getClass(), "backgroundColor"), //$NON-NLS-1$
+                               main);  
 
-               Composite temp = new Composite(main, SWT.NULL);
-               temp.setSize(0, 0);
+               Label emptyLabel = new Label(main, SWT.NULL);
+               emptyLabel.setText("");
                
-               comp = new Composite(main, SWT.NULL);
-               layoutData = new GridData();
-               layoutData.horizontalSpan = 2;
-               comp.setLayoutData(layoutData);
+               createEmptyRow(main);
                
-               textColorEditor =
+               this.textColorEditor =
                        new ColorFieldEditor(
-                               "quantum.text.color", //$NON-NLS-1$
-                               Messages.getString("PreferencesPage.DefaultTextColor"), //$NON-NLS-1$
-                               comp);                          
+                               PluginPreferences.TEXT_COLOR,
+                               Messages.getString(getClass(), "defaultTextColor"), //$NON-NLS-1$
+                               main);                          
 
-               boldText = new Button(main, SWT.CHECK);
-               boldText.setSelection(textFlag);
-               boldText.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
-               boldText.addSelectionListener(new SelectionListener() {
+               this.boldText = new Button(main, SWT.CHECK);
+               this.boldText.setSelection(textFlag);
+               this.boldText.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$
+               this.boldText.addSelectionListener(new SelectionListener() {
                        public void widgetDefaultSelected(SelectionEvent e) {
                        }
                        public void widgetSelected(SelectionEvent e) {
@@ -202,20 +158,15 @@ public class SQLEditorPreferences extends PreferencePage
                        }
                });
 
-               comp = new Composite(main, SWT.NULL);
-               layoutData = new GridData();
-               layoutData.horizontalSpan = 2;
-               comp.setLayoutData(layoutData);
-
                keywordColorEditor =
                        new ColorFieldEditor(
-                               Messages.getString("PreferencesPage.quantum.keyword.color_26"), //$NON-NLS-1$
-                               Messages.getString("PreferencesPage.KeywordTextColor"), //$NON-NLS-1$
-                               comp);
+                               PluginPreferences.KEYWORD_COLOR,
+                               Messages.getString(getClass(), "keywordTextColor"), //$NON-NLS-1$
+                               main);
 
                boldKeyword = new Button(main, SWT.CHECK);
                boldKeyword.setSelection(keywordFlag);
-               boldKeyword.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
+               boldKeyword.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$
                boldKeyword.addSelectionListener(new SelectionListener() {
                        public void widgetDefaultSelected(SelectionEvent e) {
                        }
@@ -224,20 +175,15 @@ public class SQLEditorPreferences extends PreferencePage
                        }
                });
 
-               comp = new Composite(main, SWT.NULL);
-               layoutData = new GridData();
-               layoutData.horizontalSpan = 2;
-               comp.setLayoutData(layoutData);
-
                commentColorEditor =
                        new ColorFieldEditor(
-                               "quantum.comment.color", //$NON-NLS-1$
-                               Messages.getString("PreferencesPage.CommentTextColor"), //$NON-NLS-1$
-                               comp);
+                               PluginPreferences.COMMENT_COLOR,
+                               Messages.getString(getClass(), "commentTextColor"), //$NON-NLS-1$
+                               main);
 
                boldComment = new Button(main, SWT.CHECK);
                boldComment.setSelection(commentFlag);
-               boldComment.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
+               boldComment.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$
                boldComment.addSelectionListener(new SelectionListener() {
                        public void widgetDefaultSelected(SelectionEvent e) {
                        }
@@ -246,20 +192,15 @@ public class SQLEditorPreferences extends PreferencePage
                        }
                });
 
-               comp = new Composite(main, SWT.NULL);
-               layoutData = new GridData();
-               layoutData.horizontalSpan = 2;
-               comp.setLayoutData(layoutData);
-
                stringColorEditor =
                        new ColorFieldEditor(
-                               "quantum.string.color", //$NON-NLS-1$
-                               Messages.getString("PreferencesPage.StringTextColor"), //$NON-NLS-1$
-                               comp);
+                               PluginPreferences.STRING_COLOR,
+                               Messages.getString(getClass(), "stringTextColor"), //$NON-NLS-1$
+                               main);
 
                boldString = new Button(main, SWT.CHECK);
                boldString.setSelection(stringFlag);
-               boldString.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
+               boldString.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$
                boldString.addSelectionListener(new SelectionListener() {
                        public void widgetDefaultSelected(SelectionEvent e) {
                        }
@@ -268,20 +209,15 @@ public class SQLEditorPreferences extends PreferencePage
                        }
                });
 
-               comp = new Composite(main, SWT.NULL);
-               layoutData = new GridData();
-               layoutData.horizontalSpan = 2;
-               comp.setLayoutData(layoutData);
-
                numericColorEditor =
                        new ColorFieldEditor(
-                               "quantum.numeric.color", //$NON-NLS-1$
-                               Messages.getString("PreferencesPage.NumericTextColor"), //$NON-NLS-1$
-                               comp);
+                               PluginPreferences.NUMERIC_COLOR,
+                               Messages.getString(getClass(), "numericTextColor"), //$NON-NLS-1$
+                               main);
 
                boldNumeric = new Button(main, SWT.CHECK);
                boldNumeric.setSelection(numericFlag);
-               boldNumeric.setText(Messages.getString("PreferencesPage.Bold")); //$NON-NLS-1$
+               boldNumeric.setText(Messages.getString(getClass(), "bold")); //$NON-NLS-1$
                boldNumeric.addSelectionListener(new SelectionListener() {
                        public void widgetDefaultSelected(SelectionEvent e) {
                        }
@@ -313,29 +249,95 @@ public class SQLEditorPreferences extends PreferencePage
                numericColorEditor.setPreferencePage(this);
                numericColorEditor.setPreferenceStore(getPreferenceStore());
                numericColorEditor.load();
+               
+               // now for the switcheroo...
+               // reset the number of columns to 3
+               GridLayout innerLayout = new GridLayout();
+               innerLayout.numColumns = 3;
+               main.setLayout(innerLayout);
+    }
 
-               return main;
-       }
-       public void updateFontDisplay() {
+    /**
+     * @param main
+     */
+    private void createFontSelectionArea(Composite main) {
+        Group group = new Group(main, SWT.NONE);
+        group.setText(Messages.getString(getClass(), "font"));
+        GridLayout innerLayout = new GridLayout();
+               innerLayout.numColumns = 2;
+               group.setLayout(innerLayout);
+               group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               fontDisplay = new Label(group, SWT.NULL);
+               GridData data = new GridData(GridData.FILL_HORIZONTAL);
+               data.horizontalSpan = 2;
+               fontDisplay.setLayoutData(data);
+               
+               fontData = PreferenceConverter.getFontData(getPreferenceStore(), "quantum.font"); //$NON-NLS-1$
+               fontDialog = new FontDialog(getShell());
+               Button fontButton = new Button(group, SWT.PUSH);
+               fontButton.setText(Messages.getString(getClass(), "pickFont")); //$NON-NLS-1$
+               fontButton.addSelectionListener(new SelectionListener() {
+                       public void widgetDefaultSelected(SelectionEvent e) {
+                       }
+                       public void widgetSelected(SelectionEvent e) {
+                               if (fontData != null) {
+                    VersioningHelper.setFont(fontDialog, new FontData[] { fontData} );
+                               }
+                               FontData data = fontDialog.open();
+                               if (data != null) {
+                                       fontData = data;
+                                       updateFontDisplay();
+                               }
+                       }
+               });
+               Button defaultButton = new Button(group, SWT.PUSH);
+               defaultButton.setText(Messages.getString(getClass(), "defaultFont")); //$NON-NLS-1$
+               defaultButton.addSelectionListener(new SelectionListener() {
+                       public void widgetDefaultSelected(SelectionEvent e) {
+                       }
+                       public void widgetSelected(SelectionEvent e) {
+                               fontData = PluginPreferences.getDefaultFont();
+                               updateFontDisplay();
+                       }
+               });
+
+               updateFontDisplay();
+    }
+
+    /**
+     * @param main
+     */
+    private void createEmptyRow(Composite main) {
+        Label emptyLabel = new Label(main, SWT.NULL);
+               emptyLabel.setText("");
+               GridData gridData = new GridData();
+               gridData.horizontalSpan = 3;
+               emptyLabel.setLayoutData(gridData);
+    }
+
+    protected void updateFontDisplay() {
                if (fontData == null) {
-                       fontDisplay.setText(Messages.getString("PreferencesPage.Font_Default")); //$NON-NLS-1$
+                       fontDisplay.setText(Messages.getString(getClass(), "default")); //$NON-NLS-1$
                } else {
-                       String style = Messages.getString("PreferencesPage.regular"); //$NON-NLS-1$
+                       Object[] parameters = new Object[] { 
+                                       fontData.getName(), new Integer(fontData.getHeight()) };
+                       String style = Messages.getString(getClass(), "regularFont", parameters); //$NON-NLS-1$
                        if (fontData.getStyle() == SWT.BOLD) {
-                               style = Messages.getString("PreferencesPage.bold"); //$NON-NLS-1$
+                               style = Messages.getString(getClass(), "boldFont", parameters); //$NON-NLS-1$
                        } else if (fontData.getStyle() == SWT.ITALIC) {
-                               style = Messages.getString("PreferencesPage.italic"); //$NON-NLS-1$
+                               style = Messages.getString(getClass(), "italicFont", parameters); //$NON-NLS-1$
                        } else if (fontData.getStyle() == (SWT.BOLD | SWT.ITALIC)) {
-                               style = Messages.getString("PreferencesPage.boldItalic"); //$NON-NLS-1$
+                               style = Messages.getString(getClass(), "boldItalicFont", parameters); //$NON-NLS-1$
                        }
-                       fontDisplay.setText(Messages.getString("PreferencesPage.FontPrompt") + fontData.getName() + '-' + style + '-' + fontData.getHeight()); //$NON-NLS-1$
+                       fontDisplay.setText(style); //$NON-NLS-1$
                }
        }
-       public void updateFlags() {
-               boldText.setSelection(textFlag);
-               boldKeyword.setSelection(keywordFlag);
-               boldString.setSelection(stringFlag);
-               boldNumeric.setSelection(numericFlag);
-               boldComment.setSelection(commentFlag);
+       protected void updateFlags() {
+               this.boldText.setSelection(this.textFlag);
+               this.boldKeyword.setSelection(this.keywordFlag);
+               this.boldString.setSelection(this.stringFlag);
+               this.boldNumeric.setSelection(this.numericFlag);
+               this.boldComment.setSelection(this.commentFlag);
        }
 }
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/properties/DataTypesPropertyPage.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/properties/DataTypesPropertyPage.java
new file mode 100644 (file)
index 0000000..a1f5929
--- /dev/null
@@ -0,0 +1,156 @@
+package com.quantum.properties;
+
+import java.sql.SQLException;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.model.Bookmark;
+import com.quantum.model.DataType;
+import com.quantum.model.NotConnectedException;
+import com.quantum.view.bookmark.TreeNode;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+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.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+public class DataTypesPropertyPage extends PropertyPage {
+
+    protected Control createContents(Composite parent) {
+
+        Composite composite = new Composite(parent, SWT.NONE);
+        GridLayout layout = new GridLayout();
+        layout.numColumns = 2;
+        composite.setLayout(layout);
+        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+        Bookmark bookmark =
+            ((TreeNode) getElement()).getBookmark();
+        createTypesArea(composite, bookmark);
+        
+        return composite;
+       }
+
+       /**
+        * @param composite
+        * @param bookmark
+        */
+       private void createTypesArea(Composite composite, Bookmark bookmark) {
+               if (bookmark.isConnected()) {
+               try {
+                       DataType[] dataTypes = bookmark.getDatabase().getTypes();
+                       Label label = new Label(composite, SWT.NONE);
+                       label.setText(Messages.getString(getClass(), "dataTypes"));
+                       GridData data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING);
+                       data.horizontalSpan = 2;
+                       label.setLayoutData(data);
+               
+                       Table table = new Table(composite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
+                table.setHeaderVisible(true);
+                GridData gridData = new GridData(GridData.FILL_BOTH);
+                gridData.horizontalSpan = 2;
+                gridData.heightHint = 200;
+                gridData.widthHint = 100;
+                table.setLayoutData(gridData);
+                for (int i = 0, length = 6; i < length; i++) {
+                    TableColumn column = new TableColumn(table, SWT.NONE);
+                    column.setText(Messages.getString(getClass(), "column" + i));
+                }
+                       TableViewer viewer = new TableViewer(table);
+                       viewer.setContentProvider(new IStructuredContentProvider() {
+                                       public Object[] getElements(Object inputElement) {
+                                               if (inputElement instanceof DataType[]) {
+                                                       return (DataType[]) inputElement;
+                                               } else {
+                                                       return null;
+                                               }
+                                       }
+                                       public void dispose() {
+                                       }
+                                       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+                                       }
+                               });
+                       viewer.setLabelProvider(new ITableLabelProvider() {
+                                       public Image getColumnImage(Object element, int columnIndex) {
+                                               return null;
+                                       }
+                                       public String getColumnText(Object element, int columnIndex) {
+                                               String result = null;
+                                               if (element != null && element instanceof DataType) {
+                                                       DataType dataType = (DataType) element;
+                                                       switch (columnIndex) {
+                                                       case 0:
+                                                               result = dataType.getDatabaseTypeName();
+                                                               break;
+                                                       case 1:
+                                                               result = dataType.getJavaNameType();
+                                                               break;
+                                                       case 2:
+                                                               result = String.valueOf(dataType.getPrecision());
+                                                               break;
+                                                       case 3:
+                                                               result = dataType.getLiteralPrefix();
+                                                               break;
+                                                       case 4:
+                                                               result = dataType.getLiteralSuffix();
+                                                               break;
+                                                       case 5:
+                                                               result = dataType.getCreateParameters();
+                                                               break;
+                                                       default:
+                                                               result = null;
+                                                       }
+                                               }
+                                               return result == null ? "" : result;
+                                       }
+                                       public void addListener(ILabelProviderListener listener) {
+                                       }
+                                       public void dispose() {
+                                       }
+                                       public boolean isLabelProperty(Object element, String property) {
+                                               return false;
+                                       }
+                                       public void removeListener(ILabelProviderListener listener) {
+                                       }
+                       });
+                       
+                       viewer.setInput(dataTypes);
+                       
+                for (int i = 0, length = table.getColumnCount(); i < length; i++) {
+                    table.getColumn(i).pack();
+                }
+               
+               } catch (SQLException e) {
+                       createErrorMessage(composite, e);
+               } catch (NotConnectedException e) {
+                       createErrorMessage(composite, e);
+               } catch (RuntimeException e) {
+                       createErrorMessage(composite, e);
+                       }
+        }
+       }
+
+       /**
+        * @param composite
+        */
+       private void createErrorMessage(Composite composite, Exception e) {
+               Label icon = new Label(composite, SWT.NONE);
+               icon.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+               icon.setImage(ImageStore.getImage(ImageStore.WARNING));
+               
+               Label error = new Label(composite, SWT.NONE);
+               error.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+               error.setText(Messages.getString(getClass(), "error") 
+                               + (e.getMessage() == null ? "" : "\n" + e.getMessage()));
+       }
+}
\ No newline at end of file
index a61c93b..d60dcf9 100644 (file)
@@ -5,24 +5,15 @@ import java.sql.SQLException;
 import com.quantum.ImageStore;
 import com.quantum.Messages;
 import com.quantum.model.Bookmark;
-import com.quantum.model.DataType;
 import com.quantum.model.NotConnectedException;
 import com.quantum.view.bookmark.TreeNode;
 
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
-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.Control;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.dialogs.PropertyPage;
 
 public class DatabaseInformationPropertyPage extends PropertyPage {
@@ -43,99 +34,12 @@ public class DatabaseInformationPropertyPage extends PropertyPage {
             ((TreeNode) getElement()).getBookmark();
 
                createDatabaseNameArea(composite, bookmark);
-        createTypesArea(composite, bookmark);
         
         return composite;
        }
 
        /**
         * @param composite
-        * @param bookmark
-        */
-       private void createTypesArea(Composite composite, Bookmark bookmark) {
-               if (bookmark.isConnected()) {
-               try {
-                       DataType[] dataTypes = bookmark.getDatabase().getTypes();
-                       Label label = new Label(composite, SWT.NONE);
-                       label.setText(Messages.getString(getClass(), "dataTypes"));
-                       GridData data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING);
-                       data.horizontalSpan = 2;
-                       label.setLayoutData(data);
-               
-                       Table table = new Table(composite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER);
-                table.setHeaderVisible(true);
-                GridData gridData = new GridData(GridData.FILL_BOTH);
-                gridData.horizontalSpan = 2;
-                gridData.heightHint = 200;
-                table.setLayoutData(gridData);
-                for (int i = 0, length = 2; i < length; i++) {
-                    TableColumn column = new TableColumn(table, SWT.NONE);
-                    column.setText(Messages.getString(getClass(), "column" + i));
-                }
-                       TableViewer viewer = new TableViewer(table);
-                       viewer.setContentProvider(new IStructuredContentProvider() {
-                                       public Object[] getElements(Object inputElement) {
-                                               if (inputElement instanceof DataType[]) {
-                                                       return (DataType[]) inputElement;
-                                               } else {
-                                                       return null;
-                                               }
-                                       }
-                                       public void dispose() {
-                                       }
-                                       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-                                       }
-                               });
-                       viewer.setLabelProvider(new ITableLabelProvider() {
-                                       public Image getColumnImage(Object element, int columnIndex) {
-                                               return null;
-                                       }
-                                       public String getColumnText(Object element, int columnIndex) {
-                                               String result = null;
-                                               if (element != null && element instanceof DataType) {
-                                                       DataType dataType = (DataType) element;
-                                                       switch (columnIndex) {
-                                                       case 0:
-                                                               result = dataType.getDatabaseTypeName();
-                                                               break;
-                                                       case 1:
-                                                               result = dataType.getJavaNameType();
-                                                               break;
-                                                       default:
-                                                               result = null;
-                                                       }
-                                               }
-                                               return result == null ? "" : result;
-                                       }
-                                       public void addListener(ILabelProviderListener listener) {
-                                       }
-                                       public void dispose() {
-                                       }
-                                       public boolean isLabelProperty(Object element, String property) {
-                                               return false;
-                                       }
-                                       public void removeListener(ILabelProviderListener listener) {
-                                       }
-                       });
-                       
-                       viewer.setInput(dataTypes);
-                       
-                for (int i = 0, length = table.getColumnCount(); i < length; i++) {
-                    table.getColumn(i).pack();
-                }
-               
-               } catch (SQLException e) {
-                       createErrorMessage(composite, e);
-               } catch (NotConnectedException e) {
-                       createErrorMessage(composite, e);
-               } catch (RuntimeException e) {
-                       createErrorMessage(composite, e);
-                       }
-        }
-       }
-
-       /**
-        * @param composite
         */
        private void createErrorMessage(Composite composite, Exception e) {
                Label icon = new Label(composite, SWT.NONE);
index 75d9363..a7ad73e 100644 (file)
@@ -1,6 +1,7 @@
 package com.quantum.sql;
 
 import java.sql.Connection;
+import java.sql.SQLException;
 
 import com.quantum.model.Bookmark;
 import com.quantum.model.ConnectionException;
@@ -14,6 +15,6 @@ public interface ConnectionEstablisher {
     public Connection connect(Bookmark bookmark, PasswordFinder passwordFinder) 
         throws ConnectionException;
     public void disconnect(Connection connection)
-        throws ConnectionException;
+        throws SQLException;
 
 }
index f5eb590..8875a1d 100644 (file)
@@ -69,13 +69,9 @@ public class MultiSQLServer implements ConnectionEstablisher {
         }
     }
 
-    public void disconnect(Connection connection) throws ConnectionException {
-        try {
-            if (connection != null) {
-                connection.close();
-            }
-        } catch (SQLException e) {
-            throw new ConnectionException(e);
+    public void disconnect(Connection connection) throws SQLException {
+        if (connection != null) {
+            connection.close();
         }
     }
 
index 61b3333..3835511 100644 (file)
@@ -42,10 +42,12 @@ public class SQLMetaDataResults extends SQLResultSetResults {
 
                List columns = new ArrayList();
                columns.add(new Column("ColumnName", "", 0)); //$NON-NLS-1$
-               columns.add(new Column("Type", "", 0)); //$NON-NLS-1$
+               columns.add(new Column("Type Name", "", 0)); //$NON-NLS-1$
                columns.add(new Column("Size", "", 0)); //$NON-NLS-1$
+               columns.add(new Column("Scale", "", 0)); //$NON-NLS-1$
                columns.add(new Column("Nullable", "", 0)); //$NON-NLS-1$
                columns.add(new Column("AutoIncrement", "", 0)); //$NON-NLS-1$
+               columns.add(new Column("Type", "", 0)); //$NON-NLS-1$
                setColumns((Column[]) columns.toArray(new Column[columns.size()]));
                
                ResultSetMetaData metaData = set.getMetaData();
@@ -55,14 +57,15 @@ public class SQLMetaDataResults extends SQLResultSetResults {
                        Vector row = new Vector();
                        row.addElement(metaData.getColumnName(i));
                        row.addElement(metaData.getColumnTypeName(i));
-                       int textSize = metaData.getColumnDisplaySize(i);
                        int precision = metaData.getPrecision(i);
-                       int scale = metaData.getScale(i);
-                       if (scale == 0 && precision == 0) {
-                               row.addElement(Integer.toString(precision));
-                       } else {
-                               row.addElement(textSize + ", " + precision + ", " + scale); //$NON-NLS-1$ //$NON-NLS-2$
+                       if (precision == 0) {
+                               precision = metaData.getColumnDisplaySize(i);
                        }
+                       int scale = metaData.getScale(i);
+                       
+                       row.addElement(new Integer(precision));
+                       row.addElement(new Integer(scale));
+                       
                        int nullable = metaData.isNullable(i);
                        if (nullable == ResultSetMetaData.columnNoNulls) {
                                row.addElement("Not Null"); //$NON-NLS-1$
@@ -80,9 +83,9 @@ public class SQLMetaDataResults extends SQLResultSetResults {
                                        : Boolean.FALSE)
                                        .toString());
                        rowList.add(new Row(row));
+                       row.addElement(new Integer(metaData.getColumnType(i)));
                }
                setRows((Row[]) rowList.toArray(new Row[rowList.size()]));
-               set.close();
        }
 
        public boolean isMetaData() {
index 7358b26..1a21e00 100644 (file)
@@ -108,7 +108,7 @@ public class SQLStandardResultSetResults extends SQLResultSetResults implements
                                                        value = set.getString(i);
                                                }
                                        }
-                                       if (value == null) {
+                                       if (value == null && !set.wasNull()) {
                                                value = set.getString(i);
                                        }
                                        row.add(value == null || set.wasNull() ? "<NULL>" : value); //$NON-NLS-1$
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/parser/DropEntityStatement.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/sql/parser/DropEntityStatement.java
new file mode 100644 (file)
index 0000000..61edb06
--- /dev/null
@@ -0,0 +1,46 @@
+package com.quantum.sql.parser;
+
+import com.quantum.model.Entity;
+
+
+/**
+ * Drop a table, view or sequence.
+ * 
+ * @author BC Holmes
+ */
+public class DropEntityStatement implements SQL {
+
+       private String tableName;
+       private String type = Entity.TABLE_TYPE;
+       private String dependentRule = "";
+       
+       /**
+        * @see com.quantum.sql.parser.SQL#getCommand()
+        */
+       public String getCommand() {
+               return "DROP " + getType().toUpperCase();
+       }
+       
+       public String getTableName() {
+               return this.tableName;
+       }
+       public void setTableName(String tableName) {
+               this.tableName = tableName;
+       }
+       
+       public String toString() {
+               return getCommand() + " " + getTableName() + " " + this.dependentRule;
+       }
+       public String getType() {
+               return this.type;
+       }
+       public void setType(String type) {
+               this.type = type;
+       }
+       public String getDependentRule() {
+               return this.dependentRule;
+       }
+       public void setDependentRule(String dependentRule) {
+               this.dependentRule = dependentRule;
+       }
+}
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/ui/dialog/SQLExceptionDialog.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/ui/dialog/SQLExceptionDialog.java
new file mode 100644 (file)
index 0000000..91a77a3
--- /dev/null
@@ -0,0 +1,66 @@
+package com.quantum.ui.dialog;
+
+import java.sql.SQLException;
+
+import com.quantum.Messages;
+import com.quantum.model.Bookmark;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+
+
+/**
+ * @author BC Holmes
+ */
+public class SQLExceptionDialog extends MessageDialog {
+
+       private final SQLException sqlException;
+
+       /**
+        * @param parentShell
+        * @param dialogTitle
+        * @param sqlException
+        */
+       private SQLExceptionDialog(Shell parentShell, String dialogTitle, 
+                       SQLException sqlException) {
+               super(parentShell, dialogTitle, null, sqlException.getLocalizedMessage(), ERROR,
+                               new String[]{IDialogConstants.OK_LABEL}, 0);
+               this.sqlException = sqlException;
+       }
+
+       protected Control createCustomArea(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NONE);
+               composite.setLayout(new GridLayout(2, false));
+               composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               
+               Label label = new Label(composite, SWT.NONE);
+               label.setText(Messages.getString(SQLExceptionDialog.class, "sqlState"));
+               label = new Label(composite, SWT.NONE);
+               label.setText(this.sqlException.getSQLState() == null 
+                               ? "" : this.sqlException.getSQLState());
+
+               label = new Label(composite, SWT.NONE);
+               label.setText(Messages.getString(SQLExceptionDialog.class, "errorCode"));
+               label = new Label(composite, SWT.NONE);
+               label.setText(String.valueOf(this.sqlException.getErrorCode()));
+               return composite;
+       }
+       
+       public static void openException(Shell shell, Bookmark bookmark, SQLException sqlException) {
+               SQLExceptionDialog dialog = new SQLExceptionDialog(shell, 
+                               bookmark == null 
+                                       ? Messages.getString(SQLExceptionDialog.class, "title") 
+                                       : Messages.getString(
+                                                       SQLExceptionDialog.class, "titleWithBookmark", 
+                                                       new Object[] { bookmark.getDisplayName() }), 
+                               sqlException);
+               dialog.open();
+       }
+}
index ecfe620..8c775a3 100644 (file)
@@ -1,6 +1,7 @@
 package com.quantum.util.connection;
 
 import java.sql.Connection;
+import java.sql.SQLException;
 
 import com.quantum.Messages;
 import com.quantum.model.Bookmark;
@@ -8,6 +9,7 @@ import com.quantum.model.ConnectionException;
 import com.quantum.model.NotConnectedException;
 import com.quantum.ui.dialog.ExceptionDisplayDialog;
 import com.quantum.ui.dialog.PasswordDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 
 import org.eclipse.swt.widgets.Shell;
 
@@ -16,7 +18,7 @@ import org.eclipse.swt.widgets.Shell;
  * interactions such as providing messages to the user and/or prompting for a 
  * password.
  * 
- * @author BC
+ * @author BC Holmes
  */
 public class ConnectionUtil {
 
@@ -35,10 +37,14 @@ public class ConnectionUtil {
         try {
             connection = bookmark.connect(PasswordDialog.createPasswordFinder(shell));
         } catch (ConnectionException e) {
-            ExceptionDisplayDialog.openError(shell, 
-                Messages.getString(getClass().getName() + ".title"), 
-                Messages.getString(getClass().getName() + ".message") +
-                               " (Bookmark:"+bookmark.getName()+")", e);
+               if (e.getCause() != null && e.getCause() instanceof SQLException) {
+                       SQLExceptionDialog.openException(shell, bookmark, (SQLException) e.getCause());
+               } else {
+                   ExceptionDisplayDialog.openError(shell, 
+                       Messages.getString(getClass().getName() + ".title"), 
+                       Messages.getString(getClass().getName() + ".message") +
+                                       " (Bookmark:"+bookmark.getName()+")", e);
+               }
         }
         return connection;
     }
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/util/sql/SQLStates.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/util/sql/SQLStates.java
new file mode 100644 (file)
index 0000000..0850412
--- /dev/null
@@ -0,0 +1,18 @@
+package com.quantum.util.sql;
+
+
+/**
+ * @author BC Holmes
+ */
+public abstract class SQLStates {
+       
+       /**
+        * The driver does not support the requested operation.  This SQL code is returned 
+        * by MS Access (and possibly others) when calling JDBC functions that are not 
+        * implemented by the driver.
+        */
+       public static final String ODBC_DRIVER_NOT_CAPABLE = "S1C00";
+
+       private SQLStates() {
+       }
+}
index 0b14583..fd3348e 100644 (file)
@@ -1,16 +1,20 @@
 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.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;
@@ -19,11 +23,13 @@ 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;
@@ -36,12 +42,15 @@ 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.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.Display;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IWorkbenchActionConstants;
@@ -87,7 +96,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 +119,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 +167,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");
 
@@ -228,12 +244,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() {
@@ -271,8 +287,6 @@ public class SQLQueryView extends ViewPart {
                widget.setText(text);
        }
        
-       SyntaxHighlighter textUpdater = new SyntaxHighlighter();
-       
        private class UpdateRequest {
                public UpdateRequest(String text, int start, int length) {
                        this.text = text;
@@ -285,21 +299,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 +350,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 +384,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);
                                        }
index 4a7fa72..c6e21cf 100644 (file)
@@ -19,6 +19,7 @@ import com.quantum.model.ConnectionException;
 import com.quantum.model.NotConnectedException;
 import com.quantum.model.Schema;
 import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.ui.dialog.SimpleSelectionDialog;
 import com.quantum.util.connection.ConnectionUtil;
 
@@ -273,7 +274,7 @@ public class SchemaSelectionControl extends Composite {
         } catch (ConnectionException e) {
             ExceptionDisplayDialog.openError(getShell(), null, null, e);
         } catch (SQLException e) {
-            ExceptionDisplayDialog.openError(getShell(), null, null, e);
+            SQLExceptionDialog.openException(getShell(), bookmark, e);
                }
     }
     
index 252c0a8..7733294 100644 (file)
@@ -15,6 +15,7 @@ import com.quantum.QuantumPlugin;
 import com.quantum.model.Bookmark;
 import com.quantum.sql.MultiSQLServer;
 import com.quantum.sql.SQLResults;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.swt.SWT;
@@ -41,7 +42,7 @@ public class ViewHelper {
                } catch (SQLException e) {
                        LogProxy log = LogProxy.getInstance();
                        log.addText(LogProxy.ERROR, e.getLocalizedMessage(), e); //$NON-NLS-1$ //$NON-NLS-2$
-                       MessageDialog.openConfirm(shell, "Database returned error", e.getLocalizedMessage());  //$NON-NLS-1$                                                    
+            SQLExceptionDialog.openException(shell, bookmark, e);
                        return null;
                }
        }
index 79d70bf..680a382 100644 (file)
@@ -4,6 +4,7 @@ import java.sql.SQLException;
 
 import com.quantum.model.NotConnectedException;
 import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
@@ -20,14 +21,14 @@ public class BookmarkContentProvider implements ITreeContentProvider {
        
     
        public Object[] getChildren(Object element) {
-               if (element instanceof TreeNode) {
+               if (element != null && element instanceof TreeNode) {
                        TreeNode node = (TreeNode) element;
                        try {
                                return node.getChildren();
                        } catch (NotConnectedException e) {
                                ExceptionDisplayDialog.openError(getShell(), null, null, e);
                        } catch (SQLException e) {
-                               ExceptionDisplayDialog.openError(getShell(), null, null, e);
+                               SQLExceptionDialog.openException(getShell(), node.getBookmark(), e);
                        }
                }
                return BookmarkListNode.EMPTY_ARRAY;
index aca7002..852745c 100644 (file)
@@ -8,7 +8,6 @@ import java.util.Iterator;
 import java.util.Map;
 
 import com.quantum.model.Bookmark;
-import com.quantum.model.ConnectionException;
 import com.quantum.model.NotConnectedException;
 import com.quantum.model.Schema;
 
@@ -97,7 +96,7 @@ public class BookmarkNode extends TreeNode implements PropertyChangeListener {
             if (this.bookmark.isConnected()) {
                 this.bookmark.disconnect();
             }
-        } catch (ConnectionException e) {
+        } catch (SQLException e) {
         }
        }
 
index 3af90bd..2cd661c 100644 (file)
@@ -3,10 +3,10 @@ package com.quantum.view.bookmark;
 import java.util.Iterator;
 
 import com.quantum.ImageStore;
+import com.quantum.Messages;
 import com.quantum.actions.AddToQuickListAction;
 import com.quantum.actions.ConnectAction;
 import com.quantum.actions.DeleteAllRowsAction;
-import com.quantum.actions.DeleteBookmarkAction;
 import com.quantum.actions.DisconnectAction;
 import com.quantum.actions.NewBookmarkAction;
 import com.quantum.actions.NextSequenceAction;
@@ -20,12 +20,19 @@ import com.quantum.model.Bookmark;
 import com.quantum.util.versioning.VersioningHelper;
 
 import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
 import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuCreator;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IWorkbenchActionConstants;
@@ -36,19 +43,52 @@ import org.eclipse.ui.actions.SelectionProviderAction;
 import org.eclipse.ui.dialogs.PropertyDialogAction;
 
 /**
- * @author BC
+ * This class manages the list of actions for the bookmark view.
+ * 
+ * @author BC Holmes
  */
 public class BookmarkViewActionGroup extends ActionGroup 
     implements BookmarkClipboard {
+       
+       class SQLAction extends Action implements IMenuCreator {
+               public SQLAction() {
+                       setText(Messages.getString(BookmarkViewActionGroup.class, "sqlAction.text"));
+                       setMenuCreator(this);
+               }
+               public void dispose() {
+               }
+               public Menu getMenu(Control parent) {
+                       return null;
+               }
+               public Menu getMenu(Menu parent) {
+                       Menu menu = new Menu(parent);
+                       /**
+                        * Add listener to repopulate the menu each time
+                        * it is shown because the list of bookmarks may have changed.
+                        */
+                       menu.addMenuListener(new MenuAdapter() {
+                               public void menuShown(MenuEvent event) {
+                                       Menu menu = (Menu) event.widget;
+                                       MenuItem[] items = menu.getItems();
+                                       for (int i=0; i < items.length; i++) {
+                                               items[i].dispose();
+                                       }
+                                       fillSQLMenu(menu);
+                               }
+                       });
+                       return menu;
+               }
+       }
         
     private Bookmark bookmarkClipboard;
     
     private Action newBookmarkAction;
+    private Action sqlAction;
     
     // bookmark node actions
     private SelectionListenerAction connectAction;
     private SelectionListenerAction disconnectAction;
-    private SelectionListenerAction deleteBookmarkAction;
+    private SelectionListenerAction deleteAction;
 
     // Query node actions
     private SelectionListenerAction openQueryAction;
@@ -62,6 +102,9 @@ public class BookmarkViewActionGroup extends ActionGroup
     private SelectionListenerAction nextSequenceAction;
     private SelectionListenerAction previousSequenceAction;
     
+
+    private SelectionListenerAction dropAction;
+    
     
     // other actions
     private SelectionListenerAction refreshAction;
@@ -87,7 +130,8 @@ public class BookmarkViewActionGroup extends ActionGroup
         // bookmark actions
         this.connectAction = new ConnectAction(this.viewPart);
         this.disconnectAction = new DisconnectAction(this.viewPart);
-        this.deleteBookmarkAction = new DeleteBookmarkAction(this.viewPart);
+        
+        this.sqlAction = new SQLAction();
 
         // entity actions
         this.previousSequenceAction = new PrevSequenceAction(this.viewPart);
@@ -104,16 +148,22 @@ public class BookmarkViewActionGroup extends ActionGroup
         this.renameAction = new RenameAction(this.viewPart);
         this.copyAction = new CopyAction(this.viewPart, this, selectionProvider);
         this.pasteAction = new PasteAction(this.viewPart, this, selectionProvider);
+        this.deleteAction = new DeleteAction(this.viewPart, selectionProvider);
         this.exportAction = VersioningHelper.createExportResourcesAction(
                        this.viewPart.getViewSite().getWorkbenchWindow());
         this.exportAction.setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.EXPORT));
         
+        this.dropAction = new DropEntityAction(this.viewPart);
+        
         this.propertiesAction = new PropertyDialogAction(
             this.viewPart.getSite().getShell(), selectionProvider);
     }
 
     
     /**
+     * Add all the appropriate actions to the popup menu. This method is 
+     * called whenever someone right-clicks on an object in the bookmark view.
+     * 
      * @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
      */
     public void fillContextMenu(IMenuManager menu) {
@@ -133,7 +183,7 @@ public class BookmarkViewActionGroup extends ActionGroup
         // TODO: paste needs to change enablement whenever something is added
         //       to the clipboard
         addToMenu(menu, this.pasteAction);
-        addToMenu(menu, this.deleteBookmarkAction);
+        addToMenu(menu, this.deleteAction);
 
         if (getStructuredSelection().size() == 1 && 
             isEverySelectionInstanceof(BookmarkNode.class)) {
@@ -143,7 +193,7 @@ public class BookmarkViewActionGroup extends ActionGroup
 
         menu.add(new Separator());
 
-        // NOTE: In Eclipse 3.0.0 M6, Export is no longer a sub-class of 
+        // NOTE: In Eclipse 3.0, Export is no longer a sub-class of 
         //       SelectionListenerAction.
         if (this.exportAction != null) {
                this.exportAction.selectionChanged(getStructuredSelection());
@@ -178,6 +228,11 @@ public class BookmarkViewActionGroup extends ActionGroup
             
             addToMenu(menu, this.addToQuickListAction);
             addToMenu(menu, this.removeFromQuickListAction);
+            
+            if (getStructuredSelection().size() == 1) {
+               menu.add(new Separator());
+               menu.add(this.sqlAction);
+            }
         }
         
         if (getStructuredSelection().size() == 1) {
@@ -190,7 +245,19 @@ public class BookmarkViewActionGroup extends ActionGroup
         if (getStructuredSelection().size() == 1) {
             addToMenu(menu, this.propertiesAction);
         }
-        
+    }
+    
+    protected void fillSQLMenu(Menu parent) {
+        if (getStructuredSelection().size() > 0 && 
+                isEverySelectionInstanceof(EntityNode.class)) {
+               addToMenu(parent, this.dropAction);
+        }
+    }
+
+    private void addToMenu(Menu menu, SelectionListenerAction action) {
+        action.selectionChanged(getStructuredSelection());
+               ActionContributionItem item = new ActionContributionItem(action);
+               item.fill(menu, -1);
     }
     
     private void addToMenu(IMenuManager menu, SelectionListenerAction action) {
@@ -244,6 +311,7 @@ public class BookmarkViewActionGroup extends ActionGroup
         toolBar.add(this.newBookmarkAction);
         
         actionBars.setGlobalActionHandler(IWorkbenchActionConstants.COPY, this.copyAction);
+        actionBars.setGlobalActionHandler(IWorkbenchActionConstants.DELETE, this.deleteAction);
     }
 
 
index 2894c03..d1f53af 100644 (file)
@@ -61,4 +61,11 @@ public class ColumnNode extends TreeNode {
         return column;
     }
 
+    void setColumn(Column column) {
+       if (this.column == null || !this.column.equals(column)) {
+               Column original = column;
+               this.column = column;
+               firePropertyChange("column", original, column);
+       }
+    }
 }
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/DeleteAction.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/DeleteAction.java
new file mode 100644 (file)
index 0000000..c38ba7a
--- /dev/null
@@ -0,0 +1,88 @@
+package com.quantum.view.bookmark;
+
+import java.util.Iterator;
+import java.util.List;
+
+import com.quantum.ImageStore;
+import com.quantum.Messages;
+import com.quantum.model.BookmarkCollection;
+
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.actions.SelectionListenerAction;
+
+/**
+ * @author root
+ *
+ */
+public class DeleteAction extends SelectionListenerAction {
+    
+    private IViewPart view;
+    
+       public DeleteAction(IViewPart view, ISelectionProvider selectionProvider) {
+        super(Messages.getString(DeleteAction.class.getName() + ".text"));
+        setImageDescriptor(ImageStore.getImageDescriptor(ImageStore.DELETE));
+               this.view = view;
+               selectionProvider.addSelectionChangedListener(this);
+       }
+
+       public void run() {
+               if (isEachSelectionInstanceOf(getSelectedNonResources().iterator(), BookmarkNode.class)) {
+                       deleteBookmarks();
+               } else if (isEachSelectionInstanceOf(getSelectedNonResources().iterator(), QueryNode.class)) {
+                       deleteQueries();
+               }
+       }
+
+       /**
+        * 
+        */
+       private void deleteQueries() {
+               List nodes = getSelectedNonResources();
+               for (Iterator i = nodes.iterator(); i.hasNext();) {
+                   QueryNode queryNode = (QueryNode) i.next();
+                   if (queryNode != null) {
+                       queryNode.getBookmark().removeQuery(queryNode.getQuery());
+                   }
+               }
+       }
+
+       /**
+        * 
+        */
+       private void deleteBookmarks() {
+               List bookmarkNodes = getSelectedNonResources();
+               boolean flag = MessageDialog.openConfirm(view.getSite().getShell(), 
+                               Messages.getString(getClass(), "confirmTitle"), 
+                               Messages.getString(getClass(), "confirmText")); 
+
+               for (Iterator i = bookmarkNodes.iterator(); flag && i.hasNext();) {
+                   BookmarkNode bookmarkNode = (BookmarkNode) i.next();
+                   if (bookmarkNode != null) {
+                       BookmarkCollection.getInstance().removeBookmark(bookmarkNode.getBookmark());
+                   }
+               }
+       }
+
+       public boolean updateSelection(IStructuredSelection selection) {
+        return isEachSelectionInstanceOf(selection.iterator(), BookmarkNode.class) || 
+                       isEachSelectionInstanceOf(selection.iterator(), QueryNode.class);
+       }
+
+       /**
+        * @param selection
+        * @param enabled
+        * @param selectionClass
+        * @return
+        */
+       private boolean isEachSelectionInstanceOf(Iterator selection, Class selectionClass) {
+               boolean result = true;
+               for (Iterator i = selection; result && i.hasNext(); ) {
+            result &= (selectionClass.isInstance(i.next()));
+        }
+               return result;
+       }
+
+}
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/DropEntityAction.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/bookmark/DropEntityAction.java
new file mode 100644 (file)
index 0000000..f8f2e80
--- /dev/null
@@ -0,0 +1,81 @@
+package com.quantum.view.bookmark;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.quantum.Messages;
+import com.quantum.actions.BaseExecuteAction;
+import com.quantum.model.Bookmark;
+import com.quantum.model.Entity;
+import com.quantum.model.EntityHolder;
+import com.quantum.sql.parser.DropEntityStatement;
+import com.quantum.wizards.sql.DropEntityWizardPage;
+import com.quantum.wizards.sql.SQLStatementWizard;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewPart;
+
+
+/**
+ * Drop a table.
+ * 
+ * @author BC Holmes
+ */
+public class DropEntityAction extends BaseExecuteAction {
+
+       private final IViewPart view;
+       private DropEntityStatement statement = new DropEntityStatement();
+
+       public DropEntityAction(IViewPart view) {
+               this.view = view;
+               setText(Messages.getString(getClass(), "text"));
+       }
+       
+       public void run() {
+               Entity entity = getEntity();
+               if (entity != null) {
+                       this.statement.setTableName(entity.getQuotedTableName());
+                       this.statement.setType(entity.getType());
+               }
+               
+               DropEntityWizardPage page = new DropEntityWizardPage("page1", this.statement);
+               SQLStatementWizard wizard = new SQLStatementWizard(new WizardPage[] { page }, this.statement);
+               
+               WizardDialog dialog = new WizardDialog(this.view.getViewSite().getShell(), wizard);
+               if (WizardDialog.OK == dialog.open()) {
+                       super.run();
+               }
+       }
+       protected Shell getShell() {
+               return this.view.getViewSite().getShell();
+       }
+
+       protected Bookmark getBookmark() {
+               Entity entity = getEntity();
+               return entity != null ? entity.getBookmark() : super.getBookmark();
+       }
+       protected List getQueries() throws IOException, CoreException {
+               List list = new ArrayList();
+               list.add(this.statement.toString());
+               return list;
+       }
+       
+       protected Entity getEntity() {
+               List list = getSelectedNonResources();
+               return list == null || list.isEmpty() ? null : ((EntityHolder) list.get(0)).getEntity();
+       }
+
+       protected IStatusLineManager getStatusLineManager() {
+               return this.view.getViewSite().getActionBars().getStatusLineManager();
+       }
+
+       protected boolean updateSelection(IStructuredSelection selection) {
+               return !selection.isEmpty();
+       }
+}
index eb9d742..9d59f71 100644 (file)
@@ -1,6 +1,12 @@
 package com.quantum.view.bookmark;
 
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 import com.quantum.model.Column;
 import com.quantum.model.Entity;
@@ -18,6 +24,10 @@ public class EntityNode extends TreeNode implements EntityHolder {
     private Entity entity;
     private boolean longFormName;
     
+    private List columns = Collections.synchronizedList(new ArrayList());
+    private List foreignKeys = Collections.synchronizedList(new ArrayList());
+    boolean initialized = false;
+    
     public EntityNode(TreeNode parent, Entity entity) {
         this(parent, entity, false);
     }
@@ -35,7 +45,10 @@ public class EntityNode extends TreeNode implements EntityHolder {
     }
 
     public Object[] getChildren() throws NotConnectedException, SQLException {
-        initializeChildren();
+        if (!isInitialized()) {
+               initializeChildren();
+        }
+       
         if (this.children.size() > 0) {
             return (ColumnNode[]) this.children.toArray(new ColumnNode[this.children.size()]);
         } else {
@@ -44,14 +57,35 @@ public class EntityNode extends TreeNode implements EntityHolder {
     }
 
     protected synchronized void initializeChildren() throws NotConnectedException, SQLException {
-        this.children.clear();
+       boolean wasInitialized = isInitialized();
+        Map map = getChildrenAsMap();
         Column[] columns = this.entity.getColumns();
+        this.children.clear();
         for (int i = 0, length = (columns == null) ? 0 : columns.length;
             i < length;
             i++) {
-            this.children.add(new ColumnNode(this, columns[i]));
+               
+               ColumnNode node = (ColumnNode) map.get(columns[i].getName());
+               if (node == null) {
+                       this.children.add(new ColumnNode(this, columns[i]));
+               } else {
+                       node.setColumn(columns[i]);
+                       this.children.add(node);
+               }
+               
+               if (wasInitialized) {
+                       firePropertyChange("columns", null, null);
+               }
         }
-        // TODO: fire property change event
+    }
+    
+    private Map getChildrenAsMap() {
+       Map map = new HashMap();
+       for (Iterator i = this.children.iterator(); i.hasNext();) {
+                       TreeNode node = (TreeNode) i.next();
+                       map.put(node.getName(), node);
+               }
+       return map;
     }
 
     public boolean hasChildren() {
@@ -128,4 +162,7 @@ public class EntityNode extends TreeNode implements EntityHolder {
             return super.compareTo(o);
         }
     }
+       void setEntity(Entity entity) {
+               this.entity = entity;
+       }
 }
index 974dcd7..354edd3 100644 (file)
@@ -1,7 +1,3 @@
-/*
- * Created on 27/06/2003
- *
- */
 package com.quantum.view.bookmark;
 
 import java.sql.SQLException;
@@ -26,12 +22,17 @@ import com.quantum.model.SchemaHolder;
 public class GroupNode extends TreeNode implements Comparable, SchemaHolder {
        private String type = null;
     private Schema schema = null;
+    private boolean initialized = false;
 
        public GroupNode(TreeNode parent, Schema schema, String type) {
         super(parent);
         this.schema = schema;
                this.type = type;
        }
+       
+       protected boolean isInitialized() {
+               return this.initialized;
+       }
        public boolean hasChildren() {
                if (!isInitialized()) {
                        return true;
@@ -48,7 +49,6 @@ public class GroupNode extends TreeNode implements Comparable, SchemaHolder {
     protected void initializeChildren() {
         try {
             boolean firstTimeInitialization = !isInitialized();
-            boolean changed = false;
             Map temp = new HashMap();
             for (Iterator i = this.children.iterator(); i.hasNext();) {
                 TreeNode treeNode = (TreeNode) i.next();
@@ -67,15 +67,21 @@ public class GroupNode extends TreeNode implements Comparable, SchemaHolder {
                 EntityNode entityNode = (EntityNode) temp.remove(name);
                 if (entityNode == null) {
                     this.children.add(new EntityNode(this, entities[i]));
-                    changed = true;
                 } else {
+                       entityNode.setEntity(entities[i]);
                     this.children.add(entityNode);
                 }
             }
+            for (Iterator i = temp.values().iterator(); i.hasNext();) {
+                               ((TreeNode) i.next()).dispose();
+                       }
+            
             Collections.sort(this.children);
-            if ((temp.size() > 0 || changed ) && !firstTimeInitialization) {
+            if (!firstTimeInitialization) {
                 firePropertyChange("children", null, null);
             }
+            
+            this.initialized = true;
         } catch (SQLException e) {
         }
     }
@@ -91,4 +97,7 @@ public class GroupNode extends TreeNode implements Comparable, SchemaHolder {
     public Schema getSchema() {
         return schema;
     }
+       public String getType() {
+               return this.type;
+       }
 }
index 4826003..2615a0a 100644 (file)
@@ -24,6 +24,9 @@ public class QueryNode extends TreeNode {
         String name = this.query.trim();
         boolean trimmed = false;
         name = name.replace('\n', ' ');
+        name = name.replace('\f', ' ');
+        name = name.replace('\r', ' ');
+        name = name.replace('\t', ' ');
         
         if (name.length() > MAX_SIZE) {
             name = name.substring(0, MAX_SIZE);
index 4b6f3c3..5181d2e 100644 (file)
@@ -1,6 +1,9 @@
 package com.quantum.view.bookmark;
 
 import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 
 import com.quantum.model.Bookmark;
 import com.quantum.model.NotConnectedException;
@@ -37,14 +40,35 @@ public class SchemaNode extends TreeNode implements SchemaHolder {
     }
 
     protected void initializeChildren() {
+       boolean firstTimeInitialization = this.children.isEmpty();
+       boolean changed = false;
+        Map temp = new HashMap();
+        for (Iterator i = this.children.iterator(); i.hasNext();) {
+                       GroupNode element = (GroupNode) i.next();
+                       temp.put(element.getType(), element);
+               }
         this.children.clear();
+        
         Bookmark bookmark = getBookmark();
         try {
             String[] types = bookmark.getDatabase().getEntityTypes();
             for (int i = 0, length = (types == null) ? 0 : types.length;
                 i < length;
                 i++) {
-                this.children.add(new GroupNode(this, this.schema, types[i]));
+               GroupNode node = (GroupNode) temp.remove(types[i]);
+               if (node == null) {
+                       this.children.add(new GroupNode(this, this.schema, types[i]));
+                       changed = true;
+               } else {
+                       this.children.add(node);
+               }
+            }
+            for (Iterator i = temp.values().iterator(); i.hasNext();) {
+                               ((GroupNode) i.next()).dispose();
+                               changed = true;
+                       }
+            if (!firstTimeInitialization && changed) {
+               firePropertyChange("children", null, null);
             }
         } catch (NotConnectedException e) {
         } catch (SQLException e) {
@@ -69,9 +93,7 @@ public class SchemaNode extends TreeNode implements SchemaHolder {
      * @see com.quantum.view.bookmark.TreeNode#getImageName()
      */
     protected String getImageName() {
-        return this.schema.isDefault() 
-                       ? "user.gif" 
-                       :  this.schema.exists() 
+        return this.schema.exists() 
                                ? "schema.gif" 
                                : "missingschema.gif";
     }
index e3bf412..e4130b0 100644 (file)
@@ -36,7 +36,7 @@ public abstract class TreeNode
        public abstract String getName();
 
     public Bookmark getBookmark() {
-        return getParent().getBookmark();
+        return getParent() == null ? null : getParent().getBookmark();
     }
     
     public String getLabelName() {
@@ -99,6 +99,7 @@ public abstract class TreeNode
     protected void dispose() {
         this.disposed = true;
         removeAllChildren();
+//        this.parent = null;
     }
     protected void removeAllChildren() {
         for (Iterator i = this.children.iterator(); i.hasNext();) {
@@ -115,6 +116,7 @@ public abstract class TreeNode
         return null;
     }
     protected abstract void initializeChildren() throws SQLException, NotConnectedException;
+    
     public void reload() throws NotConnectedException, SQLException {
         if (isInitialized()) {
             initializeChildren();
index 7d6fcf7..cfa3fbe 100644 (file)
@@ -1,6 +1,5 @@
 package com.quantum.view.subset;
 
-import com.quantum.IQuantumConstants;
 import com.quantum.Messages;
 import com.quantum.model.Entity;
 import com.quantum.model.EntityHolder;
@@ -31,7 +30,7 @@ public class ObjectNode implements Comparable, EntityHolder {
        public ObjectNode(){
        }
        public String getType(){
-               return IQuantumConstants.View;
+               return Entity.VIEW_TYPE;
        }
 
        /* (non-Javadoc)
index 03a7f55..8be4378 100644 (file)
@@ -5,6 +5,7 @@ import java.sql.SQLException;
 
 import com.quantum.sql.SQLResultSetResults;
 import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.util.connection.ConnectionUtil;
 
 import org.eclipse.jface.viewers.ISelectionProvider;
@@ -40,7 +41,7 @@ public abstract class ResultSetAction extends SelectionListenerAction {
                                executeResultSetAction(results);
                        }
                } catch (SQLException e) {
-                       ExceptionDisplayDialog.openError(getShell(), null, null, e);
+                       SQLExceptionDialog.openException(getShell(), null, e);
                } catch (RuntimeException e) {
                        ExceptionDisplayDialog.openError(getShell(), null, null, e);
                }
index 7dd692a..2b12aff 100644 (file)
@@ -70,7 +70,7 @@ public class ComboViewer extends ContentViewer {
                        Object object = ((IStructuredSelection) selection).getFirstElement();
                        for (int i = 0, length = this.objects == null ? 0 : this.objects.length; 
                                        object != null && i < length; i++) {
-                               if (this.objects[i] == object) {
+                               if (this.objects[i].equals(object)) {
                                        this.combo.select(i);
                                }
                        }
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/widget/SimpleLabelProvider.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/widget/SimpleLabelProvider.java
new file mode 100644 (file)
index 0000000..de0de7e
--- /dev/null
@@ -0,0 +1,32 @@
+package com.quantum.view.widget;
+
+import com.quantum.model.Displayable;
+
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+
+/**
+ * @author BC
+ */
+public class SimpleLabelProvider extends LabelProvider {
+       
+       private final Image image;
+       
+       public SimpleLabelProvider() {
+               this(null);
+       }
+       public SimpleLabelProvider(Image image) {
+               this.image = image;
+       }
+       public Image getImage(Object element) {
+               return this.image;
+       }
+       public String getText(Object element) {
+               if (element instanceof Displayable) {
+                       return ((Displayable) element).getDisplayName();
+               } else {
+                       return super.getText(element);
+               }
+       }
+}
index 3c75b99..435f0cc 100644 (file)
@@ -1,6 +1,7 @@
 package com.quantum.wizards;
 
 import java.sql.SQLException;
+import java.util.Arrays;
 
 import com.quantum.adapters.DatabaseAdapter;
 import com.quantum.model.Bookmark;
@@ -10,10 +11,12 @@ import com.quantum.model.NotConnectedException;
 import com.quantum.sql.MultiSQLServer;
 import com.quantum.sql.SQLResultSetResults;
 import com.quantum.sql.SQLResults;
-import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.util.connection.ConnectionUtil;
 
 import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
 
 /**
  * @author BC Holmes
@@ -29,14 +32,14 @@ public abstract class BaseSQLPage extends WizardPage implements SQLPage {
         super(pageName);
     }
     public boolean performFinish() {
+               Bookmark bookmark = this.results.getBookmark();
                try {
-                       Bookmark bookmark = this.results.getBookmark();
                        bookmark.addQuery(getQueryText());
                        SQLResults sqlResults = MultiSQLServer.getInstance().execute(bookmark, 
                                        this.connectionUtil.getConnection(bookmark, getShell()), getQueryText());
                        return sqlResults == null ? false : true;
                } catch (SQLException e) {
-                       ExceptionDisplayDialog.openError(getShell(), null, null, e);
+                       SQLExceptionDialog.openException(getShell(), bookmark, e);
                        return false;
                }
        }
@@ -71,4 +74,25 @@ public abstract class BaseSQLPage extends WizardPage implements SQLPage {
        this.results = results;
                this.row = row;
     }
+       
+       /**
+        * @param table
+        * @param colName
+        * @param style
+        * @param pos
+        * @param width
+        */
+       protected void createTableColumn(Table table, String colName, int style, int pos, int width) {
+        TableColumn column = new TableColumn(table, style, pos);
+               column.setText(colName);                
+               column.setWidth(width);
+    }
+       
+       /**
+        * @param columnNames
+        * @return
+        */
+       protected java.util.List getColumnNamesAsList(String[] columnNames) {
+               return Arrays.asList(columnNames);      
+       }
 }
index 36a4077..e76daaf 100644 (file)
@@ -33,6 +33,7 @@ class BookmarkConnectionWizardPage extends PropertyChangeWizardPage {
     private Text jdbcUrl;
     private URLSetupControl urlSetupControl;
     private Composite container;
+    private boolean requiresRebuild = false;
     
     private PropertyChangeListener listener = new PropertyChangeListener() {
                public void propertyChange(PropertyChangeEvent event) {
@@ -110,6 +111,13 @@ class BookmarkConnectionWizardPage extends PropertyChangeWizardPage {
                setControl(container);
        }
        
+       public void setVisible(boolean visible) {
+               if (visible && this.requiresRebuild) {
+                       rebuildJDBCControls(this.driver);
+               }
+               super.setVisible(visible);
+       }
+       
        /**
         * @param container
         */
@@ -145,7 +153,7 @@ class BookmarkConnectionWizardPage extends PropertyChangeWizardPage {
                
                if (oldDriverClassName == null 
                                || !oldDriverClassName.equals(this.driver.getClassName())) {
-                       rebuildJDBCControls(this.driver);
+                       this.requiresRebuild = true;
                }
        }
        /**
index 5ba3d54..a2e4f13 100644 (file)
@@ -5,6 +5,7 @@ import java.beans.PropertyChangeListener;
 
 import org.eclipse.jface.wizard.Wizard;
 
+import com.quantum.ImageStore;
 import com.quantum.Messages;
 import com.quantum.model.Bookmark;
 import com.quantum.model.BookmarkCollection;
@@ -21,6 +22,7 @@ public class BookmarkWizard extends Wizard implements PropertyChangeListener {
        
        public void init() {
                setWindowTitle(Messages.getString("BookmarkWizard.NewBookmark")); //$NON-NLS-1$
+               setDefaultPageImageDescriptor(ImageStore.getImageDescriptor(ImageStore.NEW_BOOKMARK_WIZARD));
                this.bookmark = new Bookmark();
        }
        public boolean performFinish() {
index e8be91d..94dccdd 100644 (file)
@@ -178,7 +178,6 @@ public class ExportBookmarkWizardPage extends WizardPage {
     }
 
     private void createDestinationArea(Composite composite) {
-        GridData data;
         Composite fileArea = new Composite(composite, SWT.NULL);
         fileArea.setLayout(new GridLayout(3, false));
         fileArea.setLayoutData(
@@ -187,7 +186,7 @@ public class ExportBookmarkWizardPage extends WizardPage {
         label.setText("File name:");
         
         this.fileNameText = new Text(fileArea, SWT.BORDER);
-        data = new GridData();
+        GridData data = new GridData();
         data.horizontalAlignment = GridData.HORIZONTAL_ALIGN_FILL;
         data.widthHint = 300;
         this.fileNameText.setLayoutData(data);
index ecaf832..f25054d 100644 (file)
 package com.quantum.wizards;
 
+import java.util.Arrays;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
+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.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.swt.widgets.Text;
 
 import com.quantum.Messages;
 import com.quantum.adapters.DatabaseAdapter;
 import com.quantum.model.Bookmark;
 import com.quantum.model.Entity;
+import com.quantum.sql.SQLResultSetResults;
 
 public class InsertRowPage extends BaseSQLPage implements SQLPage {
+    
+    class InsertRowTableValues {
+        private String colNames = null;
+        private String values  = null;
+        
+        public InsertRowTableValues() {            
+        }
+        /**
+         * @return Returns the colNames.
+         */
+        public String getColNames() {
+            return colNames;
+        }
+        /**
+         * @param colNames The colNames to set.
+         */
+        public void setColNames(String colNames) {
+            this.colNames = colNames;
+        }
+        /**
+         * @return Returns the values.
+         */
+        public String getValues() {
+            return values;
+        }
+        /**
+         * @param values The values to set.
+         */
+        public void setValues(String values) {
+            this.values = values;
+        }
+    }
+    
+    class LabelProviderImpl implements ITableLabelProvider {
+               public Image getColumnImage(Object element, int columnIndex) {
+                       return null;
+               }
+               public String getColumnText(Object element, int columnIndex) {
+                       String sReturn = "";                    
+                       InsertRowTableValues insertRow = (InsertRowTableValues)element;
+                       switch (columnIndex) {
+                               case 0:
+                                   sReturn = insertRow.getColNames();
+                                   break;
+                               case 1:
+                                   sReturn = insertRow.getValues();
+                                   break;
+                               default:
+                                   break;
+                       }
+                       return sReturn;
+               }
+               public void addListener(ILabelProviderListener listener) {}
+               public void dispose() {}
+               public boolean isLabelProperty(Object element, String property) {
+                       return false;
+               }
+               public void removeListener(ILabelProviderListener listener) {}
+       }
+       
+    class ContentProviderImpl implements IStructuredContentProvider {
+               public Object[] getElements(Object inputElement) {
+                       return insertTable;
+               }
+
+               public void dispose() {}
+               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}            
+       }
+        
+    class CellModifierImpl implements ICellModifier {
+
+       public boolean canModify(Object element, String property) {
+               return true;
+       }
+       
+       public Object getValue(Object element, String property) {               
+               System.out.println("getValue called");
+       
+               // Find the index of the column
+               int colIndx = getColumnNamesAsList(colNames).indexOf(property);
+               System.out.println("colIndx : " + colIndx);             
+                
+               Object rResult = null;
+               InsertRowTableValues insertVal = (InsertRowTableValues)element;
+                               
+               switch (colIndx) {
+                       case 0:
+                           rResult = insertVal.getColNames();
+                                   break;
+                               case 1:
+                                   rResult = insertVal.getValues();
+                                   break;
+                       default:
+                               rResult = "";
+                               break;
+               }
+               
+               return rResult;
+       }
+       
+       public void modify(Object element, String property, Object value) {
+               int colIndx = getColumnNamesAsList(colNames).indexOf(property);
+               
+               TableItem item = (TableItem) element;
+               InsertRowTableValues insertVal = (InsertRowTableValues)item.getData();
+               
+               switch (colIndx) {
+                       case 0: // field names
+                           break;
+                       case 1: // field values
+                           insertVal.setValues(value.toString());
+                           updateView();                           
+                           updateQuery();
+                           break;
+                       default:
+                           break;
+               }
+       }
+    }
+    
        String[] columnNames;
+       String[] colNames;
        Text[] values;
        Label query;
+       InsertRowTableValues[] insertTable = null;
+       TableViewer tableViewer = null; 
        int numColumns = 0;
        
        public InsertRowPage(String pageName) {
-               super(pageName);
+               super(pageName);                
        }
 
        public void createControl(Composite parent) {
                System.out.println("page create control"); //$NON-NLS-1$
-               Composite container = new Composite(parent, SWT.V_SCROLL);
-               GridLayout layout = new GridLayout();
-               container.setLayout(layout);
-               layout.numColumns = 2;
+               Composite container = new Composite(parent, SWT.NULL);
+               container.setLayout(new GridLayout());
+               container.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
 
+               // init values to be displayed on the table
                columnNames = this.results.getColumnNames();
-               values = new Text[columnNames.length];
-               new Label(container, SWT.NULL).setText(Messages.getString("InsertRowPage.ColumnName")); //$NON-NLS-1$
-               new Label(container, SWT.NULL).setText(Messages.getString("InsertRowPage.Value")); //$NON-NLS-1$
-               for (int i = 0; i < columnNames.length; i++) {
-                       Label label = new Label(container, SWT.NULL);
-                       label.setText(columnNames[i]);
-                       values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-                       GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
-                       gridData.widthHint = 150;
-                       values[i].setLayoutData(gridData);
-
-                       //values[i].setText(data[i]);
-                       values[i].addModifyListener(new ModifyListener() {
-                               public void modifyText(ModifyEvent e) {
-                                       updateQuery();
-                               }                               
-                       });
-               }
+               int nLen = columnNames.length;
+               insertTable = new InsertRowTableValues[nLen];
+               
+               for (int nCtr=0; nCtr<nLen; nCtr++) {
+                   insertTable[nCtr] = new InsertRowTableValues();
+                   insertTable[nCtr].setColNames(columnNames[nCtr]);
+                   insertTable[nCtr].setValues("");
+               }               
+               
+               createTable(container);                         
+               
                query = new Label(container, SWT.WRAP);
                GridData gridData = new GridData();
-               gridData.horizontalSpan = layout.numColumns;
-               gridData.horizontalAlignment = GridData.FILL;
-               gridData.verticalAlignment = GridData.FILL;
-               gridData.grabExcessHorizontalSpace = true;
-               gridData.grabExcessVerticalSpace = true;
+               gridData.horizontalSpan = 1;            
+               gridData.horizontalAlignment = GridData.FILL;
+               gridData.verticalAlignment = GridData.FILL;             
                query.setLayoutData(gridData);
 
                setControl(container);
@@ -74,9 +203,9 @@ public class InsertRowPage extends BaseSQLPage implements SQLPage {
                
                numColumns = 0;
                for (int i = 0; i < columnNames.length; i++) {
-                       String name = columnNames[i];
-                       String value = values[i].getText();
-                       if (value.length() > 0) {
+                   String name = insertTable[i].getColNames();
+                   String value = insertTable[i].getValues();
+                       if (value != null && value.length() > 0) {
                                if (numColumns > 0) {
                                        valuesClause.append(", "); //$NON-NLS-1$
                                        namesClause.append(", ");
@@ -101,4 +230,38 @@ public class InsertRowPage extends BaseSQLPage implements SQLPage {
     protected String getQueryText() {
         return this.query.getText();
     }
+    
+    private void createTable(Composite composite) {
+        System.out.println("Creating table...");
+        int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
+               Table table = new Table(composite, style);
+       table.setHeaderVisible(true);
+       table.setLinesVisible(true);
+       table.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+       
+       colNames = new String[] { Messages.getString("InsertRowPage.ColumnName"), Messages.getString("InsertRowPage.Value") };
+
+               createTableColumn(table, colNames[0], SWT.LEFT, 0, 200);
+               createTableColumn(table, colNames[1], SWT.LEFT, 1, 500);
+               this.tableViewer = new TableViewer(table);
+               this.tableViewer.setColumnProperties(colNames);
+
+               CellEditor[] editor = new CellEditor[colNames.length];
+               TextCellEditor txtEditorField = new TextCellEditor(table);
+               txtEditorField.getControl().setEnabled(false);
+               editor[0] = txtEditorField;
+               
+               TextCellEditor txtEditorValues = new TextCellEditor(table);
+               editor[1] = txtEditorValues;
+               
+               this.tableViewer.setCellEditors(editor);
+               this.tableViewer.setLabelProvider(new LabelProviderImpl());
+               this.tableViewer.setContentProvider(new ContentProviderImpl());
+               this.tableViewer.setCellModifier(new CellModifierImpl());
+               this.tableViewer.setInput(insertTable);         
+    }        
+        
+    private void updateView() {
+        this.tableViewer.update(insertTable, null);
+    }
 }
\ No newline at end of file
index 4447e10..e0500bd 100644 (file)
@@ -4,7 +4,7 @@ import java.sql.SQLException;
 
 import com.quantum.sql.FilterSort;
 import com.quantum.sql.SQLResultSetResults;
-import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.ui.dialog.SQLExceptionDialog;
 import com.quantum.util.connection.ConnectionUtil;
 
 import org.eclipse.jface.wizard.WizardPage;
@@ -170,7 +170,7 @@ public class SortFilterPage extends WizardPage implements SQLPage {
                                        this.results.getBookmark(), getShell()));
                        return true;
                } catch (SQLException e) {
-                       ExceptionDisplayDialog.openError(getShell(), null, null, e);
+                       SQLExceptionDialog.openException(getShell(), this.results.getBookmark(), e);
                        return false;
                }
        }
index 3753b7c..031ed9f 100644 (file)
 package com.quantum.wizards;
 
+import java.util.Arrays;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.CheckboxCellEditor;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.swt.widgets.Text;
 
+import com.quantum.ImageStore;
 import com.quantum.Messages;
 import com.quantum.adapters.DatabaseAdapter;
 import com.quantum.model.Bookmark;
 import com.quantum.model.Column;
 import com.quantum.model.Entity;
+import com.quantum.wizards.InsertRowPage.CellModifierImpl;
+import com.quantum.wizards.InsertRowPage.ContentProviderImpl;
+import com.quantum.wizards.InsertRowPage.InsertRowTableValues;
+import com.quantum.wizards.InsertRowPage.LabelProviderImpl;
 
 public class UpdateRowPage extends BaseSQLPage implements SQLPage {
+    
+    class UpdateRowTableValues {
+        private String sColNames = null;
+        private String sOldValue = null;
+        private boolean bPrimary = false;
+        private String sNewValue = null;
+        private boolean bSetValue = false;
+        
+        public UpdateRowTableValues() {
+        }
+        /**
+         * @return Returns the bSetValue.
+         */
+        public boolean isBSetValue() {
+            return bSetValue;
+        }
+        /**
+         * @param setValue The bSetValue to set.
+         */
+        public void setBSetValue(boolean setValue) {
+            bSetValue = setValue;
+        }
+        /**
+         * @return Returns the bPrimary.
+         */
+        public boolean isBPrimary() {
+            return bPrimary;
+        }
+        /**
+         * @param where The bPrimary to set.
+         */
+        public void setBPrimary(boolean where) {
+            bPrimary = where;
+        }
+        /**
+         * @return Returns the sColNames.
+         */
+        public String getSColNames() {
+            return sColNames;
+        }
+        /**
+         * @param colNames The sColNames to set.
+         */
+        public void setSColNames(String colNames) {
+            sColNames = colNames;
+        }
+        /**
+         * @return Returns the sNewValue.
+         */
+        public String getSNewValue() {
+            return sNewValue;
+        }
+        /**
+         * @param newValue The sNewValue to set.
+         */
+        public void setSNewValue(String newValue) {
+            sNewValue = newValue;
+        }
+        /**
+         * @return Returns the sOldValue.
+         */
+        public String getSOldValue() {
+            return sOldValue;
+        }
+        /**
+         * @param oldValue The sOldValue to set.
+         */
+        public void setSOldValue(String oldValue) {
+            sOldValue = oldValue;
+        }
+    }
+    
+    class LabelProviderImpl implements ITableLabelProvider {                
+               public Image getColumnImage(Object element, int columnIndex) {
+                   if (columnIndex == 2) {
+                       return ((UpdateRowTableValues)element).isBPrimary() ? imgCheck : imgUncheck;
+                   } else if (columnIndex == 4) {
+                       return ((UpdateRowTableValues)element).isBSetValue() ? imgCheck : imgUncheck;
+                   } else {
+                       return null;
+                   }
+               }
+               public String getColumnText(Object element, int columnIndex) {
+                       String sReturn = "";                    
+                       UpdateRowTableValues updateRow = (UpdateRowTableValues)element;
+                       switch (columnIndex) {
+                               case 0: // column names
+                                   sReturn = updateRow.getSColNames();
+                                   break;
+                               case 1: // old values
+                                   sReturn = updateRow.getSOldValue();
+                                   break;
+                               case 2: // set checkbox
+                                   break;
+                               case 3: // new value
+                                   sReturn = updateRow.getSNewValue();
+                                   break;
+                               case 4: // set value checkbox
+                                   break;                                  
+                               default:
+                                   break;
+                       }
+                       return sReturn;
+               }
+               public void addListener(ILabelProviderListener listener) {}
+               public void dispose() {}
+               public boolean isLabelProperty(Object element, String property) {
+                       return false;
+               }
+               public void removeListener(ILabelProviderListener listener) {}
+       }
+       
+    class ContentProviderImpl implements IStructuredContentProvider {
+               public Object[] getElements(Object inputElement) {
+                       return updateTable;
+               }
+
+               public void dispose() {}
+               public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}            
+       }
+        
+    class CellModifierImpl implements ICellModifier {
+
+       public boolean canModify(Object element, String property) {
+               return true;
+       }
+       
+       public Object getValue(Object element, String property) {               
+               System.out.println("getValue called");
+       
+               // Find the index of the column
+               int colIndx = getColumnNamesAsList(colNames).indexOf(property);
+               System.out.println("colIndx : " + colIndx);             
+                
+               Object rResult = null;
+               UpdateRowTableValues updateVal = (UpdateRowTableValues)element;
+                               
+               switch (colIndx) {
+                       case 0: // column names
+                           rResult = updateVal.getSColNames();
+                                   break;
+                               case 1: // old values
+                                   rResult = updateVal.getSOldValue();
+                                   break;
+                               case 2: // set checkbox
+                                   rResult = new Boolean(updateVal.isBPrimary());
+                                   break;
+                               case 3: // new value
+                                   rResult = updateVal.getSNewValue();
+                                   break;
+                               case 4: // set value checkbox
+                                   rResult = new Boolean(updateVal.isBSetValue());
+                                   break;                                  
+                               default:
+                                   break;
+               }
+               
+               return rResult;
+       }
+       
+       public void modify(Object element, String property, Object value) {
+               int colIndx = getColumnNamesAsList(colNames).indexOf(property);
+               
+               TableItem item = (TableItem) element;
+               UpdateRowTableValues updateVal = (UpdateRowTableValues)item.getData();
+               
+               switch (colIndx) {
+                       case 0: // column names                     
+                                   break;
+                               case 1: // old values                                               
+                                   break;
+                               case 2: // set checkbox
+                                   updateVal.setBPrimary(((Boolean)value).booleanValue());
+                                   break;
+                               case 3: // new value
+                                   updateVal.setSNewValue(value.toString());                               
+                                   break;
+                               case 4: // set value checkbox
+                                   updateVal.setBSetValue(((Boolean)value).booleanValue());
+                                   break;                                  
+                               default:
+                                   break;
+               }
+               
+               updateView();                               
+                   updateQuery();
+       }
+    }
+    
        String[] columnNames;
+       String[] colNames;
        Text[] oldValues;
        Text[] newValues;
        Button[] primaryKeys;
        Button[] setValues;
        Label query;
+       UpdateRowTableValues[] updateTable = null;
+       TableViewer tableViewer = null;
+       static Image imgCheck = null;
+       static Image imgUncheck = null;
+       
+       static {
+           imgCheck = ImageStore.getImage(ImageStore.CHECKED);
+           imgUncheck = ImageStore.getImage(ImageStore.UNCHECKED);
+       }
+       
        public UpdateRowPage(String pageName) {
                super(pageName);
        }
 
        public void createControl(Composite parent) {
                System.out.println("page create control"); //$NON-NLS-1$
-               Composite container = new Composite(parent, SWT.V_SCROLL);
-               GridLayout layout = new GridLayout();
-               container.setLayout(layout);
+               Composite container = new Composite(parent, SWT.NULL);
+               container.setLayout(new GridLayout());
+               container.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+               
                Entity entity = this.results.getEntity();
                
-               int layoutColumns = 5;
-               layout.numColumns = layoutColumns;
-
+               // init values to be displayed on the table
                columnNames = this.results.getColumnNames();
-               oldValues = new Text[columnNames.length];
-               newValues = new Text[columnNames.length];
-               primaryKeys = new Button[columnNames.length];
-               setValues = new Button[columnNames.length];
-               Label temp = new Label(container, SWT.NULL);
-               temp.setText(Messages.getString("UpdateRowPage.ColumnName")); //$NON-NLS-1$
-               temp = new Label(container, SWT.NULL);
-               temp.setText(Messages.getString("UpdateRowPage.OldValue")); //$NON-NLS-1$
-               temp = new Label(container, SWT.NULL);
-               temp.setText(""); //$NON-NLS-1$
-               temp = new Label(container, SWT.NULL);
-               temp.setText(Messages.getString("UpdateRowPage.NewValue")); //$NON-NLS-1$
-               temp = new Label(container, SWT.NULL);
-               temp.setText(Messages.getString("UpdateRowPage._13")); //$NON-NLS-1$
-               for (int i = 0; i < columnNames.length; i++) {
-                       Label label = new Label(container, SWT.NULL);
-                       label.setText(columnNames[i]);
-                       oldValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-                       GridData gridData = new GridData();
-                       gridData.widthHint = 100;
-                       oldValues[i].setLayoutData(gridData);
-                       Object data = this.row == null ? null : this.row.get(i+1);
-                       oldValues[i].setText(data == null ? "" : data.toString());
-                       oldValues[i].addModifyListener(new ModifyListener() {
-                               public void modifyText(ModifyEvent e) {
-                                       updateQuery();
-                               }                               
-                       });
-                       primaryKeys[i] = new Button(container, SWT.CHECK);
-                       primaryKeys[i].setText("Where"); //$NON-NLS-1$
-                       Column column = (entity == null) ? null : getColumn(entity, columnNames[i]);
-                       if (column != null && column.isPrimaryKey()) 
-                               primaryKeys[i].setSelection(true);
-                       primaryKeys[i].addSelectionListener(new SelectionListener() {
-                               public void widgetDefaultSelected(SelectionEvent e) {
-                               }
-                               public void widgetSelected(SelectionEvent e) {
-                                       updateQuery();
-                               }
-                       });
-                       newValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
-                       newValues[i].setText(data == null ? "" : data.toString());
-                       gridData = new GridData();
-                       gridData.widthHint = 100;
-                       newValues[i].setLayoutData(gridData);
-                       newValues[i].addModifyListener(new ModifyListener() {
-                               public void modifyText(ModifyEvent e) {
-                                       updateQuery();
-                               }                               
-                       });
-                       setValues[i] = new Button(container, SWT.CHECK);
-                       setValues[i].setText(Messages.getString("UpdateRowPage.SetValue")); //$NON-NLS-1$
-                       setValues[i].addSelectionListener(new SelectionListener() {
-                               public void widgetDefaultSelected(SelectionEvent e) {
-                               }
-                               public void widgetSelected(SelectionEvent e) {
-                                       updateQuery();
-                               }
-                       });
+               int nLen = columnNames.length;
+               updateTable = new UpdateRowTableValues[nLen];
+               
+               for(int nCtr=0; nCtr<nLen; nCtr++) {
+                   updateTable[nCtr] = new UpdateRowTableValues();
+                   updateTable[nCtr].setSColNames(columnNames[nCtr]);
+                   Object data = this.row == null ? null : this.row.get(nCtr+1);
+                   updateTable[nCtr].setSOldValue(data == null ? "" : data.toString());
+                   Column column = (entity == null) ? null : getColumn(entity, columnNames[nCtr]);
+                       if (column != null && column.isPrimaryKey()) {
+                           updateTable[nCtr].setBPrimary(true);
+                       }
+                   updateTable[nCtr].setSNewValue(data == null ? "" : data.toString());
                }
-               query = new Label(container, SWT.WRAP | SWT.V_SCROLL);
+               
+               createTable(container);
+               
+               query = new Label(container, SWT.WRAP);
                GridData gridData = new GridData();
-               gridData.horizontalSpan = layoutColumns;
-               gridData.horizontalAlignment = GridData.FILL;
-               gridData.verticalAlignment = GridData.FILL;
-               gridData.grabExcessHorizontalSpace = true;
-               gridData.grabExcessVerticalSpace = true;
+               gridData.horizontalSpan = 1;            
+               gridData.horizontalAlignment = GridData.FILL;
+               gridData.verticalAlignment = GridData.FILL;             
                query.setLayoutData(gridData);
 
                setControl(container);
@@ -123,27 +297,28 @@ public class UpdateRowPage extends BaseSQLPage implements SQLPage {
                DatabaseAdapter adapter = bookmark.getAdapter();
                
                int numValuesSet = 0;
-               int numValuesWhere = 0;
-               for (int i = 0; i < columnNames.length; i++) {
-                       if (primaryKeys[i].getSelection()) {
-                               String value = oldValues[i].getText();
+               int numValuesWhere = 0;         
+               for (int nCtr = 0; nCtr < columnNames.length; nCtr++) {
+                       if (updateTable[nCtr].isBPrimary()) {
+                               String value = updateTable[nCtr].getSOldValue();
                                if (numValuesWhere > 0) whereClause.append(" AND "); //$NON-NLS-1$
                                whereClause.append("("); //$NON-NLS-1$
-                               whereClause.append(columnNames[i]);
+                               whereClause.append(updateTable[nCtr].getSColNames());
                                whereClause.append(" = "); //$NON-NLS-1$
-                appendColumn(whereClause, entity, columnNames[i], adapter, value);
+                appendColumn(whereClause, entity, updateTable[nCtr].getSColNames(), adapter, value);
                                whereClause.append(")"); //$NON-NLS-1$
                                numValuesWhere++;
                        } 
-                       if (setValues[i].getSelection()) {
-                               String value = newValues[i].getText();
+                       if (updateTable[nCtr].isBSetValue()) {
+                               String value = updateTable[nCtr].getSNewValue();
                                if (numValuesSet > 0) setClause.append(", "); //$NON-NLS-1$
-                               setClause.append(columnNames[i]);
+                               setClause.append(updateTable[nCtr].getSColNames());
                                setClause.append(" = "); //$NON-NLS-1$
-                appendColumn(setClause, entity, columnNames[i], adapter, value);
+                appendColumn(setClause, entity, updateTable[nCtr].getSColNames(), adapter, value);
                                numValuesSet++;
                        }
                }
+               
                String query = "UPDATE " + this.results.getEntity().getQuotedTableName(); //$NON-NLS-1$
                query += " SET " + setClause.toString(); //$NON-NLS-1$
                query += " WHERE " + whereClause.toString(); //$NON-NLS-1$
@@ -156,5 +331,52 @@ public class UpdateRowPage extends BaseSQLPage implements SQLPage {
     protected String getQueryText() {
         return query.getText();
     }
+        
+    private void updateView() {
+        this.tableViewer.update(updateTable, null);
+    }
+
+    private void createTable(Composite composite) {
+        System.out.println("Creating table...");
+        int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
+               Table table = new Table(composite, style);
+       table.setHeaderVisible(true);
+       table.setLinesVisible(true);
+       table.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.VERTICAL_ALIGN_BEGINNING));
+       
+       colNames = new String[] { Messages.getString("UpdateRowPage.ColumnName"), Messages.getString("UpdateRowPage.OldValue"),
+                       "Where", Messages.getString("UpdateRowPage.NewValue"), Messages.getString("UpdateRowPage.SetValue")     };
 
+               createTableColumn(table, colNames[0], SWT.LEFT, 0, 150);
+               createTableColumn(table, colNames[1], SWT.LEFT, 1, 300);
+               createTableColumn(table, colNames[2], SWT.CENTER, 2, 60);
+               createTableColumn(table, colNames[3], SWT.LEFT, 3, 300);
+               createTableColumn(table, colNames[4], SWT.CENTER, 4, 70);
+               this.tableViewer = new TableViewer(table);
+               this.tableViewer.setColumnProperties(colNames);
+
+               CellEditor[] editor = new CellEditor[colNames.length];
+               TextCellEditor txtEditorField = new TextCellEditor(table);
+               txtEditorField.getControl().setEnabled(false);
+               editor[0] = txtEditorField;
+               
+               TextCellEditor txtEditorFieldOld = new TextCellEditor(table);
+               txtEditorFieldOld.getControl().setEnabled(false);
+               editor[1] = txtEditorFieldOld;
+               
+               editor[2] = new CheckboxCellEditor(table, SWT.NULL);
+               
+               TextCellEditor txtEditorValues = new TextCellEditor(table);
+               editor[3] = txtEditorValues;
+               
+               editor[4] = new CheckboxCellEditor(table, SWT.NULL);
+               
+               this.tableViewer.setCellEditors(editor);
+               this.tableViewer.setLabelProvider(new LabelProviderImpl());
+               this.tableViewer.setContentProvider(new ContentProviderImpl());
+               this.tableViewer.setCellModifier(new CellModifierImpl());
+               this.tableViewer.setInput(updateTable);         
+    }
+    
+    
 }
\ No newline at end of file
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/sql/DropEntityWizardPage.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/sql/DropEntityWizardPage.java
new file mode 100644 (file)
index 0000000..b7b9cd6
--- /dev/null
@@ -0,0 +1,68 @@
+package com.quantum.wizards.sql;
+
+import com.quantum.sql.parser.DropEntityStatement;
+import com.quantum.wizards.PropertyChangeWizardPage;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * @author BC Holmes
+ */
+public class DropEntityWizardPage extends PropertyChangeWizardPage {
+
+       private final DropEntityStatement dropEntityStatement;
+
+       /**
+        * @param pageName
+        */
+       public DropEntityWizardPage(String pageName, DropEntityStatement dropEntityStatement) {
+               super(pageName);
+               this.dropEntityStatement = dropEntityStatement;
+               setTitle("Drop Parameters");
+               setDescription("Choose your drop parameters");
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+        */
+       public void createControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NONE);
+               composite.setLayout(new GridLayout(2, false));
+               composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+               
+               Label label = new Label(composite, SWT.NONE);
+               label.setText("Entity:");
+               
+               Text text = new Text(composite, SWT.BORDER | SWT.READ_ONLY);
+               text.setText(this.dropEntityStatement.getTableName());
+               text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               label = new Label(composite, SWT.NONE);
+               label.setText("How to handle dependent entities:");
+               
+               final Combo combo = new Combo(composite, SWT.READ_ONLY);
+               combo.setItems(new String[] { "", "CASCADE", "RESTRICT" });
+               combo.select(0);
+               combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               
+               combo.addSelectionListener(new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent event) {
+                               String rule = combo.getItem(combo.getSelectionIndex());
+                               dropEntityStatement.setDependentRule(rule);
+                               
+                               firePropertyChange("sqlStatement", null, dropEntityStatement.toString());
+                       }
+               });
+               
+               setControl(composite);
+       }
+}
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/sql/SQLStatementWizard.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/sql/SQLStatementWizard.java
new file mode 100644 (file)
index 0000000..25adccf
--- /dev/null
@@ -0,0 +1,64 @@
+package com.quantum.wizards.sql;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import com.quantum.sql.parser.SQL;
+import com.quantum.wizards.PropertyChangeWizardPage;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+
+/**
+ * @author BC Holmes
+ */
+public class SQLStatementWizard extends Wizard implements PropertyChangeListener {
+       
+       private List wizardPages = Collections.synchronizedList(new ArrayList());
+       private ShowSQLStatementWizardPage finalPage;
+       
+       public SQLStatementWizard(WizardPage[] pages, SQL sql) {
+               setWindowTitle("SQL Statement: " + sql.getCommand());
+               
+               for (int i = 0, length = pages == null ? 0 : pages.length; i < length; i++) {
+                       this.wizardPages.add(pages[i]);
+               }
+               this.finalPage = new ShowSQLStatementWizardPage("finalPage");
+               this.finalPage.setSQLStatement(sql == null ? "" : sql.toString());
+       }
+       
+       public void addPages() {
+               for (Iterator i = this.wizardPages.iterator(); i.hasNext();) {
+                       WizardPage wizardPage = (WizardPage) i.next();
+                       addPage(wizardPage);
+                       if (wizardPage instanceof PropertyChangeWizardPage) {
+                               ((PropertyChangeWizardPage) wizardPage).addPropertyChangeListener(this);
+                       }
+               }
+               addPage(this.finalPage);
+       }
+       
+       public void dispose() {
+               for (Iterator i = this.wizardPages.iterator(); i.hasNext();) {
+                       WizardPage wizardPage = (WizardPage) i.next();
+                       if (wizardPage instanceof PropertyChangeWizardPage) {
+                               ((PropertyChangeWizardPage) wizardPage).removePropertyChangeListener(this);
+                       }
+               }
+               super.dispose();
+       }
+       
+       public boolean performFinish() {
+               return true;
+       }
+
+       public void propertyChange(PropertyChangeEvent event) {
+               if ("sqlStatement".equals(event.getPropertyName())) {
+                       this.finalPage.setSQLStatement((String) event.getNewValue());
+               }
+       }
+}
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/sql/ShowSQLStatementWizardPage.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/wizards/sql/ShowSQLStatementWizardPage.java
new file mode 100644 (file)
index 0000000..1872220
--- /dev/null
@@ -0,0 +1,62 @@
+package com.quantum.wizards.sql;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @author BC
+ */
+public class ShowSQLStatementWizardPage extends WizardPage {
+
+       private Text text;
+       private String sqlStatement;
+       
+       /**
+        * @param pageName
+        * @param title
+        * @param titleImage
+        */
+       public ShowSQLStatementWizardPage(String pageName, String title,
+                       ImageDescriptor titleImage) {
+               super(pageName, title, titleImage);
+       }
+       
+       /**
+        * @param pageName
+        */
+       protected ShowSQLStatementWizardPage(String pageName) {
+               super(pageName);
+               setTitle("Final SQL Statement");
+               setDescription("Review the final SQL Statement before executing it");
+       }
+
+       public void createControl(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NONE);
+               composite.setLayout(new GridLayout(1, false));
+               composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+               
+               Label label = new Label(composite, SWT.NONE);
+               label.setText("SQL Statement");
+               
+               this.text = new Text(composite, SWT.MULTI | SWT.READ_ONLY | SWT.BORDER);
+               this.text.setText(this.sqlStatement == null ? "" : this.sqlStatement);
+               this.text.setLayoutData(new GridData(GridData.FILL_BOTH));
+               
+               setControl(composite);
+       }
+       public String getSQLStatement() {
+               return this.sqlStatement;
+       }
+       public void setSQLStatement(String sqlStatement) {
+               this.sqlStatement = sqlStatement;
+               if (this.text != null) {
+                       this.text.setText(this.sqlStatement == null ? "" : this.sqlStatement);
+               }
+       }
+}